Sommario:
- Passaggio 1: CREA PCB
- Fase 2: MOLTI ERRORI
- Fase 3: MONTARE I SENSORI
- Passaggio 4: CAVO DURO
- Passaggio 5: SCARICA SONIC SKETCH
- Fase 6: COMUNICAZIONE
- Fase 7: CHIUSURA
Video: FEEDBACK LED SONIC: 7 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Ciao di nuovo, Odi che il tuo robot si imbatte in tutto? Questo risolverà il problema. Con 8 sensori sonici questo sembra complicato… ma in realtà l'ho reso molto semplice. Cerco di pubblicare progetti che ti aiutano a conoscere Arduino e mostrano un concetto "fuori dagli schemi". Questo post ti aiuterà a capire la commutazione 595, i pro-mini come un sensore programmabile e il grande uso del feedback led in tempo reale. Se ti piace Arduino come "copia e incolla e plug-in", potresti semplicemente saltare questo.
Mi piace usare pro-mini. Costano circa $ 2,50, funzionano come uno in piena regola e l'installazione di intestazioni li rende molto flessibili. Usato come un sensore micro puoi farlo "fai ciò che vuoi" invece di ciò che impone un sensore acquistato. Con I2C utilizzando solo 2 fili possono essere legati insieme tutti su un'unica linea. Quindi spostati su MEGA, posso avere 4 mini che eseguono 4 righe di codice separate contemporaneamente, a soli $ 10,00. Qui uso un mini per far passare i sensori sonici attraverso un 595 e mostrare la distanza dei led in tempo reale. Quindi condividi solo 8 bit di dati con la scheda madre. Questo toglie il carico alla scheda madre e rende il suo codice molto semplice.
C'è un problema con i sensori sonici… nessun feedback visivo. Non si sa mai se il sensore è solo un peso morto o se funziona! Credo che chiunque abbia mai inventato "BLINK" sia più intelligente di Einstine. Un solo led e un mondo di informazioni viene trasmesso dal lampeggio. Quindi un sensore sonico ha bisogno di feedback in tempo reale. Qui ho usato una serie di led per monitorare ogni sensore. Non ti servono, fai solo i sensori senza i led. Ma avere i led sul PCB è utile.
Passaggio 1: CREA PCB
fare PCB e popolare. ATTENZIONE… ho commesso un errore sul PCB nelle connessioni a 4 pin per i sensori sonici da collegare. L'ECHO e il TRIGGER Vcc e le masse stavano per collegarsi al pcb. Non c'è abbastanza spazio per i connettori, quindi ho appena realizzato il PCB con i pin-out. Quindi puoi saldare un connettore a filo al PCB e collegarlo ai sensori sonici reali. Per quanto riguarda i led ho messo dei led gialli all'interno e rossi all'esterno. questo ti aiuta a vedere a distanza se i sensori stanno misurando correttamente.
Questo è uno dei POCHI PCB a 2 lati che abbia mai realizzato. Preferirei fare 2 ponticelli da un lato e correre. Ma per ottenere il display a led è necessario almeno il pcb superiore. Ho separato il layout nel download.
Il PCB è per un pro-mini con A4-A5 all'interno dell'intestazione del bordo. In entrambi i casi basta collegare A4-A5 al Master A4-A5. Non dimenticare anche Vcc e Grounds.
Fase 2: MOLTI ERRORI
Ora per i miei errori… ho provato a far scoppiare i trigger tutti in una volta (tutti legati insieme) e questo ha funzionato bene, ma alcune interazioni hanno avuto luogo. Quindi ora tutti gli ECHO vanno al micro (8) ei TRIGGERS sono impostati da un 595. Altri tre pin (3). Per quanto riguarda i led, il multiplexing non funzionerà. Hai bisogno di un tempo di accensione completo per ogni led. Questo significa che ogni fila di 7 led deve avere il proprio 595. Una volta aggiornato il 595 i led rimangono accesi fino al prossimo aggiornamento. Dove il multiplexing il led si accende solo per quel decimo di secondo. Funziona bene nei miei lettori e ha bisogno di un micro dedicato. Non c'è tempo per scansionare 8 sensori sonici e misurare le distanze. Ho provato e ho ottenuto risultati molto scarsi. Il multiplexing dei led significherà anche una griglia di righe + colonne e ciò significa circa 64+ feed-through nel PCB.
Ho usato solo 7 uscite dal 595 a causa del disordine sul PCB. A distanza non si capisce se ci sono 7 o 8 led solo il loro movimento. Potresti essere tentato di collegare tutti i led a un singolo resistore e questo funziona, ma la luminosità dell'array cambia con la quantità di led che sono accesi. Quindi un resistore per led è il migliore. Adoro il 595 ma se hanno appena spostato i pin Vcc e 0-out o realizzato un ic a 18 pin con TUTTE le uscite sullo stesso lato … collegare tutte e otto le uscite sarebbe così facile. Ma poi non si venderebbe per meno di 30 centesimi.
Fase 3: MONTARE I SENSORI
Incolla i sensori sonici sul coperchio del caffè. il jack maschio deve essere piegato verso l'interno su ciascun sensore. Funziona meglio se pieghi un perno alla volta. Ho usato 2 nastri in schiuma laterali solo per ridurre le vibrazioni. I miei sensori sono troppo vicini e hanno bisogno di uno spazio di 1/4 di pollice per adattarsi meglio al PCB. Ho usato sensori sonici prima e a volte uno non riesce a misurare con precisione e devi tenerlo a mente. Quindi non incollarli tutti in modo permanente.
Aiuta anche a eseguire un rapido test a distanza su ciascuno di essi prima di utilizzarli. Ottengo circa un sensore con una lettura scadente in un lotto di 20. Non male per il prezzo che ho pagato.
Passaggio 4: CAVO DURO
Pensavo che ci sarebbe stato spazio per jack e spine dal PC al
sonic pin ma ho finito lo spazio. Quindi ho cablato l'estremità del pcb e ho appena realizzato i cavi dell'eco e del trigger con jack femmina (8ea). Ho legato insieme le masse 8ea Vcc e 8ea dei sensori, quindi questo ha fatto solo 2 connessioni al PCB per loro.
Con 8 sensori e 8 595, uno o pro-mini NON PU alimentare questo. Ci deve essere una fonte regolamentata 5v come parte di questo progetto. Il mio robot ha un semplice 7805 @ 1amp dalle batterie. Questo si lega a tutti i 5v Vcc per tutti i dispositivi. il 7805 scende di circa un volt quindi servono almeno 6,5 volt per alimentarlo. Cioè 2 batterie al litio a 3,3 v. Il mio robot ha vecchi nicad da pacchi di trivelle usati e 8 nicad fanno funzionare il tipico motore 12v con ingranaggio cinese nel telaio del tipo di serbatoio da $ 20.
Passaggio 5: SCARICA SONIC SKETCH
Scarica lo schizzo e installa. Ci sono molti modi per parlare con
un altro uno ma mi piace I2c. la confusione riguarda l'indirizzamento e il master/slave. Come con la maggior parte dei sensori (pensa al secondo mini come a un sensore) indirizzi il sensore e chiedi x quantità di byte. stessa cosa qui. Nel secondo mini metti da parte x quantità di byte che vuoi inviare. La confusione è che i nomi non contano. Ti aiuta solo a ricordare se condividi i nomi. Quindi nello schizzo invio le 8 misurazioni della distanza sonora in cm come sendR1, sendR2, sendR3, sendR4, sendL1, sendL2, sendL3, sendL4. Il master ottiene solo 8 byte se i dati e puoi chiamare quei byte come vuoi. Li ho letti come gotR1, gotR2, got….. L'ordine dei byte di invio è lo stesso. Quindi i byte A, B, C….. non pensare che cambiando il nome ti diano dati diversi. E l'altro problema, puoi ricevere solo i dati che è stato detto di inviare. Quindi se vuoi altri dati devi cambiare ENTRAMBI master e slave.
Fase 6: COMUNICAZIONE
Puoi saltare questo se sai come impostare 2 Uno per parlare tra loro. Ho alcune informazioni alla fine. Per semplificare, chiamerò l'uno nella base del robot M1 e il sensore sonico come S2. Collegare tra loro Vcc, massa, A4, A5.
Nello schizzo per S2 inizia con #include
Quindi creare gli 8 byte da inviare. byte R1, byte R2, byte L1 ecc. Uno è un micro a 8 bit, quindi invia 1 byte alla volta utilizzando "byte" anziché "int" è corretto.
In 'setup()' aggiungi 'Wire.begin(address)' questo dice a I2c di quale dispositivo si tratta. L'indirizzo è di solito un qualsiasi numero compreso tra 4 e 200. La dimensione di un byte. Qui ho usato il numero 10. Quindi per parlare con questo sensore S2 il master deve chiamare Wire.requestFrom(10, 8). Questo è l'indirizzo 10 e l'8 è il numero di byte desiderati. Inoltre in 'setup()' aggiungi Wire.onRequest(isr anyName). Quando M1 chiama la richiesta il sensore S2 reagisce con l'interrupt. Questo chiama semplicemente la funzione anyName. Quindi questa funzione anyName deve essere creata. Guarda lo schizzo e vedi la funzione 'sendThis()' Qui è dove i byte vengono effettivamente inviati a M1. Vanno solo i byte e NON i nomi e nell'ordine inviato. È qui che iniziano le dimensioni e la quantità di dati da inviare. In questo semplice formato di byte, l'invio e la ricezione dovrebbero corrispondere. Qui 8 byte inviati e 8 byte ricevuti. Una nota qui è che la chiamata di una funzione richiede (). Come delay(), millis(), Serial.print(). Quando si utilizza un ISR (routine di servizio di interruzione), la chiamata alla funzione elimina (). Quindi Wire.onRequest(sendThis) non Wire.onRequest(sendThis()).
La confusione che ho avuto è stata la cosa del padrone/schiavo. All'inizio pensavo che il maestro fosse SEMPRE il maestro. Ma all'interno dello sketch puoi cambiare master/slave per richiedere da altri micro o inviare ad altri micro. Finché hai seguito il formato di base descritto sopra. Ricorda… condividi SOLO i dati che sono stati assegnati.
Due bocconcini fuori dal comune. L'interruzione isr interrompe solo tra le linee di schizzo. Se sei bloccato in un ciclo "while o for", non succede nulla finché il ciclo non termina. NESSUN grosso problema in quanto potrebbero essere necessari alcuni microsecondi e i dati sono vecchi.
L'altro problema è che "dentro" un micro c'è un calcolo privo di errori al 100%. Qualsiasi comunicazione 'esterna' (cavi) è soggetta ad errori. Esistono molti modi per verificare che i dati forniti siano privi di errori e corrispondano alla fonte. Il modo più semplice è con il checksum. Basta aggiungere i totali dei byte di invio (valori effettivi) e inviare i totali e sul lato ricevente aggiungere i totali e vedere se corrispondono. Se corrispondono ok o butta quel set di dati se non lo fanno. Ovviamente questo implica l'invio di un valore intero e non di byte. Quindi devi semplicemente dividere l'intero in byte HI e byte LO e inviare come byte separati. Quindi mettere insieme al ricevitore.
FACILE:
int x = 5696; (qualsiasi valore int valido, il massimo è 65k o 32k negativo)
byte ciao = x >>8; (22)
byte lo = x; (64)
inviare i byte e combinare all'altra estremità….
byte ciao = Wire.read();
byte lo = Wire.read();
int newx = (hi<8) + lo; (5696)
Fase 7: CHIUSURA
Per chiudere, questo sensore sonico fornisce alla scheda madre i dati grezzi sulla distanza in tempo reale. Questo libera il micro e rende lo schizzo molto meno complicato. Il micro ora può prendere una buona decisione di rallentare, girare, fermarsi o invertire sulla base di dati validi invece di ipotesi casuali. Vedi il mio altro post sull'IDE bluetooth per caricare schizzi senza fili e dover collegare il tuo robot tutto il tempo solo per un rapido cambiamento nel tuo schizzo. Grazie per aver visualizzato questo. oldmaninsc.
Consigliato:
Convertitore boost basato su Esp8266 con un'incredibile interfaccia utente Blynk con regolatore di feedback: 6 passaggi
Convertitore boost basato su Esp8266 con un'incredibile interfaccia utente Blynk con regolatore di feedback: in questo progetto ti mostrerò un modo efficiente e comune come aumentare le tensioni CC. Ti mostrerò quanto può essere facile costruire un convertitore boost con l'aiuto di un Nodemcu. Costruiamolo. Include anche un voltmetro su schermo e un feedback
Un'applicazione di un pulsante estensibile con feedback di vibrazione: 7 passaggi (con immagini)
Un'applicazione di un pulsante estensibile con feedback di vibrazione: in questo tutorial, ti mostreremo prima come utilizzare un Arduino Uno per controllare un motore di vibrazione tramite un pulsante esteso. La maggior parte dei tutorial sui pulsanti coinvolge il pulsante sulla breadboard fisica, mentre in questo tutorial il pulsante è stato
Solderdoodle Plus: saldatore con controllo touch, feedback LED, custodia stampata in 3D e USB ricaricabile: 5 passaggi (con immagini)
Solderdoodle Plus: saldatore con controllo touch, feedback LED, custodia stampata in 3D e USB ricaricabile: fare clic qui sotto per visitare la nostra pagina del progetto Kickstarter per Solderdoodle Plus, un multiutensile a caldo ricaricabile USB cordless e preordinare un modello di produzione! https: //www.kickstarter.com/projects/249225636/solderdoodle-plus-cordless-usb-rechargeable-ho
Semplice display ergonomico basato su Arduino con feedback differenziale: 7 passaggi (con immagini)
Semplice display ergometrico basato su Arduino con feedback differenziale: l'allenamento cardio è noioso, in particolare quando ci si allena al chiuso. Diversi progetti esistenti cercano di alleviare questo problema facendo cose interessanti come accoppiare l'ergometro a una console di gioco o persino simulare un vero giro in bicicletta in VR. Emozionante come queste
Controllo autonomo del regime del motore utilizzando il sistema di feedback da un tachimetro a infrarossi: 5 passaggi (con immagini)
Controllo autonomo del numero di giri del motore utilizzando il sistema di feedback da un tachimetro basato su IR: c'è sempre la necessità di automatizzare un processo, sia esso semplice/mostruoso. Ho avuto l'idea di realizzare questo progetto da una semplice sfida che ho affrontato mentre trovavo metodi per irrigare/irrigare il nostro piccolo pezzo di terra. Il problema della mancanza di una linea di alimentazione corrente