Tabla de contenido:

Sensor de movimiento / luces controladas por contador: 7 pasos
Sensor de movimiento / luces controladas por contador: 7 pasos

Video: Sensor de movimiento / luces controladas por contador: 7 pasos

Video: Sensor de movimiento / luces controladas por contador: 7 pasos
Video: ¡Estoy Contado Objetos y Personas usando el circuito 4026 | #utsource 2024, Mes de julio
Anonim
Sensor de movimiento / luces controladas por contador
Sensor de movimiento / luces controladas por contador

Este proyecto fue creado como proyecto final para un curso de Diseño Digital en Cal Poly, San Luis Obispo (CPE 133).

¿Por qué estamos haciendo esto? Queremos ayudar a conservar los recursos naturales en el mundo. Nuestro proyecto se centra en el ahorro de electricidad. Al ahorrar más electricidad, podremos conservar los recursos naturales que se utilizan para generar electricidad. Al comenzar 2018, los recursos naturales se están consumiendo a un ritmo increíble. Queremos ser conscientes de nuestro impacto en nuestro medio ambiente y desempeñar nuestro papel en la preservación de los recursos naturales. La electrónica se puede implementar de varias maneras para ahorrar energía, lo que ayuda al medio ambiente y a nuestro estado económico. * Este modelo fue creado utilizando los componentes disponibles para nosotros.

¿Cuál fue nuestra inspiración? La gente a menudo se olvida de apagar las luces navideñas y desperdicia energía dejándolas encendidas durante la noche. En realidad, este proyecto ahorrará electricidad porque las “luces navideñas” solo estarán encendidas cuando haya gente cerca, lo que ahorrará energía cuando no haya nadie cerca. Además, queríamos diseñar un temporizador para que las luces se apagaran por completo después de un tiempo determinado para asegurarnos de que no se encienden debido al movimiento detectado a las 3 a.m., por ejemplo.

¿Cómo se puede utilizar este diseño? Este diseño se puede implementar para todo tipo de luces, ya sean decorativas, prácticas o ambas. Si desea que la luz de su escritorio solo funcione durante 6 horas seguidas, por ejemplo. Debería establecer un contador en 21, 600 segundos (6 horas x 3, 600 segundos / hora). Mientras el contador aumenta activamente, el sensor de movimiento controlaría la luz. Por lo tanto, cada vez que se apaga durante ese lapso de tiempo, solo necesita mover la mano frente al sensor de movimiento y se volverá a encender. Si se queda dormido en su escritorio y se despierta 7 horas después, su movimiento no lo activará.

Paso 1: Software y hardware necesarios

Software y hardware necesarios
Software y hardware necesarios
Software y hardware necesarios
Software y hardware necesarios
Software y hardware necesarios
Software y hardware necesarios
Software y hardware necesarios
Software y hardware necesarios

Software:

  • Vivado 2016.2 (o una versión más reciente) se puede encontrar aquí
  • Arduino IDE 1.8.3 (o una versión más reciente) se puede encontrar aquí

Hardware:

  • 1 tablero Basys 3
  • 1 Arduino Uno
  • 2 placas de prueba
  • 1 sensor de rango ultrasónico HC-SR04
  • 9 cables macho a macho
  • 1 LED
  • 1 resistencia de 100Ω

Paso 2: Códigos (Vivado)

Códigos (Vivado)
Códigos (Vivado)

Máquina de estados finitos (consulte el diagrama de estados anterior):

El LED requería una máquina de estados finitos. Un LED tiene solo dos estados de encendido y apagado. Solo dos entradas controlan el estado del LED, el contador y el sensor. La única vez que el LED debe estar encendido es cuando el sensor detecta movimiento y cuando el contador está contando de cero a treinta segundos. En cualquier otro caso, el LED se apagará.

Nombre de archivo: LEDDES

Encimera:

El contador nos permite limitar el tiempo durante el cual el sensor de movimiento puede activar el LED. Su valor se muestra en la pantalla de siete segmentos de Basys 3 Board a través de un código fuente ("sseg_dec"). Cuando el interruptor de reinicio está hacia abajo (valor: '0'), el contador comienza a aumentar cada segundo de 0 a 30. Cuando llega a 30, se congela en ese número. No se reiniciará desde 0 hasta que el interruptor de reinicio se cambie a "1" y de nuevo a "1". Si el reinicio se convierte en "1" mientras el contador está funcionando, el contador se congelará en cualquier valor que haya alcanzado. Cuando Reset vuelve a "0", el contador se reiniciará de 0 a 30. Esta implementación también requiere el uso de una señal de reloj, su código se proporciona a continuación ("clk_div2").

Nombre de archivo: FinalCounter

ARCHIVOS PROPORCIONADOS:

Pantalla de siete segmentos:

Este código permite que la pantalla de siete segmentos muestre valores decimales. Un submódulo actúa como decodificador entre una entrada binaria de 8 bits y un decimal codificado en binario de 4 bits. El otro divide la señal del reloj para actualizar su valor a una cierta frecuencia.

Nombre de archivo: sseg_dec

Señal de reloj:

Este código permite que el contador aumente en incrementos de 1 segundo. Divide la frecuencia del reloj de entrada en una frecuencia más lenta. Nos adaptamos para proporcionar un período de 1 segundo cambiando la constante max_count: integer: = (3000000) "a" constante max_count: integer: = (50000000) ".

Nombre de archivo: clk_div2

Archivos proporcionados: sseg_dec, clk_div2 * Estos archivos fuente fueron proporcionados por el profesor Bryan Mealy.

Paso 3: Comprensión de cómo se unen (esquemas de componentes VHDL)

Comprensión de cómo se unen (esquemas de componentes VHDL)
Comprensión de cómo se unen (esquemas de componentes VHDL)

El archivo principal ("MainProjectDES") contiene todos los subarchivos discutidos anteriormente. Están conectados de la manera anterior. Los diferentes componentes están interconectados mediante mapas de puertos para enviar una señal de un elemento a otro.

Como habrá notado, FinalCounter proporciona una salida de 5 bits, mientras que sseg_dec requiere una entrada de 8 bits. Para compensar, configuramos la señal que conecta ambos componentes para que comience con "000" y agreguemos la salida de 5 bits del contador. Proporcionando así una entrada de 8 bits.

Restricciones:

Para ejecutar estos códigos en la placa Basys 3, se requería un archivo de restricciones que indicara a cada señal dónde ir y cómo se conectaron las partes.

Paso 4: Código (Arduino)

Programamos el Arduino Uno para usar el sensor de movimiento para detectar movimiento y proporcionar una salida que indica al LED que se encienda. Además, el uso del sensor para detectar movimiento requiere la ejecución de bucles que buscan constantemente cambios en la distancia. Esencialmente, necesita un temporizador que se ejecute simultáneamente para generar una señal "alta" para que el LED se encienda, mientras que el temporizador debe reiniciarse una vez que se detecta un nuevo movimiento, lo cual es casi imposible de implementar en Vivado según el alcance del conocimiento. de la clase. Además, usamos un Arduino porque no sería factible usar HC-SR04 con la placa Basys 3 ya que la placa solo suministra 3.3V mientras que el sensor requiere una fuente de alimentación de 5V. Para la implementación del movimiento de detección, es la codificación real en lugar de CAD en VHDL.

Usamos la función incorporada de pulso para que el sensor recupere el tiempo transcurrido entre el sonido emitido inicialmente por el sensor y el sonido que rebota al golpear un objeto. Luego usamos la velocidad del sonido y el intervalo de tiempo para calcular la distancia entre el objeto y el sensor. A partir de ahí, almacenamos la distancia actual y la seguimos. Comprobamos la distancia cada 150ms. También usamos la biblioteca elapsedmil para ejecutar un temporizador interno dentro del arduino para realizar un seguimiento del tiempo transcurrido. Si detectamos un cambio de distancia, que corresponde a un movimiento, el temporizador se pone a cero y mantendrá la luz encendida hasta que hayan pasado 3 segundos. Siempre que el sensor detecta otro movimiento, el temporizador se restablece a 0 y la señal de la luz LED será "alta" durante los próximos 3 segundos. Hemos adjuntado una copia de nuestro código Arduino a continuación.

Paso 5: ¡Cómo encajan nuestros componentes

¡Cómo encajan nuestros componentes!
¡Cómo encajan nuestros componentes!
¡Cómo encajan nuestros componentes!
¡Cómo encajan nuestros componentes!
¡Cómo encajan nuestros componentes!
¡Cómo encajan nuestros componentes!

Como puede ver en el "Basys3: Pmod Pin-out Diagram *" y la foto de la placa Arduino Uno, resaltamos y etiquetamos los puertos que usamos.

1. La placa LED y Basys 3

El LED está conectado en serie con la resistencia de 100 Ω. -El cable blanco conecta la resistencia al pin PWR de la placa Basys 3. -El cable amarillo conecta el LED al pin H1 de la placa Basys 3.

2. El sensor de movimiento y el Arduino Uno

-El cable naranja conecta Vcc (potencia) del sensor de movimiento al pin 5V de la placa Arduino Uno.-El cable blanco conecta el pin Trig del sensor de movimiento al pin 10 de la placa Arduino Uno.-El cable amarillo conecta el pin Echo de el sensor de movimiento al pin 9 de la placa Arduino Uno.-El cable negro conecta el pin GND del sensor de movimiento al pin GND de la placa Arduino Uno.

[Los cables que usamos eran demasiado cortos para llegar a los componentes, por lo que estaban interconectados]

3. La placa Basys 3 y el Arduino Uno

El cable amarillo conecta el pin A14 de la placa Basys 3 al pin 6 de la placa Arduino Uno.

* Este diagrama fue tomado del "Manual de referencia de la placa FPGA Basys 3 ™" de Digilent, que se puede encontrar aquí.

Paso 6: demostración

Paso 7: ¡Es hora de probarlo

¡Felicidades! ¡Ha llegado al final de nuestro proyecto de luz controlada por contador y sensor de movimiento! Muchas gracias por leer nuestra publicación de Instructables. Ahora es el momento de que intentes construir este proyecto tú mismo. Si sigue cada paso con cuidado, ¡debería tener un sensor de movimiento y una luz controlada por contador que funcione de manera similar a la nuestra! ¡Le deseamos la mejor de las suertes en la construcción de este proyecto y esperamos que pueda contribuir a ahorrar electricidad y recursos naturales!

Recomendado: