Inhoudsopgave:

SONIC LED FEEDBACK: 7 stappen (met afbeeldingen)
SONIC LED FEEDBACK: 7 stappen (met afbeeldingen)

Video: SONIC LED FEEDBACK: 7 stappen (met afbeeldingen)

Video: SONIC LED FEEDBACK: 7 stappen (met afbeeldingen)
Video: Webinar STORM-innovatiemethode 2024, Juli-
Anonim
SONISCHE LED-FEEDBACK
SONISCHE LED-FEEDBACK
SONISCHE LED-FEEDBACK
SONISCHE LED-FEEDBACK
SONISCHE LED-FEEDBACK
SONISCHE LED-FEEDBACK

Hallo weer, Haat het dat je robot overal tegenaan loopt? Dit zal dat probleem oplossen. Met 8 sonische sensoren ziet dit er ingewikkeld uit … maar in feite heb ik dit heel gemakkelijk gemaakt. Ik probeer projecten te posten die je helpen meer te weten te komen over Arduino en een 'outside the box'-concept te laten zien. Dit bericht helpt je 595-switching, pro-mini's als programmeerbare sensor en het grootse gebruik van realtime led-feedback te begrijpen. Als je Arduino leuk vindt als 'kopiëren en plakken en plug-in', kun je dit misschien gewoon overslaan.

Ik gebruik graag pro-mini's. Ze kosten ongeveer $ 2,50, werken als een volledige uno en het installeren van headers maakt ze erg flexibel. Gebruikt als een sensormicro kun je hem 'doen wat je wilt' in plaats van wat een gekochte sensor dicteert. Met I2C die slechts 2 draden gebruikt, kunnen ze allemaal op één lijn worden verbonden. Dus ga over MEGA. Ik kan 4 mini's hebben met 4 afzonderlijke regels code allemaal tegelijk, voor slechts $ 10,00. Hier gebruik ik een mini om de sonische sensoren door een 595 te laten knallen en realtime led-afstand te tonen. Deel dan gewoon 8 bits aan data met het moederbord. Dit ontlast het moederbord en maakt de code heel eenvoudig.

Er is een probleem met sonische sensoren… geen visuele feedback. Je weet nooit of de sensor gewoon een dood gewicht is of werkt! Ik geloof dat degene die ooit met 'BLINK' kwam, slimmer is dan Einstine. Slechts EEN led en een wereld aan informatie wordt doorgegeven door het knipperen. Een sonische sensor heeft dus realtime feedback nodig. Hier heb ik een reeks leds gebruikt om elke sensor te bewaken. Je hebt ze niet nodig, maak de sensoren gewoon zonder de leds. Maar het is handig om de leds op de print te hebben.

Stap 1: MAAK PCB

MAAK PCB
MAAK PCB
MAAK PCB
MAAK PCB
MAAK PCB
MAAK PCB
MAAK PCB
MAAK PCB

maken PCB en bevolken. LET OP… Ik heb een fout gemaakt op de printplaat bij de 4-pins aansluitingen voor de sonische sensoren om in te pluggen. De ECHO en TRIGGER Vcc en de gronden zouden op de pcb worden aangesloten. Er is niet genoeg ruimte voor connectoren, dus ik heb de print gewoon gemaakt met pin-outs. U kunt dus een draadconnector op de print solderen en in de eigenlijke sonische sensoren steken. Wat betreft de leds heb ik gele leds aan de binnenrand en rode aan de buitenkant gezet. dit helpt u op afstand te zien of de sensoren correct meten.

Dit is een van de WEINIG 2-zijdige pcb's die ik ooit heb gemaakt. Ik zou liever 2 ea enkelzijdige en run jumpers maken. Maar om het led-display te krijgen, heb je in ieder geval de bovenste printplaat nodig. Ik heb de lay-out gescheiden in de download.

De print is voor een pro-mini met A4-A5 in de edge header. Sluit in ieder geval de A4-A5 aan op de Master A4-A5. Vergeet ook de Vcc en Grounds niet.

Stap 2: VEEL FOUTEN

VEEL FOUTEN
VEEL FOUTEN

Nu voor mijn fouten … Ik probeerde de Triggers allemaal tegelijk te laten knallen (allemaal aan elkaar vastgemaakt) en dit werkte goed, maar er vonden enkele interacties plaats. Dus nu gaan alle ECHOS naar de micro (8) en worden de TRIGGERS ingesteld door een 595. Nog drie pinnen (3). Wat de leds betreft, multiplexen werkt niet. Je hebt een volledige AAN-tijd nodig voor elke led. Dit betekent dat elke rij van 7 leds zijn eigen 595 moet hebben. Zodra u de 595 update, blijven de leds branden tot de volgende update. Waarbij multiplexen de led maar voor die tiende van een seconde oplicht. Dit werkt goed in mijn lezers en het heeft een speciale micro nodig. Geen tijd om 8 sonische sensoren te scannen en afstanden te meten. Ik heb het geprobeerd en kreeg zeer slechte resultaten. Het multiplexen van de leds betekent ook een raster van rij + kolom en dat betekent ongeveer 64+ doorgangen in de PCB.

Ik heb maar 7 uitgangen van de 595 gebruikt vanwege de rommel op de printplaat. Van een afstand kun je niet zien of er 7 of 8 leds zijn, alleen hun beweging. Je komt misschien in de verleiding om alle leds aan een enkele weerstand te binden en dit werkt, maar de helderheid van de array verandert met het aantal leds dat licht is. Dus één weerstand per led is het beste. Ik ben dol op de 595, maar als ze gewoon de Vcc- en 0-out-pinnen zouden verplaatsen of een 18-pins ic zouden maken met ALLE uitgangen aan dezelfde kant … het aansluiten van alle acht uitgangen zou zo eenvoudig zijn. Maar dan zou het niet verkopen voor minder dan 30 cent.

Stap 3: MONTEER SENSOREN

MONTEER SENSOREN
MONTEER SENSOREN
MONTEER SENSOREN
MONTEER SENSOREN
MONTEER SENSOREN
MONTEER SENSOREN
MONTEER SENSOREN
MONTEER SENSOREN

Lijm de sonische sensoren op het koffiedeksel. de mannelijke aansluiting moet op elke sensor naar binnen worden gebogen. Dit werkt beter als je één pin tegelijk buigt. Ik heb 2-zijdige schuimtape gebruikt, zodat de trillingen minder zijn. Mijn sensoren zijn te dichtbij en ze hebben een ruimte van 1/4 inch nodig om beter op de PCB te passen. Ik heb al eerder sonische sensoren gebruikt en soms lukt het niet om nauwkeurig te meten en daar moet je rekening mee houden. LIJM ze dus niet allemaal permanent in.

Het helpt ook om een korte afstandstest uit te voeren op elk apparaat voordat u ze gebruikt. Ik krijg ongeveer één sensor met een slechte meting in een batch van 20. Niet slecht voor de prijs die ik heb betaald.

Stap 4: HARDE DRAAD

HARDE DRAAD
HARDE DRAAD

Ik dacht dat er ruimte zou zijn voor jacks en pluggen van de pc naar de

sonische pinnen, maar ik had geen ruimte meer. Dus ik heb het pcb-uiteinde hard bedraad en zojuist echo- en trigger-draden gemaakt met vrouwelijke jacks (8ea). Ik heb de 8ea Vcc en 8ea aarding van de sensoren aan elkaar gebonden, dus dit maakte slechts 2 verbindingen met de PCB voor hen.

Met 8 sensoren en 8 595s KAN een uno of pro-mini dit NIET aandrijven. Er moet een 5v-gereguleerde bron zijn als onderdeel van dit project. Mijn robot heeft een simpele 7805 @ 1amp van de batterijen. Dit sluit aan op alle 5v Vcc voor alle apparaten. de 7805 daalt ongeveer een volt, dus je hebt minimaal 6,5 volt nodig om hem te voeden. Dat zijn 2 lithiumbatterijen op 3.3v. Mijn robot heeft oude nicads van gebruikte boorpakketten en 8 nicads draaien de typische Chinese 12v-motor met tandwieloverbrenging in het chassis van het tanktype van $ 20.

Stap 5: DOWNLOAD SONIC SKETCH

DOWNLOAD SONISCHE SCHETS
DOWNLOAD SONISCHE SCHETS

Download de schets en installeer. Er zijn veel manieren om mee te praten

nog een uno, maar ik hou van I2c. de verwarring is adresseren en master/slave. Zoals bij de meeste sensoren (denk aan de 2e mini als sensor) adresseer je de sensor en vraag je om x aantal bytes. hetzelfde hier. In de 2e mini zet je x aantal bytes opzij dat je wilt versturen. De verwarring is dat namen er niet toe doen. Het helpt U alleen te onthouden als u de namen deelt. Dus in de schets stuur ik de 8 sonische afstandsmetingen in cm als sendR1, sendR2, sendR3, sendR4, sendL1, sendL2, sendL3, sendL4. De master krijgt gewoon 8 bytes als data en je kunt die bytes noemen wat je maar wilt. Ik las ze als gotR1, gotR2, got… De verzonden volgorde van bytes is hetzelfde. Dus byte A, B, C….. denk niet dat je door het veranderen van de naam andere gegevens krijgt. En de andere vangst, u kunt alleen gegevens ontvangen waarvan wordt gezegd dat ze moeten worden verzonden. Dus als u andere gegevens wilt, moet u ZOWEL master als slave wijzigen.

