Indholdsfortegnelse:

SONIC LED FEEDBACK: 7 trin (med billeder)
SONIC LED FEEDBACK: 7 trin (med billeder)

Video: SONIC LED FEEDBACK: 7 trin (med billeder)

Video: SONIC LED FEEDBACK: 7 trin (med billeder)
Video: Create Sonic (Movie.ver) with clay / Sonic the hedgehog (2020) [kiArt] 2024, Juli
Anonim
SONIC LED FEEDBACK
SONIC LED FEEDBACK
SONIC LED FEEDBACK
SONIC LED FEEDBACK
SONIC LED FEEDBACK
SONIC LED FEEDBACK

Hej igen, Hader du, at din robot løber ind i alt? Dette vil løse dette problem. Med 8 soniske sensorer ser dette kompliceret ud … men faktisk gjorde jeg det meget let. Jeg prøver at lægge projekter op, der hjælper dig med at lære om Arduino og vise et koncept uden for boksen. Dette indlæg hjælper dig med at forstå 595 skift, pro-minier som en programmerbar sensor og den store brug af real-time ledet feedback. Hvis du nyder Arduino som en 'kopi og indsæt og plug-in', kan du bare springe dette over.

Jeg kan godt lide at bruge pro-minis. De er omkring $ 2,50, fungerer som en fuldstændig uno, og installation af overskrifter gør dem meget fleksible. Brugt som en sensormikro kan du få den til at 'gøre hvad du vil' i stedet for hvad en købt sensor dikterer. Med I2C, der kun bruger 2 ledninger, kan de bindes sammen på en linje. Så gå over MEGA, jeg kan have 4 minier, der kører 4 separate kodelinjer på samme tid, til kun $ 10,00. Her bruger jeg en mini til at pope de soniske sensorer gennem en 595 og vise realtid led -afstand. Del derefter bare 8 bit data med bundkortet. Dette fjerner belastningen fra bundkortet og gør hendes kode meget enkel.

Der er et problem med soniske sensorer … ingen visuel feedback. Du ved aldrig, om sensoren bare er en dødvægt eller fungerer! Jeg tror, hvem der nogensinde har fundet på 'BLINK' er klogere end Einstine. Blot ÉN ledede og en verden af information videresendes af det blinkende. Så en sonisk sensor har brug for feedback i realtid. Her brugte jeg en række lysdioder til at overvåge hver sensor. Du behøver dem ikke, bare lav sensorerne uden lysdioder. Men det er nyttigt at have lysdioderne på printkortet.

Trin 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

lave PCB og udfylde. FORSIGTIG … Jeg lavede en fejl på printkortet ved de 4 -polede tilslutninger, som de soniske sensorer skulle tilsluttes. ECHO og TRIGGER Vcc og grunde skulle tilsluttes pcb. Der er ikke nok plads til stik, så jeg lavede lige printkortet med pin-outs. Så du kan lodde et ledningsstik til printkortet og tilslutte de egentlige soniske sensorer. Hvad angår lysdioderne, satte jeg gule lysdioder ved indersiden og rød udenpå. dette hjælper dig med at se på afstand, om sensorerne måler korrekt.

Dette er en af de FÅ 2 -siders pcb jeg nogensinde har lavet. Jeg vil hellere lave 2 ea single side og løbe jumpere. Men for at få LED -displayet skal du mindst have den øverste print. Jeg adskilte layoutet i download.

PCB er til en pro-mini med A4-A5 inde i kantoverskriften. Uanset hvad, skal du bare tilslutte A4-A5 til Master A4-A5. Glem ikke også Vcc og Grounds.

Trin 2: MANGE fejl

MANGE fejl
MANGE fejl

Nu for mine fejl … Jeg forsøgte at slå udløserne på én gang (alle bundet sammen), og denne slags fungerede godt, men nogle interaktioner fandt sted. Så nu går alle ECHOS til mikro (8), og TRIGGERS indstilles med en 595. Tre pins mere (3). Hvad angår lysdioderne, fungerer multiplexing ikke. Du har brug for en fuld ON -tid for hver LED. Det betyder, at hver række med 7 lysdioder skal have sin egen 595. Når du har opdateret 595, forbliver lysdioderne tændt indtil den næste opdatering. Hvor multiplexering af LED'en kun lyser i den tiendedel af et sekund. Dette fungerer godt i mine læsere, og det har brug for en dedikeret mikro. Ingen tid til at scanne 8 soniske sensorer og måle afstande. Jeg prøvede og fik meget dårlige resultater. Multiplexing af lysdioderne vil også betyde et gitter med række + kolonne, og det betyder omkring 64+ gennemføringer i printkortet.

