CURSO PROVINCIAL: “INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO” ROBÓTICA EDUCATIVA Entradas Analógicas. Manuel Hidalgo Díaz Enero 2011 ROBÓTICA EDUCATIVA Entradas analógicas. El controlador Atmega de Arduino lleva incluido un conversor analógico-digital (A/D) de 6 canales. Tiene una resolución de 10 bits, retornando enteros desde 0 a 1023. El uso principal de estos pines (ANALOG IN 0,…5) es para la lectura de sensores analógicos, estos pines tienen también toda la funcionalidad de los pines de entrada-salida digital (14-19). Los pines de entradas analógicas no son necesarios Veamos un ejemplo (SensorPotenciometro) de lectura configurarlos en el setup(). analógica del valor de un potenciómetro y lo vemos en el monitor del entorno Arduino cada segundo. Conectamos 3 cables a la placa Arduino. El primero desde masa a uno de los pines extremos del potenciómetro. El segundo, desde 5 INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO 2/10 ROBÓTICA EDUCATIVA voltios al otro pin extremo del potenciómetro. El tercero desde el pin analógico 0 al pin medio del potenciómetro. Al girar el eje del potenciómetro, cambiamos el valor de la resistencia entre los pines de los extremos y el pin central del potenciómetro. Esto cambia la "cercanía" relativa del pin central a 5 Voltios y a masa, ofreciendo diferentes valores analógicos de entrada. Cuando giramos el eje a tope en un sentido, llegarán 0 voltios al pin central, y leeremos 0. Cuando giramos el eje a tope, pero en el otro sentido, llegarán 5 voltios al pin central y leeremos 1023. Entre medias, analogRead() retorna un número entre 0 y 1023 que es proporcional al valor del voltaje aplicado al pin central. INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO 3/10 ROBÓTICA EDUCATIVA Código // SensorPotenciometro // Lectura de un sensor analogico (potenciometro) // connectedo a analog in 0 int sensorPot=0; int val; void setup(){ Serial.begin(9600); } void loop(){ int val=analogRead(sensorPot); Serial.println(val); delay(1000); } Ejemplo (ControlTiempo)de lectura analógica del valor de un potenciómetro que controla el tiempo de encendido de un led. El valor analógico leído del potenciómetro controlará la frecuencia con la que parpadeará un LED Código /* ControlTiempo. Controla el tiempo de parpadeo por la entrada analógica 0*/ int sensorPin = 0; // selecciona el pin de entrada para el potenciómetro int ledPin = 13; // selecciona el pin para el LED int sensorValue = 0; // variable para almacenar el valor que ofrece el sensor void setup() { // declara el ledPin como salida (OUTPUT) pinMode(ledPin, OUTPUT); } void loop() { sensorValue = analogRead(sensorPin); // lee el valor del sensor: digitalWrite(ledPin, HIGH); // enciende el ledPin // detiene el programa durante <sensorValue> milisegundos: delay(sensorValue); digitalWrite(ledPin, LOW); // apaga el ledPin : // detiene el programa durante <sensorValue> milisegundos: delay(sensorValue); } INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO 4/10 ROBÓTICA EDUCATIVA PRÁCTICA. SENSOR LDR. Descripción: Un LDR es una resistencia variable, que varia su valor dependiendo de la cantidad de luz que incide sobre su superficie. Cuanta mas intensidad de luz incide en la superficie de la LDR menor será su resistencia y cuanto menos luz incide mayor será la resistencia. Suelen ser utilizados como sensores de luz ambiental o como una fotocélula que activa un determinado proceso en ausencia o presencia de luz. Un sensor de luz se compone de una LDR como parte de un divisor de tensión resistivo. Ejemplo: Vout=((Rbottom/(Rbottom+Rtop))*Vin Si la LDR es usada como Rtop, como en el primer circuito, da tensión alta (HIGH) en la salida cuando la LDR está en la luz,y una tensión baja (LOW) en la salida cuando la LDR está en la sombra. La acción del divisor de tensión es inversa cuando la LDR es usada como Rbottom en lugar de Rtop, como en el segundo circuito. INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO 5/10 ROBÓTICA EDUCATIVA El circuito da tensión Baja (LOW) en la salida cuando la LDR está en la luz, y una tensión alta (HIGH) en la salida cuando la LDR está en la sombra. El circuito divisor de tensión dará una tensión de la salida que cambia con la iluminación, de forma inversamente proporcional a la cantidad de luz que reciba (sensor de oscuridad). Listado de componentes: 1 LDR 1 Resistencia de 1kΩ Un par de cables El esquema del circuito puede quedar de la siguiente forma: El circuito consta de un divisor de tensión formado por la LDR y la resistencia de 1kΩ. INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO 6/10 ROBÓTICA EDUCATIVA Código // SensorLDR // Lectura de un sensor analogico (LDR) // connectedo a analog in 0 int sensorLDR = 3; int val; void setup(){ Serial.begin(9600); } void loop(){ int val=analogRead(sensorLDR); Serial.print("Valor del sensor LDR: "); Serial.println(val); Serial.println(); delay(1000); } INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO 7/10 ROBÓTICA EDUCATIVA Código: /* ControlSensorLDR * -----------------* * Enciende y apaga un LED (light emitting diode) conectado al pin digital #13. * La cantidad de tiempo que el LED estará encendido y apagado depende del * valor obtenido de analogRead(). * La salida del sensor de luz o divisor de tensión, está conectado a la entrada del pin 3, * por lo que a más luz, el parpadeo del LED será menor y a menos luz el parpadeo * del LED mayor (sensor de oscuridad) */ int LightPin = 3; // selecciona el pin de entrada para el sensor de luz int ledPin = 13; // selecciona el pin para el LED int val = 0; // variable para almacenar el valor capturado desde el sensor void setup() { pinMode(ledPin, OUTPUT); // declara el ledPin en modo salida } void loop() { val = analogRead(LightPin); // lee el valor del sensor LDR digitalWrite(ledPin, HIGH); // enciende el LED delay(val); // detiene el programa por un tiempo digitalWrite(ledPin, LOW); // apaga el LED delay(val); // detiene el programa por un tiempo } INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO 8/10 ROBÓTICA EDUCATIVA CONTROL DE UN SERVOMOTOR Descripción Usa un potenciómetro para controlar el movimiento de giro de un eje de un servomotor. Circuito Los servomotores tienes tres cables: alimentación, tierra y señal. El cable de alimentación normalmente es rojo, y debe ser conectado al pin 5V de la placa Arduino. El cable de tierra debe ser conectado al pin de tierra de la placa Arduino. El pin de señal es típicamente amarillo o naranja y se conecta al pin 9 de la placa Arduino. El potenciómetro debe ser conectado de manera que los dos pines exteriores estén conectado a alimentación (+5V) y tierra, y su pin del medio conectado a la entrada analógica 0 en el Arduino. INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO 9/10 ROBÓTICA EDUCATIVA Código //ControlAnalogicoServo // Controlando la posición de un servo usando un potenciómetro (resistencia variable) // Por Michal Rinott <http://people.interaction-ivrea.it/m.rinott> #include <Servo.h> Servo myservo; // Crea un objeto servo para controlar el servomotor int potpin = 0; // Pin analógico usado para conectar el potenciómetro int val; // variable para leer el valor del pin analógico void setup() { myservo.attach(9); // asocia el servo en pin 9 al objeto servo } void loop() { val = analogRead(potpin); // lee el valor del potenciómetro (valor entre 0 y 1023) val = map(val, 0, 1023, 0, 179); // escala el valor para usarlo con el servo (valor entre 0 y 180) myservo.write(val); // fija la posición del servo de acuerdo al valor escalado delay(15); // espera a que el servo se posicione } INTRODUCCIÓN A LA ROBÓTICA CON ARDUINO 10/10