oggi propongo un progetto dalla semplicità disarmante sviluppato con Arduino con l'intenzione più che altro di mostrare il funzionamento di un sensore di prossimità ad ultrasuoni, questo aggeggio qua per intenderci:
Denominato con la siglia SFR04 e acquistabile su robot-italy.com alla modica di cifra di 23,40 euro.
Come
Questo sensore capovolto si presenta così:
Come è possibile notare presenta 5 fori, dove si trovano i suoi altrettanti 5 pin.
In ordine da sinistra, guardando l'immagine in spoiler, troviamo
-GND
-buco da lasciare vuoto
-Trigger
-Echo
-5V
Con questo sensore si possono fare tante cose, la prima che mi è venuta in mente è un semplicissimo impianto d'allarme che suona quando una porta (o perché no una finestra) viene aperta per garantire una masturbazione serena senza sorprese.
Oltre a questo sensore, userò anche un Piezo, un bagaglino che suona in base al segnale che gli si invia. Il nome è buffissimo ma fa il suo sporco lavoro:
Anche questo dovrebbe essere assurdamente facilmente reperibile presso robot-italy.com.
Ok con questi componenti e qualche jumper andiamo a montare il tutto su Arduino, ho fatto uno schema con Fritzing così è chiaro:
Purtroppo non ho trovato l'immagine del sensore di prossimità in Fritzing percui l'ho rappresentato con una becera nota, però mi sembra chiaro dai.
In foto si presenta cosi:
Ok, ora per dare vita al tutto velocemente sfrutterò del codice che si trova su questa pagina:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | /* * Autore: Corrado Ignoti * * Descrizione: Interfaccia un SFR05 con Arduino * * Maggiori informazioni su: http://www.corradoignoti.it */ const int numOfReadings = 10; // numero di letture int readings[numOfReadings]; int arrayIndex = 0; // contatore per ciclare nell'array int total = 0; int averageDistance = 0; // distanza media // inizializzo i PIN per collegare la scheda SFR05 int echoPin = 2; // echo (digital 2) int initPin = 3; // trigger (digital 3) unsigned long pulseTime = 0; unsigned long distance = 0; // distanza in cm //setup void setup() { pinMode(initPin, OUTPUT); pinMode(echoPin, INPUT); // inizializza un array delle letture for (int thisReading = 0; thisReading < numOfReadings; thisReading++) { readings[thisReading] = 0; } Serial.begin(9600); //inizializza la seriale } // loop principale void loop() { //manda un impulso di ampiezza 10 us digitalWrite(initPin, HIGH); delayMicroseconds(10); digitalWrite(initPin, LOW); pulseTime = pulseIn(echoPin, HIGH); // Aspetta l'eco di risposta distance = pulseTime/58; // Distance = tempo impulso / 58 per calcolare i [cm] di distanza. //Per diminuire l'errore crea un array con le letture e calcola la media total= total - readings[arrayIndex]; readings[arrayIndex] = distance; total= total + readings[arrayIndex]; arrayIndex = arrayIndex + 1; if (arrayIndex >= numOfReadings) { arrayIndex = 0; } averageDistance = total / numOfReadings; //Media dei valori delle distanze acquisite //Scrive il valore della distanza media sulla seriale Serial.print ("Distanza (media): "); Serial.println(averageDistance, DEC); delay(100); } |
Che altro non fa se non prendere un campione di dati e generarne la media in modo da avere un risultato abbastanza preciso.
Ora noi semplicemente aggiungiamo questa porzione di codice in fondo:
1 2 3 4 5 6 7 8 | if(averageDistance<40){ for(int i = 0; i< 5; i++){ tone(8,500,500); delay(100); tone(8,1000,500); delay(100); } } |
Che semplicemente dice al Piezo di suonare (comando tone() ) nel caso un oggetto si trovi entro 40 cm.
Ho scelto 40 cm completamente a caso.
Carichiamo il tutto su Arduino, e questo è il risultato:
Chiaramente così com'è è inutile, però applichiamo il tutto di fronte a una porta, con un Piezo molto più potente, e allora le cose cominciano ad avere il loro perché.
Stay Metal
Beto
Nessun commento:
Posta un commento