Curso C para Arduino
¿Qué es la entrada/salida analógica?
A diferencia de la señal digital (solo dos valores posibles: encendido o apagado), una señal analógica puede tener múltiples valores dentro de un rango específico (habitualmente entre 0 y 1023 en Arduino para entradas analógicas).
- Entrada analógica: Permite leer valores variables provenientes de sensores.
- Salida analógica (PWM): Permite simular valores variables mediante modulación por ancho de pulso.
Entrada analógica: analogRead()
Arduino convierte señales analógicas en digitales mediante el Conversor Analógico-Digital (ADC). Arduino UNO tiene 6 entradas analógicas etiquetadas de A0 a A5, que devuelven valores desde 0 hasta 1023.
Sintaxis básica:
1int valorSensor = analogRead(pinAnalogico);
Ejemplo práctico - Lectura de un potenciómetro:
1const int pinPot = A0; 2 3void setup() { 4 Serial.begin(9600); 5} 6 7void loop() { 8 int valor = analogRead(pinPot); 9 Serial.print("Valor leído: "); 10 Serial.println(valor); 11 delay(500); 12}
Salida analógica: analogWrite() (PWM)
Arduino no tiene salidas analógicas reales, pero usa PWM (Modulación por Ancho de Pulso) para simularlas. El PWM varía el ciclo de trabajo (tiempo encendido vs apagado) del pin digital, permitiendo regular potencia o intensidad.
- Pines PWM Arduino Uno: 3, 5, 6, 9, 10, 11
- Valores PWM: 0 (apagado) a 255 (máxima potencia)
Sintaxis básica:
1analogWrite(pinPWM, valorPWM);
Ejemplo práctico - Controlar brillo LED con PWM:
1const int pinLED = 9; // pin PWM 2 3void setup() { 4 pinMode(pinLED, OUTPUT); 5} 6 7void loop() { 8 for (int brillo = 0; brillo <= 255; brillo++) { // aumenta brillo 9 analogWrite(pinLED, brillo); 10 delay(10); 11 } 12 for (int brillo = 255; brillo >= 0; brillo--) { // disminuye brillo 13 analogWrite(pinLED, brillo); 14 delay(10); 15 } 16}
Uso de sensores analógicos comunes
Sensor de luz (fotorresistencia LDR):
- Conexión: Divisor de voltaje con resistencia de 10kΩ.
- Aplicación típica: detección del nivel de luz ambiente.
Sensor de temperatura analógico (por ejemplo LM35):
- Conexión directa a entrada analógica.
- Aplicación típica: monitoreo de temperatura.
Ejemplo - Lectura de temperatura con LM35:
1const int pinLM35 = A1; 2 3void setup() { 4 Serial.begin(9600); 5} 6 7void loop() { 8 int valor = analogRead(pinLM35); 9 float voltaje = valor * (5.0 / 1023.0); // convertir a voltios 10 float tempC = voltaje * 100; // LM35: 10mV por ºC 11 Serial.print("Temperatura: "); 12 Serial.print(tempC); 13 Serial.println(" ºC"); 14 delay(1000); 15}