Съдържание:

Управляван с жестове роувър с помощта на акселерометър и двойка радиочестотен предавател-приемник: 4 стъпки
Управляван с жестове роувър с помощта на акселерометър и двойка радиочестотен предавател-приемник: 4 стъпки

Видео: Управляван с жестове роувър с помощта на акселерометър и двойка радиочестотен предавател-приемник: 4 стъпки

Видео: Управляван с жестове роувър с помощта на акселерометър и двойка радиочестотен предавател-приемник: 4 стъпки
Видео: Аллан Савори: Как озеленить пустыню и повернуть вспять изменение климата 2024, Юли
Anonim
Управляван с жестове роувър с помощта на акселерометър и двойка RF предавател-приемник
Управляван с жестове роувър с помощта на акселерометър и двойка RF предавател-приемник

Здравей, Винаги сте искали да създадете роувър, който да управлявате с прости жестове с ръце, но никога не можете да съберете смелост да се впуснете в тънкостите на обработката на изображения и свързването на уеб камера с вашия микроконтролер, да не говорим за тежката битка за преодоляване на лошия обхват и линията на проблеми със зрението? Е, не се страхувайте … защото има лесен изход! Ето, докато ви представя мощния УСКОРИТЕЛ! *ba dum tsss*

Акселерометърът е наистина готино устройство, което измерва гравитационното ускорение по линейна ос. Той представя това като ниво на напрежение, колебаещо се между земята и захранващото напрежение, което нашият микроконтролер чете като аналогова стойност. Ако приложим малко мозъка си (само малко математика и малко нютоновска физика), не само можем да го използваме за измерване на линейно движение по оста, но можем да го използваме и за определяне на ъгъла на накланяне и усещане за вибрации. Не се притеснявай! Няма да имаме нужда от математика или физика; просто ще се занимаваме със сурови стойности, които акселерометърът изплюва. Всъщност не е нужно да се притеснявате много по отношение на техническите характеристики на акселерометъра за този проект. Ще се докосна само до няколко конкретни подробности и ще ги опиша само толкова, колкото ви е необходимо, за да разберете общата картина. Въпреки че, ако се интересувате от изучаването на вътрешната му механика, погледнете тук.

Просто трябва да имате предвид това засега: акселерометърът е гаджето (често съчетано с жироскоп), което отваря врати за всички онези игри със сензори за движение, които играем на нашите смартфони; състезателна игра за коли например, където управляваме превозното средство просто като накланяме устройствата си в двете посоки. И ние можем да имитираме този ефект, като залепим акселерометър (с няколко помощни, разбира се) върху ръкавица. Просто слагаме магическите си ръкавици и накланяме ръцете си наляво или надясно, напред или назад и виждаме нашите роувъри да танцуват под нашите мелодии. Всичко, което трябва да направим тук, е да преведем показанията на акселерометъра в цифрови сигнали, които двигателите на ровъра могат да интерпретират и да измислят механизъм за предаване на тези сигнали към ровера. За да постигнем това, ние призоваваме добрия ol 'Arduino и неговите помощници за днешния експеримент, двойка RF предавател-приемник, работеща на 434MHz, като по този начин дава обхват от около 100-150m в открито пространство, което също ни спасява от линията на проблеми със зрението.

Доста страхотен хак, а? Нека се потопим…

Стъпка 1: Съберете вашите консумативи

Съберете доставките си
Съберете доставките си
Съберете доставките си
Съберете доставките си
Съберете доставките си
Съберете доставките си
Съберете доставките си
Съберете доставките си
• Arduino Nano x1
• Акселерометър (ADXL335) x1
• 5V DC мотор + колела x2 всеки
• Говеждо колело* x1
• Драйвер за двигател L293D + 16 -пинов IC контакт x1 всеки
• 434 MHz RF предавател x1
• 434 MHz RF приемник x1
• HT-12E енкодер IC + 18-пинов IC гнездо x1 всеки
• Декодер HT-12D IC + 18-пинов IC гнездо x1 всеки
• Регулатор на напрежение LM7805 x1
• Превключвател с бутон x2
• Червен LED + 330O резистор x2 всеки
• Жълт LED + 330O резистор x1 всеки
• Зелен LED + 330O резистор (по избор) x4 всеки
• 51kO и 1MO резистори x1 всеки
• 10µF радиални кондензатори x2
Батерии, конектори за батерии, USB кабел, джъмперни проводници, женски заглавки, 2-пинови винтови клеми, печатна платка, шаси и вашите обичайни аксесоари за запояване

Ако се чудите защо използваме говеждо колело, въпросът е, че модулите на радиочестотния предавател и приемник имат само 4 пина за данни, което означава, че можем да управляваме само 2 двигателя и следователно използването на говеждо колело за поддържат структурата. Ако обаче смятате, че вашият роувър ще изглежда малко по -готин с четири колела, не се притеснявайте, има работа! В този случай просто надраскайте говедото колело от списъка и добавете още една двойка 5V DC двигатели, придружени с по едно колело, и потърсете простия хак, обсъден към края на стъпка 3.

И накрая, за смелите сърца има възможност за още една лека промяна в дизайна, която по някакъв начин включва проектирането на вашия собствен Arduino. Преминете към секцията за бонуси в следващата стъпка и се уверете сами. Ще ви трябват и няколко допълнителни консумативи: ATmega328P, 28 -пинов IC контакт, 16Mhz кристален осцилатор, две 22pF керамични капачки, друг регулатор на напрежението 7805, още две 10μF радиални капачки и 10kΩ, 680Ω, 330Ω резистори и да, минус Arduino!

Стъпка 2: Свържете предавателя

Свържете предавателя
Свържете предавателя
Свържете предавателя
Свържете предавателя
Свържете предавателя
Свържете предавателя
Свържете предавателя
Свържете предавателя

Ще разделим проекта на две съставки: предавателната и приемната вериги. Предавателят се състои от акселерометър, Arduino и RF модул на предавател, съчетан с IC-енкодер HT-12E, всички свързани по приложената схема.

Акселерометърът, представен по -рано, служи за разпознаване на жестовете на ръцете ни. Ще използваме триосен акселерометър (основно три едноосни акселерометри в едно), за да задоволим нуждите си. Може да се използва за измерване на ускорението във всичките три измерения и както може би се досещате, той дава не една, а набор от три аналогови стойности спрямо трите си оси (x, y и z). Всъщност ние се нуждаем само от ускорението по осите x и y, тъй като можем да караме ровъра само в четири посоки: наклонено или назад (т.е. по оста y) и наляво или надясно (т.е. по оста x). Щяхме да се нуждаем от оста z, ако изграждаме дрон, за да можем също да контролираме изкачването или слизането му с жестове. Във всеки случай тези аналогови стойности, които дава акселерометърът, трябва да бъдат преобразувани в цифрови сигнали, за да могат да управляват двигателите. За това се грижи Arduino, който също предава тези сигнали, при преобразуване, към ровера чрез модула на RF предавателя.

Радиочестотният предавател има само една работа: да предава „серийните“данни, налични на пин 3, от антената на пин 1. Това се застъпва за използването на HT-12E, 12-битов паралелен към сериен енкодер, който събира до 4 бита паралелни данни от Arduino по линиите AD8 до AD11, като по този начин ни дава възможност да направим място за до 24 = 16 различни I/O комбинации, за разлика от единичния щифт за данни на RF предавателя. Останалите 8 бита, изтеглени от линиите A0 до A7 на енкодера, съставляват байта на адреса, който улеснява сдвояването на RF предавателя със съответния RF приемник. След това 12-те бита се събират и сериализират и се предават на пина за данни на радиочестотния предавател, който от своя страна ASK-модулира данните върху 434MHz носеща вълна и ги изстрелва през антената на пин 1.

Концептуално всеки RF приемник, който слуша при 434Mhz, трябва да може да прихваща, демодулира и декодира тези данни. Адресните редове на HT-12E и тези на HT-12D колегата (12-битов сериен към паралелен декодер на данни) ни позволяват да направим двойка RF предавател-приемник уникална, като маршрутизираме данните само към предназначен приемник, като по този начин ограничава комуникацията с всички останали. Всичко, което се изисква от нас, е да конфигурираме адресните редове еднакво на двата фронта. Например, тъй като сме заземени всички адресни редове за нашия HT-12E, трябва да направим същото за HT-12D в приемащия край, в противен случай марсоходът няма да може да приема сигналите. По този начин можем също да контролираме множество роувъри с една предавателна верига, като идентично конфигурираме адресните линии на HT-12D на всеки от приемниците. Или бихме могли да сложим две ръкавици, всяка от които е свързана с предавателна верига, съдържаща различна конфигурация на адресната линия (да речем, едната с всички адресни линии заземена, а другата с всички задържани високо, или една с една заземена линия, докато останалите седем са задържани високо, а другата с две линии заземени, докато останалите шест се държат високо, или всяка друга комбинация от тях) и всеки управлява множество идентично конфигурирани роувъри. Играйте на маестрото в андроид симфония!

Едно важно нещо, което трябва да се отбележи при сглобяването на веригата, е стойността на Rosc. HT-12E има вътрешна осцилаторна верига между щифтове 15 и 16, която се активира чрез свързване на резистор, наречен Rosc, между тези щифтове. Избраната стойност за Rosc всъщност определя честотата на осцилатора, която може да варира в зависимост от захранващото напрежение. Изборът на подходяща стойност за Rosc е от решаващо значение за функционирането на HT-12E! В идеалния случай честотата на осцилатора на HT-12E трябва да бъде 1/50 пъти по-висока от тази на HT-12D. Следователно, тъй като работим на 5V, избрахме 1MΩ и 51kΩ резистори като Rosc за веригите HT-12E и HT-12D съответно. Ако планирате да работите с вериги с различно захранващо напрежение, вижте графиката „Честота на осцилатора срещу захранващо напрежение“на страница 11 от прикачения лист с данни HT-12E, за да определите точната честота на осцилатора и резистора, който да използвате.

Също така, като странична бележка, тук ще използваме женски заглавки (служещи с подобна цел като IC гнездата), за да включим акселерометъра, RF предавателя и Arduino във веригата, вместо директно да ги запояваме върху печатната платка. Намерението е настаняване на малък компонент за повторна употреба. Да речем, измина доста време, откакто сте проектирали своя управляван с жестове роувър и той просто седи там, наполовина покрит с прах, на върха на вашия трофейен рафт и се натъквате на друг страхотен инструктаж, който използва ефективността на акселерометъра. Та какво правиш? Просто го изваждате от вашия роувър и го вкарвате в новата си верига. Няма нужда да призовавате „амазонките“, за да получите нов:-p

Бонус: Премахнете Arduino и все пак не

Само в случай, че се чувствате малко по -приключенски и особено ако мислите, че изразходването на това красиво проектирано чудо (Arduino, разбира се) за такава тривиална задача като нашата е малко прекалено, изтърпете ме малко по -дълго; и ако не, не се колебайте да преминете към следващата стъпка.

Нашата цел тук е да направим Arduino (мозъците на Arduino, всъщност; да, говоря за ATmega IC!) Постоянен член на екипа. ATmega ще бъде програмиран да изпълнява само една скица отново и отново, така че да може да служи като вечна част от веригата, точно като HT-12E-обикновена интегрална схема, която просто седи там и прави каквото трябва. Не се ли смята за такава истинска вградена система?

Както и да е, за да продължите с тази надстройка, просто променете веригата съгласно втората приложена схема. Тук просто заменяме женските заглавки за Arduino с IC гнездо за ATmega, добавяме 10K издърпващ се резистор към нулиращия щифт (щифт 1) на IC и го изпомпваме с външен часовник между щифтове 9 и 10 За съжаление, ако се откажем от Arduino, ще се откажем и от вградените му регулатори на напрежение; ерго, трябва да възпроизведем LM7805-веригата, която използвахме и за приемника тук. Освен това, ние също използваме делител на напрежение, за да изтеглим 3.3V, необходими за захранване на акселерометъра.

Единственият друг улов тук е програмирането на ATmega да си свърши работата. Все пак ще трябва да го изчакате до стъпка 4. Така че, следете …

Стъпка 3: И приемникът

И приемникът
И приемникът
И приемникът
И приемникът
И приемникът
И приемникът
И приемникът
И приемникът

Приемникът се състои от модул за радиочестотен приемник, съчетан с IC декодер HT-12D и двойка DC двигатели, работещи с помощта на драйвер за двигател L293D, всички свързани по приложената схема.

Единствената задача на радиочестотния приемник е да демодулира носещата вълна (получена чрез антената му на пин 1) и да извлече извлечените „серийни“данни на пин 7, откъдето се приема от HT-12D за десериализация. Сега, ако приемем, че адресните редове (A0 до A7) на HT-12D са конфигурирани идентично с неговия HT-12E аналог, 4-те паралелни бита данни се извличат и предават по линиите за данни (D8 до D11) на HT-12D, към водача на двигателя, който от своя страна интерпретира тези сигнали за задвижване на двигателите.

Отново обърнете внимание на стойността на Rosc. HT-12D също има вътрешна осцилаторна верига между щифтове 15 и 16, която се активира чрез свързване на резистор, наречен Rosc, между тези щифтове. Избраната стойност за Rosc всъщност определя честотата на осцилатора, която може да варира в зависимост от захранващото напрежение. Изборът на подходяща стойност за Rosc е от решаващо значение за функционирането на HT-12D! В идеалния случай честотата на осцилатора на HT-12D трябва да бъде 50 пъти по-голяма от тази на HT-12E. Следователно, тъй като работим на 5V, избрахме 1MΩ и 51kΩ резистори като Rosc за веригите HT-12E и HT-12D съответно. Ако планирате да работите с вериги на различно захранващо напрежение, вижте графиката „Честота на осцилатора срещу захранващо напрежение“на страница 5 от прикачения лист с данни HT-12D, за да определите точната честота на осцилатора и резистора, който да използвате.

Също така, не забравяйте женските заглавки за RF приемника.

По избор един светодиод може да бъде свързан чрез резистор за ограничаване на тока 330Ω към всеки от 4-те пина за данни на HT-12D, така че да помогне за определяне на бита, получен на този щифт. Светодиодът ще светне, ако приетият бит е ВИСОК (1) и ще затъмнее, ако полученият бит е НИСКИ (0). Алтернативно, един светодиод може да бъде свързан към VT щифта на HT-12D (отново, чрез резистор за ограничаване на тока 330Ω), който ще светне в случай на валидно предаване.

Сега, ако търсите хак с двигателите, за които говорих в първа стъпка, е адски лесно! Просто свържете двата двигателя във всеки комплект паралелно, както е показано на втората схема. Това работи по начина, по който трябва, защото двигателите във всеки комплект (предните и задните двигатели отляво и предните и задните мотори отдясно) никога не се движат в противоположни посоки. Тоест, за да завъртите марсохода надясно, предните и задните двигатели отляво трябва да се движат напред, а предните и задните мотори отдясно трябва да се движат назад. По подобен начин, за да може ровърът да завие наляво, предните и задните двигатели отляво трябва да бъдат задвижвани назад, а предните и задните двигатели отдясно трябва да се движат напред. Следователно е безопасно да се подава в една и съща двойка напрежения към двата двигателя в комплект. И начинът да се направи това е просто да ги свържете паралелно на моторите.

Стъпка 4: Към кода

Към кодекса
Към кодекса

Остава само едно нещо да направите, за да стартирате ровъра. Да, правилно сте се досетили! (Надявам се, че сте го направили) Все още трябва да преведем показанията на акселерометъра във форма, която водачът на двигателя може да интерпретира, за да може да управлява двигателите. Ако мислите, че тъй като показанията на акселерометъра са аналогови и шофьорът на двигателя очаква цифрови сигнали, ще трябва да внедрим някакъв ADC, добре, не технически, но това е нещо, което трябва да направим. И е доста ясен.

Знаем, че акселерометърът измерва гравитационното ускорение по линейна ос и че това ускорение е представено като ниво на напрежение, колебаещо се между земята и захранващото напрежение, което нашият микроконтролер чете като аналогова стойност, варираща между 0 и 1023. Но тъй като ние ако работите с акселерометъра на 3.3V, препоръчително е да зададем аналоговата референция за 10-битовия ADC (който е интегриран в ATmeaga на борда на Arduino) на 3.3V. Това просто ще улесни разбирането на нещата; въпреки че няма да има голямо значение за нашия малък експеримент, дори и да не го направим (просто ще трябва да променим малко кода). За да направим това обаче, просто свързваме щифта AREF на Arduino (щифт 21 на ATmega) към 3.3V и обозначаваме тази промяна в кода, като извикаме analogReference (EXTERNAL).

Сега, когато поставим акселерометъра плосък и аналогов Прочетете ускорението по осите x и y (помните ли? Имаме нужда само от тези две оси), получаваме стойност от около 511 (т.е. наполовина между 0 и 1023), което е само начин да се каже, че има 0 ускорения по тези оси. Вместо да копаете в детайлите на факта, просто си представете това като осите x и y на графика, като стойността 511 означава начало и 0 и 1023 крайните точки, както е изобразено на фигурата; ориентирайте акселерометъра по такъв начин, че щифтовете му да сочат надолу и да се държат по -близо до вас, в противен случай може да обърнете/размените осите. Това означава, че ако наклоним акселерометъра надясно, трябва да прочетем стойност по-голяма от 511 по оста x, а ако наклоним акселерометъра наляво, трябва да получим стойност по-ниска от 511 по оста x. По същия начин, ако наклоним акселерометъра напред, трябва да прочетем стойност, по-голяма от 511 по оста y, а ако наклоним акселерометъра назад, трябва да прочетем стойност, по-ниска от 511 по оста y. И това е начинът, по който кодираме посоката, в която трябва да се движи ровърът. Но това също означава, че трябва да поддържаме акселерометъра наистина стабилен и подравнен успоредно на равна повърхност, за да можем да разчитаме 511 по двете оси за да бъде паркиран ровърът неподвижен. За да улесним малко тази задача, ние дефинираме определени прагове, образуващи граница, както е изобразена на фигурата, така че марсоходът да остане неподвижен, докато показанията x и y са в граници и със сигурност знаем, че марсоходът трябва да бъде настроен в движение след превишаване на прага.

Например, ако оста y отчита 543, ние знаем, че акселерометърът е наклонен напред, така че трябва да насочим ровъра напред. Правим това, като задаваме щифтове D2 и D4 ВИСОКО и щифтове D3 и D5 НИСКО. Сега, тъй като тези щифтове са свързани директно към HT-12E, сигналите се сериализират и излъчват RF предавателя само за да бъдат уловени от RF приемника, седнал на ровера, който с помощта на HT-12D десериализира сигналите и ги предава на L293D, който от своя страна интерпретира тези сигнали и задвижва двигателите напред

Може да искате да промените тези прагове, за да калибрирате чувствителността. Лесен начин да направите това е просто да свържете вашия акселерометър към вашия Arduino и да стартирате скица, която изхвърля показанията x и y върху серийния монитор. Сега просто преместете акселерометъра наоколо, прегледайте показанията и решете праговете.

И това е! Качете кода на вашия Arduino и се насладете !! Или може би не толкова скоро:-(Ако не сте пропуснали раздела за бонуси, качването на кода във вашия ATmega би означавало малко повече работа. Имате две възможности:

Вариант А: Използвайте USB към серийно устройство, като основната пробивна платка FTDI FT232. Просто прокарайте проводници от заглавката на TTL към съответните щифтове на ATmega, както е показано по -долу:

ПИНОВЕ на таблото за разбиване Игли на микроконтролера
DTR/GRN RST/Нулиране (Пин 1) чрез капачка от 0,1 µF
Rx Tx (щифт 3)
Tx Rx (щифт 2)
Vcc +5v изход
CTS (неизползван)
Gnd Земя

Сега включете единия край на USB кабел в пробивната платка, а другия във вашия компютър и качете кода както обикновено: стартирайте Arduino IDE, изберете подходящ сериен порт, задайте типа на платката, компилирайте скицата и натиснете качване.

Вариант Б: Използвайте UNO, ако имате такъв, който лежи някъде. Просто включете вашия ATmega в UNO, качете кода както обикновено, издърпайте IC и го натиснете обратно в предавателната верига. Лесно като пай!

Всяка от тези опции би трябвало да работи, ако приемем, че сте били достатъчно умни, за да запишете буутлоудъра преди това на вашата ATmega, или ако сте били дори по -умни да закупите ATmega с вече инсталиран буутлоудър. Ако не, продължете напред и направете това, като следвате стъпките, описани тук.

Andddd, официално сме готови! Надявам се да ви е харесал този странно дълъг инструктаж. Сега, продължете, завършете изграждането на своя роувър, ако още не сте приключили, поиграйте с него за известно време и се върнете, за да наводните секцията за коментари по -долу с запитвания и/или конструктивни критики.

Благодаря

P. S. Причината да не кача снимки на готовия проект е, добре, защото не го завърших сам. По средата на изграждането му се сетих за някои подобрения, като контрол на скоростта, избягване на препятствия и може би LCD на роувъра, което всъщност не е толкова трудно, ако използваме микроконтролер както на предавателния, така и на приемащия край. Но защо да не го направите по трудния начин ?! Така че, в момента работя в тази посока и ще публикувам актуализация веднага щом тя даде някакви плодове. Въпреки това тествах кода и дизайна с помощта на бърз прототип, който изградих с помощта на модули от един от предишните ми проекти; можете да разгледате видеото тук.

Препоръчано: