Esta práctica consistió en realizar un sistema capaz de medir la velocidad de una canica, para poder elaborar este sistema se utilizaron sensores de luz, leds, arduino, displays y algunos otras herramientas. Para poder medir la velocidad de la canica la hicimos rodar por un tubo, colocamos dos sensores de luz en los extremos para que se detectara en qué momento se obstruía la luz en ellos, se contó el tiempo que llevo corriendo el sistema, con los datos obtenido que fueron tiempo y distancia se pudo calcularla velocidad, y de ahí se imprimieron en tres displays conectados en cascadas.
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
DISEÑO DE UN DETECTOR DE VELOCIDAD CON ARDUINO
1. Universidad Autónoma de Baja California 25/08/2014
1
VELOCIDAD DE UNA CANICA
Marcos Marcos Fernando
fmarcos@uabc.edu.mx
RESUMEN:Esta práctica consistió en realizar un
sistema capaz de medir la velocidad de una canica,
para poder elaborar este sistema se utilizaron
sensores de luz, leds, arduino, displays y algunos
otras herramientas. Para poder medir la velocidad
de la canica la hicimos rodar por un tubo,
colocamos dos sensores de luz en los extremos
para que se detectara en qué momento se obstruía
la luz en ellos, se contó el tiempo que llevo
corriendo el sistema, con los datos obtenido que
fueron tiempo y distancia se pudo calcularla
velocidad, y de ahí se imprimieron en tres displays
conectados en cascadas.
1 INTRODUCCIÓN
El desarrollo de sistemas automáticos se ha
tornado aún más sencillo con el uso de
microcontroladores ya que la cantidad de funciones
y aplicaciones que se les puede dar son en verdad
extensas, se puede simplemente jugar con un led
(Blink) hasta hacer sistemas más complejos como
una mano robótica, un carrito, un cuadricoptero
pero de hecho esto también se vuelve más sencillo
con el uso de complementos que se adaptan de
manera sencilla al microcontrolador,se puede decir
que los limites en los usos y/o aplicaciones de los
micros están en nuestra imaginación.
2 OBJETIVO
La práctica consiste en utilizar tres indicadores de
siete segmentos los cuales mostrarán la velocidad
de una canica que baja sobre una pequeña
pendiente, en la pendiente se encuentran
colocados dos sensores los cuales permiten medir
el tiempo en que la canica pasa se un punto A a un
punto B. Los indicadores se deben encontrar en
cero y una vez que la canica pasa por el sensor del
punto B se debe mostrar la velocidad en
centímetros por segundo.La velocidad se muestra
por tres segundos y después los indicadores se
regresan a cero.Una de las características del
circuito es que los indicadores de siete segmentos
se deben de encontrar conectados en paralelo, en
esta ocasión no se permite utilizar decodificadores
de siete segmentos para manejar los indicadores,
asícomo plataformas de desarrollo de Arduino que
tienen mayor número de salidas.
3 TEORÍA
Arduino es una herramienta utilizada para que
los ordenadores puedan controlar el mundo físico y
no solo esto también sentirlo.Es una plataforma de
desarrollo de computación física de código abierto,
basada en una placa con un sencillo micro
controlador y un entorno de desarrollo para crear
software para la placa.
Arduino se puede utilizar para crear objetos
interactivos,leyendo datos de una gran variedad de
interruptores y sensores y controlar multitud de
tipos de motores, luces, entre muchos más
actuadores físicos. Los proyectos de arduino
pueden ser autónomos o comunicarse con un
programa que se ejecute en tu ordenador. La placa
puede ser montada por el usuario o comprarla lista
para usar, El software utilizado para la
programación de esta plataforma es gratis.
El lenguaje de programación de arduino es
muy sencillo,de echo es similar a los lenguajes de
programación de C++, Netbeans, entre otros, por
esto mismo es fácil de utilizar. El software arduino
es multiplataforma debido a que funciona con
sistemas operativos como lo es Windows,
Macintosh OSX y Linux.
¿Qué distingue a Arduino de otros
microcontroladores?
La filosofía open source -código abierto- que
lo sustenta. Tanto el modo en que se ensambla la
placa -hardware- como elcódigo fuente del
programa Arduino -software- son de acceso
público. Esto quiere decir que cualquiera de
nosotros que usarlo y/o mejorarlo pueda hacerlo.
4 DESARROLLO
Para el desarrollo de esta práctica es necesario
contar con el siguiente material y equipo:
- Micro Arduino
- Jumpers
- 2 leds
- 2 Fotorresistencias
- Cables
- Pinzas de corte
- 3Displays
- 2 Tobos
- Segueta
- 2 Resistencias de 10kΩ
- 2 Resistencias de 220Ω
Procedimiento:
2. Universidad Autónoma de Baja California 25/08/2014
2
Se elabora la base por donde correrá la canica,
para ello se cortaron dos tubos,uno más grande
que el otro.
Cortados los dos tubos, se pegan para poder
pegar un led en la parte superior y una
fotorresistencia en la parte inferior en ambos
extremos del tubo, estos se colocan 45 cm de
separación.
Ahora se arma todo el circuito, se colocan los
displays,las fotorresistencias, los leds y todo se
conecta al Arduino.
Ahora se prosigue realizando la programación en Arduino.
void setup() {
Serial.begin(9600);
DDRD=B11111110;
pinMode(A0,OUTPUT);//Activa/Desactiva 1er Display(Unidades)
pinMode(A1,OUTPUT);//Activa/Desactiva 2do Display(Punto)
pinMode(A2,OUTPUT);//Activa/Desactiva 3er Display(Decimales)
pinMode(A3,INPUT);//Lee el valor del 1er Sensor
pinMode(A4,INPUT);//Lee el valor del 2do Sensor
pinMode(13,OUTPUT);//Activa/Desactiva segmenti "a" de todos los Displays
pinMode(12,OUTPUT);//Activa/Desactiva punto del punto del 2do Display
pinMode(11,OUTPUT);//LED 1 del sensor 1
pinMode(10,OUTPUT);//LED 2 del sensor 2
digitalWrite(11,HIGH);//Mantiene el LED1 encendido por siempre
digitalWrite(10,HIGH);//Mantiene el LED2 encendido por siempre
}
int entrada1=0,entrada2=0,entrada3=0,entradainicio=0,vint=0,num1i=0,num2i=0,tiempodisplay=0;
charvchar[3],num1c[2],num2c[2];
String vstring;
int luz1=0,luz2=0;
float time1=0,time2=0,time3=0,velocidad=0;
voidloop() {
millis();
if(millis()>1000){ //Con esta condicion evito que opere el programa al instante
luz1=analogRead(A3);//998
luz2=analogRead(A4);//780
Serial.print(luz1);Serial.print(" "); Serial.print(luz2);
Serial.println("n");
3. Universidad Autónoma de Baja California 25/08/2014
3
//Etapa 1: Capturando tiempos en que se capta la diferencia de luz en los sensores
if(entradainicio==0){
if(luz1<998){
time1=millis();
entrada1=1; //Habilito la 1era de las dos condiciones para poder calcular la velocidad
}
if(luz2<780){
time2=millis();
entrada2=1;//Habilito la 2da de las dos condiciones para poder calcular la velocidad
}
}
//Etapa 2: Calculando la velocidad y transformadola a cadena para poder separar los numeros
if(entrada1==1&&entrada2==1){
entradainicio=1;//Evito que se capture alguna diferencia de luz en los sensores antes de que se mues tra la
1era prueba
time3=(time2-time1)/1000L;
velocidad=4.5/time3;
vint=velocidad;
vstring=String(vint);
vstring.toCharArray(vchar,3);
if(vint<10){//Si la velocidad es menos que 1.
num1c[0]=vchar[0];//Igualando el 1er caracter de la cadena vchar a otra cadena
num1i=atoi(num1c);//Convierte un array o caracter en numero
entrada3=1;//Habilito que se despliegen los numeros en los displays
entrada1=0;
entrada2=0;
}
if(vint>9){ //Si la velocidad es mayor o igual a 1.
num1c[0]=vchar[0];//Igualando el 1er caracter de la cadena vchar a otra cadena
num1i=atoi(num1c);//Convierte un array o caracter en numero
num2c[0]=vchar[1];//Igualando el 1er caracter de la cadena vchar a otra cadena
num2i=atoi(num2c);//Convierte un array o caracter en numero
entrada3=1;//Habilito que se despliegen los numeros en los displays
entrada1=0;
entrada2=0;
}
}
//Etapa 3: Despliego la velocidad en los displays.
if(entrada3==1){
if(tiempodisplay<3000){//Con esta condicionpermino que la velocidad se mantenga por 3 seg. en los
displays
if(vint<10){
analogWrite(A0,0);//ON 1er Display para unidades
analogWrite(A1,225);//OFF 2do Display punto(marcado en el Display como un guion
analogWrite(A2,225);//OFF 3er Display para decimales
digitalWrite(13,HIGH);
digitalWrite(12,LOW);
PORTD=B01111110;//Imprimiendo numero Cero en el 1er Display(Activado por ceros)
delay(10);
analogWrite(A0,225);//OFF 1er Display para unidades
analogWrite(A1,0);//ON 2do Display punto(marcado en el Display como un guion
analogWrite(A2,225);//OFF 3er Display para decimales
digitalWrite(13,LOW);
digitalWrite(12,HIGH);
PORTD=B00000000;//Imprimiendo Guion(usado como punto) en el 2do Display
delay(10);
analogWrite(A0,225);//OFF 1er Display para unidades
analogWrite(A1,225);//OFF 2do Display punto(marcado en el Display como un guion
analogWrite(A2,0);//ON 3er Display para decimales
digitalWrite(12,LOW);
numero1();
delay(10);
4. Universidad Autónoma de Baja California 25/08/2014
4
tiempodisplay=tiempodisplay+30;
}
if(vint>9){
analogWrite(A0,0);//ON 1er Display para unidades
analogWrite(A1,225);//OFF 2do Display punto(marcado en el Display como un guion
analogWrite(A2,225);//OFF 3er Display para decimales
digitalWrite(13,LOW);//Apaga el segmento "a" de los displays
numero1();
delay(10);
analogWrite(A0,225);//ON 1er Display para unidades
analogWrite(A1,0);//OFF 2do Display punto(marcado en el Display como un guion
analogWrite(A2,225);//OFF 3er Display para decimales
digitalWrite(13,LOW);
digitalWrite(12,HIGH);//Mantiene el punto de la velocidad encendid
PORTD=B00000000;//Imprimiendo Guion(usado como punto) en el 2do Display
delay(10);
analogWrite(A0,225);//ON 1er Display para unidades
analogWrite(A1,225);//OFF 2do Display punto(marcado en el Display como un guion
analogWrite(A2,0);//OFF 3er Display para decimales
digitalWrite(12,LOW);//Mantiene el punto apagado
numero2();
delay(10);
tiempodisplay=tiempodisplay+30;
}
if(tiempodisplay>2999){//Con esta condicionpermido que se borre todo de los displays pasados 3 seg. de
haber mostrado algo
PORTD=B00000000;
digitalWrite(13,LOW);
digitalWrite(12,LOW);
entradainicio=0;//Habilito la lectura de luz en los sensores, para poder iniciar todo el proceso devuelta.
entrada3=0;//Deshabilito que cualquier numero se despliege en los displays.
tiempodisplay=0;//Evito que los displays se queden apagados por siempre.
luz1=1010;
luz2=810;
}
}
}
}
}
///////////////////////////Funciones Numero//////////////////////////
void numero1(){
switch(num1i){
case 0:
digitalWrite(13,HIGH);
PORTD=B01111110;
break;
case 1:
PORTD=B00001100;
break;
case 2:
digitalWrite(13,HIGH);
PORTD=B10110110;
break;
case 3:
digitalWrite(13,HIGH);
PORTD=B10011110;
break;
case 4:
PORTD=B11001100;
break;
case 5:
digitalWrite(13,HIGH);
5. Universidad Autónoma de Baja California 25/08/2014
5
PORTD=B11011010;
break;
case 6:
digitalWrite(13,HIGH);
PORTD=B11111010;
break;
case 7:
digitalWrite(13,HIGH);
PORTD=B00001110;
break;
case 8:
digitalWrite(13,HIGH);
PORTD=B11111110;
break;
case 9:
digitalWrite(13,HIGH);
PORTD=B11011110;
break;
}
}
void numero2(){
switch(num2i){
case 0:
digitalWrite(13,HIGH);
PORTD=B01111110;
break;
case 1:
PORTD=B00001100;
break;
case 2:
digitalWrite(13,HIGH);
PORTD=B10110110;
break;
case 3:
digitalWrite(13,HIGH);
PORTD=B10011110;
break;
case 4:
PORTD=B11001100;
break;
case 5:
digitalWrite(13,HIGH);
PORTD=B11011010;
break;
case 6:
digitalWrite(13,HIGH);
PORTD=B11111010;
break;
case 7:
digitalWrite(13,HIGH);
PORTD=B00001110;
break;
case 8:
digitalWrite(13,HIGH);
PORTD=B11111110;
break;
case 9:
digitalWrite(13,HIGH);
PORTD=B11011110;
break;
}
}
6. Universidad Autónoma de Baja California 25/08/2014
6
El esquema de todo el circuito se puede apreciar en la siguiente figura.
El sistema finalizado se muestra en la figura siguiente.
5 CONCLUCION
El desarrollo de esta práctica en verdad se me
hizo extenso, porque para poder realizarlo
tuvimos que realizar una serie de pruebas con
las fotorresistencias para que la variación fuera
lo másmínimo posible, la practica la pudimos
finalizar aunque con una detallitos, no supimos
cómo evitar que la fotorresistencia variara.
7. Universidad Autónoma de Baja California 25/08/2014
7
La primera prueba o medición de velocidad salía
perfectamente, pero cuando queríamos realizar
enseguida la segunda prueba surgían errores
debido a que los valores de las fotorresistencias
variaban y esto provocaba mediciones erróneas
y por lo tanto se realizaban errores en los
cálculos. (Marcos Marcos Fernando)
6 REFERENCIAS
[1]http://platea.pntic.mec.es/~lmarti2/arduino/introar
du/index.htm