Jeg brugte kun 7 output fra 595 på grund af rod på printet. På afstand kan du ikke se om der er 7 eller 8 lysdioder bare deres bevægelse. Du kan blive fristet til at binde alle lysdioderne til en enkelt modstand, og det virker, men lysstyrken i arrayet ændres med mængden af lysdioder, der er lite. Så en modstand pr. LED er bedst. Jeg elsker bare 595, men hvis de bare flyttede Vcc og 0-out benene eller lavede en 18 pin ic med ALLE udgange på samme side … ville det være så let at forbinde alle otte output. Men så ville den ikke sælge for mindre end 30 øre.

Trin 3: MONTER SENSORER

MONTERINGSSENSORER
MONTERINGSSENSORER
MONTERINGSSENSORER
MONTERINGSSENSORER
MONTERINGSSENSORER
MONTERINGSSENSORER
MONTERINGSSENSORER
MONTERINGSSENSORER

Lim soniske sensorer til kaffelåget. hanstikket skal bøjes indad på hver sensor. Dette fungerer bedre, hvis du bøjer en nål ad gangen. Jeg brugte 2 sideskumbånd, bare så vibrationen er mindre. Mine sensorer er for tæt på, og de har brug for en 1/4 tommer plads til at matche printkortet bedre. Jeg har brugt soniske sensorer før, og nogle gange undlader man at måle nøjagtigt, og du skal huske dette. Så GLIM ikke dem alle permanent.

Det hjælper også med at køre en hurtig afstandstest på hver enkelt, før du bruger dem. Jeg får omkring en sensor med en dårlig læsning i en batch på 20. Ikke dårligt for den pris, jeg betalte.

Trin 4: HÅRD TRÅD

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

Jeg troede, at der ville være plads til stik og stik fra pc'en til

soniske pins, men jeg løb tør for værelse. Så jeg har hårdt tilsluttet pcb -enden og lavede bare ekko og trigger -ledninger med hunstik (8ea). Jeg bandt sensorerne 8ea Vcc og 8ea på sensorerne sammen, så dette lavede kun 2 forbindelser til printkortet til dem.

Med 8 sensorer og 8 595'er kan en uno eller pro-mini IKKE drive denne. Der skal være en 5v reguleret kilde som en del af dette projekt. Min robot har en simpel 7805 @ 1amp fra batterierne. Dette knytter sig til alle 5v Vcc for alle enheder. 7805 falder omkring en volt, så du har brug for mindst 6,5 volt for at fodre den. Det vil sige 2 litiumbatterier ved 3,3v. Min robot har gamle nicader fra brugte borepakker og 8 nicader kører den typiske Kina -gearede 12v motor i chassiset på $ 20 tank.

Trin 5: DOWNLOAD SONIC SKETCH

DOWNLOAD SONIC SKETCH
DOWNLOAD SONIC SKETCH

Download skitsen og installer. Der er mange måder at tale med

en anden uno, men jeg kan godt lide I2c. forvirringen er adressering og herre/ slave. Som med de fleste sensorer (tænk på 2. mini som en sensor) adresserer du sensoren og beder om x byte. samme ting her. I den 2. mini afsætter du x mængde bytes, du vil sende. Forvirringen er, at navne ikke betyder noget. Det hjælper dig kun med at huske, hvis du deler navnene. Så i skitsen sender jeg de 8 soniske afstandsmålinger i cm som sendR1, sendR2, sendR3, sendR4, sendL1, sendL2, sendL3, sendL4. Mesteren får bare 8 bytes, hvis data, og du kan kalde disse bytes alt, hvad du vil. Jeg læste dem som gotR1, gotR2, got….. Den sendte rækkefølge af bytes er den samme. Så byte A, B, C….. tror ikke ved at ændre navnet vil give dig forskellige data. Og den anden fangst, du kan kun modtage data, der får besked på at blive sendt. Så hvis du vil have andre data, skal du ændre BÅDE master og slave.

Trin 6: KOMMUNIKATION

MEDDELELSE
MEDDELELSE

Du kan springe dette over, hvis du ved, hvordan du konfigurerer 2 Unos til at tale med hinanden. Jeg har en smule info til sidst. For at gøre det let vil jeg kalde unoen i robotbasen M1 og den soniske sensor som S2. Tilslut Vcc, jord, A4, A5 til hinanden.

I skitsen til S2 starter det med #include

Opret derefter de 8 bytes, der skal sendes. byte R1, byte R2, byte L1 osv. Uno er en 8bit mikro, så de sender 1byte ad gangen ved hjælp af 'byte' i stedet for 'int' er korrekt.

I 'setup ()' tilføj 'Wire.begin (adresse)' fortæller dette I2c, hvilken enhed dette er. Adressen er normalt et hvilket som helst nummer, du kan lide mellem 4 - 200. størrelsen på en byte. Her brugte jeg tallet 10. Så for at tale med denne sensor S2 skal masteren kalde Wire.requestFrom (10, 8). Dette er adresse 10, og 8 er, hvor mange bytes der ønskes. Tilføj også i 'setup ()' Wire.onRequest (isr anyName). Når M1 ringer til anmodningen, reagerer S2 -sensoren med afbrydelsen. Dette kalder bare funktionen anyName. Så denne anyName -funktion skal oprettes. Se på skitsen og se funktionen 'sendThis ()' Det er her, bytes faktisk bliver sendt til M1. Bytes alene går og IKKE navnene og i den sendte rækkefølge. Det er her størrelsen og mængden af data, der skal sendes, starter fra. I dette lette byteformat skal afsendelse og modtagelse matche. Her blev 8 bytes sendt og 8 bytes modtaget. En note her er at kalde en funktion kræver (). Ligesom delay (), millis (), Serial.print (). Når du bruger en ISR (afbryd servicerutine), kalder funktionen (). Så Wire.onRequest (sendThis) ikke Wire.onRequest (sendThis ()).

Den forvirring jeg havde var mesteren/slave -tingen. Først troede jeg, at mesteren ALTID var mesteren. Men inden for skitsen kan du skifte master/slave til anmodning fra andre mikroer eller sende til andre mikroer. Så længe du fulgte det grundlæggende format, der er skitseret ovenfor. Husk … du deler KUN data, der er tildelt.

To stykker fra væggen. ISR -afbrydelsen afbryder kun mellem skitselinjer. Hvis du er låst i en 'mens eller for' -sløjfe, sker der intet, før sløjfen forlader. INGEN stor ting, da dette kan være et par mikrosekunder, og dataene er gamle.

Det andet problem er, 'inde' i en mikro der er 100% fejlfri beregning. Enhver 'ekstern' (ledning) kommunikation er genstand for fejl. Der er mange måder at kontrollere, at de leverede data er fejlfrie og matcher kilden. Den nemmeste måde er med checksum. Tilføj blot totalerne for afsenderbytes (faktiske værdier) og send totalerne, og tilføj totalerne i den modtagende ende, og se om de matcher. Hvis de matcher ok eller kaster det datasæt, hvis de ikke gør det. Dette indebærer naturligvis at sende en heltal værdi og ikke byte. Så du deler bare heltalet i HI -byte og LO -byte og sender som separate bytes. Sæt derefter sammen ved modtageren.

LET:

int x = 5696; (enhver gyldig int -værdi, maks. er 65k eller 32k negativ)

byte hi = x >> 8; (22)

byte lo = x; (64)

Send bytes og kombiner i den anden ende….

byte hi = Wire.read ();

byte lo = Wire.read ();

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

Trin 7: LUKKING

LUKKING
LUKKING
LUKKING
LUKKING
LUKKING
LUKKING
LUKKING
LUKKING

For at lukke giver denne soniske sensor bundkortet rå afstandsdata i realtid. Dette frigør mikro og gør skitsen meget mindre kompliceret. Mikroen kan nu træffe en god beslutning om at bremse, dreje, stoppe eller vende baseret på gode data i stedet for tilfældige gæt. Se mit andet indlæg om bluetooth IDE for at uploade skitser uden ledninger og at skulle tilslutte din robot hele tiden for kun en hurtig ændring af din skitse. Tak fordi du så dette. oldmaninsc.

Anbefalede: