CR18_lez03 sensori analogici
LEZIONE n° 3
SENSORI ANALOGICI
La lezione CORSO DI ROBOTICA del 2018-19 è sui sensori e sulla loro gestione. Premettiamo che per analizzare i risultati utilizzeremo il monitor o dei LED.
I sensori che vediamo in questa lezione sono i sensori di LUCE che sono dei sensori di tipo ANALOGICO.
La tensione fornita da sensore analogico quando viene collegato all’opportuno pin di Arduino viene convertita internamente da un convertitore a 10 bits, di conseguenza il suo valore sarà compreso tra 0 e 1023 (ovviamente il valore della tensione sul pin è positivo).
Memorizzando in valore letto in una variabile di tipo intero potremo successivamente decidere l’azione da intraprendere (ad esempio accendere un led quando il valore supera la soglia).
Una operazione che va eseguita solo all’inizio della costruzione del robot è la TARATURA (una volta raggiunto il valore ottimale conviene non modificarla più).
Nel nostro sensore, vedasi il circuito, avremo inserito un potenziometro in serie che ci permette di variare la tensione letta.
Mediante la taratura possiamo trovare la massima dinamica dei segnali provenienti dai sensori (avremo maggiore facilità ad elaborare il segnale) e di poter impostare una unica soglia quando utilizziamo più sensori (tutti i sensori troveranno la luce in modo quasi uguale).
Per provare a fare le modifiche proposte copiare il listato (colorato in rosso) ed incollarlo in un editor di solo testo [Notepad ad esempio]
listato programma esempio numero 7:
//////////////// CORSO ROBOT 2018-19 LEZIONE n° — 3 — ESERCIZIO n° 7
int pin_light = A0;
int val_pin_light;
int val_pin_light_m;
int TIME_LIGHT = 500;
val_pin_light = analogRead(pin_light);
val_pin_light_m = map(val_pin_light,0,500,0,1000);
Serial.print(” READ LIGHT VALUE = ” );
Serial.print(val_pin_light);
Serial.print(” READ & CONDITIONED LIGHT VALUE = ” );
Serial.print(val_pin_light_m);
delay(TIME_LIGHT);
Serial.print(“\n”);
/////////////////////////////////////////////////////////////////////
Modifiche proposte:
Rallentare il processo per leggere meglio il monitor
Condizionare in modo diverso il valore letto
SUGGERIMENTI
Aggiungere una grandezza per rallentare il processo
Provare i cambiamenti
listato programma esempio numero 8:
/////////////////////////////////////////////////////////////////////
//////////////// CORSO ROBOT 2018-19 LEZIONE n° — 3 — ESERCIZIO n° 8
val_pin_light = analogRead(pin_light);
val_pin_light_m = map(val_pin_light,0,500,0,1000);
Serial.print(” READ LIGHT VALUE = ” );
Serial.print(val_pin_light);
Serial.print(” READ & CONDITIONED LIGHT VALUE = ” );
Serial.print(val_pin_light_m);
delay(TIME_LIGHT);
Serial.print(“\n”);
if (val_pin_light_m >= TRESHOULD_LUX) // FIND LIGHT
{
Serial.print(“\n”);
Serial.print(” FIND LIGHT ” );
Serial.print(“\n”);
delay(TIME_MIN);
delay(TIME_WAIT);
digitalWrite(ledRGB_B, HIGH); // turn LED on:
delay(tempoLed);
digitalWrite(ledRGB_B, LOW); // turn LED off:
delay(tempoLed);
}
break;
}
/////////////////////////////////////////////////////////////////////
Modifiche proposte:
Trovare la soglia a 20 cm di distanza dal sensore
SUGGERIMENTI
Leggere sul monitor il valore opportuno ed impostarlo come soglia
Provare i cambiamenti
listato programma esempio numero 9 (di questo listato vengono omesse alcune parti per stimolare la creatività):
//////////////// CORSO ROBOT 2018-19 LEZIONE n° — 3 — ESERCIZIO n° 9
val_pin_light = analogRead(pin_light);
Serial.print(” READ LIGHT VALUE = ” );
Serial.print(val_pin_light);
Serial.print(” CONDITIONED VALUE = ” );
Serial.print(val_pin_light_m);
delay(TIME_LIGHT);
if ((val_pin_light_m < TRESHOULD_LUX2)&&(val_pin_light_m > TRESHOULD_LUX3)) // FIND LIGHT
{
delay(TIME_MIN);
digitalWrite(ledY, HIGH); // turn LED on:
digitalWrite(ledG1, LOW); // turn LED off:
digitalWrite(ledR1, LOW); // turn LED off:
}
if (val_pin_light_m >= TRESHOULD_LUX1) // FIND LIGHT
{
delay(TIME_MIN);
digitalWrite(ledY, HIGH); // turn LED on:
digitalWrite(ledG1, HIGH); // turn LED off:
digitalWrite(ledR1, HIGH); // turn LED off:
Serial.print(” = FIND LIGHT =” );
digitalWrite(ledRGB_R, HIGH); // turn LED on:
delay(tempoLed);
digitalWrite(ledRGB_R, LOW); // turn LED off:
delay(tempoLed);
}
Serial.print(“\n”);
////////////////////////////////////////////////////////////////////
Modifiche proposte:
Fissare la soglia con un potenziometro
SUGGERIMENTI
Individuare e leggere il potenziometro
Provare i cambiamenti
di seguito le slide della lezione
(31)
Articolo in Evidenza
Le categorie
- .Dicono di NOI
- Album fotografici Francesco
- Album Fotografici Iduesarchiaponi
- Album Fotografici Paolo
- Alta Fotografia
- Altro
- Antichi eserciti ed armi
- Archeologia
- Archeologia1
- Archeologia2
- Archivio Robotica
- Circuiti per Robotica
- Città Fantasma
- Collaboratori
- Corso Robotica 19-20
- Didattica
- Didattica a distanza
- Esempi di Robotica
- Eventi
- Fotografia
- Francesco
- Francesco e Paolo
- Gallerie Fotografiche Francesco
- Gare di Robotica
- Gli Svaghi nel mondo Antico
- I Cibi Romani
- Il blog
- L'Italia che non ti aspetti
- Laboratorio Robotica
- Le sette Meraviglie del mondo
- Le Sette meraviglie del Mondo moderne
- Lezioni On-line
- Link Utili
- Miti e Leggende
- Mitologia Norena
- Notizie
- Paolo
- Per non dimenticare
- Popoli e Civiltà
- Robotica
- Roma Nascosta
- Scrittori e Poeti Antichi
- Scuola
- Si dice… Perchè
- Soluzioni didattica a distanza
- Storie e Personaggi Romani
- Teatro
- Viaggiando …..
- Viaggiare
- Video