Stap 6: COMMUNICATIE

COMMUNICATIE
COMMUNICATIE

Je kunt dit overslaan als je weet hoe je 2 Uno's moet instellen om met elkaar te praten. Ik heb aan het eind nog wat weetjes. Om het gemakkelijk te maken noem ik de uno in de robotbasis M1 en de sonische sensor als S2. Verbind Vcc, massa, A4, A5 met elkaar.

In de schets voor de S2 begint het met #include

Maak vervolgens de 8 bytes om te verzenden. byte R1, byte R2, byte L1 enz. Uno is een 8-bit micro, dus ze verzenden 1 byte per keer met behulp van 'byte' in plaats van 'int' is correct.

Voeg in de 'setup()' 'Wire.begin(address)' toe, dit vertelt I2c welk apparaat dit is. Het adres is meestal een willekeurig getal tussen 4 - 200. de grootte van één byte. Hier gebruikte ik het nummer 10. Dus om met deze sensor S2 te praten, moet de master Wire.requestFrom (10, 8) bellen. Dit is adres 10 en de 8 is hoeveel bytes je wilt hebben. Voeg ook in de 'setup()' Wire.onRequest(isr anyName) toe. Wanneer de M1 het verzoek oproept, reageert de S2-sensor met de onderbreking. Dit roept gewoon de functie anyName aan. Dus deze anyName-functie moet worden gemaakt. Kijk naar de schets en zie de functie 'sendThis()' Dit is waar de bytes daadwerkelijk naar de M1 worden gestuurd. De bytes alleen gaan en NIET de namen en in de volgorde verzonden. Dit is waar de grootte en hoeveelheid gegevens die moeten worden verzonden, beginnen. In dit eenvoudige formaat van bytes moeten het verzenden en ontvangen overeenkomen. Hier 8 bytes verzonden en 8 bytes ontvangen. Een opmerking hier is dat het aanroepen van een functie de () vereist. Zoals delay(), millis(), Serial.print(). Bij gebruik van een ISR (interrupt service routine) die de functie aanroept, laat de (). Dus Wire.onRequest(sendThis) niet Wire.onRequest(sendThis()).

De verwarring die ik had was het meester/slaaf ding. Eerst dacht ik dat de meester ALTIJD de meester was. Maar binnen de schets kun je master/slave omschakelen naar verzoek van andere micro's of naar andere micro's sturen. Zolang je het hierboven beschreven basisformaat volgt. Onthoud… je deelt ALLEEN gegevens die zijn toegewezen.

Twee kleine stukjes van de muur. De isr-interrupt onderbreekt alleen tussen schetslijnen. Als je vastzit in een 'while or for'-lus, gebeurt er niets totdat de lus wordt afgesloten. GEEN big deal, want dit kan een paar microseconden zijn en de gegevens zijn oud.

Het andere probleem is dat er 'binnen' een micro 100% foutloze berekening is. Elke 'externe' (draden) communicatie is onder voorbehoud van fouten. Er zijn veel manieren om te controleren of de aangeleverde gegevens foutloos zijn en overeenkomen met de bron. De gemakkelijkste manier is met checksum. Voeg gewoon de totalen van de verzendende bytes (werkelijke waarden) toe en verzend de totalen en voeg aan de ontvangende kant de totalen toe en kijk of ze overeenkomen. Als ze overeenkomen, ok of gooi die dataset weg als ze dat niet doen. Dit omvat natuurlijk het verzenden van een geheel getal en geen bytes. Dus je splitst gewoon het gehele getal in de HI-byte en LO-byte en verzendt als afzonderlijke bytes. Vervolgens in elkaar gezet bij de ontvanger.

EENVOUDIG:

intx = 5696; (elke geldige int-waarde, max is 65k of 32k negatief)

byte hi = x >>8; (22)

byte lo = x; (64)

stuur de bytes en combineer aan de andere kant ….

byte hi = Wire.read();

byte lo = Wire.read();

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

Stap 7: SLUITEN

SLUITEND
SLUITEND
SLUITEND
SLUITEND
SLUITEND
SLUITEND
SLUITEND
SLUITEND

Om te sluiten, geeft deze sonische sensor het moederbord onbewerkte afstandsgegevens in realtime. Dit maakt de micro vrij en maakt de schets veel minder ingewikkeld. De micro kan nu een goede beslissing nemen om te vertragen, afslaan, stoppen of achteruit te rijden op basis van goede gegevens in plaats van willekeurige gissingen. Zie mijn andere post over bluetooth IDE om schetsen te uploaden zonder kabels en je robot de hele tijd aan te sluiten voor een snelle verandering in je schets. Bedankt voor het bekijken hiervan. oldmaninsc.

Aanbevolen: