Archivos Mensuales: junio 2013

Sigue Luz

 Vehículo que avanza hacia donde haya más luz

Este proyecto corresponde a la construcción de un vehículo autónomo  seguidor de luz. Su tarea es encontrar un punto de luz dentro de un ángulo de detección de las Foto-resistencias y girar hacia tal fuente de luz.

El funcionamiento del este robot es muy sencillo, para que el robot pueda detectar la luz utilizamos unos sensores LDR (Resistencia dependiente de la luz), que varía su valor de la resistencia dependiendo de la cantidad de luz que incide sobre él. Realizamos un divisor de tensión con el LDR y comparamos en cual de los dos sensores incide más luz, establecemos un umbral de comparación y si se sobrepasa giramos en e sentido que haya más luz, si no se supera el umbral diferencial entre los dos sensores avanzamos.

Continuamente estamos tomando medidas de los sensores, comparándolos y tomando decisiones de sentido de giro o avance.

Esquema Eléctrico:

Coche_Sigue_LuzEsquema Práctico

Sigue_Luz_bbCódigo del Programa:

codigo_Sigue_luz

Código fuente:

Coche_Seguidor_de_Luz.ino

Fotos

vista1

LDR vista0 vista2

 

Ficha del Proyecto:

Coche_Sigue_Luz_Ficha_12

Vídeo resumen:

Anuncios

Interrupciones

Las interrupciones son un método del que disponen Arduino para hacer notar al procesador la aparición de alguna circunstancia que requiera su intervención. De este modo, el dispositivos que ha realizado la interrupción pueden provocar que el procesador deje por el momento la tarea que estaba realizando y atienda la interrupción, una vez atendida, seguirá con su labor anterior. Las interrupciones son útiles para hacer que las cosas que sucedan automáticamente puedan ser atendidas de inmediato sin necesidad de ir consultando regularmente el estado de ese suceso, estas puedan ayudar a resolver problemas de temporización y son buenas para leer un encoder rotacionales, monitorizando la entrada del usuario, sin perder nunca un pulso.

attachInterrupt(interrupcion, funcion, modo)

interrupcion: El número de la interrupción (int):

  •  Las número 0 (en el pin digital 2) y la 1 (en el pin digital 3).
  •  La Arduino Mega tiene otras cuatro: Las número 2 (pin 21), 3 (pin 20), 4 (pin 19) y 5 (pin 18).

funcion: La función a la que invocar cuando la interrupción tiene lugar; esta función no debe tener parámetros ni devolver nada

modo: Define cuando la interrupción debe ser disparada. Hay cuatro constantes predefinidas como valores válidos:

  • LOW para disparar la interrupción en cualquier momento que el pin se encuentre a valor bajo (LOW).
  • CHANGE para disparar la interrupción en cualquier momento que el pin cambie de valor.
  • RISING para disparar la interrupción cuando el pin pase de valor alto (HIGH) a bajo (LOW).
  • FALLING para cuando el pin cambie de valor alto (HIGH) a bajo (LOW)

Se debe tener en cuenta lo siguiente:

  • Dentro de la función enlazada, la función delay() no funciona
  • El valor devuelto por la función millis() no se incrementará.
  • Los datos serie recibidos en el transcurso de esta interrupción pueden perderse.
  • No deberías declarar como volátil cualquier variable que modifiques dentro de la función.

Debido a que el registro de almacenamiento puede ser temporalmente impreciso si es modificado por áreas diferentes a las del hilo principal, en Arduino se agrega la palabra clave volatile, a la variable que se va a utilizar dentro de la función invocada, con ello el compilador usa la RAM en vez de un registro de almacenamiento.

detachInterrupt(interrupt)

interrupt: Apaga la interrupción a invalidar (0 o 1).

interrupts()

Activa las interrupciones (después de haberlas desactivado con noInterrupts().

Algunas funciones no funcionarán correctamente mientras las interrupciones estén desactivadas y la comunicación entrante puede ser ignorada.

noInterrupts()

Desactiva las interrupciones (pueden reactivarse usando interrupts().

 Las interrupciones permiten que las operaciones importantes se realicen de forma transparente y están activadas por defecto.

Vehículo controlado por Interrupciones

Esquema Eléctrico:

 

Circuito_Coche

Esquema Práctico

Coche2_2

Código del Programa:

Codigo

Código fuente:

Coche_Interrupciones.ino

Fotos

Encoder realizado con un papel pegado en la cara interna de la rueda

Rueda

Vista del CNY70

Sensor

Vista del acoplamiento rueda – encoder – CNY70

Rueda-Sensor

Ficha del Proyecto:

Coche_Ficha_11

Vídeo resumen: