Después de los dos POS anteriores de nuestra programación con Rust-Embebido:
Continuamos con la tercera entrega en la que explicaremos como utilizar las entradas analógicas de nuestro Arduino con Rust, lo primero es conocer los pines ADC de nuestro arduino, que ocupan 5 puertos C en este caso y que como pasaba con las E/S digitales también tiene interrupciones y dos de ellos se utilizan para otras funciones por eso ponemos también una tabla.
El código de ejemplo se encuentra como siempre en github, es un montaje muy sencillo aunque ponemos el esquema y consta de un potenciometro conectado a la entrada analógica 0 y por la consola veremos el valor leído.
Lo normal no es conectar el potenciometro o el sensor que corresponda directamente sino utilizar un divisor de tensión como se explica en el libro «De 0 a 100 con Arduino y ESP32» que nos permitira controlar el voltaje máximo y mínimo que se inyecta en la entrada analógica, en nuestro caso esta claro que va de 0 a +5V.
Un resumen rápido para calcular divisores de tensión, aunque en este ejemplo no lo utilizamos, que lo sacamos del libro seria un montaje como el de la figura y las formulas que aplicaríamos para calcular la intensidad y el voltaje de salida deseado.
R2 sera nuestro sensor (el potenciometro en nuestro caso) ya que es el voltaje de salida y que se conecta al pin del Arduino sera la parte que varié, R1 es la resistencia que pondremos fija y donde conectamos un voltaje de entrada fijo. NOTA nuestro sensor también se podría en el voltaje de entrada en lugar de la masa (R1) y que R2 sea nuestra resistencia fija.
Continuando con nuestro POST diremos que en este caso solo tenemos una función de lectura, como veremos a continuación en la explicación del código, que nos dara valores entre 0 y 1023 que representaran el voltaje entre 0V y +5V.
// Obtenemos los pines disponibles en nuestro arduino, igual que los obteníamos en las E/S digitales
let dp = arduino_hal::Peripherals::take().unwrap();
let pins = arduino_hal::pins!(dp);
// Definición de los pines de entradas análogicas
let mut adc = arduino_hal::Adc::new(dp.ADC, Default::default()); // Obtenemos analogicos
let entrada = pins.a0.into_analog_input(&mut adc); // Definimos entrada como el pin A0 de entrada análogica.
let valor = entrada.analog_read(&mut adc); // Leemos el valor de la entrada definida anteriormente.
Y con esto terminamos este POST, ya nos quedan menos para esta pequeña serie de introducción a la programación de Arduino con el lenguaje Rust.
Siguientes temas:
- Uso de los pines PWM
- Uso de interrupciones externas.
- Timer usando servomotores
- Timer para uso del sonar HC-SR04