Els sensors analògics reben una tensió del dispositiu (3.3V en el cas de l'ESP32), i retornen una tensió proporcional al valor de la magnitud que mesuren (temperatura, velocitat, ...) pel pin a que estan connectats. Aquest senyal és analògic, i pren diferents valors en el temps (entre 0 i 3.3V), a diferència del senyal digital que és binari: 0V (0) - 3.3V (1).
Però els microcontroladors són digitals, només funcionen amb 0 i 1. Per tant els valors dels sensors analògics s'han de convertir en senyals digitals abans de poder processar-los. Aixó es diu conversió analògic digital (ADC).
Els pins ADC de l'ESP32 tenen una resolució de 12 bits. Aquests pins llegeixen tensió d'entrada entre 0 i 3,3 V, i després retornen un valor proporcional entre 0 (correspon a 0V) i 4095 (correspon a 3.3V).
2 ^ 12 = 4096 -> Esmicula els 3.3V en 4096 parts. Per tant la seva apreciació és de 0,8 mV
L'ESP32 té dos convertidors ADC que transformen les entrades analògiques en aproximacions digitals del seu valor.
Tot i què en teoria l'ESP32 té 15 pins ADC, només podem utilitzar l'ADC1: els pins 32, 33, 34, 35, 36, 39 (l'ADC2 és utilitzat pel controlador Wi-Fi). Veure diagrama de pins de l'ESP32 👉
La resta de pins fan que a la consola de Thonny es mostri el missatge: ValueError: invalid Pin for ADC
El potenciòmetre és un comandament analògic. En girar el seu piu modifiquem el valor de la seva resistència i per tant, el de la tensió d'entrada pel pin a que està connectat (recordeu Ohm: V = I·R)
L'exemple utilitza un potenciòmetre connectat al pin 32 (i un LED connectat al pin 13)
PAUTES DE PROGRAMACIÓ
Per llegir una entrada analògica cal:
Importar la classe ADC, a més de la classe Pin del mòdul machine.
Crear un objecte ADC, especificant el número de pin.
Llegir el valor del senyal analògic amb el mètode read()
from machine import Pin, ADC # importa les classes Pin i ADC de la llibreria machine
from time import sleep # importa la classe sleep de la llibreria time per poder definir pauses
sensor = ADC(Pin(32)) # crea l'objecte ADC que he anomenat sensor al pin 32
while True:
print (sensor.read()) # mostra la lectura del senyal al pin del sensor
sleep (0.01) # pausa de 0.01 s (100 ms)
SEGUIM
Amb sensors analògics
també podem ...
Fem la nostra lampareta més intel·ligent i sostenible amb un sensor de llum analògic per tal que només es pugui encendre si no hi ha prou llum ambiental.