Innehållsförteckning:

SONIC LED FEEDBACK: 7 steg (med bilder)
SONIC LED FEEDBACK: 7 steg (med bilder)

Video: SONIC LED FEEDBACK: 7 steg (med bilder)

Video: SONIC LED FEEDBACK: 7 steg (med bilder)
Video: 7 in1 RF EMS LED Light Sonic Vibration & Hot Massager 2024, Juli
Anonim
SONIC LED -FEEDBACK
SONIC LED -FEEDBACK
SONIC LED -FEEDBACK
SONIC LED -FEEDBACK
SONIC LED -FEEDBACK
SONIC LED -FEEDBACK

Hej igen, Hatar att din robot stöter på allt? Detta kommer att lösa det problemet. Med 8 soniska sensorer ser detta komplicerat ut … men faktiskt gjorde jag det här väldigt enkelt. Jag försöker lägga upp projekt som hjälper dig att lära dig mer om Arduino och visa ett "utanför boxen" -koncept. Det här inlägget hjälper dig att förstå 595 switchar, pro-minis som en programmerbar sensor och den stora användningen av realtidsledad feedback. Om du gillar Arduino som en "kopiera och klistra in och plug-in" kan du bara hoppa över det här.

Jag gillar att använda pro-minis. De är cirka $ 2,50, fungerar som en fullblåst uno och installation av rubriker gör dem mycket flexibla. Används som en sensormikro kan du få den att "göra vad du vill" istället för vad en köpt sensor dikterar. Med I2C som bara använder 2 trådar kan de bindas ihop på en linje. Så flytta över MEGA Jag kan ha 4 minis som kör 4 separata kodrader samtidigt, till bara $ 10,00. Här använder jag en mini för att poppa de soniska sensorerna genom en 595 och visa realtid ledd distans. Sedan är det bara att dela 8 bitars data med moderkortet. Detta tar bort belastningen från moderkortet och gör hennes kod mycket enkel.

Det finns ett problem med ljudsensorer … ingen visuell återkoppling. Du vet aldrig om sensorn bara är en dödvikt eller fungerar! Jag tror att vem som helst som kom på 'BLINK' är smartare än Einstine. Bara EN ledde och en värld av information förmedlas av blinkandet. Så en sonisk sensor behöver feedback i realtid. Här använde jag en rad lysdioder för att övervaka varje sensor. Du behöver dem inte, gör bara sensorerna utan lysdioderna. Men att ha lysdioderna på kretskortet är till hjälp.

Steg 1: GÖR PCB

GÖR PCB
GÖR PCB
GÖR PCB
GÖR PCB
GÖR PCB
GÖR PCB
GÖR PCB
GÖR PCB

göra PCB och fylla. FÖRSIKTIGHET … Jag gjorde ett misstag på kretskortet med de 4 -stifts anslutningarna som de soniska sensorerna skulle anslutas till. ECHO och TRIGGER Vcc och grunder skulle anslutas till kretskortet. Det finns inte tillräckligt med utrymme för kontakter så jag gjorde precis kretskortet med stift. Så du kan löd en trådkontakt till kretskortet och ansluta till de verkliga soniska sensorerna. När det gäller lysdioderna sätter jag gula lysdioder på insidan och röd på utsidan. Detta hjälper dig att se på avstånd om sensorerna mäter korrekt.

Detta är en av de FÅ 2 -sidiga PCB jag någonsin gjort. Jag skulle hellre göra 2 ea enkel sida och spring hoppare. Men för att få LED -displayen behöver du minst den övre kretskortet. Jag separerade layouten i nedladdningen.

Kretskortet är för en pro-mini med A4-A5 inuti kanthuvudet. Hur som helst ansluter du bara A4-A5 till Master A4-A5. Glöm inte Vcc och Grounds också.

Steg 2: Många misstag

MÅNGA MISSTAG
MÅNGA MISSTAG

Nu för mina misstag … Jag försökte popa utlösarna på en gång (alla sammanbundna) och den här sorten fungerade bra men vissa interaktioner ägde rum. Så nu går alla ECHOS till mikro (8) och TRIGGERS ställs in med en 595. Tre stift till (3). När det gäller lysdioderna fungerar inte multiplexning. Du behöver en full PÅ -tid för varje LED. Det betyder att varje rad med 7 lysdioder måste ha sin egen 595. När du har uppdaterat 595 lyser lysdioderna tills nästa uppdatering. Där multiplexering av lysdioden lyser bara under den tiondel av en sekund. Detta fungerar bra i mina läsare och det behöver en dedikerad mikro. Ingen tid för att skanna 8 ljudsensorer och mäta avstånd. Jag försökte och fick mycket dåliga resultat. Multiplexing av lysdioderna kommer också att innebära ett rutnät med rad + kolumn och det betyder cirka 64+ genomgångar i kretskortet.

Jag använde bara 7 utgångar från 595 på grund av röran på kretskortet. På avstånd kan du inte se om det bara är 7 eller 8 lysdioder som rör sig. Du kan bli frestad att knyta alla lysdioder till ett enda motstånd och det fungerar, men matrisens ljusstyrka ändras med mängden leds som är lite. Så ett motstånd per led är bäst. Jag bara älskar 595 men om de bara flyttade Vcc- och 0-out-stiften eller gjorde en 18-polig ic med ALLA utgångar på samma sida … skulle det vara så enkelt att ansluta alla åtta utgångarna. Men då skulle den inte sälja för mindre än 30 cent.

Steg 3: MONTERA SENSORER

MONTERA SENSORER
MONTERA SENSORER
MONTERA SENSORER
MONTERA SENSORER
MONTERA SENSORER
MONTERA SENSORER
MONTERA SENSORER
MONTERA SENSORER

Limma ljudsensorer till kaffelocket. hankontakten måste böjas inåt på varje sensor. Detta fungerar bättre om du böjer en stift i taget. Jag använde 2 sidoskumtejp bara så att vibrationerna blir mindre. Mina sensorer är för nära och de behöver ett 1/4 tum utrymme för att matcha kretskortet bättre. Jag har använt soniska sensorer tidigare och ibland misslyckas en med att mäta exakt och du måste ha detta i åtanke. Så glöm inte in dem alla permanent.

Det hjälper också att köra ett snabbt avståndstest på var och en innan du använder dem. Jag får ungefär en sensor med dålig avläsning i en sats på 20. Inte illa för det priset jag betalade.

Steg 4: HÅRD TRÅD

HÅRD TRÅD
HÅRD TRÅD

Jag trodde att det skulle finnas plats för uttag och kontakter från datorn till

sonic pins men jag sprang ur rummet. Så jag kopplade hårt PCB -änden och gjorde bara eko och triggtrådar med honuttag (8ea). Jag knöt ihop 8ea Vcc och 8ea grunderna för sensorerna så detta gjorde bara 2 anslutningar till kretskortet för dem.

Med 8 sensorer och 8 595s kan en uno eller pro-mini INTE driva detta. Det måste finnas en 5v reglerad källa som en del av detta projekt. Min robot har en enkel 7805 @ 1amp från batterierna. Detta knyter an till all 5v Vcc för alla enheter. 7805 sjunker ungefär en volt så du behöver minst 6,5 volt för att mata den. Det vill säga 2 litiumbatterier på 3,3v. Min robot har gamla nikader från begagnade borrpaket och 8 nikader kör den typiska Kina -växlade 12V -motorn i chassit på 20 dollar.

Steg 5: LADDA NER SONIC SKETCH

LADDA NER SONIC SKETCH
LADDA NER SONIC SKETCH

Ladda ner skissen och installera. Det finns många sätt att prata med

en annan uno men jag gillar I2c. förvirringen är adressering och herre/ slav. Som med de flesta sensorer (tänk på den andra mini som en sensor) adresserar du sensorn och ber om x byte. samma sak här. I den andra mini du avsätter x antal byte du vill skicka. Förvirringen är att namn inte spelar någon roll. Det hjälper dig bara att komma ihåg om du delar namnen. Så i skissen skickar jag de 8 soniska avståndsmätningarna i cm som sendR1, sendR2, sendR3, sendR4, sendL1, sendL2, sendL3, sendL4. Befälhavaren får bara 8 byte om data och du kan kalla dessa byte vad du vill. Jag läste dem som gotR1, gotR2, fick….. Den skickade byteordningen är den samma. Så byte A, B, C….. tror inte att genom att byta namn ger dig olika data. Och den andra fångsten, du kan bara ta emot data som uppmanas att skickas. Så om du vill ha annan data måste du byta BÅDE master och slav.

Steg 6: KOMMUNIKATION

KOMMUNIKATION
KOMMUNIKATION

Du kan hoppa över det här om du vet hur du ställer in 2 Unos för att prata med varandra. Jag har lite info i slutet. För att göra det enkelt kommer jag att kalla uno i robotbasen M1 och den soniska sensorn som S2. Anslut Vcc, jord, A4, A5 till varandra.

I skissen för S2 börjar det med #include

Skapa sedan de 8 bytes som ska skickas. byte R1, byte R2, byte L1 etc. Uno är en 8bit mikro så att de skickar 1 byte åt gången med "byte" istället för "int" är korrekt.

I 'setup ()' lägg till 'Wire.begin (adress)' berättar detta för I2c vilken enhet det här är. Adressen är vanligtvis vilket nummer du vill mellan 4 - 200. storleken på en byte. Här använde jag siffran 10. Så för att prata med den här sensorn S2 måste mastern ringa Wire.requestFrom (10, 8). Detta är adress 10 och 8 är hur många byte som önskades. Lägg till Wire.onRequest (isr anyName) i 'setup ()'. När M1 ringer begäran reagerar S2 -sensorn med avbrottet. Detta kallar bara funktionen anyName. Så denna anyName -funktion måste skapas. Titta på skissen och se funktionen 'sendThis ()' Det är här byte faktiskt skickas till M1. Byte ensam går och INTE namnen och i ordningen skickad. Det är här storleken och mängden data som ska skickas börjar från. I detta enkla byteformat ska sändning och mottagning matcha. Här skickas 8 byte och 8 bytes tas emot. En anmärkning här är att ringa en funktion kräver (). Som delay (), millis (), Serial.print (). När du använder en ISR (avbrottsrutin) ringer funktionen tappar (). Så Wire.onRequest (sendThis) inte Wire.onRequest (sendThis ()).

Förvirringen jag hade var mästaren/slaven. Först trodde jag att befälhavaren ALLTID var befälhavaren. Men inom skissen kan du byta master/slav till begäran från andra mikroer eller skicka till andra mikroer. Så länge du följde det grundläggande formatet som beskrivs ovan. Kom ihåg … du delar ENDAST data som har tilldelats.

Två bitar från väggen. ISR -avbrottet avbryter endast mellan skisslinjer. Om du är låst i en "medan eller för" -slinga händer ingenting förrän slingan lämnar. INGEN stor grej eftersom detta kan vara några mikrosekunder och data är gamla.

Det andra problemet är, "inuti" en mikro det finns 100% felfri beräkning. All "extern" (tråd) kommunikation är föremål för fel. Det finns många sätt att kontrollera att data som levereras är felfria och matchar källan. Det enklaste sättet är med kontrollsumma. Lägg bara till totalsumman för de sändande byte (faktiska värden) och skicka totalen och i den mottagande änden lägg till totalen och se om de matchar. Om de matchar ok eller slänger den datauppsättningen om de inte gör det. Naturligtvis innebär detta att man skickar ett heltal och inte byte. Så du delar bara heltalet i HI -byte och LO -byte och skickar som separata byte. Sätt sedan ihop vid mottagaren.

LÄTT:

int x = 5696; (valfritt int -värde, max är 65k eller 32k negativt)

byte hi = x >> 8; (22)

byte lo = x; (64)

skicka byte och kombinera i andra änden ….

byte hi = Wire.read ();

byte lo = Wire.read ();

int newx = (hej << 8) + lo; (5696)

Steg 7: STÄNGNING

STÄNGNING
STÄNGNING
STÄNGNING
STÄNGNING
STÄNGNING
STÄNGNING
STÄNGNING
STÄNGNING

För att stänga ger denna soniska sensor moderkortet rådata avståndsdata i realtid. Detta frigör mikron och gör skissen mycket mindre komplicerad. Mikro kan nu göra ett bra beslut att sakta ner, vända, stoppa eller backa baserat på bra data istället för slumpmässiga gissningar. Se mitt andra inlägg om bluetooth IDE för att ladda upp skisser utan ledningar och att behöva ansluta din robot hela tiden för bara en snabb förändring i din skiss. Tack för att du tittade på detta. oldmaninsc.

Rekommenderad: