Parcheggio automatico con Arduino: differenze tra le versioni

Da Wikiversità, l'apprendimento libero.
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Etichetta: Editor wikitesto 2017
Nessun oggetto della modifica
Riga 11: Riga 11:
{{Risorsa|tipo=laboratorio|materia1=Sistemi automatici per le superiori 2|avanzamento=100%}}
{{Risorsa|tipo=laboratorio|materia1=Sistemi automatici per le superiori 2|avanzamento=100%}}
<!-- Non scrivere sopra questa linea -->
<!-- Non scrivere sopra questa linea -->
Questa risorsa descrive come realizzare un '''bastone intelligente per non vedenti''' provvisto di seminaristica di prossimità per rilevare ostacoli e – in caso – avvertire l'utente con segnali acustici e tattili.
Questa risorsa descrive come realizzare un '''Parcheggio Intelligente''', sensorizzato che gestisce automaticamente l'organizzazione dei posti
== Presentazione del progetto ==
== Presentazione del progetto ==
[[File:Photodiode_spectral_responsivity.png|miniatura|268x268px|grafico dello spettro dei colori del TCS3200]]
[[File:Photodiode_spectral_responsivity.png|miniatura|268x268px|grafico dello spettro dei colori del TCS3200]]

Versione delle 10:01, 8 feb 2022

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
Parcheggio automatico 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 Parcheggio Intelligente, sensorizzato che gestisce automaticamente l'organizzazione dei posti

Presentazione del progetto

grafico dello spettro dei colori del TCS3200

Il progetto volge alla realizzazione di un dispositivo in grado di riconoscere il colore di un oggetto davanti a sé, grazie al sensore di colore TCS 3200, il quale è dotato di 4 LED a luce bianca e basato su un convertitore colore luce-frequenza. Quest'ultimo è composto da 16 fotodiodi con filtri blu, 16 con filtri verdi, 16 con filtri rossi e 16 non filtrati. Quando un oggetto è posto frontalmente al modulo, esso viene illuminato dai 4 LED bianchi e la luce riflessa andrà a colpire i 64 fotodiodi, ottenendo in uscita un'onda quadra con una frequenza direttamente proporzionale all'intensità della luce riflessa. Oltre al sensore, il circuito è composto da 5 LED colorati (blu, rosso, verde, giallo e bianco), che si illuminano in base al colore dell’oggetto.

Schema di montaggio

Componenti utilizzati
Descrizione Tipo
Sensore di colore TCS3200
LED 5
Resistenze
Schema di montaggio del circuito Riconoscitore di colori, realizzato con Fritzing
Schema di montaggio del circuito Riconoscitore di colori, realizzato con Fritzing

Codice

Connessione dei pin

Come prima cosa definiamo i pin ai quali colleghiamo il sensore di colore TCS3200:

S0 e S1 servono per impostare la frequenza di fondoscala, ossia per tarare il grafico dei colori. Abbiamo 4 possibilità di impostazione:

S0 S1 Segnale in uscita
L L //
L H 2%
H L 20%
H H 100%

Con entrambi gli ingressi alti, non viene applicata la scalatura alle frequenze.

S2 e S3 servono per selezionare il tipo di fotodiodi da attivare

S2 S3 fotodiodi attivati
L L Rosso
L H Blu
H L Non filtrati
H H Verde
#define LED 3
#define S0 5
#define S1 4
#define S2 7
#define S3 6
#define B 13
#define R 12
#define G 11
#define Y 10
#define W 9
#define sensorOut 8

Void setup()

Dichiariamo gli OUTPUT e gli INPUT. Impostiamo nel setup sia S0 che S1 come "HIGH", per avere un segnale con frequenza non scalata e per avere una lettura al 100%.

void setup() {
 Serial.begin(9600);
 pinMode(LED, OUTPUT);
 pinMode(S0, OUTPUT);
 pinMode(S1, OUTPUT);
 pinMode(S2, OUTPUT);
 pinMode(S3, OUTPUT);
 pinMode(sensorOut, INPUT);
 
 digitalWrite(S0, HIGH);
 digitalWrite(S1, HIGH);
}

Void loop()

Impostiamo le tre variabili r, g, b, in cui andiamo a salvare i tempi di lettura. Per misurare l'onda quadra in uscita, invece di misurare la frequenza, teniamo conto del tempo e della lunghezza in cui il segnale di uscita è alto. Quindi imposto i pin S2 e S3, di volta in volta, per leggere un colore:

  • Rosso (r): S2 LOW, S3 LOW;
  • Verde (g): S2 HIGH, S3 LOW;
  • Blue (b): S2 LOW, S3 HIGH;

Sottoponiamo al sensore dei colori campioni (rosso, verde, blu...) e vediamo i valori delle variabili, che vengono registrati sul monitor seriale. Impostiamo quindi con delle "if{}" e delle "else {}" i valori delle variabili per riconoscere ogni variazione di colore.

unsigned long r, g, b;
void loop() { 
 digitalWrite(LED, HIGH);
 digitalWrite(S2, LOW);
 digitalWrite(S3, LOW);
 r = pulseIn(sensorOut, LOW);
 digitalWrite(S2, HIGH);
 digitalWrite(S3, HIGH);
 g = pulseIn(sensorOut, LOW);
 digitalWrite(S2, LOW);
 digitalWrite(S3, HIGH);
 b = pulseIn(sensorOut, LOW);
 Serial.print("R=");
 Serial.print(r);
 Serial.print("\tGT=");
 Serial.print(g);
 Serial.print("\tGB=");
 Serial.print(b);
 delay(10);
  if((r <= 6 && r >= 5)&&(g <= 22 && g >= 20)&&(b <= 18 && b >= 14)){
    Serial.print("RED");
    analogWrite(R, 255);
  } else if((r <= 20 && r >= 18)&&(g <= 15 && g >= 13)&&(b <= 8 && b >= 6)){
    Serial.print("BLUE");
    analogWrite(B, 255);
  } else if((r <= 7 && r >= 6)&&(g <= 5 && g >= 4)&&(b <= 8 && b >= 7)){
    Serial.print("GREEN");
    analogWrite(G, H);
  } else if((r <= 14 && r >= 12)&&(g <= 17 && g >= 15)&&(b <= 8 && b >= 6)){
    Serial.print("PURPLE");
    analogWrite(B, H);
    analogWrite(R, H);
  } else if((r <= 4 && r >= 3)&&(g <= 7 && g >= 5)&&(b <= 10 && b >= 8)){
    Serial.print("YELLOW");
    analogWrite(Y, H);
  } else if((r <= 4 && r >= 3)&&(g <= 4 && g >= 3)&&(b <= 4 && b >= 3)){
    Serial.print("WHITE");
    analogWrite(W, H);
  } else if((r <= 9 && r >= 8)&&(g <= 21 && g >= 18)&&(b <= 21 && b >= 19)){
    Serial.print("ORANGE");
    analogWrite(Y, H);
    analogWrite(R, H);
  } else {
    analogWrite(R, 0);
    analogWrite(B, 0);
    analogWrite(G, 0);
    analogWrite(Y, 0);
    analogWrite(W, 0);
  }

}

Espansioni suggerite

Aggiunta di:

  • contatore di oggetti in base al colore (con display a sette segmenti)
  • utilizzo di un nastro trasportatore che fa scorrere gli oggetti direttamente sotto al modulo.