Bastone per non vedenti con Arduino

Da Wikiversità, l'apprendimento libero.
Questa risorsa è stata scritta dagli studenti dell'Istituto ITIS "Enrico Mattei" di Urbino, della classe 4A/EN, Omiccioli Matteo, Marzi Filippo, Sasha Fasolo Massoli, Daniel Gostoli e Nicolas Mangani nell'a.s. 2021/2022, all'interno del corso di Sistemi automatici per le superiori 2.

Per favore, prima di apportare modifiche, attendi sino alla fine dell'anno scolastico (termina il 30 giugno 2022) oppure contatta il docente di riferimento Giacomo Alessandroni nel caso venissero rilevati contenuti non in linea con le linee guida della comunità.

Se leggi questo avviso ad anno scolastico concluso puoi rimuoverlo.

laboratorio
laboratorio
Bastone per non vedenti con Arduino
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 2
Avanzamento Avanzamento: laboratorio completa al 100%

Questa risorsa descrive come realizzare un bastone intelligente per non vedenti provvisto di sensoristica di prossimità per rilevare ostacoli e – in caso – avvertire l'utente con segnali acustici e tattili.

Presentazione del progetto[modifica]

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[modifica]

Sensore a ultrasuoni HC SR04
Sensore a ultrasuoni HC SR04
Cicalina piezo-elettrica
Motore DC usato per la vibrazione
Componenti utilizzati
Descrizione Tipo
Active buzzer
Ultrasonic Distance Sensor HC-SR04
Pulsante 1
Motore DC
Resistenza

Codice sorgente[modifica]

Connessione dei pin[modifica]

Come prima cosa definiamo i pin ai quali colleghiamo il buzzer (o cicalino piezoelettrico), il sensore ad ultrasuoni (HC-SR04) ed il motore DC.

#define tP              7  //TriggerPort
#define eP              8  //EchoPort
#define B               6  //Buzzer
#define M               5  //Motore

Parametri del codice[modifica]

In seguito vengono definite la distanza massima di lettura del sensore distanzaMax, la distanza minima del buzzer (se si ha una distanza minore il buzzer farà un suono continuo) dMinb, la distanza massima del buzzer (a una distanza maggiore il buzzer non suona) dMaxB, la velocità di trasmissione del monitor seriale (espresso in baud) baud, infine la distanza che massima del motore DC dM.

Tutte le distanze sono espresse in centimetri.

#define distanzaMax    90
#define dMinB           5
#define dMaxB          55
#define baud         9600
#define dM             20

long è un tipo di dato che può contenere numeri a 32 bit, con segno.

long time;
long durata;
long r;

Input e Output[modifica]

  • tP è il pin "Trigger": dice al sensore quando inviare un segnale;
  • eP è il pin "Echo" che riceve il ritorno del segnale inviato dal sensore (ammesso che vi sia);
  • B è il pin "Buzzer";
  • M è il pin "Motore";
void setup() {
  pinMode( tP, OUTPUT );
  pinMode( eP, INPUT );
  pinMode( B,  OUTPUT );
  pinMode( M,  OUTPUT);
  Serial.begin( baud );
  Serial.println( "+-----------------------+");
  Serial.println( "|Bastone per non vedenti|");
  Serial.println( "+-----------------------+");
}

Programma principale[modifica]

Nel programma principale forniamo ad Arduino tutte le informazioni relative all'esecuzione del programma e tutti i comandi relativi.

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
  //per calcolare la distanza
  r = 0.0343 * durata / 2; 
  
  Serial.print( "Distanza: " );
  if( r > distanzaMax )
    Serial.println( "Fuori Portata");
  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
  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);
  delay(10);
}

Espansioni suggerite[modifica]

Aggiunta di:

  • Ruota per il movimento facilitato;
  • Sensore di prossimità a 180°;
  • funzione SotF (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à;