Sommario:

FEEDBACK LED SONIC: 7 passaggi (con immagini)
FEEDBACK LED SONIC: 7 passaggi (con immagini)

Video: FEEDBACK LED SONIC: 7 passaggi (con immagini)

Video: FEEDBACK LED SONIC: 7 passaggi (con immagini)
Video: mi machi papà 2024, Novembre
Anonim
FEEDBACK LED SONIC
FEEDBACK LED SONIC
FEEDBACK LED SONIC
FEEDBACK LED SONIC
FEEDBACK LED SONIC
FEEDBACK LED SONIC

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
FARE PCB
FARE PCB
FARE PCB
FARE PCB
FARE PCB
FARE PCB
FARE 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

MOLTI ERRORI
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

MONTARE SENSORI
MONTARE SENSORI
MONTARE SENSORI
MONTARE SENSORI
MONTARE SENSORI
MONTARE SENSORI
MONTARE SENSORI
MONTARE 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

FILO DURO
FILO 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 SONIC SKETCH
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

COMUNICAZIONE
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

CHIUSURA
CHIUSURA
CHIUSURA
CHIUSURA
CHIUSURA
CHIUSURA
CHIUSURA
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: