Sensore di colore con Arduino: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
spiegazione del codice e descrizione del progetto
codice
Riga 84:
|}
<syntaxhighlight lang="arduino">
#define LED 2
#define LED 2 //definiamo il pin che comanda i 4 LED bianchi del sensore
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define R 11
#define B 9
#define G 10
#define Y 12
#define W 3
#define sensorOut 8
 
</syntaxhighlight>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%.<syntaxhighlight lang="arduino">
void setup() {
Serial.begin(9600);
Line 109 ⟶ 110:
}
</syntaxhighlight>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:
</syntaxhighlight><syntaxhighlight lang="arduino">
 
* Rosso (r): S2 LOW, S3 LOW;
* Verde (g): S2 HIGH, S3 LOW;
* Blue (b): S2 LOW, S3 HIGH;
</syntaxhighlight><syntaxhighlight lang="arduino">
unsigned long r, g, b;
void loop() {
Line 122 ⟶ 128:
digitalWrite(S3, HIGH);
b = pulseIn(sensorOut, LOW);
Serial.print("R=");
</syntaxhighlight><syntaxhighlight lang="arduino">
Serial.print("R=");
Serial.print(r);
Serial.print("\tGT=");
Line 131 ⟶ 135:
Serial.print(b);
</syntaxhighlight>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.<syntaxhighlight lang="arduino">
delay(10010);
if((r <= 336 && r >= 5)&&(g <= 5122 && g >= 20)&&(b <= 4318 && b >= 14)){
Serial.print("RED");
analogWrite(11, 255);
} else if((r <= 36)&&(g <= 45)&&(b <= 36)){
} else if((r <= 20 && r >= 18)&&(g <= 15 && g >= 13)&&(b <= 8 && b >= 6)){
Serial.print("BLUE");
analogWrite(9, 255);
} else if((r <= 35)&&(g <= 45)&&(b <= 40)){
} else if((r <= 367 && r >= 6)&&(g <= 455 && g >= 4)&&(b <= 368 && b >= 7)){
Serial.print("GREEN");
analogWrite(10, 255);
} else {
} else if((r <= 14 && r >= 12)&&(g <= 17 && g >= 15)&&(b <= 8 && b >= 6)){
analogWrite(9, 0);
Serial.print("PURPLE");
analogWrite(10, 0);
analogWrite(11, 0255);
analogWrite(9, 255);
}
} else if((r <= 4 && r >= 3)&&(g <= 7 && g >= 5)&&(b <= 10 && b >= 8)){
Serial.print("YELLOW");
analogWrite(12, 255);
} else if((r <= 354 && r >= 3)&&(g <= 454 && g >= 3)&&(b <= 404 && b >= 3)){
Serial.print("WHITE");
analogWrite(3, 255);
} else if((r <= 9 && r >= 8)&&(g <= 21 && g >= 18)&&(b <= 21 && b >= 19)){
Serial.print("ORANGE");
analogWrite(12, 255);
analogWrite(11, 255);
} else {
analogWrite(9, 0);
analogWrite(10, 0);
analogWrite(11, 0);
analogWrite(3, 0);
analogWrite(12, 0);
}
 
}
</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.
 
<code>long</code> è un tipo di dato che può contenere numeri a 32 bit, con segno.
 
=== 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";
 
=== Programma principale ===
Nel programma principale forniamo ad Arduino tutte le informazioni relative all'esecuzione del programma e tutti i comandi relativi.
 
== Espansioni suggerite ==