cR_2019_lezione3

by / domenica, 08 dicembre 2019 / Published in Archivio Robotica, Corso Robotica 19-20, Robotica

 

 

LEZIONE n° 3

SENSORI ANALOGICI

 

 

La lezione CORSO DI ROBOTICA del 2019-20 è 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).

schema di principio di un convertitore Digitale/Analogico a 4 bits

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 2019-20 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);

}

/////////////////////////////////////////////////////////////////////

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 2019-20 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

 

(19)

Lascia un commento

TOP