L'obiettivo dell'articolo è mostrare come sia possibile realizzare un Safety Tutor System, un rilevatore di velocità media, utilizzando Arduino UNO ed una coppia di sensori ad ultrasuoni HC-SR04. Il sistema è in grado di rilevare la velocità media di un veicolo, un’ottima soluzione per stimare il rapporto velocità-Arduino PWM quando non si hanno a disposizione encoder ottici. La collezione di dati raccolta è elaborata utilizzando un approccio di tipo statico. L’obiettivo è realizzare un look-up table, da integrare all'interno dell’algoritmo di controllo, per la movimentazione del veicolo e conseguentemente la realizzazione di sistemi più complessi. Dunque, uno strumento di analisi indispensabile per applicazioni successive. In sintesi, saranno descritte le componenti e le interconnessioni del sistema, lo sketch per Arduino e l’analisi statica per la sintesi dello stimatore. Per concludere, saranno mostrati i risultati dell’analisi di regressione condotta per associare ad ogni valore di PWM di Arduino un valore di velocità media del veicolo.
Premessa allo studio del sistema
Lo studio condotto e descritto all'interno di questo articolo si basa su un'ipotesi stringente ma necessaria per il funzionamento del robot di terra: la look-up table ottenuta costituisce una buona approssimazione di velocità-PWM (Pulse Width Modulation, si veda la specifica sezione) solo se le batterie sono completamente cariche e per bassi valori di scarica delle stesse. Difatti, durante l'intero esperimento, le batterie sono state sostituite ogni 5 cicli di misura (significato chiarito nel seguito). Tale valore è stato ottenuto empiricamente, osservando il degradamento improvviso delle misure per cicli successivi. Inoltre, affinché sia possibile riutilizzare tale approssimazione, è necessario che la forza di attrito tra ruote e terra rimanga entro le condizioni operative dell'esperimento condotto. Questo, però, non costituisce un vincolo stringente (come nel primo caso) poiché un controllo sufficientemente robusto è in grado di compensarlo, in modo piuttosto semplice. Per dettagli aggiuntivi su come realizzare un sistema di controllo sufficientemente robusto, si rimanda il lettore ad approfondimenti su testi/manuali dedicati.
Safety Tutor System
Per la realizzazione del Safety Tutor System ci si è ispirati al tanto temuto sistema Tutor di Autostrade per l'Italia: strumento che rileva la velocità media tenuta da un veicolo (di qualsiasi tipo) in un tratto di autostrada (di solito compreso tra i 10 ed i 25 chilometri). Quando il veicolo attraversa il portale del Tutor, i sensori a terra (normalmente 4 per ogni striscia di asfalto) riconoscono il tipo di veicolo ed attivano la fotocamera posta nella parte superiore del portale. Attraverso un sistema per l'elaborazione delle immagini, estrae il numero di targa e calcola, banalmente, la velocità media lungo i due attraversamenti. Si tratta di un sistema complesso, costoso, ma che garantisce mediamente ottimi risultati per il controllo delle velocità garantendo così la sicurezza sulle strade (e facendo anche un po' di cassa).
Nel caso in esame, date le ridotte dimensioni del veicolo, la volontà di realizzare un progetto che fosse quanto il più semplice possibile, si è pensato di sfruttare solo il concetto di Tutor sostituendo la parte di elaborazione delle immagini con il rilevamento del passaggio del veicolo da parte di una coppia di sensori ad ultrasuoni utilizzati come una sorta di relè: misurano il cambio improvviso di misura della distanza, di almeno un'ordine di grandezza, tra i due attraversamenti. In Figura 1 è mostrata una foto del sistema in cui sono stati evidenziati i due sensori ad ultrasuoni (sensor A e sensor B) oltre che la scheda Arduino UNO, utilizzata più come un DSP (Digital Signal Processor) che un vero e proprio microcontrollore (approssimazione valida per il caso in case, ai fini della stima condotta).
Al fine di misurare la velocità media, i due sensori ad ultrasuoni sono stati posizionati alla distanza di un metro l'uno dall'altro. Tale valore, per nulla casuale, è stato scelto al fine di minimizzare la deriva che caratterizza il veicolo in modalità skid sterring utilizzato per l'esperimento: robot di piccole dimensioni, a struttura rigida, privo di ruote sterzanti. Un veicolo di questo tipo è composto tipicamente da quattro ruote, due a due meccanicamente bloccate ed in sincronia su ogni lato, con il lato sinistro che può essere guidato in maniera del tutto indipendente dal lato destro. Facendo ruotare la coppia di ruote destre e sinistre a diversa velocità, è possibile, provocando uno scivolamento della macchina sul terreno, ruotarne l'orientamento. Macchine di questo tipo, oltre che nell'ambito robotico, trovano tipicamente impiego nel settore edilizio, ad esempio le macchine per il movimento terra.
In Figura 2 è riportato lo schema circuitale realizzato utilizzando Fritzing (software open source per facilitare lo sviluppo di progetto DIY, Do It Yourself). In nero e rosso sono rappresentati rispettivamente alimentazione e massa; in giallo/arancione il pin utilizzato per l'echo, mentre in verde/celeste - spiegati nell'apposita sottosezione al fine di mantenere viva l'attenzione del lettore sul funzionamento del sistema - quello per il trigger. Data la distanza fisica tra i due sensori è stato necessario utilizzare due breadboard, come si evince anche dalla Figura 1. L'alimentazione, come del resto l'acquisizione dati, è avvenuta per mezzo di un computer host collegato via USB al microcontrollore.
Per garantire la consistenza delle misure, dovute al transitorio dei motori DC (Direct Current, Corrente Continua), è stata fatta raggiungere al veicolo la velocità di regime (facendolo partire a meno di una decina di centimentri prima di incontrare il sensore), relativa allo specifico valore di PWM, prima di misurare l'intervallo di tempo che intercorre nell'attraversamento del punto A e B (Figura 1).
Banalmente, per misurare la velocità media del veicolo tra i due punti di misura, associata ad uno specifico valore di PWM, è stato calcolato il rapporto tra distanza (s, 1 metro) e tempo (telapsed):
Gli intervalli dei valori della PWM (0 - 255) sono stati divisi in undici classi di misura non uniformi (100, 105, 110, 115, 125, 142, 175, 200, 225, 255) al fine di scegliere il campione nella maniera più significativa. Non sono stati considerati valori della PWM inferiori a 100 poiché per valori inferiori il veicolo non riesce a vincere le forze di inerzia, quelle di primo distacco, non modificando così la sua posizione iniziale. Sono state scelte classi di misura più piccola nell'intervallo 100 ÷ 150 al fine di ottenere una migliore risoluzione dall'analisi di regressione. Da un punto di vista tecnico sono stati effettuati cinquanta cicli di misura, dove con ciclo di misura si è inteso l’insieme delle velocità misurate per ogni valore di PWM. In questo modo la scarica delle batterie influenza la misura di velocità per ogni valore di PWM. Dopo aver acquisito i dati, le misure sono state elaborate utilizzando un approccio di tipo statistico (sezione successiva). Le piccole dimensioni della varianza hanno reso sufficienti solo cinquanta cicli di misura per eseguire questo tipo di analisi.
Pulse With Modulation in Arduino
La modulazione di larghezza di impulso, in inglese Pulse Width Modulation (PWM), in elettronica e telecomunicazioni è un tipo di modulazione digitale che permette di ottenere una tensione media variabile dipendente dal rapporto tra la durata dell'impulso positivo e di quello negativo (duty cycle, Figura 3). Allo stesso modo è fondamentalmente utilizzato per protocolli di comunicazione in cui l'informazione è codificata sotto forma di durata nel tempo di ciascun impulso. Grazie ai moderni microcontrollori (Arduino è tra questi) è possibile attivare o inattivare un interruttore ad alta frequenza e, allo stesso modo, rilevare lo stato ed il periodo di un impulso.
La durata di ciascun impulso può essere espressa in rapporto al periodo tra due impulsi successivi, implicando il concetto di ciclo di lavoro. Un ciclo di lavoro utile pari a 0% indica un impulso di durata nulla, in pratica assenza di segnale, mentre un valore del 100% indica che l'impulso termina nel momento in cui ha inizio il successivo. Un segnale di clock è a volte utilizzato per determinare la posizione degli impulsi, ma spesso non è necessario in quanto al segnale viene aggiunto un valore minimo che garantisce la presenza di un piccolo impulso anche per il valore zero.
La modulazione a larghezza di impulso può essere utilizzata per variare la velocità di un motore elettrico in corrente continua (DC) e per variare la luminosità delle lampadine. Come si può intuire, con un duty cycle pari a zero la potenza trasferita è nulla, mentre al 100% la potenza corrisponde al valore massimo trasferito nel caso non sia presente il circuito di modulazione. Ogni valore intermedio determina una corrispondente fornitura di potenza.
Arduino UNO offre la possibilità di usare ai pin 3, 5, 6, 9, 10, 11 l’istruzione analogWrite() per generare tale segnale. L'istruzione consente, appunto, di far lampeggiare un LED o governare un motore elettrico mentre lo sketch esegue altre istruzioni. La sintassi della funzione è alquanto banale: analogWrite(pin, valore). Pin è il piedino su cui inviamo il segnale, per Arduino UNO i pin 3, 5, 6, 9, 10, 11; valore: è il duty cycle compreso tra 0 (sempre off) e 255 (sempre on). La funzione non restituisce nessun valore.
Sensore ad ultrasuoni HC-SR04
Il sensore ad ultrasuoni HC-SR04 (Figura 4) segue lo stesso funzionamento di un sonar per determinare la distanza: utilizza la propagazione del suono (sott'acqua in genere) per la navigazione, la comunicazione o per rilevare la presenza e la posizione di imbarcazioni. Il sonar (attivo) opera secondo il principio del radar e permette la localizzazione dei corpi sommersi tramite la rivelazione degli echi relativi a impulsi sonori o ultrasonori emessi per mezzo di un trasduttore piezoelettrico o magnetostrittivo. Il trasduttore emette un segnale ad alta energia acustica, o ping (fino a 200 dB); gli oggetti presenti nell'area riflettono il suono e l'onda riflessa (echo) viene raccolta dai sensori del sottomarino. Il tempo trascorso tra il momento dell'emissione del segnale acustico e quello in cui l'onda riflessa di questo raggiunge l'emettitore, fornisce la distanza dell'obiettivo con estrema precisione.
Il sensore offre un eccellente intervallo per la misura della distanza priva di contatto nell'intervallo da 2 cm a 400 cm. Il modulo include un trasmettitore ad ultrasuoni, un ricevitore ed un circuito di controllo. Nel seguito vengono descritti i principi di funzionamento:
- per emettere l'onda è necessario mantenere alto per almeno 10 μs il pin di trigger (verde in Figura 2);
- il modulo automaticamente invia onde sonore ad una frequenza di 40KHz e rileva l'eventuale segnale di ritorno (segnalato attraverso il pin di echo);
- se vi è un segnale di ritorno, il pin di echo assume un valore alto fornendo indirettamente una misura di distanza. Infatti, la routine per la gestione del sensore è in grado di calcolare la distanza conoscendo la velocità di propagazione del suono nel mezzo (l'aria) dividendola per l'intervallo di tempo intercorso tra l'invio e la ricezione (del segnale).
La libreria NewPing, qui il link per il download, consente di gestire automaticamente l'intero processo (oltre ad una serie di funzionalità, come la gestione del ping quando sono connessi al microcontrollore più sensori) restituendo in uscita direttamente la distanza misurata. È possibile ottenere lo stesso risultato collegando la scheda all'ambiente di calcolo numerico MATLAB, ma in questo caso è necessario realizzare una S-Function (scritta in codice C) ad hoc per gestirne il comportamento. [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3201 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.