ENTRADES ANALÒGIQUES
![Sensor_Analogic.png](https://static.wixstatic.com/media/82ee8a_d2905e6136ca453695a2eca65b0f774a~mv2.png/v1/crop/x_145,y_28,w_351,h_134/fill/w_150,h_57,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/Sensor_Analogic.png)
![digital.gif](https://static.wixstatic.com/media/82ee8a_f646b1f2b97c484cb2a5128795172e45~mv2.gif)
Els sensors analògics reben una tensió del dispositiu IoT (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).
L'ESP32 té dos convertidors ADC que transformen les entrades analògiques en aproximacions digitals del seu valor.
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
valor ADC =
Tensió Analògica
3.3 V
x 4095
![ESP32-ADC-Pins.png](https://static.wixstatic.com/media/82ee8a_b96f1e58bfd3419cbc478a25df1afc99~mv2.png/v1/crop/x_28,y_0,w_510,h_346/fill/w_398,h_270,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/ESP32-ADC-Pins.png)
Tot i què en teoria l'ESP32 té 15 pins ADC, només m'ha funcionat l'ADC1: els pins 32, 33, 34, 35, 36, 39.
La resta de pins fan que a la consola de Thonny es mostri el missatge: ValueError: invalid Pin for ADC
LLEGIM ELS VALORS D'UN POTENCIÒMETRE
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)
![Pot1.PNG](https://static.wixstatic.com/media/82ee8a_877c8cd1e78f413baee24db56842455b~mv2.png/v1/fill/w_250,h_87,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/Pot1_PNG.png)
Per llegir una entrada analògica cal:
-
Importar la classe ADC, a més de la classe Pin de la llibreria machine
-
Crear un objecte ADC especificant el núm de pin
-
Llegir el valor del senyal analògic amb el mètode .read( )
![ThonnyFons.png](https://static.wixstatic.com/media/82ee8a_539d127ffa284512a8c2937647aa7975~mv2.png/v1/fill/w_961,h_25,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/ThonnyFons.png)
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)