Le Funzioni digitalWrite, digitalRead, analogWrite e analogRead

Obiettivo: Imparare ad utilizzare le principali funzioni di Arduino



Arduino Porte (Input, Output, Digitali, Analogici)

Teoria:

Le principali funzioni utilizzate da Arduino per comunicare con il mondo esterno sono quattro e si dividono in base alla tipologia di azione:

  • Lettura: utilizzate per acquisire i dati dai differenti sensori (luminosità, temperatura, umidità, etc)
  • Scrittura: utilizzate per comandare i differenti attuatori (motori, buzzer, display, etc)

ed in base alla tipologia di segnale trattato:

  • Digitale: utilizzate per trattare segnali digitali che possono assumere solamente valori logici (i.e., LOW e HIGH)
  • Analogico: utilizzate per trattare segnali analogici con valori compresi tra 0 e 5V.

Nello specifico queste quattro funzioni sono così definite:

Codice:

  • digitalWrite: Funzione utilizzata per comandare attuatori mediante una logica LOW/HIGH come ad esempio motori, led o buzzer. Questa funzione prevede l’impiego di due parametri di input: il PIN (0-13) ed il VALORE (LOW/HIGH)

digitalWrite(pin, valore);



  • analogWrite: Funzione utilizzata per comandare attuatori mediante una logica analogica (valori compresi tra 0V e 5V) come ad esempio motori o led. Questa funzione prevede l’impiego di due parametri di input: il PIN (0-13) ed il VALORE (0-255). Nel caso specifico il valore 0 corrisponde a 0V mentre 255 a 5V. Per tutti gli altri VALORI si può attuare la proporzione lineare. (Ad esempio volendo generare un riferimento di tensione pari a 3Volt il VALORE di input può essere così calcolato: (3/5)*255. E’ importante considerare che i valori di tensione non sono “realmente” analogici ma generati attraverso la tecnica PWM. Inoltre, l’istruzione analogWrite può essere utilizzata solamente su alcuni pin digitali di output: i pin PWM (3,5,6,9,10,11).

analogWrite(pin, valore);



  • digitalRead: Funzione utilizzata per leggere dati da sensori basati su una logica LOW/HIGH come ad esempio i pulsanti. Questa funzione prevede l’impiego di un parametro di input: il PIN (0-13) ed un parametro di output: il VALORE (LOW/HIGH) che viene restituito dalla funzione.

valore= digitalRead(pin);



  • analogRead: Funzione utilizzata per leggere dati da sensori di tipo analogico (valori compresi tra 0V e 5V) come ad esempio fotoresistenze, sensori di temperatura, umidità etc. Questa funzione prevede l’impiego di un parametro di input: il PIN (A0-A5) ed un parametro di output: il VALORE (0-1023). Nel caso specifico il valore 0 corrisponde a 0V mentre 1023 a 5V. Per tutti gli altri VALORI si può attuare la proporzione lineare. (Ad esempio se viene letto il VALORE 512, la tensione di riferimento può essere così calcolata: (512/1023)*5.

valore = analogRead(pin);



Quiz


A che valore di tensione corrisponde l'intero 818 letto attraverso la funzione analogRead

Correct! Wrong!

(818/1023)*4 = 1V

A che valore di tensione corrisponde l'intero 204 letto attraverso la funzione analogRead

Correct! Wrong!

(204/1023)*5 = 1V

A che valore di tensione corrisponde l'intero 511 letto attraverso la funzione analogRead

Correct! Wrong!

(511/1023)*5 = 2.5V

A che valore di tensione corrisponde l'intero 255 generato utilizzando la funzione analogWrite

Correct! Wrong!

(255/255)*5 = 5V

A che valore di tensione corrisponde l'intero 100 generato utilizzando la funzione analogWrite

Correct! Wrong!

(100/255)*5 = 1.96V

La funzione Valore = digitalWrite(11) è corretta?

Correct! Wrong!

La funzione digitalWrite non ha tipi di ritorno

La funzione digitalWrite(11,HIGH) è corretta?

Correct! Wrong!

La funzione analogWrite(11,1023) è corretta?

Correct! Wrong!

Il valore massimo di tensione per la funzione digitalWrite è pari a 255







Controllo di un LED mediante un Potenziometro

Obiettivo: Controllare un LED utilizzando un potenziometro



Pre-Requisiti


Fading led


Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Led
  • 1 Resistenza (100 Ohm)
  • 1 Trimmer (4.7KOhm o similari)

TeoriaIn questo articolo si propone l’utilizzo di un potenziometro per regolare in modo manuale la luminosità di un LED. E’ importante considerare che (come riportato nei pre-requisiti) l’impiego della funzione digitalWrite non permette di modulare l’intensità luminosa del LED. Difatti, attraverso l’utilizzo di questa istruzione digitale, il LED può trovarsi solamente in due stati logici LOW (spento) o HIGH (acceso).
Per raggiungere lo scopo prefissato è pertanto necessario l’utilizzo di una differente funzione denominata: analogWrite. Questa funzione permette infatti di modulare l’intensità luminosa del LED fornendo 256 differenti livelli di luminosità. L’istruzione analogWrite permette infatti di emulare un finto segnale analogico attraverso l’impiego della tecnica PWM (Pulse Width Modulation). Solamente sei PIN (quelli contrassegnati dal simbolo tilde ~) possono essere utilizzati per fornire un segnale “analogico”.

Tuttavia è importante considerare che se l’istruzione analogwrite permette di gestire la luminosità del LED, questa funzione non permette di controllare la posizione del potenziometro essendo il potenziometro un dispositivo di input (dato da leggere). Pertanto per la gestione del potenziometro sarà effettuata utilizzando una differente funzione denominata analogRead. Questa funzione permette infatti di leggere un livello di tensione compreso tra 0 e 5 Volt e mapparlo in un intervallo discreto composto da 1024 livelli (0-1023).

Collegamento Circuitale:

Collegamento Circuitale

Codice:






Fading led

Obiettivo: Realizzazione di un LED con dissolvenza (fading).

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Led
  • 1 Resistenza (100 Ohm)

TeoriaL’utilizzo dell’istruzione digitalWrite non permette di modulare/regolare la luminosità di un LED. Attraverso l’utilizzo di questa istruzione digitale infatti il LED può trovarsi solamente in due stati logici LOW (spento) o HIGH (acceso).
Per raggiungere lo scopo prefissato è pertanto necessario l’utilizzo di una differente funzione denominata: analogWrite. Questa funzione permette infatti di modulare l’intensità luminosa del LED fornendo 256 differenti livelli di luminosità.
L’istruzione analogWrite permette infatti di emulare un finto segnale analogico attraverso l’impiego della tecnica PWM (Pulse Width Modulation). Solamente sei PIN (quelli contrassegnati dal simbolo tilde ~) possono essere utilizzati per fornire un segnale “analogico”.
A titolo di esempio, volendo alimentare un dispositivo con una tensione analogica pari a 3V il valore da utilizzare come parametro della funzione analogWrite può essere così calcolato:

valore = 3/5*255 = 153

dove:

  • Il valore analogico che si vuole produrre è pari a 3V
  • La tensione massima in uscita ad Arduino è pari a 5V
  • Il valore massimo utilizzabile dalla funzione analogWrite è pari a 255

Collegamento Circuitale:

Collegamento Circuitale

Codice:


[crayon-6621cf943afdb516784477/]




Caratteristiche Hardware

Obiettivo: Conoscere le principali caratteristiche Hardware di Arduino

Principali Componenti Hardware

Teoria:

Arduino UNO è una piattaforma HW dotata di Microcontrollore ATMega328P

  1. MCU Microcontrollore ATmega328P. È un microcontrollore a 8 bit, in formato PDIP a 28 pin. L’MCU è dotata di 3 differenti tipologie di memoria: FLASH 32 KB (che includono anche il bootloader e la memoria programma), SRAM 2 KB (usata per memorizzare le variabili e le costanti del software) ed EEPROM 1KB (utilizzata per memorizzare le configurazioni)
  2. Un totale di 14 pin di input/output digitali programmabili, di cui 6 utilizzabili per fornire in uscita segnali modulati PWM. I pin PWM sono identificabili grazie al carattere tilde presente vicino al pin (3,5,6,9,10,11).
  3. Un totale di 6 pin di input analogici 
  4. Oscillatore a frequenza 16 MHz
  5. Jack per alimentazione esterna (5b: Regolatore di tensione)
  6. Connettore ICSP (In Circuit Serial Programmer) per effettuare la programmazione diretta del microcontrollore. 
  7. Pulsante di Reset
  8. Connettore USB utilizzabile sia per alimentare la scheda che per programmare il microcontrollore 
  9. Dispositivo per la comunicazione 16U2: si occupa della conversione dei dati provenienti dall’USB in dati seriali (e viceversa) adatti per il microcontrollore.


Modalità di alimentazione:


  • Alimentazione da pc con cavo usb (corrente max500mA): Se oltre al cavo usb alimentiamo Arduino anche tramite un connettore o dal pin Vin, verrà bypassata automaticamente l’alimentazione da usb e verrà utilizzata quella esterna.
  • Connettore di alimentazione(corrente max800mA): La tensione nel rangetra 7 e 12 volte viene stabilizzata dall’integrato NCP1117
  • Collegamento diretto al PIN Vin: Anche in questo caso la tensione è stabilizzata. Non è presente però il diodo di protezione non invertire la polarità.
  • Collegamento diretto al PIN 5V: Tensione non stabilizzata. PERICOLO!!!