Indholdsfortegnelse:

Gest-kontrolleret Rover ved hjælp af et accelerometer og en RF-sender-modtagerpar: 4 trin
Gest-kontrolleret Rover ved hjælp af et accelerometer og en RF-sender-modtagerpar: 4 trin

Video: Gest-kontrolleret Rover ved hjælp af et accelerometer og en RF-sender-modtagerpar: 4 trin

Video: Gest-kontrolleret Rover ved hjælp af et accelerometer og en RF-sender-modtagerpar: 4 trin
Video: 🟡 POCO X5 PRO - MEST DETALJERET GENNEMGANG og TEST 2024, Juli
Anonim
Gest-kontrolleret Rover ved hjælp af et accelerometer og et RF-sender-modtagerpar
Gest-kontrolleret Rover ved hjælp af et accelerometer og et RF-sender-modtagerpar

Hej med dig, Har du nogensinde ønsket at bygge en rover, som du kunne styre ved enkle håndbevægelser, men aldrig kunne samle mod til at vove dig ind i billedbehandlingens finesser og tilslutte et webcam til din mikrokontroller, for slet ikke at tale om den opadgående kamp for at overvinde dårlig rækkevidde og line-of- synsproblemer? Tja, frygt ikke … for der er en let vej ud! Se, som jeg præsenterer dig den mægtige ACCELEROMETER! *ba dum tsss*

Et accelerometer er en virkelig sej enhed, der måler gravitationsacceleration langs en lineær akse. Det repræsenterer dette som et spændingsniveau, der svinger mellem jord og forsyningsspænding, som vores mikrokontroller læser ind som en analog værdi. Hvis vi anvender vores hjerner lidt (bare lidt matematik og noget newtonsk fysik), kan vi ikke kun bruge den til at måle lineær bevægelse langs en akse, men vi kan også bruge den til at bestemme hældningsvinklen og fornemme vibrationer. Fortvivl ikke! Vi får ikke brug for matematik eller fysik; vi kommer bare til at beskæftige os med råværdier, som accelerometeret spytter ud. Faktisk behøver du faktisk ikke bekymre dig meget om det tekniske ved et accelerometer til dette projekt. Jeg vil lige berøre nogle få detaljer og uddybe kun så meget som du har brug for for at forstå det store billede. Selvom, hvis du er interesseret i at studere dens indre mekanik, så kig her.

Du skal bare huske dette for nu: et accelerometer er den dims (ofte kombineret med et gyroskop), der åbner døre til alle de bevægelsessensorspil, som vi spiller på vores smartphones; et bilspil for eksempel, hvor vi styrer køretøjet ved blot at vippe vores enheder i begge retninger. Og vi kan efterligne netop denne effekt ved at stikke et accelerometer (med et par hjælpestoffer selvfølgelig) på en handske. Vi tager bare vores magiske handsker på og vipper vores hænder til venstre eller højre, frem eller tilbage og ser vores rovere danse til vores melodier. Alt, hvad vi skal gøre her, er at oversætte accelerometerets aflæsninger til digitale signaler, som motorerne på roveren kan fortolke og udtænke en mekanisme til at overføre disse signaler til roveren. For at opnå dette opfordrer vi den gode ol 'Arduino og dens hjælpere til dagens eksperiment, et RF-sender-modtager-par, der opererer ved 434MHz og derved giver en rækkevidde på omkring 100-150m i åbent rum, hvilket også sparer os fra line-of- synsproblemer.

Sikke et smart hack, hva '? Lad os dykke ned i…

Trin 1: Saml dine forbrugsvarer

Saml dine forsyninger
Saml dine forsyninger
Saml dine forsyninger
Saml dine forsyninger
Saml dine forsyninger
Saml dine forsyninger
Saml dine forsyninger
Saml dine forsyninger
• Arduino Nano x1
• Accelerometer (ADXL335) x1
• 5V DC motor + hjul x2 hver
• Kvægshjul* x1
• L293D -motordriver + 16 -polet IC -stik x1 hver
• 434 MHz RF -sender x1
• 434 MHz RF -modtager x1
• HT-12E Encoder IC + 18 pin IC stik x1 hver
• HT-12D-dekoder IC + 18-polet IC-stik x1 hver
• LM7805 spændingsregulator x1
• Trykknapkontakt x2
• Rød LED + 330O modstand x2 hver
• Gul LED + 330O modstand x1 hver
• Grøn LED + 330O modstand (valgfri) x4 hver
• 51kO og 1MO modstande x1 hver
• 10µF radiale kondensatorer x2
Batterier, batteristik, USB-kabel, jumperledninger, hunhoveder, 2-bens skrueterminaler, printkort, Chasis og dit sædvanlige loddetilbehør

Hvis du undrer dig over, hvorfor vi bruger et kvæghjul, er sagen, at RF -sender- og modtagermodulerne kun har 4 datapinde, hvilket betyder, at vi kun kan køre 2 motorer og dermed brugen af et kvæghjul til understøtter strukturen. Men hvis du føler, at din rover ville se lidt mere sej ud med fire hjul, skal du ikke bekymre dig, der er et stykke arbejde! I dette tilfælde skal du bare kradse kvæghjulet fra listen og tilføje endnu et par 5V DC -motorer, ledsaget af et hjul hver, og se efter det enkle hack, der blev diskuteret mod slutningen af trin 3.

Endelig, for de modige, er der mulighed for endnu en lille ændring i designet, hvilket lidt indebærer at konstruere din egen Arduino. Gå over til bonussektionen i næste trin, og se selv. Du skal også bruge et par ekstra forsyninger: en ATmega328P, en 28pin IC -stik, en 16Mhz krystaloscillator, to 22pF keramiske hætter, en anden 7805 spændingsregulator, yderligere to 10μF radialhætter og 10kΩ, 680Ω, 330Ω modstande og ja, minus Arduino!

Trin 2: Tilslut senderen

Tråd op til senderen
Tråd op til senderen
Tråd op til senderen
Tråd op til senderen
Tråd op til senderen
Tråd op til senderen
Tråd op til senderen
Tråd op til senderen

Vi vil dele projektet op i to bestanddele: senderen og modtagerens kredsløb. Senderen består af et accelerometer, et Arduino- og et RF-transmittermodul kombineret med en HT-12E-encoder IC, alle sammenkoblet i henhold til den vedhæftede skema.

Accelerometeret, som introduceret tidligere, tjener til at genkende vores håndbevægelser. Vi kommer til at bruge et tre-akset accelerometer (dybest set tre enkeltakse accelerometre i et) til at opfylde vores behov. Den kan bruges til at måle acceleration i alle tre dimensioner, og som du måske har gættet, giver den ikke én, men et sæt med tre analoge værdier i forhold til dens tre akser (x, y og z). Faktisk har vi kun brug for accelerationen langs x- og y -akserne, da vi kun kan køre roveren i fire retninger: fremad eller bagud (dvs. langs y -aksen) og venstre eller højre (dvs. langs x -aksen). Vi havde haft brug for z -aksen, hvis vi byggede en drone, så vi også kunne styre dens stigning eller nedstigning ved hjælp af bevægelser. Under alle omstændigheder skal disse analoge værdier, som accelerometeret giver, skal konverteres til digitale signaler for at kunne drive motorerne. Dette tager Arduino sig af, som også overfører disse signaler ved konvertering til roveren via RF -sendermodulet.

RF-senderen har kun et job: at transmittere de "serielle" data, der er tilgængelige på pin 3, ud af antennen ved pin 1. Dette taler for brugen af HT-12E, en 12 bit parallel-til-seriel datakoder, som samler op til 4 bits parallelle data fra Arduino ved linjerne AD8 til AD11, hvilket gør det muligt for os at give plads til op til 24 = 16 forskellige I/O -kombinationer i modsætning til den enkelte datastift på RF -senderen. De resterende 8 bit, trukket fra linjerne A0 til A7 på encoderen, udgør adressebyten, som letter parring af RF -senderen med en tilsvarende RF -modtager. De 12 bits sættes derefter sammen og serieliseres og sendes videre til datatappen på RF-senderen, som igen ASK-modulerer dataene på en 434MHz bærerbølge og skyder dem ud via antennen ved pin 1.

Konceptuelt bør enhver RF -modtager, der lytter til 434Mhz, kunne opfange, demodulere og afkode disse data. Adresselinjerne på HT-12E og dem på HT-12D-modstykket (en 12-bit seriel-til-parallel datadekoder) tillader os imidlertid at gøre et RF-sender-modtagerpar unikt ved kun at dirigere dataene til tilsigtede modtager, hvilket begrænser kommunikationen med alle andre. Alt, hvad der kræves af os, er at konfigurere adresselinjerne identisk på begge fronter. For eksempel, da vi har jordet alle adresselinierne til vores HT-12E, skal vi gøre det samme for HT-12D i den modtagende ende, ellers kan roveren ikke modtage signalerne. På denne måde kan vi også styre flere rovere med et enkelt transmitterkredsløb ved identisk at konfigurere adresselinjerne på HT-12D'erne ved hver af modtagerne. Eller vi kunne tage to handsker på, hver med et transmitterkredsløb indeholdende en særskilt adresselinjekonfiguration (f.eks. En med alle adresselinjer jordet og den anden med alle holdt højt eller en med en linje jordet, mens de resterende syv blev holdt høj og den anden med to linjer jordet, mens de resterende seks blev holdt højt eller enhver anden kombination deraf) og hver styring af flere identisk konfigurerede rovere. Spil maestroen ved en android symfoni!

En vigtig ting at bemærke, når kredsløbet samles, er værdien af Rosc. HT-12E har et internt oscillator kredsløb mellem ben 15 og 16, som aktiveres ved at forbinde en modstand, kaldet Rosc, mellem disse ben. Den værdi, der er valgt for Rosc, bestemmer faktisk oscillatorfrekvensen, som kan variere afhængigt af forsyningsspændingen. At vælge en passende værdi til Rosc er afgørende for funktionen af HT-12E! Ideelt set bør HT-12Es oscillatorfrekvens være 1/50 gange så høj som HT-12D-modstykket. Da vi arbejder på 5V, valgte vi derfor 1MΩ og 51kΩ modstande som Rosc til henholdsvis HT-12E og HT-12D kredsløb. Hvis du planlægger at betjene kredsløbene på en anden forsyningsspænding, skal du se grafen "Oscillatorfrekvens vs forsyningsspænding" på side 11 i det vedhæftede HT-12E-datablad for at bestemme den nøjagtige oscillatorfrekvens og modstand, der skal bruges.

Som en sidebemærkning vil vi også bruge kvindelige headere her (tjener et lignende formål som IC -stik) til at tilslutte accelerometeret, RF -senderen og Arduino i kredsløbet i stedet for at lodde dem direkte på printet. Hensigten er indkvartering af en lille komponent genanvendelighed. Sig, det er et stykke tid siden, du konstruerede din gestusstyrede rover og dens bare sad der, halvt dækket af støv, oven på din trofæhylde, og du faldt over en anden stor instruerbar, der udnytter effektiviteten af et accelerometer. Så hvad laver du? Du rykker den simpelthen ud af din rover og skubber den ind i dit nye kredsløb. Ingen grund til at tilkalde "Amazons" for at få dig en ny:-p

Bonus: Gør op med Arduino, og alligevel ikke

Bare hvis du føler dig lidt mere eventyrlystne, og især hvis du synes, at udgifterne til dette smukt designede vidunder (Arduinoen selvfølgelig) til en så triviel opgave, som vores er lidt af en overkill, skal du bære mig lidt længere; og hvis ikke, kan du springe til det næste trin.

Vores mål her er at gøre Arduino (faktisk Arduinoens hjerner; ja, jeg taler om ATmega IC!) Til et permanent medlem af teamet. ATmega ville blive programmeret til kun at køre en enkelt skitse igen og igen, så den kunne tjene som en evig del af kredsløbet, ligesom HT-12E-en ren IC, bare sidder der og gør, hvad den skal. Er det ikke sådan noget ægte integreret system skal være?

Anyways, for at fortsætte med denne opgradering, skal du bare ændre kredsløbet i henhold til den vedlagte skematiske skema. Her udskifter vi simpelthen hunhovederne til Arduino med en IC-fatning til ATmega, tilføjer en 10K pull-up-modstand ved nulstillingstappen (pin 1) på IC og pumper den op med et eksternt ur mellem ben 9 og 10. Desværre, hvis vi gør op med Arduino, slipper vi også dens indbyggede spændingsregulatorer; ergo, skal vi replikere LM7805-kredsløbet, som vi også havde brugt til modtageren her. Derudover gør vi også brug af en spændingsdeler til at tegne den 3.3V, der kræves for at drive accelerometeret.

Nu er den eneste anden fangst her at programmere ATmega til at gøre sit arbejde. Du bliver dog nødt til at vente på det til trin 4. Så hold øje …

Trin 3: Og modtageren

Og modtageren
Og modtageren
Og modtageren
Og modtageren
Og modtageren
Og modtageren
Og modtageren
Og modtageren

Modtageren består af et RF-modtagermodul kombineret med en HT-12D-dekoder IC og et par DC-motorer, der drives ved hjælp af en L293D-motordriver, alle sammenkoblet i henhold til den vedlagte skematik.

RF-modtagerens eneste job er at demodulere bærebølgen (modtaget via sin antenne ved pin 1) og gengive de hentede "serielle" data ved pin 7, hvorfra den hentes af HT-12D til deserialisering. Nu, forudsat at adresselinjerne (A0 til A7) på HT-12D er konfigureret identisk med dens HT-12E-modstykke, ekstraheres de 4 parallelle bits af data og videregives via datalinjerne (D8 til D11) på HT-12D, til motorføreren, som igen fortolker disse signaler til at drive motorerne.

Vær igen opmærksom på værdien af Rosc. HT-12D har også et internt oscillator kredsløb mellem ben 15 og 16, som aktiveres ved at forbinde en modstand, kaldet Rosc, mellem disse ben. Den værdi, der er valgt for Rosc, bestemmer faktisk oscillatorfrekvensen, som kan variere afhængigt af forsyningsspændingen. At vælge en passende værdi til Rosc er afgørende for funktionen af HT-12D! Ideelt set skal HT-12Ds oscillatorfrekvens være 50 gange så høj som HT-12E-modstykket. Da vi arbejder på 5V, valgte vi derfor 1MΩ og 51kΩ modstande som Rosc til henholdsvis HT-12E og HT-12D kredsløb. Hvis du planlægger at betjene kredsløbene på en anden forsyningsspænding, skal du se grafen "Oscillatorfrekvens vs forsyningsspænding" på side 5 i det vedhæftede HT-12D-datablad for at bestemme den nøjagtige oscillatorfrekvens og modstand, der skal bruges.

Glem også de kvindelige overskrifter til RF -modtageren.

Eventuelt kan en LED tilsluttes via en 330Ω strømbegrænsende modstand til hver af de 4 datastifter på HT-12D for at hjælpe med at bestemme den bit, der modtages på denne pin. LED'en lyser, hvis den modtagne bit er HØJ (1) og dæmpes, hvis den modtagne bit er LAV (0). Alternativt kunne en enkelt LED være bundet til VT-stiften på HT-12D (igen via en 330Ω strømbegrænsende modstand), som ville lyse i tilfælde af en gyldig transmission.

Nu, hvis du leder efter hacket med motorerne, som jeg talte om i trin et, er det forbandet let! Bare led de to motorer i hvert sæt parallelt som vist i det andet skematisk. Dette fungerer som det skal, fordi motorerne i hvert sæt (de forreste og bageste motorer til venstre og de forreste og bageste motorer til højre) aldrig drives i modsatte retninger. Det vil sige, at for at dreje roveren til højre, skal de forreste og bageste motorer til venstre både køres fremad, og de forreste og bageste motorer til højre skal begge køres baglæns. Tilsvarende for at få roveren til at dreje til venstre, skal de forreste og bageste motorer til venstre både køres baglæns, og de forreste og bageste motorer til højre skal begge køres fremad. Derfor er det sikkert at tilføre det samme par spændinger til begge motorer i et sæt. Og vejen til det er ved blot at tilslutte dem motorer parallelt.

Trin 4: Videre til koden

Videre til koden
Videre til koden

Der er kun en ting tilbage at gøre for at få roveren i gang. Ja, du gættede det rigtigt! (Det håber jeg, du gjorde) Vi skal stadig oversætte accelerometermålingerne til en form, som motorføreren kan fortolke for at kunne køre motorerne. Hvis du tænker på, at da accelerometeraflæsningerne er analoge, og motordriveren forventer digitale signaler, bliver vi nødt til at implementere en slags ADC, ja, ikke teknisk, men det er noget, vi skal gøre. Og det er ganske ligetil.

Vi ved, at et accelerometer måler gravitationsacceleration langs en lineær akse, og at denne acceleration er repræsenteret som et spændingsniveau, der svinger mellem jorden og forsyningsspændingen, som vores mikrokontroller læser ind som en analog værdi, der varierer mellem 0 og 1023. Men, da vi Hvis accelerometeret kører ved 3,3V, anbefales det, at vi indstiller den analoge reference for 10-bit ADC (der er integreret i ATmeaga ombord på en Arduino) til 3,3V. Det vil bare gøre tingene lettere at forstå; selvom det ikke betyder meget for vores lille eksperiment, selvom vi ikke gjorde det (vi skal bare justere koden lidt). For at gøre det kører vi imidlertid simpelthen AREF -stiften på Arduino (pin 21 på ATmega) til 3,3V og betegner denne ændring i kode ved at kalde analogReference (EXTERNAL).

Når vi nu lægger accelerometeret fladt og analogt Læs accelerationen langs x- og y -akserne (husk? Vi har kun brug for disse to akser), får vi en værdi på omkring 511 (dvs. halvvejs mellem 0 og 1023), hvilket bare er en måde at sige, at der er 0 acceleration langs disse akser. I stedet for at grave i detaljerne i det faktum, skal du forestille dig dette som x- og y -akserne på en graf, hvor værdien 511 angiver oprindelsen og 0 og 1023 endepunkterne som vist på figuren; orienter accelerometeret på en sådan måde, at dets stifter peger nedad og holdes tættere på dig, ellers kan du vende/skifte akserne. Det betyder, at hvis vi vipper accelerometeret til højre, skal vi aflæse en værdi større end 511 langs x-aksen, og hvis vi vipper accelerometeret til venstre, skal vi få en værdi lavere end 511 langs x-aksen. På samme måde, hvis vi vipper accelerometeret fremad, skal vi aflæse en værdi større end 511 langs y-aksen, og hvis vi vipper accelerometeret bagud, skal vi aflæse en værdi, der er lavere end 511 langs y-aksen. Og det er sådan, vi i kode udleder den retning, roveren skal køres i. Men det betyder også, at vi skal holde accelerometeret virkelig stabilt og justeret parallelt med en flad overflade for at kunne aflæse en 511 langs begge akserne for at få roveren parkeret stille. For at lette denne opgave lidt, definerer vi visse tærskler, der danner en grænse, som figuren viser, så roveren forbliver stationær, så længe x- og y -aflæsningerne ligger inden for grænser, og vi ved med sikkerhed, at roveren skal sættes i bevægelse, når tærsklen er overskredet.

For eksempel, hvis y-aksen læser 543, ved vi, at accelerometeret vippes fremad, så vi skal styre roveren fremad. Det gør vi ved at indstille stifterne D2 og D4 HIGH og stifterne D3 og D5 LOW. Da disse stifter nu er forbundet direkte til HT-12E, serieres signalerne og affyres RF-senderen for kun at blive fanget af RF-modtageren, der sidder på roveren, hvilket ved hjælp af HT-12D deserialiserer signalerne og sender dem videre til L293D, som igen fortolker disse signaler og driver motorerne frem

Du vil dog måske ændre disse tærskler for at kalibrere følsomheden. En let måde at gøre det på er blot at koble dit accelerometer til din Arduino og køre en skitse, der spytter x- og y -aflæsningerne videre til den serielle skærm. Nu skal du bare flytte accelerometeret lidt rundt, se gennem målingerne og beslutte tærsklerne.

Og det er det! Upload koden til din Arduino og nyd det !! Eller måske ikke så hurtigt:-(Hvis du ikke sprang bonussektionen over, ville upload af koden til din ATmega betyde lidt mere arbejde. Du har to muligheder:

Mulighed A: Brug en USB til seriel enhed, f.eks. FTDI FT232 basic breakout board. Kør blot ledninger fra TTL -headeren til de tilsvarende stifter på ATmega i henhold til nedenstående kortlægning:

Pins på Breakout Board Pins på mikrokontrolleren
DTR/GRN RST/Reset (Pin 1) via 0,1 µF cap
Rx Tx (Pin 3)
Tx Rx (Pin 2)
Vcc +5v udgang
CTS (ubrugt)
Gnd Jord

Nu skal du slutte den ene ende af et USB -kabel til breakout -kortet og den anden til din pc og uploade koden, som du normalt ville: Start Arduino IDE, vælg en passende seriel port, indstil korttypen, kompilér skitsen og tryk på upload.

Mulighed B: Brug en UNO, hvis du har en liggende et sted. Tilslut bare din ATmega til UNO, upload koden som du normalt ville, træk IC'en ud og skub den tilbage i transmitterkredsløbet. Så let som tærte!

En af disse muligheder skulle fungere, forudsat at du var smart nok til at brænde bootloaderen på hånden på din ATmega, eller hvis du var endnu klogere til at købe en ATmega med bootloaderen allerede installeret i første omgang. Hvis ikke, skal du fortsætte og gøre det ved at følge trinene beskrevet her.

Andddd, vi er officielt færdige! Jeg håber, at du nød denne bizart lange instruks. Fortsæt nu med at bygge din rover færdig, hvis du ikke allerede er færdig, leg med den et stykke tid og kom tilbage for at oversvømme kommentarfeltet herunder med forespørgsler og/eller konstruktiv kritik.

Tak

P. S. Grunden til, at jeg ikke uploadede nogen billeder af det færdige projekt, er godt, fordi jeg ikke selv gennemførte det. Halvvejs da jeg byggede det, tænkte jeg på nogle forstærkninger, såsom hastighedskontrol, forhindring af forhindringer og måske en LCD på roveren, hvilket faktisk ikke er så svært, hvis vi bruger en mikrokontroller på både transmitterende og modtagende ender. Men hvorfor ikke gøre det på den hårde måde ?! Så jeg arbejder i øjeblikket i den retning, og jeg sender en opdatering, så snart det bærer frugt. Jeg testede dog koden og designet ved hjælp af en hurtig prototype, som jeg byggede ved hjælp af moduler fra et af mine tidligere projekter; du kan se videoen her.

Anbefalede: