Sisukord:

Liigutusega juhitav rover kiirendusmõõturi ja raadiosaatja-vastuvõtja paari abil: 4 sammu
Liigutusega juhitav rover kiirendusmõõturi ja raadiosaatja-vastuvõtja paari abil: 4 sammu

Video: Liigutusega juhitav rover kiirendusmõõturi ja raadiosaatja-vastuvõtja paari abil: 4 sammu

Video: Liigutusega juhitav rover kiirendusmõõturi ja raadiosaatja-vastuvõtja paari abil: 4 sammu
Video: Самый дорогой Range Rover и самый внедорожный лимузин: удлиненная Понторезка с V8! #ДорогоБогато 2024, Juuli
Anonim
Žestidega juhitav Rover kiirendusmõõturi ja raadiosaatja-vastuvõtja paari abil
Žestidega juhitav Rover kiirendusmõõturi ja raadiosaatja-vastuvõtja paari abil

Tere, Olete kunagi soovinud ehitada roverit, mida saaksite juhtida lihtsate käeliigutustega, kuid ei suutnud kunagi koguda julgust oma mikrokontrolleriga pilditöötluse ja veebikaamera liideste keerukustesse sekkuda, rääkimata ülesmäge peetavast lahingust, et ületada halb kaugus ja rida. nägemisprobleemid? Noh, ärge kartke … sest väljapääs on lihtne! Vaata, kui ma esitan teile vägeva kiirendusmõõturi! *ba dum tsss*

Kiirendusmõõtur on tõeliselt lahe seade, mis mõõdab gravitatsioonikiirendust piki lineaartelge. See kujutab seda kui pingetaset, mis kõigub maa ja toitepinge vahel, mida meie mikrokontroller loeb analoogväärtusena. Kui me rakendame oma ajusid natuke (vaid natuke matemaatikat ja natuke Newtoni füüsikat), ei saa me seda kasutada mitte ainult lineaarse liikumise mõõtmiseks piki telge, vaid saame seda kasutada ka kaldenurga määramiseks ja vibratsiooni tajumiseks. Ärge muretsege! Me ei vaja matemaatikat ega füüsikat; me tegeleme lihtsalt toorväärtustega, mille kiirendusmõõtur välja sülitab. Tegelikult ei pea te tegelikult selle projekti kiirendusmõõturi tehniliste omaduste pärast muretsema. Ma puudutan vaid mõnda spetsiifikat ja täpsustan ainult nii palju, kui vajate tervikpildi mõistmiseks. Kuigi, kui olete huvitatud selle sisemise mehaanika uurimisest, vaadake siin.

Peate seda praegu lihtsalt meeles pidama: kiirendusmõõtur on gizmo (sageli koos güroskoobiga), mis avab uksed kõigile neile liikumisandurite mängudele, mida me oma nutitelefonides mängime; näiteks võidusõidumäng, kus me juhime sõidukit lihtsalt oma seadmeid kummaski suunas kallutades. Ja me võime seda efekti jäljendada, kleepides kiirendusmõõturi (muidugi koos mõne abiseadmega) kindale. Paneme lihtsalt võlukindad kätte ja kallutame käsi vasakule või paremale, ette või taha ja näeme, kuidas meie roverid meie viiside järgi tantsivad. Kõik, mida me siin tegema peame, on kiirendusmõõturi näidud teisendada digitaalsignaalideks, mida roveri mootorid suudavad tõlgendada ja välja töötada mehhanism nende signaalide edastamiseks roverile. Selle saavutamiseks kutsume tänase eksperimendi jaoks välja tubli Arduino ja tema abilised-raadiosageduslike saatjate-vastuvõtjate paarid, mis töötavad sagedusel 434 MHz, andes seega avatud ruumis vahemiku 100–150 m, mis säästab meid ka rida nägemisprobleemid.

Päris vahva hack, eks? Sukelgem sisse…

Samm: koguge oma tarvikud

Koguge oma tarvikud kokku
Koguge oma tarvikud kokku
Koguge oma tarvikud kokku
Koguge oma tarvikud kokku
Koguge oma tarvikud kokku
Koguge oma tarvikud kokku
Koguge oma tarvikud kokku
Koguge oma tarvikud kokku
• Arduino Nano x1
• Kiirendusmõõtur (ADXL335) x1
• 5V alalisvoolumootor + rattad x2 iga
• Veise ratas* x1
• L293D mootorijuht + 16 -kontaktiline IC -pistikupesa x1 iga
• 434 MHz raadiosaatja x1
• 434 MHz RF -vastuvõtja x1
• HT-12E kodeerija IC + 18 kontaktiga IC pesa x1 iga
• HT-12D dekoodri IC + 18 kontaktiga IC pesa x1 iga
• LM7805 pingeregulaator x1
• Nuppude lüliti x2
• Punane LED + 330O takisti x2 iga
• Kollane LED + 330O takisti x1 iga
• Roheline LED + 330O takisti (valikuline) x4 iga
• 51kO ja 1MO takistid x1 iga
• 10µF radiaalkondensaatorid x2
Patareid, akupistikud, USB-kaabel, hüppajajuhtmed, naissoost päised, 2-kontaktilised kruviklemmid, trükkplaat, šassii ja tavalised jootetarvikud

Kui te ei tea, miks me veiseratast kasutame, on asi selles, et raadiosaatja saatja ja vastuvõtja moodulid on saanud ainult 4 andmestikku, mis tähendab, et saame juhtida ainult kahte mootorit ja seega ka veiseratast struktuuri toetada. Kui aga tunnete, et teie rover näeks nelja rattaga natuke lahedam välja, ärge muretsege, töö on käepärast! Sel juhul kriimustage lihtsalt veiste ratas nimekirjast välja ja lisage veel üks paar 5V alalisvoolumootorit, millele on lisatud ratas, ja otsige lihtsat häkkimist, mida arutati 3. sammu lõpus.

Lõpuks, vapratele inimestele on ruumi veel ühe väikese disainimuudatuse tegemiseks, mis hõlmab ka teie enda Arduino projekteerimist. Minge järgmises etapis boonuste sektsiooni ja veenduge selles. Teil on vaja ka mõningaid lisatarvikuid: ATmega328P, 28 -pin IC -pistikupesa, 16Mhz kristallostsillaator, kaks 22pF keraamilist korki, veel 7805 pingeregulaator, veel kaks 10μF radiaalset korki ja 10kΩ, 680Ω, 330Ω takistid ja jah, miinus Arduino!

Samm: ühendage saatja juhtmega

Ühendage saatja juhtmega
Ühendage saatja juhtmega
Ühendage saatja juhtmega
Ühendage saatja juhtmega
Ühendage saatja juhtmega
Ühendage saatja juhtmega
Ühendage saatja juhtmega
Ühendage saatja juhtmega

Me jagame projekti kaheks komponendiks: saatja ja vastuvõtja ahelad. Saatja koosneb kiirendusmõõturist, Arduino'st ja RF-saatja moodulist koos HT-12E kodeerija IC-ga, mis on kõik ühendatud vastavalt skeemile.

Kiirendusmõõtur, nagu varem tutvustatud, on mõeldud meie käeliigutuste äratundmiseks. Kasutame oma vajaduste rahuldamiseks kolmeteljelist kiirendusmõõturit (põhimõtteliselt kolm ühe teljega kiirendusmõõturit ühes). Seda saab kasutada kiirenduse mõõtmiseks kõigis kolmes dimensioonis ja nagu võisite arvata, ei anna see kolme telje (x, y ja z) suhtes mitte ühte, vaid kolme analoogväärtuse komplekti. Tegelikult vajame kiirendust ainult mööda x- ja y -telge, kuna saame roveriga sõita ainult neljas suunas: taha- või tahapoole (st mööda y -telge) ja vasakule või paremale (st piki x -telge). Kui oleksime drooni ehitanud, oleksime vajanud z -telge, et saaksime žestide abil kontrollida ka selle tõusu või laskumist. Igal juhul tuleb need kiirendusmõõturi antavad analoogväärtused teisendada digitaalsignaalideks, et mootoreid juhtida. Selle eest hoolitseb Arduino, kes edastab ka need signaalid muundamisel roverile RF -saatemooduli kaudu.

Raadiosageduslikul saatjal on ainult üks ülesanne: edastada 3. jaos saadaolevad seeriaandmed antennist 1. tihvti kaudu. See toetab HT-12E, 12-bitise paralleelse jadaandmete kodeerija kasutamist, mis kogub kuni 4 bitti paralleelseid andmeid Arduino liinidel AD8 kuni AD11, võimaldades seeläbi teha ruumi kuni 24 = 16 erineva I/O kombinatsiooni jaoks, mitte RF -saatja ühe andmestiku jaoks. Ülejäänud 8 bitti, mis on tõmmatud kodeerija joontest A0 kuni A7, moodustavad aadressibaidi, mis hõlbustab RF -saatja sidumist vastava RF -vastuvõtjaga. Seejärel pannakse 12 bitti kokku ja järjestatakse ning edastatakse raadiosaatja andmeklemmile, mis omakorda moduleerib andmed 434MHz kandelainele ja tulistab need antenni kaudu kontaktist 1 välja.

Kontseptuaalselt peaks iga 434 MHz sagedusel kuulav raadiosaatja vastuvõtja suutma neid andmeid pealt kuulata, demoduleerida ja dekodeerida. Kuid HT-12E ja HT-12D vaste (12-bitine jada-paralleelne andmete dekooder) aadressirid võimaldavad meil muuta RF-saatja-vastuvõtja paari ainulaadseks, suunates andmed ainult kavandatud vastuvõtja, piirates sellega suhtlust kõigi teistega. Kõik, mida meilt nõutakse, on seadistada aadressirid identselt mõlemal rindel. Näiteks kuna oleme kõik oma HT-12E aadressiridad maandanud, peame vastuvõtvas otsas tegema sama HT-12D puhul, vastasel juhul ei saa rover signaale vastu võtta. Sel viisil saame ühe saatja vooluahelaga juhtida ka mitut roverit, konfigureerides identselt iga vastuvõtja HT-12D aadressirid. Või võime panna kaks kindat, millest igaüks on kinnitatud saatja vooluahelaga, mis sisaldab erinevat aadressiliini konfiguratsiooni (näiteks üks, mille kõik aadressiliinid on maandatud ja teine kõrgel hoitud, või üks, kus üks rida on maandatud, ülejäänud seitse hoitakse all kõrge ja teine kahe joonega maandatud, samal ajal kui ülejäänud kuus hoitakse kõrgel või mis tahes muu kombinatsioon) ja iga rooli roolis on mitu identselt konfigureeritud roverit. Mängige maestrot androidi sümfoonial!

Üks oluline asi, mida ahela kokkupanekul tähele panna, on Rosci väärtus. HT-12E-l on tihvtide 15 ja 16 vahel sisemine ostsillaatoriahel, mille saab ühendada nende tihvtide vahele takistiga Rosc. Rosc jaoks valitud väärtus määrab tegelikult ostsillaatori sageduse, mis võib sõltuvalt toitepingest erineda. Roscile sobiva väärtuse valimine on HT-12E toimimiseks ülioluline! Ideaalis peaks HT-12E ostsillaatori sagedus olema 1/50 korda suurem kui HT-12D analoog. Seetõttu, kuna töötame 5 V toitel, valisime HT-12E ja HT-12D ahelate Rosc jaoks vastavalt 1MΩ ja 51kΩ takistid. Kui kavatsete vooluahelaid kasutada erineva toitepingega, vaadake lisatud HT-12E andmelehe leheküljel 11 olevat ostsillaatori sageduse ja toitepinge graafikut, et määrata täpne kasutatav ostsillaatori sagedus ja takisti.

Vahemärkusena kasutame siin ka naissoost päiseid (millel on sama otstarve kui IC -pistikupesadel), et ühendada vooluahelasse kiirendusmõõtur, raadiosaatja ja Arduino, selle asemel, et neid otse PCB -le joota. Kavatsus on väikese komponendi korduvkasutamise kohandamine. Ütle, et juba mõnda aega olete loonud oma žestidega juhitava roveri ja see lihtsalt istub seal, pooleldi tolmuga kaetud, oma trofee riiuli otsas ja komistate teise suurepärase juhendatava juurde, mis suurendab kiirendusmõõturi tõhusust. Mida sa siis teed? Tõmbate selle lihtsalt oma roverist välja ja lükkate selle uude vooluringi. Uue hankimiseks pole vaja amazoneid välja kutsuda:-p

Boonus: loobuge Arduino'st ja siiski mitte

Igaks juhuks, kui tunnete end veidi seiklushimulisemana, ja eriti kui arvate, et selle kaunilt kujundatud ime (muidugi Arduino) kulutamine nii tühisele ülesandele nagu meie, on natuke liialdus, kandke minuga natuke kauem aega; ja kui ei, siis jätke järgmise sammu juurde.

Meie eesmärk on siin muuta Arduino (tegelikult Arduino aju; jah, ma räägin ATmega IC -st!) Meeskonna alaliseks liikmeks. ATmega oleks programmeeritud esitama ikka ja jälle ainult ühte visandit, nii et see võiks olla vooluahela igavene osa, täpselt nagu HT-12E-a, lihtsalt istub seal ja teeb seda, mida peaks. Kas pole nii, nagu peaks olema mis tahes tõeline manussüsteem?

Selle uuendamise jätkamiseks muutke igatahes vooluringi vastavalt lisatud teisele skeemile. Siin asendame lihtsalt Arduino naissoost päised ATmega IC-pistikupesaga, lisame 10K tõmbetakistuse IC lähtestusnõelale (tihvt 1) ja pumpame selle üles välise kellaga tihvtide 9 ja 10 vahel Kahjuks laseme Arduino kaotamise korral lahti ka selle sisseehitatud pingeregulaatoritest; ergo, peame ka siin kordama LM7805-ahelat, mille olime vastuvõtja jaoks kasutanud. Lisaks kasutame kiirendusmõõturi toiteks vajaliku 3,3 V tõmbamiseks ka pingejaoturit.

Nüüd on ainus saak siin ATmega programmeerimine oma töö tegemiseks. Siiski peate seda ootama kuni 4. sammuni. Niisiis, olge lainel…

Samm: ja vastuvõtja

Ja vastuvõtja
Ja vastuvõtja
Ja vastuvõtja
Ja vastuvõtja
Ja vastuvõtja
Ja vastuvõtja
Ja vastuvõtja
Ja vastuvõtja

Vastuvõtja koosneb raadiosagedusvastuvõtja moodulist koos HT-12D dekoodri IC-ga ja paarist alalisvoolumootorist, mida juhitakse L293D mootoridraiveri abil, kõik on ühendatud vastavalt lisatud skeemile.

Raadiosagedusvastuvõtja ainus ülesanne on kandelaine demoduleerimine (antenni kaudu 1. tihvti kaudu) ja teisendatud allalaaditud jadaandmed 7. tihvti juurest, kust HT-12D selle deserialiseerimiseks üles võtab. Kui nüüd eeldada, et aadressiliinid (A0 kuni A7) HT-12D-l on konfigureeritud identseks selle HT-12E vastega, ekstraheeritakse 4 paralleelset andmebitti ja edastatakse need andmeliinide (D8 kuni D11) kaudu HT-12D, mootorijuhile, kes omakorda tõlgendab neid signaale mootorite juhtimiseks.

Jällegi pöörake tähelepanu Rosci väärtusele. Ka HT-12D-l on tihvtide 15 ja 16 vahel sisemine ostsillaatoriahel, mille saab ühendada nende tihvtide vahele takistiga Rosc. Rosc jaoks valitud väärtus määrab tegelikult ostsillaatori sageduse, mis võib sõltuvalt toitepingest erineda. Roscile sobiva väärtuse valimine on HT-12D toimimiseks ülioluline! Ideaalis peaks HT-12D ostsillaatori sagedus olema 50 korda suurem kui HT-12E analoog. Seetõttu, kuna töötame 5 V toitel, valisime HT-12E ja HT-12D ahelate Rosc jaoks vastavalt 1MΩ ja 51kΩ takistid. Kui kavatsete vooluahelaid kasutada erineva toitepingega, vaadake lisatud HT-12D andmelehe leheküljel 5 olevat ostsillaatori sageduse ja toitepinge graafikut, et määrata täpne kasutatav ostsillaatori sagedus ja takisti.

Ärge unustage ka RF -vastuvõtja naissoost päiseid.

Valikuliselt saab LED-i 330Ω voolu piirava takisti kaudu ühendada HT-12D iga 4 andmestikuga, et aidata kindlaks määrata sellel tihvtil saadud bitti. LED süttib, kui vastuvõetud bitt on HIGH (1) ja kustub, kui vastuvõetud bitt on LOW (0). Teise võimalusena võib ühe LED-i siduda HT-12D VT-tihvtiga (jällegi 330Ω voolu piirava takisti kaudu), mis süttib kehtiva ülekande korral.

Kui otsite häkkimist mootoritega, millest ma esimeses etapis rääkisin, on see pagana lihtne! Lihtsalt ühendage kummagi komplekti kaks mootorit paralleelselt, nagu on näidatud teises skeemis. See töötab nii, nagu peaks, sest kummagi komplekti mootoreid (vasak- ja eesmine mootor ning paremal esi- ja tagamootorid) ei sõideta kunagi vastassuundades. See tähendab, et roveri paremale pööramiseks tuleb vasak- ja esi- ja tagamootorid mõlemad ettepoole sõita ning paremal olevad esi- ja tagamootorid tahapoole. Sarnaselt, et rover saaks vasakule pöörata, peavad vasakul olevad esi- ja tagamootorid sõitma tagurpidi ning paremal olevad esi- ja tagamootorid mõlemad edasi. Seetõttu on ohutu toita sama pingepaari abil mõlema komplekti mootorit. Ja viis selle lahendamiseks on lihtsalt mootorite paralleelne ühendamine.

Samm: avage kood

Koodeksi juurde
Koodeksi juurde

Roveri töökorda seadmiseks on jäänud vaid üks asi. Jah, sa arvasid õigesti! (Loodan, et tegite) Peame veel kiirendusmõõturi näidud tõlkima vormi, mida mootorsõidukijuht saab tõlgendada, et saaks mootoreid juhtida. Kui te arvate, et kuna kiirendusmõõturi näidud on analoogsed ja mootorijuht ootab digitaalseid signaale, peame rakendama mingisuguse ADC, noh, mitte tehniliselt, kuid seda me peame tegema. Ja see on üsna otsekohene.

Me teame, et kiirendusmõõtur mõõdab gravitatsioonikiirendust piki lineaartelge ja et see kiirendus on kujutatud pingetasemena, mis kõigub maapinna ja toitepinge vahel, mida meie mikrokontroller loeb analoogväärtuseks, mis varieerub vahemikus 0 kuni 1023. Kuid kuna Kui kasutate kiirendusmõõturit 3,3 V juures, on soovitav määrata 10-bitise ADC (mis on integreeritud Ameu Arduino pardal) analoogviide 3,3 V. See muudab asjad lihtsalt arusaadavamaks; kuigi meie väikese katse jaoks pole sellel suurt tähtsust, isegi kui me seda ei teeks (peame lihtsalt koodi veidi muutma). Selleks ühendame aga lihtsalt Arduino AREF -pin (ATmega 21 tihvt) 3,3 V -ni ja tähistame seda koodimuutust, helistades analogReference (EXTERNAL).

Nüüd, kui asetame kiirendusmõõturi tasaseks ja analoogiks Lugege kiirendust mööda x- ja y -telge (mäletate? Vajame ainult neid kahte telge), saame väärtuseks umbes 511 (st poolel teel vahemikus 0–1023), mis on vaid kuidas öelda, et nendel telgedel on 0 kiirendust. Selle asemel, et süveneda faktide üksikasjadesse, kujutlege seda lihtsalt graafiku x- ja y -telgedena, mille väärtus 511 tähistab päritolu ja 0 ning 1023 lõpp -punkti, nagu joonisel kujutatud; suunake kiirendusmõõtur nii, et selle tihvtid oleksid allapoole ja hoitaks teile lähemale, vastasel juhul võite telgi ümber pöörata/vahetada. See tähendab, et kui me kiirendusmõõturit paremale kallutame, peaksime lugema piki x-telge väärtust, mis on suurem kui 511, ja kui kallutame kiirendusmõõturit vasakule, peaksime saama x-telje väärtuse alla 511. Samamoodi peaksime kiirendusmõõturi ettepoole kallutamisel lugema y-telje väärtust, mis on suurem kui 511, ja kui me kiirendusmõõturit tahapoole kallutame, siis y-telge mööda alla 511. Ja nii tuletame koodiga, millises suunas peaks rover sõitma. Kuid see tähendab ka seda, et peame kiirendusmõõturit hoidma tõepoolest stabiilsena ja joondama tasase pinnaga paralleelselt, et oleks võimalik lugeda 511 mõlemal teljel. et rover seisma jätta. Selle ülesande pisut hõlbustamiseks määratleme joonisel kujutatud piirid moodustavad teatud künnised, nii et rover jääb paigal seni, kuni x ja y näidud jäävad piiridesse ja me teame kindlalt, et rover tuleb sisse seada liikumine pärast künnise ületamist.

Näiteks kui y-telg näitab 543, teame, et kiirendusmõõtur on ettepoole kallutatud, seega peame roveri ettepoole juhtima. Selleks teeme tihvtid D2 ja D4 HIGH ning tihvtid D3 ja D5 LOW. Nüüd, kuna need tihvtid on ühendatud otse HT-12E-ga, on signaalid järjestatud ja vallandatud raadiosageduslikust saatjast, et neid haarata ainult roveril istuv RF-vastuvõtja, mis HT-12D abil deserialiseerib signaalid ja edastab need L293D -le, mis omakorda tõlgendab neid signaale ja ajab mootorid edasi

Tundlikkuse kalibreerimiseks võiksite neid künniseid siiski muuta. Lihtne viis seda teha on lihtsalt ühendada kiirendusmõõtur Arduinoga ja käivitada eskiis, mis sülitab x- ja y -näidud jadamonitorile. Nüüd lihtsalt liigutage kiirendusmõõturit natuke, vaadake näitu ja otsustage läved.

Ja see ongi kõik! Laadige kood oma Arduinosse ja nautige !! Või ehk mitte niipea:-(Kui te ei jäta boonusjaotust vahele, tähendaks koodi üleslaadimine oma ATmega veidi rohkem tööd. Teil on kaks võimalust:

Valik A: kasutage USB -jadaseadet, näiteks FTDI FT232 põhilist eraldusplaati. Lihtsalt juhtige juhtmeid TTL -päisest vastavatele ATmega tihvtidele vastavalt allolevale kaardile:

Nõelad Breakout Boardil Mikrokontrolleri tihvtid
DTR/GRN RST/lähtestamine (tihvt 1) 0,1 µF korgi kaudu
Rx Tx (tihvt 3)
Tx Rx (tihvt 2)
Vcc +5v väljund
CTS (kasutamata)
Gnd Maa

Ühendage nüüd USB -kaabli üks ots purunemisplaadiga ja teine arvutiga ning laadige kood üles nagu tavaliselt: käivitage Arduino IDE, valige sobiv jadaport, määrake tahvli tüüp, koostage visand ja klõpsake üleslaadimist.

Variant B: kasutage UNO -d, kui teil on see kuskil lebamas. Lihtsalt ühendage oma ATmega UNO -ga, laadige kood üles nagu tavaliselt, tõmmake IC välja ja lükake see saatja vooluringi tagasi. Sama lihtne kui pirukas!

Kumbki neist valikutest peaks toimima, eeldades, et olite piisavalt tark, et põletada alglaadur enne ATmega käivitamist, või kui olite isegi targem, ostes ATmega, mille alglaadur on juba installitud. Kui ei, siis jätkake ja tehke seda, järgides siin kirjeldatud samme.

Andddd, me oleme ametlikult valmis! Loodan, et teile meeldis see veidralt pikk juhendatav. Jätkake, lõpetage oma roveri ehitamine, kui te pole seda veel teinud, mängige sellega mõnda aega ja tulge tagasi, et tulvata allpool olev kommentaaride osa päringute ja/või konstruktiivse kriitikaga.

Tänan

P. S. Põhjus, miks ma ühtegi pilti valmis projektist üles ei laadinud, on see, et ma ei lõpetanud seda ise. Selle ehitamise poolel teel mõtlesin mõnele täiendusele, nagu kiiruse reguleerimine, takistuste vältimine ja võib -olla ka roveril olev LCD -ekraan, mis pole tegelikult nii keeruline, kui kasutame mikrokontrollerit nii edastus- kui ka vastuvõtuotsas. Aga miks mitte teha seda raskel viisil ?! Niisiis, töötan praegu selles suunas ja postitan värskenduse niipea, kui see vilja kannab. Siiski katsetasin koodi ja disaini kiire prototüübi abil, mille ehitasin ühe oma eelmise projekti moodulite abil; videot saate vaadata siit.

Soovitan: