Utente:Hackerino3/Bastone per non vedenti con Arduino: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Etichette: Modifica da mobile Modifica da web per mobile
mNessun oggetto della modifica
Etichetta: Editor wikitesto 2017
Riga 14:
 
== Presentazione del progetto ==
 
 
Il '''bastone intelligente per non vedenti''' attraverso un sensore di prossimità, avverte l'utente quando questo si avvicina a un ostacolo, tramite un segnale acustico; inoltre, tramite un motore, viene generata una vibrazione, che guida l'utente a individuare l'ostacolo e – di conseguenza – a superarlo con facilità.
 
Questo progetto semplifica la circolazione dei soggetti con problematiche legate alla vista.
== Schema di montaggio ==
[[File:HC SR04 Ultrasonic sensor 1480322 3 4 HDR Enhancer.jpg|alt=Sensore a ultrasuoni HC SR04|miniatura|Sensore a ultrasuoni HC SR04]]
[[File:Electromagnetic buzzer 04.jpg|miniatura|Cicalina piezo-elettrica]]
 
[[File:Types of DC Motor.jpg|miniatura|Motore DC usato per la vibrazione]]
== Schema di montaggio ==
{| class="wikitable"
|+Componenti utilizzati
Line 43 ⟶ 42:
|}
[[File:Arduino_Smart_Stick.svg|centro|600x600px]]
 
 
 
 
 
 
 
 
== Codice sorgente ==
=== Connessione dei pin ===
Per il codice usa questo<syntaxhighlight lang="arduino" line="1" start="1">
Come prima cosa definiamo i pin ai quali colleghiamo il buzzer (o cicalino piezoelettrico), il sensore ad ultrasuoni (HC-SR04) ed il motore DC.
Per il codice usa questo<syntaxhighlight lang="arduino" line="1" start="1">
#define tP 7 //TriggerPort
#define eP 8 //EchoPort
#define B 6 //Buzzer
#define M 5 //Motore
</syntaxhighlight>
=== Parametri del codice ===
In seguito vengono definite la distanza massima di lettura del sensore <code>distanzaMax</code>, la distanza minima del buzzer (se si ha una distanza minore il buzzer farà un suono continuo) <code>dMinb</code>, la distanza massima del buzzer (a una distanza maggiore il buzzer non suona) <code>dMaxB</code>, la velocità di trasmissione del monitor seriale (espresso in baud) <code>baud</code>, infine la distanza che massima del motore DC <code>dM</code>.
 
Tutte le distanze sono espresse in centimetri.
 
<syntaxhighlight lang="arduino" line="1" start="6">
#define distanzaMax 90
#define dMinB 10 5
#define dMaxB 55
#define baud 9600
#define dM 20
</syntaxhighlight>
 
<code>long</code> è un tipo di dato che può contenere numeri a 32 bit, con segno.
 
<syntaxhighlight lang="arduino" line="1" start="12">
long time;
long durata;
long r;
</syntaxhighlight>
 
=== Input e Output ===
* <code>tP</code> è il pin "Trigger": dice al sensore quando inviare un segnale;
* <code>eP</code> è il pin "Echo" che riceve il ritorno del segnale inviato dal sensore (ammesso che vi sia);
* <code>B</code> è il pin "Buzzer";
* <code>M</code> è il pin "Motore";
<syntaxhighlight lang="arduino" line="1" start="17">
void setup() {
pinMode( tP, OUTPUT );
Line 71 ⟶ 96:
Serial.println( "+-----------------------+");
}
</syntaxhighlight>
 
=== Programma principale ===
Nel programma principale forniamo ad Arduino tutte le informazioni relative all'esecuzione del programma e tutti i comandi relativi.
<syntaxhighlight lang="arduino" line="1" start="28">
void loop() {
//invio segnale
digitalWrite( tP, LOW );
digitalWrite( tP, HIGH );
delayMicroseconds( 10 );
digitalWrite( tP, LOW );
//recezione segnale
durata = pulseIn( eP, HIGH );
//tempo trascorso tra l'invio e la recezione del segnale diviso per 2
r = 0.0343 * durata / 2;
//per calcolare la distanza
r = 0.0343 * durata / 2;
 
Serial.print( "Distanza: " );
Line 84 ⟶ 116:
else { Serial.print( r ); Serial.println( " cm" );
}
//se la distanza è maggiore di dMinB e minore di dMaxB il buzzer suona
if( r > dMinB && r <= dMaxB){
delay(r*10);//più l'oggetto si avvicina più il buzzer suona velocemente
delay(r*10);
digitalWrite(B, HIGH);
delay(r*10);
}
//se la distanza dell'oggetto è minore di dM il motore comincerà a girare
if( r <= dM){
digitalWrite(M, HIGH);
//delay(1000);
}
//se la distanza dell'oggetto è minore di dMinB il buzzer comincerà a fare
//un suono continuo
if( r <= dMinB){
digitalWrite(B, HIGH);
delay(1000);
}
//quando il sensore non percepisce più nessuno oggetto il buzzer smette
//di suonare e il motore di vibrare
digitalWrite(M, LOW);
digitalWrite(B, LOW);
Line 103 ⟶ 141:
</syntaxhighlight>
 
== Espansioni suggerite ==
Tutto quello che non è stato fatto ma sarebbe possibile fare
 
== Espansioni suggerite ==
Aggiunta di:
*Ruota per il movimento facilitato;
*Sensore di prossimità a 180°;
*funzione S.O.T.F.(stick on the floor) che permette al non vedente di ritrovare il bastone tramite un segnale acustico in caso di caduta e difficoltà a ritrovarlo;
*Sensore di profondità;
 
[[Categoria:Arduino]]