- Materiali richiesti:
- Schema elettrico:
- Come funziona effettivamente il modulo HC-SR04:
- Distanza di misurazione tra due sensori a ultrasuoni (HC-SR04):
- Programma per il sensore del trasmettitore:
- Programma per il sensore del ricevitore:
- Lavorando:
- Idea improvvisata: calibrazione del sensore utilizzando una distanza nota:
Il sensore a ultrasuoni (HC-SR04) è comunemente usato per trovare la distanza di un oggetto da un punto particolare. È stato abbastanza facile farlo con Arduino e anche il codice è piuttosto semplice. Ma in questo articolo proveremo qualcosa di diverso con questi famosi sensori HC-SR04. Proveremo a calcolare la distanza tra due sensori a ultrasuoni, ovvero faremo in modo che un sensore funga da trasmettitore e l'altro sensore funzioni da ricevitore. In questo modo possiamo tracciare la posizione di un trasmettitore utilizzando molti ricevitori a ultrasuoni, questo tracciamento è chiamato triangolazione e può essere utilizzato per l'attracco automatico dei seguaci dei bagagli dei robot e altre applicazioni simili. Trovare la distanza tra due sensori statunitensi potrebbe sembrare un compito abbastanza semplice, ma ho dovuto affrontare alcune sfide discusse in questo progetto.
La tecnica discussa in questo articolo non è abbastanza accurata e potrebbe non essere utile in nessun sistema reale senza modifiche. Durante il periodo di questa documentazione non ho trovato nessuno che ottenga risultati simili ai miei, quindi ho semplicemente condiviso le mie opinioni su come l'ho fatto funzionare in modo che le persone che lo stanno provando non debbano reinventare la ruota.
Materiali richiesti:
- Arduino (2Nos) - Qualsiasi modello
- Modulo HCSR04 (2Nos)
Schema elettrico:
Anche se faremo un sensore US (Ultrasonic) per funzionare come trasmettitore e l'altro come ricevitore, è obbligatorio collegare tutti i quattro pin dei sensori con Arduino. Perché dovremmo? Più di questo sarà discusso più avanti, ma per ora lo schema del circuito sarà il seguente
Come puoi vedere, lo schema del circuito sia del trasmettitore che del ricevitore sono identici. Controlla anche: Interfaccia del sensore a ultrasuoni Arduino
Come funziona effettivamente il modulo HC-SR04:
Prima di procedere oltre fateci capire come funziona il sensore HC-SR04. Il diagramma temporale sottostante ci aiuterà a capire il funzionamento.
Il sensore ha due pin Trigger ed Echo che vengono utilizzati per misurare la distanza come mostrato nel diagramma temporale. Per prima cosa, per iniziare la misurazione, dovremmo inviare un'onda ultrasonica dal trasmettitore, questo può essere fatto impostando il pin del trigger alto per 10uS. Non appena questo è fatto, il pin del trasmettitore invierà 8 raffiche soniche di onde statunitensi. Questa ondata statunitense colpirà un oggetto che rimbalza indietro e sarà ricevuta dal ricevitore.
Qui il diagramma temporale mostra che una volta che il ricevitore riceve l'onda, farà alzare il pin Echo per un periodo di tempo uguale al tempo impiegato dall'onda per viaggiare dal sensore US e raggiungere di nuovo il sensore. Questo diagramma temporale non sembra essere vero.
Ho coperto la parte Tx (trasmettitore) del mio sensore e ho controllato se l'impulso Echo era alto, e sì, lo fa. Ciò significa che l'impulso Echo non attende che l'onda US (ultrasonica) venga ricevuta da esso. Una volta che trasmette l'onda USA, va in alto e rimane alto fino a quando l'onda non ritorna indietro. Quindi il diagramma temporale corretto dovrebbe essere qualcosa del genere mostrato di seguito (scusa per le mie scarse capacità di scrittura)
Far funzionare il tuo HC-SR04 solo come trasmettitore:
È abbastanza semplice far funzionare un HC-SR04 solo come trasmettitore. Come mostrato nel diagramma temporale, devi dichiarare il pin Trigger come pin di uscita e farlo rimanere alto per 10 microsecondi. Questo avvierà lo scoppio dell'onda ultrasonica. Quindi ogni volta che vogliamo trasmettere l'onda non ci resta che controllare il trigger pin del sensore del trasmettitore, per il quale di seguito viene fornito il codice.
Far funzionare l'HC-SR04 solo come ricevitore:
Come mostrato nel diagramma dei tempi, non possiamo controllare l'aumento del pin Echo poiché è correlato al pin trigger. Quindi non c'è modo di far funzionare l'HC-SR04 solo come ricevitore. Ma possiamo usare un trucco, coprendo semplicemente la parte del trasmettitore del sensore con del nastro (come mostrato nell'immagine sotto) o tappando l'onda degli Stati Uniti non può sfuggire al di fuori del suo involucro del trasmettitore e il pin Echo non sarà influenzato da questa onda degli Stati Uniti.
Ora per fare in modo che il perno dell'eco vada in alto, dobbiamo solo tirare questo falso perno del grilletto in alto per 10 microsecondi. Una volta che questo sensore del ricevitore riceve l'onda US trasmessa dal sensore del trasmettitore, il pin dell'eco si abbasserà.
Distanza di misurazione tra due sensori a ultrasuoni (HC-SR04):
Finora abbiamo capito come far funzionare un sensore come trasmettitore e l'altro sensore come ricevitore. Ora, dobbiamo trasmettere l'onda ultrasonica dal sensore del trasmettitore e riceverla con il sensore del ricevitore e controllare il tempo impiegato dall'onda per viaggiare dal trasmettitore al ricevitore sembra facile, giusto ?? Ma purtroppo !, abbiamo un problema qui e questo non funzionerà.
Il modulo trasmettitore e il modulo ricevitore sono distanti e quando il modulo ricevitore riceve l'onda US dal modulo trasmettitore non saprà quando il trasmettitore ha inviato questa particolare onda. Senza conoscere l'ora di inizio non possiamo calcolare il tempo impiegato e quindi la distanza. Per risolvere questo problema, è necessario che l'impulso di eco del modulo ricevitore sia alto esattamente quando il modulo trasmettitore ha trasmesso l'onda USA. In altre parole, il modulo trasmettitore e il modulo ricevitore dovrebbero attivarsi contemporaneamente. Ciò può essere ottenuto con il seguente metodo.
Nel diagramma sopra, Tx rappresenta il sensore del trasmettitore e Rx rappresenta il sensore del ricevitore. Come mostrato, il sensore del trasmettitore trasmetterà le onde statunitensi con un ritardo periodico noto, questo è tutto ciò che deve fare.
Nel sensore del ricevitore dobbiamo in qualche modo far alzare il pin del grilletto esattamente quando il pin del trasmettitore è alto. Quindi inizialmente facciamo in modo casuale il trigger del ricevitore per andare in alto che rimarrà alto fino a quando il pin dell'eco non si abbassa. Questo pin dell'eco si abbasserà solo quando riceve un'onda US dal trasmettitore. Quindi, non appena diventa basso, possiamo presumere che il sensore del trasmettitore sia appena stato attivato. Ora, con questo presupposto, non appena l'eco si abbassa, possiamo attendere il ritardo noto e quindi attivare il trigger dei ricevitori. Ciò sincronizzerebbe parzialmente il trigger sia del trasmettitore che del ricevitore e quindi è possibile leggere la durata dell'impulso dell'eco immediato utilizzando pulseIn () e calcolare la distanza.
Programma per il sensore del trasmettitore:
Il programma completo per il modulo trasmettitore si trova in fondo alla pagina. Non fa altro che attivare il sensore del trasmettitore a intervalli periodici.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Per attivare un sensore dobbiamo fare in modo che il perno del grilletto rimanga alto per 10uS. Il codice per fare lo stesso è mostrato sopra
Programma per il sensore del ricevitore:
Nel sensore del ricevitore dobbiamo coprire l'occhio del trasmettitore del sensore per renderlo fittizio come discusso in precedenza. Ora possiamo usare la tecnica sopra menzionata per misurare la distanza tra due sensori. Il programma completo è riportato in fondo a questa pagina. Poche righe importanti sono spiegate di seguito
Trigger_US (); while (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); durata = pulseIn (echoPin, HIGH);
Inizialmente attiviamo il sensore US usando la funzione Trigger_US () e poi aspettiamo che il pin dell'eco rimanga alto usando un ciclo while. Una volta che si abbassa, attendiamo una durata predeterminata, questa durata dovrebbe essere compresa tra 10 e 30 microsecondi che può essere determinata usando tentativi ed errori (oppure puoi usare l'idea improvvisata fornita di seguito). Dopo questo ritardo, attivare nuovamente gli Stati Uniti utilizzando la stessa funzione e quindi utilizzare la funzione pulseIn () per calcolare la durata dell'onda.
Ora usando le stesse vecchie formule possiamo calcolare la distanza come sotto
distanza = durata * 0,034;
Lavorando:
Effettuare i collegamenti come spiegato nel programma. Coprire la parte Tx del sensore del ricevitore come mostrato in figura. Quindi caricare il codice del trasmettitore e il codice del ricevitore che vengono forniti di seguito rispettivamente sul trasmettitore e sul ricevitore Arduino. Apri il monitor seriale del modulo ricevitore e dovresti notare la distanza tra due moduli visualizzata come mostrato nel video qui sotto.
Nota: questo metodo è solo un'ideologia e potrebbe non essere accurato o soddisfacente. Tuttavia puoi provare l'idea improvvisata di seguito per ottenere risultati migliori.
Idea improvvisata: calibrazione del sensore utilizzando una distanza nota:
Il metodo che è stato spiegato finora sembra stranamente soddisfacente, eppure è stato sufficiente per il mio progetto. Tuttavia vorrei anche condividere gli inconvenienti di questo metodo e un modo per superarli. Uno dei principali svantaggi di questo metodo è che presumiamo che il pin Echo del ricevitore si abbassi immediatamente dopo che il sensore del trasmettitore ha trasmesso l'onda USA, il che non è vero poiché l'onda impiegherà un po 'di tempo a viaggiare dal trasmettitore al ricevitore. Quindi il trigger del trasmettitore e il trigger del ricevitore non saranno perfettamente sincronizzati.
Per ovviare a questo possiamo calibrare il sensore utilizzando inizialmente una distanza nota. Se la distanza è nota, conosceremo il tempo impiegato dall'onda statunitense per raggiungere il ricevitore dal trasmettitore. Manteniamo questo tempo preso come Del (D) come mostrato di seguito.
Ora sapremo esattamente dopo quanto tempo dovremmo alzare il pin Trigger del Ricevitore per sincronizzarci con il trigger del Trasmettitore. Questa durata può essere calcolata da Ritardo noto (t) - Del (D). Non sono stato in grado di testare questa idea a causa dei limiti di tempo, quindi non sono sicuro di quanto accurato avrebbe funzionato. Quindi se ti capita di provarlo fammi sapere i risultati attraverso la sezione commenti.