Innehållsförteckning:

Gestkontrollerad Rover med hjälp av en accelerometer och en RF-sändare-mottagarpar: 4 steg
Gestkontrollerad Rover med hjälp av en accelerometer och en RF-sändare-mottagarpar: 4 steg

Video: Gestkontrollerad Rover med hjälp av en accelerometer och en RF-sändare-mottagarpar: 4 steg

Video: Gestkontrollerad Rover med hjälp av en accelerometer och en RF-sändare-mottagarpar: 4 steg
Video: 🟡 POCO X5 PRO - САМЫЙ ДЕТАЛЬНЫЙ ОБЗОР и ТЕСТЫ 2024, November
Anonim
Geststyrd Rover med hjälp av en accelerometer och ett RF-sändar-mottagarpar
Geststyrd Rover med hjälp av en accelerometer och ett RF-sändar-mottagarpar

Hallå där, Någonsin önskat att bygga en rover som du kunde styra med enkla handgester men aldrig kunde ta modet att våga sig in i det komplexa med bildbehandling och koppla ihop en webbkamera med din mikrokontroller, för att inte tala om uppförsbacken för att övervinna dålig räckvidd och linje-av- synproblem? Tja, var inte rädd … för det finns en enkel väg ut! Se, när jag presenterar den mäktiga ACCELEROMETER för dig! *ba dum tsss*

En accelerometer är en riktigt cool enhet som mäter gravitationell acceleration längs en linjär axel. Det representerar detta som en spänningsnivå som fluktuerar mellan jord och matningsspänning, som vår mikrokontroller läser in som ett analogt värde. Om vi tillämpar våra hjärnor lite (bara lite matte och lite newtonsk fysik), kan vi inte bara använda den för att mäta linjär rörelse längs en axel, utan vi kan också använda den för att bestämma lutningsvinkeln och känna vibrationer. Oroa dig inte! Vi kommer inte att behöva matematiken eller fysiken; vi kommer bara att hantera råvärden som accelerometern spottar ut. Faktum är att du faktiskt inte behöver oroa dig särskilt mycket för tekniken hos en accelerometer för detta projekt. Jag kommer bara att beröra några detaljer och utarbeta bara så mycket som du behöver för att förstå helheten. Även om du är intresserad av att studera dess inre mekanik, ta en titt här.

Du behöver bara ha detta i åtanke just nu: en accelerometer är gizmo (ofta i kombination med ett gyroskop) som öppnar dörrar till alla de rörelsessensorspel som vi spelar på våra smartphones; ett tävlingsspel till exempel, där vi styr fordonet helt enkelt genom att vippa våra enheter åt båda hållen. Och vi kan efterlikna just denna effekt genom att fästa en accelerometer (med några hjälpmedel, naturligtvis) på en handske. Vi tar bara på oss våra magiska handskar och vippar händerna åt vänster eller höger, framåt eller bakåt och ser våra rovers dansa till våra låtar. Allt vi behöver göra här är att översätta accelerometerns avläsningar till digitala signaler som motorerna på rovern kan tolka och utforma en mekanism för att överföra dessa signaler till rovern. För att åstadkomma detta uppmanar vi den goda arduinoen och dess medhjälpare till dagens experiment, ett RF-sändar-mottagarpar som arbetar vid 434MHz och därigenom ger en räckvidd på cirka 100-150m i öppet utrymme, vilket också sparar oss från linje-av- synfrågor.

Ganska snyggt hack, va? Låt oss dyka in …

Steg 1: Samla dina tillbehör

Samla dina förnödenheter
Samla dina förnödenheter
Samla dina förnödenheter
Samla dina förnödenheter
Samla dina förnödenheter
Samla dina förnödenheter
Samla dina förnödenheter
Samla dina förnödenheter
• Arduino Nano x1
• Accelerometer (ADXL335) x1
• 5V likströmsmotor + hjul x2 vardera
• Bovinhjul* x1
• L293D -motordrivrutin + 16 -stifts IC -uttag x1 vardera
• 434 MHz RF -sändare x1
• 434 MHz RF -mottagare x1
• HT-12E Encoder IC + 18-polig IC-uttag x1 vardera
• HT-12D-avkodare IC + 18-stifts IC-uttag x1 vardera
• LM7805 spänningsregulator x1
• Tryckknappsbrytare x2
• Röd LED + 330O motstånd x2 vardera
• Gul LED + 330O motstånd x1 vardera
• Grön LED + 330O motstånd (tillval) x4 vardera
• 51kO och 1MO motstånd x1 vardera
• 10µF radiella kondensatorer x2
Batterier, batterikontakter, USB-kabel, bygelkablar, hylsor för hona, 2-poliga skruvterminaler, kretskort, Chasis och dina vanliga lödningstillbehör

Om du undrar varför vi använder ett bovint hjul, är saken att RF -sändar- och mottagarmodulerna bara har 4 datapinnar, vilket innebär att vi bara kan driva 2 motorer och därmed användningen av ett nöthjul för att stödja strukturen. Men om du känner att din rover skulle se lite coolare ut med fyra hjul, oroa dig inte, det finns en lösning! I det här fallet är det bara att skrapa nöthjulet från listan och lägga till ytterligare ett par 5V likströmsmotorer, åtföljda av ett hjul var och en, och se upp för det enkla hack som diskuterades mot slutet av steg 3.

Slutligen, för de modiga, finns det utrymme för ytterligare en liten modifiering av designen, vilket ungefär innebär att du konstruerar din egen Arduino. Gå vidare till bonusavsnittet i nästa steg och se själv. Du behöver också några extra tillbehör: en ATmega328P, ett 28pin IC -uttag, en 16Mhz kristalloscillator, två 22pF keramiklock, ytterligare en 7805 spänningsregulator, ytterligare 10μF radialkåpor och 10kΩ, 680Ω, 330Ω motstånd och ja, minus Arduino!

Steg 2: Anslut sändaren

Koppla upp sändaren
Koppla upp sändaren
Koppla upp sändaren
Koppla upp sändaren
Koppla upp sändaren
Koppla upp sändaren
Koppla upp sändaren
Koppla upp sändaren

Vi delar upp projektet i två beståndsdelar: sändaren och mottagarkretsarna. Sändaren består av en accelerometer, en Arduino och en RF-sändarmodul kopplad med en HT-12E-kodare IC, alla anslutna enligt den bifogade schemat.

Acceleratorn, som introducerats tidigare, tjänar till att känna igen våra handgester. Vi kommer att använda en tre-axlig accelerometer (i princip tre enaxliga accelerometrar i en) för att möta våra behov. Den kan användas för att mäta acceleration i alla tre dimensioner, och som du kanske gissat ger den inte en, utan en uppsättning av tre analoga värden i förhållande till dess tre axlar (x, y och z). Egentligen behöver vi bara accelerationen längs x- och y -axlarna eftersom vi bara kan köra rovern i fyra riktningar: framåt eller bakåt (dvs. längs y -axeln) och vänster eller höger (dvs. längs x -axeln). Vi hade behövt z -axeln om vi byggde en drönare, så att vi också kunde styra dess stigning eller nedstigning med hjälp av gester. I vilket fall som helst måste dessa analoga värden som accelerometern ger omvandlas till digitala signaler för att kunna driva motorerna. Detta sköter Arduino som också överför dessa signaler vid konvertering till rovern via RF -sändarmodulen.

RF-sändaren har bara ett jobb: att överföra de "seriella" data som finns tillgängliga på stift 3 från antennen vid stift 1. Detta förordar användning av HT-12E, en 12-bitars parallell-till-seriell datakodare, som samlar in upp till 4 bitar parallella data från Arduino vid linjerna AD8 till AD11, vilket gör att vi kan göra plats för upp till 24 = 16 olika I/O -kombinationer i motsats till den enda datapinnen på RF -sändaren. De återstående 8 bitarna, från linjerna A0 till A7 på kodaren, utgör adressbyten, vilket underlättar parning av RF -sändaren med en motsvarande RF -mottagare. De 12 bitarna sätts sedan ihop och serialiseras och skickas vidare till datastiften på RF-sändaren, som i sin tur ASK-modulerar data till en 434 MHz bärvåg och skjuter ut den via antennen vid stift 1.

Konceptuellt bör alla RF -mottagare som lyssnar på 434Mhz kunna fånga upp, demodulera och avkoda dessa data. Men adresslinjerna på HT-12E och dem på HT-12D-motsvarigheten (en 12-bitars seriell-till-parallell datadekoder) gör att vi kan göra ett RF-sändar-mottagarpar unikt genom att endast dirigera data till avsedd mottagare och därmed begränsa kommunikationen med alla andra. Allt som krävs av oss är att konfigurera adressraderna identiskt på båda fronterna. Till exempel, eftersom vi har grundat alla adressrader för vår HT-12E, måste vi göra detsamma för HT-12D i mottagaränden, annars kommer inte rovern att kunna ta emot signalerna. På så sätt kan vi också styra flera rovers med en enda sändarkrets genom att identiskt konfigurera adressraderna på HT-12D: erna på var och en av mottagarna. Eller så kan vi ta på oss två handskar, var och en fäst med en sändarkrets som innehåller en distinkt adressradskonfiguration (säg, en med alla adresslinjer jordade och den andra med alla hållna höga, eller en med en linje jordad medan de återstående sju hålls hög och den andra med två linjer jordade medan de återstående sex hålls höga, eller någon annan kombination därav) och varje styrning flera identiskt konfigurerade rovers. Spela maestro på en android symfoni!

En viktig sak att notera när du monterar kretsen är värdet på Rosc. HT-12E har en intern oscillatorkrets mellan stift 15 och 16, som aktiveras genom att ansluta ett motstånd, kallat Rosc, mellan dessa stift. Värdet som valts för Rosc bestämmer faktiskt oscillatorfrekvensen, som kan variera beroende på matningsspänningen. Att välja ett lämpligt värde för Rosc är avgörande för HT-12E: s funktion! Helst ska HT-12Es oscillatorfrekvens vara 1/50 gånger den för HT-12D-motsvarigheten. Därför, eftersom vi arbetar med 5V, valde vi 1MΩ och 51kΩ motstånd som Rosc för HT-12E respektive HT-12D kretsar. Om du planerar att driva kretsarna på en annan matningsspänning, se grafen "Oscillatorfrekvens vs matningsspänning" på sidan 11 i det bifogade HT-12E-databladet för att bestämma den exakta oscillatorfrekvensen och motståndet som ska användas.

Som en sidnotering kommer vi också att använda kvinnliga rubriker här (som tjänar ett liknande syfte som IC -uttag) för att ansluta accelerometern, RF -sändaren och Arduino i kretsen istället för att lödda dem direkt på kretskortet. Avsikten är att rymma lite återanvändbar komponent. Säg att det var ett tag sedan du konstruerade din gestkontrollerade rover och den bara satt där, halvtäckt av damm, ovanpå din troféhylla och du snubblade över en annan bra instruktör som utnyttjar effektiviteten hos en accelerometer. Så vad gör du? Du tar helt enkelt ur den från din rover och skjuter den in i din nya krets. Du behöver inte kalla "Amazon" för att få en ny:-p

Bonus: Gör upp med Arduino, och ändå inte

Bara om du känner dig lite mer äventyrlig, och speciellt om du tror att det är lite överdrivet att bära detta vackert designade underverk (Arduino, naturligtvis) för en så trivial uppgift som vår; och om inte, gå gärna vidare till nästa steg.

Vårt mål här är att göra Arduino (Arduino -hjärnan faktiskt; ja, jag pratar om ATmega IC!) Till en permanent medlem i teamet. ATmega skulle programmeras att bara köra en enda skiss om och om igen så att den kunde fungera som en evig del av kretsen, precis som HT-12E-bara IC, bara sitta där och göra vad den ska. Är det inte så här något riktigt inbäddat system ska vara?

Hur som helst, för att fortsätta med denna uppgradering, bara ändra kretsen enligt den andra schematiska bifogade. Här byter vi helt enkelt ut honhuvudena för Arduino med ett IC-uttag för ATmega, lägger till ett 10K uppdragningsmotstånd vid återställningsstiftet (stift 1) på IC och pumpar upp det med en extern klocka mellan stift 9 och 10 Tyvärr, om vi gör upp med Arduino, släpper vi också dess inbyggda spänningsregulatorer; ergo måste vi replikera LM7805-kretsen som vi hade använt för mottagaren också här. Dessutom använder vi också en spänningsdelare för att dra den 3.3V som krävs för att driva accelerometern.

Nu är den enda andra fångsten här att programmera ATmega för att göra sitt jobb. Du får dock vänta på det till steg 4. Så håll utkik …

Steg 3: Och mottagaren

Och mottagaren
Och mottagaren
Och mottagaren
Och mottagaren
Och mottagaren
Och mottagaren
Och mottagaren
Och mottagaren

Mottagaren består av en RF-mottagarmodul kopplad med en HT-12D-avkodare IC och ett par likströmsmotorer som drivs med hjälp av en L293D-motorförare, alla anslutna enligt den bifogade schemat.

RF-mottagarens enda jobb är att demodulera bärvågan (mottagen via sin antenn vid stift 1) och återge de "seriella" data som finns i stift 7 varifrån den hämtas av HT-12D för deserialisering. Nu, förutsatt att adresslinjerna (A0 till A7) på HT-12D är konfigurerade identiska med dess HT-12E-motsvarighet, extraheras de fyra parallella databitarna och skickas vidare via datalinjerna (D8 till D11) på HT-12D, till motorföraren, som i sin tur tolkar dessa signaler för att driva motorerna.

Återigen, var uppmärksam på värdet av Rosc. HT-12D har också en intern oscillatorkrets mellan stift 15 och 16, vilket aktiveras genom att ansluta ett motstånd, kallat Rosc, mellan dessa stift. Värdet som valts för Rosc bestämmer faktiskt oscillatorfrekvensen, som kan variera beroende på matningsspänningen. Att välja ett lämpligt värde för Rosc är avgörande för HT-12D: s funktion! Helst ska HT-12D: s oscillatorfrekvens vara 50 gånger den för HT-12E-motsvarigheten. Därför, eftersom vi arbetar med 5V, valde vi 1MΩ och 51kΩ motstånd som Rosc för HT-12E respektive HT-12D kretsar. Om du planerar att använda kretsarna på en annan matningsspänning, se grafen "Oscillatorfrekvens vs matningsspänning" på sidan 5 i det bifogade HT-12D-databladet för att bestämma den exakta oscillatorfrekvensen och motståndet som ska användas.

Glöm inte heller de kvinnliga rubrikerna för RF -mottagaren.

Eventuellt kan en lysdiod anslutas via ett 330Ω strömbegränsande motstånd till var och en av de fyra datastiften i HT-12D för att hjälpa till att bestämma den bit som tas emot vid den stiftet. Lysdioden tänds om den mottagna biten är HÖG (1) och dämpas om den mottagna biten är LÅG (0). Alternativt kan en enda lysdiod knytas till VT-stiftet på HT-12D (igen, via ett 330Ω strömbegränsande motstånd), vilket skulle tändas vid en giltig överföring.

Nu, om du letar efter hacket med motorerna som jag pratade om i steg ett, är det jävligt enkelt! Anslut bara de två motorerna i varje uppsättning parallellt som visas i det andra schemat. Detta fungerar som det ska eftersom motorerna i varje uppsättning (de främre och bakre motorerna till vänster och de främre och bakre motorerna till höger) aldrig körs i motsatta riktningar. Det vill säga, för att vrida rovern åt höger måste de främre och bakre motorerna till vänster både drivas framåt och de främre och bakre motorerna till höger måste båda köras bakåt. På samma sätt, för att rovern ska svänga åt vänster, måste de främre och bakre motorerna till vänster både drivas bakåt och de främre och bakre motorerna till höger måste båda köras framåt. Därför är det säkert att mata in samma par spänningar till båda motorerna i en uppsättning. Och sättet att gå tillväga är genom att helt enkelt ansluta dem till motorer parallellt.

Steg 4: Till koden

Till koden
Till koden

Det finns bara en sak kvar att göra för att få rovern igång. Ja, du gissade rätt! (Jag hoppas att du gjorde det) Vi måste fortfarande översätta accelerometeravläsningarna till en form som motorföraren kan tolka för att kunna driva motorerna. Om du tänker att eftersom accelerometeravläsningarna är analoga och motordrivrutinen förväntar sig digitala signaler måste vi implementera någon form av ADC, ja, inte tekniskt, men det är vad vi måste göra. Och det är ganska enkelt.

Vi vet att en accelerometer mäter gravitationell acceleration längs en linjär axel och att denna acceleration representeras som en spänningsnivå som fluktuerar mellan marken och matningsspänningen, som vår mikrokontroller läser in som ett analogt värde som varierar mellan 0 och 1023. Men eftersom vi Jag använder accelerometern på 3,3V, det är lämpligt att vi ställer in den analoga referensen för 10-bitars ADC (som är integrerad i ATmeaga ombord på en Arduino) till 3,3V. Det kommer bara att göra saker enklare att förstå; även om det inte spelar någon större roll för vårt lilla experiment även om vi inte gjorde det (vi måste bara justera koden lite). För att göra det, kopplar vi helt enkelt AREF -stiftet på Arduino (stift 21 på ATmega) till 3,3V och betecknar denna ändring av kod genom att ringa analogReference (EXTERNAL).

Nu, när vi lägger accelerometern platt och analogLäs accelerationen längs x- och y -axlarna (kom ihåg? Vi behöver bara dessa två axlar) får vi ett värde på cirka 511 (dvs halvvägs mellan 0 och 1023), vilket bara är en sätt att säga att det finns 0 acceleration längs dessa axlar. Istället för att gräva i detaljerna i det faktum, tänk dig detta som x- och y -axlarna på ett diagram, med värdet 511 som anger ursprunget och 0 och 1023 slutpunkterna som visas i figuren; orientera accelerometern så att dess stift pekar nedåt och hålls närmare dig annars kan du vända/byta ut axlarna. Det betyder att om vi lutar accelerometern åt höger bör vi läsa ett värde större än 511 längs x-axeln, och om vi lutar accelerometern till vänster bör vi få ett värde lägre än 511 längs x-axeln. På samma sätt, om vi lutar accelerometern framåt, bör vi läsa ett värde större än 511 längs y-axeln, och om vi lutar accelerometern bakåt bör vi läsa ett värde lägre än 511 längs y-axeln. Och så här kan vi i kod härleda riktningen som rovern ska köras i. Men det betyder också att vi måste hålla accelerometern riktigt stabil och i linje parallellt med en plan yta för att kunna läsa en 511 längs båda axlarna för att rovern ska stå still. För att underlätta denna uppgift lite definierar vi vissa trösklar som bildar en gräns, som figuren visar, så att rovern förblir stationär så länge avläsningarna x och y ligger inom gränserna och vi vet säkert att rovern måste ställas in rörelse när tröskeln överskrids.

Till exempel, om y-axeln läser 543, vet vi att accelerometern lutar framåt, så vi måste styra rovern framåt. Vi gör detta genom att ställa in stift D2 och D4 HÖG och stift D3 och D5 LÅG. Eftersom dessa stift är anslutna direkt till HT-12E, serieras signalerna och avfyras RF-sändaren endast för att fångas upp av RF-mottagaren som sitter på rovern, vilket med hjälp av HT-12D avserialiserar signalerna och vidarebefordrar dem till L293D, som i sin tur tolkar dessa signaler och driver motorerna framåt

Du kanske vill ändra dessa trösklar för att kalibrera känsligheten. Ett enkelt sätt att göra det är att helt enkelt ansluta din accelerometer till din Arduino och köra en skiss som spottar ut x- och y -avläsningarna till den seriella bildskärmen. Nu är det bara att flytta runt accelerometern lite, titta igenom avläsningarna och bestämma trösklarna.

Och det är allt! Ladda upp koden till din Arduino och njut !! Eller, kanske inte så snart:-(Om du inte hoppade över bonusavsnittet skulle det vara lite mer arbete att ladda upp koden till din ATmega. Du har två alternativ:

Alternativ A: Använd en USB till seriell enhet som FTDI FT232 basic breakout board. Kör helt enkelt ledningar från TTL -huvudet till motsvarande stift på ATmega enligt kartläggningen nedan:

Pins på Breakout Board Stift på mikrokontrollern
DTR/GRN RST/Återställ (stift 1) via 0.1µF lock
Rx Tx (stift 3)
Tx Rx (stift 2)
Vcc +5v utgång
CTS (oanvänd)
Gnd Jord

Anslut nu ena änden av en USB -kabel till utbrottskortet och den andra till din dator och ladda upp koden som du normalt skulle: starta Arduino IDE, välj en lämplig seriell port, ställ in korttypen, kompilera skissen och tryck på ladda upp.

Alternativ B: Använd en UNO om du har en som ligger någonstans. Anslut bara din ATmega till UNO, ladda upp koden som du normalt skulle, dra ut IC: n och tryck tillbaka den i sändarkretsen. Lätt som en plätt!

Endera av dessa alternativ borde fungera, förutsatt att du var smart nog att bränna startladdaren innan din hand på din ATmega, eller om du var ännu smartare att köpa en ATmega med startladdaren redan installerad i första hand. Om inte, fortsätt och gör det genom att följa stegen som beskrivs här.

Andddd, vi är officiellt klara! Jag hoppas att du njöt av denna bisarrt långa instruerbara. Nu, fortsätt bygga din rover om du inte redan är klar, spela med den ett tag och kom tillbaka för att översvämma kommentarsfältet nedan med frågor och/eller konstruktiv kritik.

Tack

P. S. Anledningen till att jag inte laddade upp några bilder på det färdiga projektet är, för jag har inte slutfört det själv. Halvvägs genom att bygga den tänkte jag på några förstärkningar, till exempel hastighetskontroll, undvikande av hinder och kanske en LCD på rovern, vilket faktiskt inte är så svårt om vi använder en mikrokontroller på både sändnings- och mottagarändarna. Men varför inte göra det på det svåra sättet ?! Så jag arbetar för närvarande i den riktningen och jag lägger upp en uppdatering så fort det bär någon frukt. Jag testade dock koden och designen med hjälp av en snabb prototyp som jag byggde med moduler från ett av mina tidigare projekt; du kan titta på videon här.

Rekommenderad: