Dispensador de caramelo de Halloween con Radar

Transforma tu Halloween con nuestro Dispensador de Chocolate con radar. Una calabaza dispensara mágicamente algunos caramelos disfrútenlo.

 


Las cosas utilizadas en este proyecto

  • Infineon XMC1400 2GO Kit
  • Infineon S2GO RADAR BGT60
  • Infineon DC-SHIELD BTN9970LV
  • Motor de 12V
  • Adafruit NeoPixel Anillo
  • Fuente de alimentación
  • Protoboard

Iniciemos

Introducción

La comunidad de hacedores de Infineon se está metiendo en el espíritu espeluznante de Halloween, y estamos celebrando con un proyecto que seguramente lanzará un hechizo en trucos o tratadores de todas las edades. Conoce a nuestro Dispensador de dulces: una calabaza impresa en 3D con un cerebro impulsado por radar que detecta cuando alguien está al acechando cerca, y luego dispensa una dulce sorpresa.

¿Quieres aprender a dar vida a este dispensador mágico? Sigue leyendo para descubrir los secretos de nuestra espeluznante creación y prepárate para impresionar a tus amigos y familiares con un hackeo de Halloween como ningún otro.

Concepto

La calabaza contiene dos partes: la parte superior, que se llenará de chocolate, y la parte inferior, que contiene el mecanismo de dispensación y alberga toda la electrónica. La calabaza tiene un motor de engranaje que alimenta un tornado de alimentación, que empuja el chocolate a través de la boca de la calabaza para ser dispensado. El motor es activado por un sensor de radar que puede detectar cuando alguien se acerca a la calabaza. Además, hemos añadido luces Neo Pixel dentro de la calabaza para hacer brillar los ojos.

Usamos el Infineon XMC1400 2GO KIT como mi microcontrolador debido a su flexibilidad y gama de características, lo que nos permitió implementar fácilmente nuestro diseño.

Mecanismo de dispensación


El primer paso para este proyecto es encontrar un mecanismo de dispensación adecuado que también se pueda montar dentro de la calabaza mientras aún deja espacio para llenarlo de chocolate. Empezamos a probar con un mecanismo de puerta que depende de la gravedad, pero debido al tamaño compacto de la calabaza y al alto riesgo de mal funcionamiento, finalmente nos establecimos en un mecanismo de tornado de alimentación (tornado de Arquimedes) para una dispensación más confiable.

Configuración de hardware


El Infineon XMC1400 2GO KIT funciona como el cerebro de la calabaza, programado para controlar el mecanismo de dispensación y los efectos de iluminación.

En el centro del mecanismo de dispensación hay un motor de engranajes de 12V, que alimenta el tornado de alimentación. Este tornado empuja eficientemente el chocolate a través de la boca de la calabaza para dispensar. La configuración está alimentada por una fuente de alimentación externa de 12V.

El motor de engranajes está activado por un sensor de radar, el Infineon S2GO RADAR BGT60LTR11, que detecta cuando alguien se acerca a la calabaza. Una vez detectado, el sensor de radar envía una señal al microcontrolador XMC1400 2GO KIT, activando el motor de engranajes para iniciar el proceso de dispensación de caramelos.

Para añadir un efecto espeluznante, Adafruit NeoPixel Ring (WS2812 5050 RGB LED) se instala dentro de la calabaza, haciendo brillar la boca. Estos anillos LED RGB se pueden programar para mostrar varios patrones de iluminación, mejorando el atractivo visual del dispensador.

Para abordar los diferentes requisitos de voltaje de los componentes, se utiliza el Infineon TLS412 para convertir la fuente de alimentación de 12V a 5V. Esta salida 5V es necesaria para alimentar el microcontrolador XMC1400 2GO KIT y los anillos NeoPixel.

Esquemáticas

El esquema de mi proyecto consta de varios componentes clave. En el centro se encuentra el Infineon XMC1400 2GO KIT, una unidad de microcontrolador (MCU) que cuenta con alto rendimiento y bajo consumo de energía y destaca con el pequeño tamaño. Para alimentar la UCM, tengo una fuente de alimentación externa de 12V, que proporciona una fuente de energía estable y confiable. Sin embargo, el XMC1400 2GO KIT requiere una fuente de alimentación de 5V, así que he utilizado el Infineon TLS4120 5V CORE-BOARD para convertir la entrada 12V en una salida estable de 5V. Esta conversión es crucial para asegurar que la UCM y los demás componentes funcionen dentro de su rango de voltaje especificado.

El módulo de radar está conectado al XMC1400 2GO KIT, y requiere que el pin PD (detección de presencia), se conecte al controlador. Este pin y la fuente de alimentación 3, 3V, así como la conexión en tierra, son esenciales para permitir la comunicación entre el módulo de radar y la UCM, permitiendo al sistema procesar y responder a los datos de detección.

Para el control del motor, seleccionó el BTN99XX0LV-Arduino-Shield, una plataforma versátil y fácil de usar. Este escudo está directamente conectado a la fuente de alimentación 12V, que alimenta los circuitos de control motor. Sin embargo, para permitir la comunicación entre el escudo y el XMC1400 2GO KIT, todavía necesitamos los pines 3.3V y GND de la UCM al escudo. Esto permite a los dos componentes intercambiar datos y controlar las señales. El BTN99XX0LV-Arduino-Shield tiene dos pines de entrada IN1 e IN2 para recibir señales de control del XMC1400 2GO KIT. El motor DC está ahora conectado y alimentado entre los pasadores OUT1 y OUT2.

Finalmente, se agrega un anillo LED al esquema, que es alimentado por 3V3 y GND. El anillo LED está conectado al XMC1400 2GO KIT, y está controlado por un pin GPIO. Esto me permite personalizar el comportamiento del anillo LED, creando un efecto visualmente atractivo que mejora la experiencia general del usuario.

Piezas impresas en 3D y montaje


Paso 1: Montar el motor

  • Primero montamos el motor a la montura del motor, asegurándolo de que está conectado de forma segura con una cantidad significativa de fuerza para evitar que se suelte.
  • Luego conectamos el tornado de alimentación al motor y lo aseguramos con un tornado M3 de 12 mm.

Paso 2: Ensamblando de los componentes internos

  • Primero tenemos que insertar las tres partes en la parte interna de la calabaza.
  • Luego pasamos el cable del motor a través del medio de la calabaza interior.
  • Aseguramos la montura de motor con un hacha pequeña (también un gran tornado puede asegurarlo).

Paso 3: Alambre de los componentes y ensamble los Componentes

  • Ahora seguimos los esquemas proporcionados para conectar todos los componentes juntos.
  • Una vez que el cableado se completa, colocamos cada componente en su respectivo pequeño compartimento.
  • Para mantener los componentes eléctricos en su lugar, puede utilizar cintas de doble cara para asegurarlos.
  • Al cablear el componente de radar, mejor usar cables largos para permitir un fácil montaje más tarde. Asegúrese de mantener el componente de radar fuera de los compartimentos por ahora, ya que se montará por separado más tarde.

Asamblea definitiva y preparación para la codificación

  • Ahora colocamos la parte interior de la calabaza en la parte inferior de la cáscara.
  • Desde el interior, metemos el componente de radar a través de la carcasa superior de la calabaza.
  • Ahora finalmente cerramos la calabaza, asegurándose de que todas las piezas estén en su lugar.
    También he colocado en el diseño varios agujeros de 3 mm para fijar imanes
  • Pase el alambre de alimentación a través del agujero en la carcasa superior de la calabaza.
  • Una vez que todo esté en su lugar, cierra la calabaza y estás listo para empezar a codificar.


Nota:

  • El componente de radar tiene un indicador LED rojo que muestra su estado. Cuando el LED está rojo, significa que el radar no está detectando nada. Cuando detecta algo, el LED se desactivará.
  • Para ajustar la sensibilidad del radar, utilice el potenciómetro izquierdo. Puedes aumentar o disminuir la sensibilidad en función de la distancia de la que deseas detectar. Esto le ayudará a afinar el rendimiento del radar a sus necesidades específicas.
  • A veces, el sistema puede experimentar interferencias debido al ángulo no muy empinado de la parte interna que sostiene los chocolates. Esto puede causar la dispensación de mal funcionamiento.

 

Software

El código utiliza el sensor de radar para detectar el movimiento y activar el mecanismo motorizado para dispensar golosinas. El software también controla las luces NeoPixel para crear un ambiente espeluznante.

1. Empezó con los consejos de Arduino IDE y XMC

2. Instalación de la biblioteca

Para garantizar que la biblioteca Adafruit-NeoPixel es compatible con el XMC1400 2GO KIT, se debe realizar una modificación en el archivo Adafruit-NeoPixel.cpp. En concreto, en la línea 2339, se debe añadir XMC1400 2GO KIT. Esto cambia la línea de

elif defined(XMC1100_XMC2GO) || defined(XMC1100_H_BRIDGE2GO) || defined(XMC1100_Boot_Kit) || defined(XMC1300_Boot_Kit)

elif defined(XMC1100_XMC2GO) || defined(XMC1100_H_BRIDGE2GO) || defined(XMC1100_Boot_Kit) || defined(XMC1300_Boot_Kit) || defined(XMC1400_XMC2GO)


3. Código
Incluye y Definiciones

Empezamos por incluir los archivos de encabezado necesarios y definiendo constantes y variables que usaremos en todo el código. Incluimos tres archivos de cabecera:btn99x0_motor_control.hpp,btn99x0_half_bridge.hpp, yAdafruit_NeoPixel.h. Las dos primeras cabeceras son archivos personalizados para control de motor y medio puente, respectivamente, mientras que el tercero es una biblioteca para controlar los LEDs de NeoPixel. Definimos entonces varias constantes, incluyendoHallswitch,HB1_IN,HB2_IN,HB1_INH, yHB2_INH, que están relacionados con los puentes medios y el control del motor. Además, definimosNEO_PINcomo el pin digital para la tira LED NeoPixel ySPEEDcomo una constante para la velocidad del motor

#include "btn99x0_motor_control.hpp"
#include "btn99x0_half_bridge.hpp"
#include <Adafruit_NeoPixel.h>
using namespace btn99x0;
#define Hallswitch 0
#define HB1_IN 1 // PWM Pin for DC-Shield
#define HB2_IN 2 // PWM Pin for DC-Shield
#define HB1_INH 3 // Inhibit PIN for Halfbridge 1 on DC shield
#define HB2_INH 4 // Inhibit PIN for Halfbridge 2 on DC shield
#define HB1_Isense A1 // Diagnosis pin for Half-bridge 1
#define HB2_Isense A0 // Diagnosis pin for Half-bridge 2
#define NEO_PIN 3 // NeoPixel pin
#define SPEED 150

 

Motor Control y configuración de NeoPixel

A continuación, configuramos el control del motor y la tira LED NeoPixel. Creamos dos puentes,hb1_io_pinsyhb2_io_pins, y un objeto de control motor,btn_motor_control, usando elDCShieldclase. Esta configuración es necesaria para controlar el motor. También configuramos una tira LED NeoPixel con 8 píxeles en alfilerNEO_PIN. Esta tira LED se utilizará para proporcionar retroalimentación visual durante el proceso de dispensación.

io_pins_t hb1_io_pins
{
HB1_Isense,
HB1_IN,
HB1_INH
};
io_pins_t hb2_io_pins
{
HB2_Isense,
HB2_IN,
HB2_INH
};
hw_conf_t hw_conf =
{
2000, // Resistor on the DC shield for the Diagnosis pin
3.3,  // Maximum voltage on the ADC Pin
1023
};
DCShield shield(hb1_io_pins, hb2_io_pins, hw_conf);
MotorControl btn_motor_control(shield);
Adafruit_NeoPixel neoPixel = Adafruit_NeoPixel(8, NEO_PIN, NEO_GRB + NEO_KHZ800);
int previousHallValue = 0; // Previous Hall sensor value
unsigned long lastPulseTime = 0; // Time of the last pulse

 

Función de configuración

void setup() {
Serial.begin(9600);
Serial.println("Serial initialized");
delay(5000);
btn_motor_control.begin();
delay(2000);
// Set the slew rate
btn_motor_control.set_slew_rate(SLEW_RATE_LEVEL_7);
neoPixel.begin();
}

 

Función de dispensas

void dispense() {
Serial.println("Dispensing...");
neoPixel.setPixelColor(0, neoPixel.Color(255, 255, 0)); // Yellow
neoPixel.show();
delay(500);
neoPixel.setPixelColor(0, neoPixel.Color(255, 0, 0)); // Red
neoPixel.show();
delay(500);
for (int i = 0; i < 2; i++) { // Dispense motor control
btn_motor_control.set_speed(-SPEED); // Turn motor in positive direction
delay(400); // Short delay
btn_motor_control.set_speed(+SPEED); // Turn motor in negative direction
delay(100); // Short delay
}
btn_motor_control.set_speed(0); // Stop the motor after dispensing
neoPixel.setPixelColor(0, neoPixel.Color(0, 0, 0)); // Turn off NeoPixel
neoPixel.show();
delay(3000);
}

 

Función del bucle

void loop() {
int hallValue = digitalRead(5); // Read from digital pin 5
if (hallValue == 1) {
dispense(); // Run the dispense function when pin 5 is 0
}
}

Feliz Halloween.

Gracias por acompañarnos en este proyecto, y hackeo feliz. Que tu Halloween esté lleno de espíritu espeluznante y creativo.

 

Artículo Anterior Artículo Siguiente

نموذج الاتصال