Entrada analogica

Anuncio
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
Descargar