Scrivere un programma per la scheda Arduino che mostri l’utilizzo del serial monitor per controllare lo stato di una periferica.
Possiamo prendere l’esempio del LED lampeggiante che rappresenta anche il circuito più semplice:

 

  •  LED collegato dal pin 13 a terra.
  • Resistenza da 220 Ω collegata tra il LED e la massa.

 

poi modifichiamo il codice:

void setup(){
   pinMode(13, OUTPUT);
   Serial.begin(9600);
}
void loop(){
   digitalWrite(13, HIGH);//accende il LED
   delay(1000);//aspetta 1s
   Serial.println(digitalRead(13));//monitor
   digitalWrite(13, LOW);//spegne il LED
   delay(1000);//aspetta 1s
   Serial.println(digitalRead(13));//monitor
}

per poter usare il serial monitor è indispensabile che nella funzione setup() sia presente l’istruzione

Serial.begin(9600);

che permette di intraprendere la comunicazione tra la scheda Arduino e l’esterno tramite la porta seriale.
Nel corpo del programma, cioè all’interno della funzione loop() che viene eseguita per 16.000 volte al secondo deve essere inserita l’istruzione

Serial.println(digitalRead(13));

che stampa in output lo stato del pin interessato. L’output visualizzato attraverso il simulatore di Tinkercad è il seguente:

come si vede quando il LED è acceso lo stato del pin è 1 (HIGH) quando il led è spento lo stato del pin è 0 (LOW).

 

Realizzare un circuito che abbia come input analogico una fotoresistenza ed un output analogico costituito da un led luminoso.

L’intensità della luminosità del led deve poter essere regolata dalla fotoresistenza.
La luminosità del led deve essere inversamente proporzionale alla luminosità presente nell’ambiente.
Possiamo impostare un circuito come quello qui schematizzato.

 

  • LED collegato tra il pin 9 e la massa.
  • Resistenza da 220 Ω collegata tra il LED e la massa.
  • Fotoresistenza alimentata a 5V collegata all’ingresso analogico A0.
  • Resistenza da 4.7 kΩ collegata tra la foto resistenza e la massa..

Il pin analogico A0 legge i valori della fotoresistenza, tenendo conto che 0 → ambiente buio 1023 → ambiente completamente illuminato

Questi valori devono essere convertiti in un range 0÷255, ma al contrario; quindi noi useremo la funzione di conversione map proprio al contrario

lux = map(trimmer, 26, 923, 255, 0);

questo permette di avere il massimo della luminosità del LED quando nell’ambiente è buio, mentre quando la luminosità dell’ambiente sarà al suo massimo il LED sarà completamente spento. Per regolare la l’illuminazione dell’ambiente nel simulatore bisogna cliccare sulla foto resistenza e regolare il cursore che appare sotto di essa.

 

Il programma stampa sul monitor seriale anche i valori dell’ingresso analogico A0 della variabile trimmer e dell’uscità costituita dall’intensità luminosa del LED tramite la varibile lux.

int trimmer = 0;
int lux = 0;
void setup(){
   pinMode(A0, INPUT);
   pinMode(9, OUTPUT);
   Serial.begin(9600);
}
void loop(){
   // legge il valore analogico in ingresso
   trimmer = analogRead(A0);
   // lo converte in un output analogico di uscita
   lux = map(trimmer, 26, 923, 255, 0);
   //applica il valore di uscita al led
   analogWrite(9, lux);

   Serial.print(trimmer);Serial.print(“ - “);
   Serial.println(lux);
   //aspetta 2 millisecondi prima del ciclo successivo per
   //permettere il convertitore analogico-digitale di
  //reimpostarsi dopo l’ultima lettura: delay(2);

//pausa 2ms

}

All’avvio il valore della luminosità dell’ambiente è 0 dunque il LED dovrebbe trovarsi al massimo della sua luminosità.

Tramite l’utilizzo di un potenziometro e della scheda Arduino pilotare la velocità di un motore a corrente continua.

Per far funzionare il motore occorre solo un potenziometro, collegando i due alla scheda come segue:

  • Motore DC collegato al pin 5.
  • Potenziometro collegato all’ingresso analogico A0. 

L’ingresso analogico A0 può variare tra 0÷1023.
L’uscita digitale del pin 5 può variare solo tra 0÷255; occorrerà la funzione.

map(valore, basso1,alto1,basso2,alto2)

per convertire proporzionalmente i valori; il codice è semplice e breve. 

int x= 0;
int y = 0;
void setup(){
pinMode(5, OUTPUT);
}
void loop(){
x= analogRead(A0);
y = map(x, 0, 1023, 0, 255);
analogWrite(5, y);
}

La variabile x memorizza l’ingresso analogico 0÷1023.
La variabile y memorizza l’uscita digitale 0÷255.

Una volta assemblato, il circuito, potrebbe avere il comportamento seguente.

 

Costruire un circuito dotato di un input analogico costituito da un potenziometro ed un output digitale, costituito da tre led luminosi (verde, giallo, rosso) che si accendono alternativamente a secondo del valore dell’input analogico.

Collegheremo i LED ed il potenziometro nel seguente modo:

  • 3 LED collegato tra ai pin 13, 11 e 9.
  • 3 resistenze da 220 Ω da collegare tra i LED e i pin.
  • Potenziometro collegato all’ingresso analogico A0.

L’ingresso analogico può variare tra 0÷1023.
Il valore acquisito dall’ingresso A0 viene memorizzato nella variabile val. Stabiliamo (arbitrariamente) che se:

val≥682 si accende solo il LED rosso collegato al pin 13

341≤val<682 si accende solo il LED giallo collegato al pin 11

val<341 si accende solo il LED verde collegato al pin 9

il codice del programma: è il seguente:

int val = 0;
void setup() {
  pinMode(A0, INPUT);
  pinMode(13, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}
void loop() {
   //legge il valore analogico in ingresso:
  val = analogRead(A0);
if(val>=682){
digitalWrite(13,HIGH); digitalWrite(11,LOW); digitalWrite(9,LOW);
}else if(val>=341 && val<682){
digitalWrite(13,LOW); digitalWrite(11,HIGH); 
digitalWrite(9,LOW);
}else{
digitalWrite(13,LOW); digitalWrite(11,LOW); digitalWrite(9,HIGH);
}//fine if-else-if
Serial.println(val); delay(2);
}

Il valore della variabile analogica acquisita è inviato al monitor seriale.

 

Collegare la scheda Arduino in modo che abbia un input digitale costituito da due pulsanti ed un output digitale costituito da un led.
Quando viene premuto un pulsante il led si deve accendere, se invece, viene premuto l’altro pulsante il led si deve spegnere. 

Il circuito richiesto potrebbe avere il seguente aspetto:

 

  • 2 pulsanti collegati ai pin 8 e 9.
  • Resistenza da 270 Ω.
  • Un LED collegato al pin di uscita 5.
  • Una bread-board mini. 

Premendo il pulsante sul pin 8 il led si accende; se si continua a premere lo stesso pulsante più volte il led rimane acceso.
Premendo il pulsante sul pin 9 il led si spegne.
Il codice è molto breve e facilmente leggibile: 

void setup() {
   pinMode(5, OUTPUT);
   pinMode(9, INPUT_PULLUP);
   pinMode(8, INPUT_PULLUP);
}
void loop() {
  if (digitalRead(9) == LOW)digitalWrite(5, HIGH);
  if (digitalRead(8) == LOW)digitalWrite(5, LOW);
}

Nella funzione setup() si nota la direttiva INPUT_PULLUP per i collegamenti dei due pulsanti, questa istruzione imposta di default gli ingressi dei due pin al valore HIGH.
Nel programma principale ci sono poi, solo due istruzioni: la prima dice che se si preme il pulsante del led 9 il led si accende.

digitalWrite(5, HIGH);

la seconda dice che se si preme il pulsante del led 8 il led si spegne.

digitalWrite(5, LOW);

Il comportamento del circuito può essere verificato dal seguente modulo: