INHOUDSOPGAWE:

Gebaarbeheerde Rover met behulp van 'n versnellingsmeter en 'n RF-sender-ontvanger-paar: 4 stappe
Gebaarbeheerde Rover met behulp van 'n versnellingsmeter en 'n RF-sender-ontvanger-paar: 4 stappe

Video: Gebaarbeheerde Rover met behulp van 'n versnellingsmeter en 'n RF-sender-ontvanger-paar: 4 stappe

Video: Gebaarbeheerde Rover met behulp van 'n versnellingsmeter en 'n RF-sender-ontvanger-paar: 4 stappe
Video: Как спрятать данные в ячейках Excel? 2024, Julie
Anonim
Gebaarbeheerde Rover met behulp van 'n versnellingsmeter en 'n RF-sender-ontvanger-paar
Gebaarbeheerde Rover met behulp van 'n versnellingsmeter en 'n RF-sender-ontvanger-paar

Haai daar, Het u al ooit die begeerte gehad om 'n rover te bou wat u met eenvoudige handgebare kan stuur, maar nooit die moed bymekaarskraap om die ingewikkeldhede van beeldverwerking aan te gaan en 'n webkamera met u mikrobeheerder te koppel nie, om nog maar te praat van die opdraande stryd om swak bereik en lynreeks te oorkom. sigkwessies? Wel, moenie vrees nie … want daar is 'n maklike uitweg! Kyk, terwyl ek die magtige ACCELEROMETER aan u voorhou! *ba dum tsss*

'N Versnellingsmeter is 'n baie koel toestel wat gravitasieversnelling langs 'n lineêre as meet. Dit verteenwoordig dit as 'n spanningsvlak wat wissel tussen grond en die voedingsspanning, wat ons mikrobeheerder as 'n analoog waarde lees. As ons ons brein 'n bietjie toepas (net 'n bietjie wiskunde en 'n bietjie Newtonse fisika), kan ons dit nie net gebruik om lineêre beweging langs 'n as te meet nie, maar ons kan dit ook gebruik om die kantelhoek en trillings te bepaal. Moenie bekommerd wees nie! Ons het nie die wiskunde of die fisika nodig nie; ons gaan net oor rou waardes wat die versnellingsmeter uitspoeg. U hoef u eintlik nie veel te bekommer oor die tegniese aspekte van 'n versnellingsmeter vir hierdie projek nie. Ek sal net 'n paar besonderhede bespreek en net soveel uitwerk as wat u nodig het om die geheelbeeld te verstaan. Alhoewel, as u belangstel om die innerlike meganika daarvan te bestudeer, kyk dan hier.

U moet dit nou eers in gedagte hou: 'n versnellingsmeter is die gizmo (dikwels gekombineer met 'n gyroscoop) wat deure oopmaak vir al die bewegingsensorspeletjies wat ons op ons slimfone speel; 'n karrenwedstryd, byvoorbeeld, waar ons die voertuig stuur deur ons toestelle in enige rigting te kantel. En ons kan hierdie effek naboots deur 'n versnellingsmeter (natuurlik met 'n paar hulpmiddels) op 'n handskoen te plak. Ons trek net ons towerhandskoene aan en kantel ons hande links of regs, vorentoe of agtertoe en sien hoe ons rovers op ons liedjies dans. Al wat ons hier moet doen, is om die versnellingsmeter se lesings te vertaal na digitale seine wat die motors op die rover kan interpreteer en 'n meganisme ontwerp om hierdie seine na die rover oor te dra. Om dit te bewerkstellig, doen ons 'n beroep op die goeie Arduino en sy hulpmiddels vir die eksperiment van vandag, 'n RF-sender-ontvanger-paar wat op 434MHz werk en sodoende 'n reikafstand van ongeveer 100-150m in die oop ruimte lewer, wat ons ook red van line-of- sigkwessies.

Nogal 'n lekker hack, nè? Kom ons duik in…

Stap 1: Versamel u voorraad

Versamel u voorraad
Versamel u voorraad
Versamel u voorraad
Versamel u voorraad
Versamel u voorraad
Versamel u voorraad
Versamel u voorraad
Versamel u voorraad
• Arduino Nano x1
• Versnellingsmeter (ADXL335) x1
• 5V DC motor + wiele x2 elk
• Beeswiel* x1
• L293D -motorbestuurder + 16 -pins IC -aansluiting x1 elk
• 434 MHz RF -sender x1
• 434 MHz RF -ontvanger x1
• HT-12E Encoder IC + 18-pins IC-aansluiting x1 elk
• HT-12D-dekodeerder IC + 18-pins IC-aansluiting x1 elk
• LM7805 Spanningsreguleerder x1
• Drukknopskakelaar x2
• Rooi LED + 330O weerstand x2 elk
• Geel LED + 330O weerstand x1 elk
• Groen LED + 330O weerstand (opsioneel) x4 elk
• Weerstands van 51kO en 1MO x1 elk
• 10µF radiale kondensators x2
Batterye, batteryverbindings, USB-kabel, springdrade, vroulike koppe, 2-pins skroefaansluitings, PCB, Chasis en u gewone soldeertoebehore

As u wonder hoekom ons 'n beeswiel gebruik, is die RF -sender- en ontvangermodules slegs 4 datapennetjies, wat beteken dat ons slegs 2 motors kan dryf en dus 'n beeswiel kan gebruik ondersteun die struktuur. As u egter voel dat u rover 'n bietjie koeler lyk met vier wiele, moet u nie bekommerd wees nie; daar is 'n werk! In hierdie geval, krap die beeswiel van die lys af en voeg nog 'n paar 5V DC -motors by, elk met 'n wiel, en kyk uit vir die eenvoudige hack wat aan die einde van stap 3 bespreek is.

Ten slotte, vir dapperes, is daar ruimte vir nog 'n geringe ontwerpontwerp, wat behels dat u u eie Arduino ontwerp. Gaan na die bonusafdeling in die volgende stap en kyk self. U benodig ook 'n paar ekstra voorrade: 'n ATmega328P, 'n 28 -pins IC -aansluiting, 'n 16Mhz kristal ossillator, twee 22pF keramiekdoppe, nog 'n 7805 spanningsreguleerder, nog twee 10μF radiale doppe en 10kΩ, 680Ω, 330Ω weerstande, en ja, minus die Arduino!

Stap 2: Draai die sender op

Draai die sender op
Draai die sender op
Draai die sender op
Draai die sender op
Draai die sender op
Draai die sender op
Draai die sender op
Draai die sender op

Ons verdeel die projek in twee komponente: die sender en die ontvangerbane. Die sender bestaan uit 'n versnellingsmeter, 'n Arduino en 'n RF-sender module tesame met 'n HT-12E encoder IC, alles bedraad volgens die aangehegte skematiese.

Die versnellingsmeter, soos vroeër bekendgestel, dien om ons handgebare te herken. Ons gebruik 'n drie-as versnellingsmeter (basies drie enkel-as versnellingsmeters in een) om aan ons behoeftes te voldoen. Dit kan gebruik word om die versnelling in al drie dimensies te meet, en soos u seker sou raai, lewer dit nie een nie, maar 'n stel van drie analoogwaardes relatief tot sy drie asse (x, y en z). Eintlik het ons slegs die versnelling langs die x- en y -as nodig, aangesien ons die rover slegs in vier rigtings kan ry: vorentoe of agteruit (dws langs die y -as) en links of regs (dws langs die x -as). Ons sou die z -as nodig gehad het as ons 'n hommeltuig bou, sodat ons ook die styging of daling deur gebare kon beheer. Hierdie analoogwaardes wat die versnellingsmeter lewer, moet in elk geval omgeskakel word na digitale seine om die motors te kan dryf. Dit word deur die Arduino versorg, wat ook hierdie seine na die omskakeling na die rover stuur via die RF -sender module.

Die RF-sender het net een taak: om die 'seriële' data wat by pen 3 beskikbaar is, uit die antenna by pen 1 oor te dra. tot 4 bisse parallelle data van die Arduino by die lyne AD8 tot AD11, waardeur ons plek kan maak vir tot 24 = 16 verskillende I/O -kombinasies in teenstelling met die enkele datapennetjie op die RF -sender. Die oorblywende 8 bisse, getrek van die lyne A0 tot en met A7 op die encoder, vorm die adresbyte, wat die koppeling van die RF -sender met 'n ooreenstemmende RF -ontvanger vergemaklik. Die 12 bisse word dan saamgevoeg en in reeks geneem en na die data-pen van die RF-sender gestuur, wat ASK op sy beurt die data op 'n 434MHz draergolf moduleer en dit via die antenna by pen 1 uitskiet.

Konseptueel behoort elke RF -ontvanger wat op 434Mhz luister, hierdie data te kan onderskep, demoduleer en dekodeer. Met die adreslyne op die HT-12E en die op die HT-12D-eweknie ('n 12-bits seriële-tot-parallelle data-dekodeerder) kan ons 'n RF-sender-ontvangerpaar uniek maak deur slegs die data na die bedoelde ontvanger, waardeur kommunikasie met alle ander beperk word. Al wat van ons vereis word, is om die adreslyne op beide fronte identies op te stel. Aangesien ons byvoorbeeld al die adreslyne vir ons HT-12E gegrond het, moet ons dieselfde doen vir die HT-12D aan die ontvangkant, anders kan die rover nie die seine ontvang nie. Op hierdie manier kan ons ook verskeie rovers met 'n enkele senderkring beheer deur die adreslyne op die HT-12D's op elk van die ontvangers identies op te stel. Of ons kan twee handskoene aantrek, elk aangebring met 'n senderkring wat 'n duidelike adreslynkonfigurasie bevat (een met alle adreslyne gegrond en die ander met almal omhoog gehou, of een met een lyn gegrond terwyl die oorblywende sewe gehou word hoog en die ander met twee lyne gegrond terwyl die oorblywende ses hoog gehou word, of enige ander kombinasie daarvan) en elke stuur veelvuldige identies gekonfigureerde rovers. Speel die maestro tydens 'n Android -simfonie!

Een belangrike ding om op te let tydens die samestelling van die stroombaan, is die waarde van Rosc. Die HT-12E het 'n interne ossillatorbaan tussen penne 15 en 16, wat moontlik gemaak word deur 'n weerstand, genaamd Rosc, tussen die penne te verbind. Die waarde wat vir Rosc gekies word, bepaal eintlik die ossillatorfrekwensie, wat kan afhang van die voedingspanning. Die keuse van 'n geskikte waarde vir Rosc is van kardinale belang vir die werking van die HT-12E! Ideaal gesproke moet die ossillatorfrekwensie van HT-12E 1/50 keer die van die HT-12D-eweknie wees. Aangesien ons dus op 5V werk, het ons 1MΩ en 51kΩ weerstande gekies as Rosc vir die HT-12E en HT-12D stroombane onderskeidelik. As u van plan is om die stroombane op 'n ander voedingsspanning te gebruik, verwys die grafiek "Ossillatorfrekwensie vs voedingsspanning" op bladsy 11 van die aangehegte HT-12E-datablad om die presiese ossillatorfrekwensie en weerstand wat gebruik moet word, te bepaal.

As kanttekening gebruik ons ook vroulike kopstukke (wat dieselfde doel as IC -voetstukke dien) om die versnellingsmeter, die RF -sender en die Arduino in die stroombaan te plaas in plaas daarvan om dit direk op die printplaat te soldeer. Die bedoeling is om 'n bietjie herbruikbare komponente te akkommodeer. Sê, dit is 'n rukkie sedert u 'n gebaar-beheerde rover ontwerp het en net daar, half bedek met stof, bo-op u trofeerak was, en u nog 'n wonderlike instruksie raakloop wat die doeltreffendheid van 'n versnellingsmeter benut. So wat doen jy? U ruk dit eenvoudig uit u rover en druk dit na u nuwe baan. U hoef nie die 'Amazones' te ontbied om 'n nuwe een te kry nie:-p

Bonus: doen weg met die Arduino, maar tog nie

Vir die geval dat u 'n bietjie meer avontuurlustig voel, en veral as u dink dat die gebruik van hierdie pragtig ontwerpte wonder (natuurlik die Arduino) vir so 'n geringe taak, soos ons s'n, 'n bietjie te veel is,; en indien nie, gaan dan gerus na die volgende stap.

Ons doel hier is om die Arduino (die brein van die Arduino eintlik; ja, ek praat van die ATmega IC!) 'N permanente lid van die span te maak. Die ATmega sou geprogrammeer word om net 'n enkele skets oor en oor te laat loop, sodat dit as 'n ewige deel van die kring kan dien, net soos die HT-12E-a IC, net daar sit en doen wat dit veronderstel is om te doen. Is dit nie hoe 'n werklike ingebedde stelsel veronderstel is om te wees nie?

Om met hierdie opgradering voort te gaan, moet u die stroombaan net verander volgens die aangehegte tweede skema. Hier vervang ons eenvoudig die vroulike koppe vir die Arduino met 'n IC-aansluiting vir die ATmega, voeg 'n 10K-trekweerstand by die resetpen (pen 1) van die IC en pomp dit op met 'n eksterne klok tussen penne 9 en 10.. Ongelukkig laat ons die ingeboude spanningsreguleerders ook los as ons die Arduino afskakel; Ergo, ons moet ook die LM7805-kring wat ons hier vir die ontvanger gebruik het, herhaal. Boonop maak ons ook gebruik van 'n spanningsverdeler om die 3.3V te teken wat nodig is om die versnellingsmeter aan te dryf.

Die enigste ander vangplek hier is om die ATmega te programmeer om sy werk te doen. U moet egter wag tot stap 4. So, bly ingeskakel …

Stap 3: En die ontvanger

En die ontvanger
En die ontvanger
En die ontvanger
En die ontvanger
En die ontvanger
En die ontvanger
En die ontvanger
En die ontvanger

Die ontvanger bestaan uit 'n RF-ontvanger-module gekoppel aan 'n HT-12D-dekodeerder IC en 'n paar gelykstroommotors wat met behulp van 'n L293D-motorbestuurder bestuur word, alles bedraad volgens die aangehegte skema.

Die enigste RF-ontvanger se taak is om die draagolf te demoduleer (wat via sy antenna by pen 1 ontvang word) en die opgehaalde "seriële" data by pen 7 weergee vanwaar dit deur die HT-12D opgetel word vir deserialisering. As ons aanneem dat die adreslyne (A0 tot A7) op die HT-12D identies gekonfigureer is met die HT-12E-eweknie, word die 4 parallelle stukkies data onttrek en deurgee via die datalyne (D8 tot D11) op die HT-12D, aan die motorbestuurder, wat op sy beurt hierdie seine interpreteer om die motors aan te dryf.

Let weer op die waarde van Rosc. Die HT-12D het ook 'n interne ossillatorbaan tussen penne 15 en 16, wat moontlik gemaak word deur 'n weerstand, genaamd Rosc, tussen die penne te verbind. Die waarde wat vir Rosc gekies word, bepaal eintlik die ossillatorfrekwensie, wat afhang van die voedingspanning. Die keuse van 'n geskikte waarde vir Rosc is van kardinale belang vir die werking van die HT-12D! Ideaal gesproke moet die ossillatorfrekwensie van HT-12D 50 keer die van die eweknie van HT-12E wees. Aangesien ons dus op 5V werk, het ons 1MΩ en 51kΩ weerstande gekies as Rosc vir die HT-12E en HT-12D stroombane onderskeidelik. As u van plan is om die stroombane op 'n ander voedingsspanning te gebruik, raadpleeg die grafiek "Ossillatorfrekwensie vs voedingsspanning" op bladsy 5 van die aangehegte HT-12D-datablad om die presiese ossillatorfrekwensie en -weerstand te bepaal.

Vergeet ook nie die vroulike opskrifte vir die RF -ontvanger nie.

Opsioneel kan 'n LED via 'n 330Ω stroombeperkingsweerstand aan elk van die 4 datapennetjies van die HT-12D gekoppel word om die bit wat by die pen ontvang word, te bepaal. Die LED sal brand as die bietjie wat ontvang is HOOG (1) is, en sal verdof as die bietjie LOW (0) is. Alternatiewelik kan 'n enkele LED aan die VT-pen van die HT-12D vasgemaak word (weer via 'n 330Ω stroombeperkende weerstand), wat sou brand as 'n geldige transmissie plaasvind.

As u nou op soek is na die hack met die motors waarvan ek in stap een gepraat het, is dit vrek maklik! Draai die twee motors in elke stel parallel, soos in die tweede skema getoon. Dit werk soos dit moet, want die motors in elke stel (die voor- en agtermotors aan die linkerkant en die voor- en agtermotors aan die regterkant) word nooit in teenoorgestelde rigtings aangedryf nie. Dit wil sê, om die rover regs te draai, moet die voor- en agtermotors aan die linkerkant beide vorentoe gedryf word en die voor- en agtermotors aan die regterkant moet agteruit gery word. Om die rover links te laat draai, moet die voor- en agtermotors aan die linkerkant beide agteruit gery word, en die voor- en agtermotors aan die regterkant moet beide vorentoe gery word. Daarom is dit veilig om dieselfde spanning aan beide motors in 'n stel in te voer. En die manier om dit te doen, is deur eenvoudig die motors parallel aan te sluit.

Stap 4: Gaan na die kode

Op na die kode
Op na die kode

Daar is net een ding om te doen om die rover aan die gang te kry. Ja, jy het dit reg geraai! (Ek hoop dat u dit gedoen het) As u dink dat, aangesien die versnellingsmeterlesings analoog is en die motorbestuurder digitale seine verwag, ons 'n soort ADC moet implementeer, wel, nie tegnies nie, maar dit is wat ons moet doen. En dit is redelik eenvoudig.

Ons weet dat 'n versnellingsmeter gravitasieversnelling langs 'n lineêre as meet en dat hierdie versnelling voorgestel word as 'n spanningsvlak wat wissel tussen die grond en die voedingsspanning, wat ons mikrobeheerder lees as 'n analoog waarde wat wissel tussen 0 en 1023. Maar, aangesien ons As die versnellingsmeter op 3.3V werk, is dit raadsaam dat ons die analoog verwysing vir die 10-bis ADC (wat geïntegreer is in die ATmeaga aan boord van 'n Arduino) op 3.3V stel. Dit sal dinge net makliker maak om te verstaan; alhoewel, dit sal nie veel saak maak vir ons klein eksperiment nie, selfs al het ons dit nie gedoen nie (ons moet die kode net 'n bietjie aanpas). Om dit te doen, dra ons egter eenvoudig die AREF -pen op die Arduino (pen 21 op die ATmega) na 3.3V en dui hierdie verandering aan in kode deur analogReference (EXTERNAL) te skakel.

As ons nou die versnellingsmeter plat en analoog lê Lees die versnelling langs die x- en y -as (onthou? Ons benodig slegs hierdie twee asse), kry ons 'n waarde van ongeveer 511 (dws halfpad tussen 0 en 1023), wat net 'n manier om te sê dat daar 0 versnelling langs hierdie asse is. Veronderstel dit eerder as die x- en y -as op 'n grafiek, met die waarde 511 wat die oorsprong aandui en 0 en 1023 die eindpunte soos in die figuur uitgebeeld; oriënteer die versnellingsmeter so dat sy penne na onder wys en nader aan u gehou word, anders kan u die asse omkeer/verwissel. Dit beteken dat as ons die versnellingsmeter na regs kantel, ons 'n waarde groter as 511 langs die x-as moet lees, en as ons die versnellingsmeter na links kantel, moet ons 'n waarde laer as 511 langs die x-as kry. Net so, as ons die versnellingsmeter vorentoe kantel, moet ons 'n waarde groter as 511 langs die y-as lees, en as ons die versnellingsmeter agteruit kantel, moet ons 'n waarde laer as 511 langs die y-as lees. En dit is hoe ons in kode aflei in watter rigting die rover gery moet word. Maar dit beteken ook dat ons die versnellingsmeter behoorlik bestendig en parallel met 'n plat oppervlak moet hou om 'n 511 langs albei asse te kan lees om die rover stil te laat staan. Om hierdie taak 'n bietjie te vergemaklik, definieer ons sekere drempels wat 'n grens vorm, soos die figuur toon, sodat die rover stilstaan, solank die lesings x en y binne perke lê en ons weet verseker dat die rover moet wees beweging sodra die drempel oorskry word.

Byvoorbeeld, as die y-as 543 lees, weet ons dat die versnellingsmeter ergo vorentoe gekantel is, ons moet die rover vorentoe stuur. Ons doen dit deur penne D2 en D4 HOOG en penne D3 en D5 LAAG in te stel. Aangesien hierdie penne nou direk aan die HT-12E gekoppel is, word die seine in reekse geneem en die RF-sender afgeskakel om slegs vasgevang te word deur die RF-ontvanger wat op die rover sit, wat met behulp van die HT-12D die seine deserialiseer en gee dit deur na die L293D, wat op sy beurt hierdie seine interpreteer en die motors vorentoe dryf

U wil egter hierdie drempels verander om die sensitiwiteit te kalibreer. 'N Maklike manier om dit te doen, is om u versnellingsmeter eenvoudig na u Arduino te dra en 'n skets uit te voer wat die x- en y -metings op die seriële monitor uitspoeg. Beweeg nou net die versnellingsmeter 'n bietjie, kyk deur die lesings en besluit oor die drempels.

En, dit is dit! Laai die kode op na u Arduino en geniet dit !! Of miskien nie so gou nie:-(As u nie die bonusafdeling oorgeslaan het nie, sou die oplaai van die kode na u ATmega 'n bietjie meer werk beteken. U het twee opsies:

Opsie A: Gebruik 'n USB -na -seriële toestel, soos die FTDI FT232 basiese uitbreekbord. Draai eenvoudig drade van die TTL -kop na die ooreenstemmende penne op die ATmega volgens die onderstaande kartering:

Spelde op die uitbreekbord Spelde op die mikrobeheerder
DTR/GRN RST/Herstel (pen 1) via die dop van 0.1µF
Rx Tx (pen 3)
Tx Rx (pen 2)
Vcc +5v uitset
CTS (ongebruik)
Gnd Grond

Steek nou die een kant van 'n USB -kabel in die uitbreekbord en die ander in u rekenaar en laai die kode op soos u normaalweg sou begin: begin die Arduino IDE, kies 'n geskikte seriële poort, stel die bordtipe in, stel die skets op en druk oplaai.

Opsie B: Gebruik 'n UNO as u een êrens het. Koppel net u ATmega aan by die UNO, laai die kode op soos u normaalweg sou trek, trek die IC uit en druk dit terug in die senderkring. So maklik soos pastei!

Beide van hierdie opsies behoort te werk, as u slim genoeg was om die selflaaiprogram vooraf op u ATmega te verbrand, of as u nog slimmer was om 'n ATmega aan te skaf met die laaier reeds geïnstalleer. Indien nie, volg die stappe wat hier uiteengesit word.

Andddd, ons is amptelik klaar! Ek hoop dat u hierdie bizarre lang instruksies geniet het. Gaan nou voort, bou die rover klaar as u nog nie klaar is nie, speel 'n rukkie daarmee en kom terug na die kommentaarafdeling hieronder met navrae en/of opbouende kritiek.

Dankie

P. S. Die rede waarom ek geen foto's van die voltooide projek opgelaai het nie, is omdat ek dit nie self voltooi het nie. Halfpad toe ek dit gebou het, het ek aan 'n paar aanvullings gedink, soos spoedbeheer, vermyding van hindernisse en miskien 'n LCD op die rover, wat eintlik nie so moeilik is as ons 'n mikrobeheerder aan beide die stuur- en ontvangkant gebruik nie. Maar waarom doen u dit nie op die moeilike manier nie! Ek werk tans in die rigting en sal 'n opdatering plaas sodra dit vrugte afwerp. Ek het egter die kode en die ontwerp getoets met behulp van 'n vinnige prototipe wat ek gebou het met behulp van modules uit een van my vorige projekte; u kan die video hier sien.

Aanbeveel: