Die Augen des Kürbisses - Halloween kommt ganz plötzlich

Halloween siempre llega tan de imprevisto. Todavía queda algo de tiempo antes de que empiece a tallar calabazas, pero ya podemos hacer algunos preparativos. Después del fantástico Proyecto de Andreas Wolter del año pasado con los ojos móviles, este año quise trastear y programar una solución más económica y resistente a la intemperie para los ojos.

La idea es colocar ojos brillantes con RGB LEDs en las cuencas de los ojos que pueden adoptar diferentes colores en función de la distancia a las que se acerquen las personas.

DIY Mikroelektronik Halloween Projekt LED & ToF Sensor & D1 Mini Kürbis basteln

Para esto necesitamos:

1

Placa de desarrollo ATmega328

alternativamente

D1 Mini Nodemcu con módulo WLAN ESP8266-12F


Fuente de alimentación para MCU

2

RGB LED

6

Kit de Resistencias (220 a 680 ohmios)

1

Sensor de distancia láser (ToF) VL53L0X

alternativamente

HC-SR04 Sensor de rango de módulo ultrasónico


Surtido de tubos retráctiles


Cable de puente para placa de prueba


En la siguiente serie de fotos, le presento como he instalado el RGB LED con resistencias en serie y lo he hecho apto para su uso en todo tipo de clima con tubo termirretráctil. Pero en primer lugar, me gustaría recordarle lo más importante sobre los RGB LEDs.

Los RGB LEDs son, por así decirlo, tres LED en una sola carcasa. Si los mira de cerca, puede reconocer los colores individuales: RGB significa rojo - verde - azul. De esta forma, el componente tiene cuatro "patas", uno para cada color y una común. Y aquí se presenta el primer obstáculo: ¿La pata común es el ánodo (el polo positivo) o el cátodo (el polo negativo)? No se puede reconocer en el diseño. Lo único que se puede distinguir por la longitud de las patas es la conexión común: es el más largo de los cuatro cables. El único al lado es la conexión para el rojo, al otro lado hay dos cables para el verde y el azul. La única manera de saber si la conexión común es el cátodo o el ánodo es probarlo. (Nada se puede romper) Mis RGB LEDs tienen un cátodo común, es decir, aquí la conexión es a tierra. Las otras tres patas se conectan a terminales compatibles con PWM a través de una resistencia en serie, a menudo marcadas con la tilde ~.

Durante el experimento me he dado cuenta de que la parte verde es claramente más brillante que la roja y la azul, así que aquí utilizo una resistencia en serie más alta y lo tengo en cuenta que en el sketch (ver más abajo). Entonces es el momento de soldar.

material

Este es el material utilizado: la pata más larga del RGB LED es la conexión común, en mi caso el cátodo. Para ánodo rojo y azul utilizo resistencias en serie de 330 Ohm, para la conexión verde 680 Ohm.

centro de ánodo verde

Comienzo con el ánodo verde en el medio. La pata se envuelve y se suelda.

ánodo soldado

Luego sueldo un cable de puente verde a la resistencia.

Atención: Debido al tamaño del conector DuPont, tuve que tirar del tubo termorretráctil verde sobre el cable antes de soldarlo.

reducir el tamaño de la manguera

No es necesario utilizar una resistencia en serie para la conexión común. Por eso no acorté el cable de puente, sino que sólo retiré el aislamiento y soldé la pata del RGB LED. Ah, sí, también hay que colocar el tubo termorretráctil sobre el cable antes de soldarlo.

Cátodo suelda y aislado

A continuación, encogí los tubos negros y verdes. En ausencia de una boquilla de aire caliente utilicé un encendedor de gas o una vela.

Todas las conexiones soldadas y aislados

Entonces soldé las dos conexiones exteriores (rojo y azul) de la misma manera y encogí a los tubos restantes. Todavía se pueden ver las resistencias de la serie en los engrosamientos de los tubos retráctiles de colores.

aislamiento completo

Al final puse un tubo retráctil más grande sobre los cuatro cables de conexión y las resistencias. Esto no sólo proporciona protección contra la humedad (lluvia o calabaza), pero también alivio de la tensión y la estabilidad mecánica.

Terminada LED RGB

El sensor de distancia que prefiero es el VL53L0X Tiempo de Vuelo que mide la distancia con pulsos de luz infrarroja y transmite el valor al microcontrolador a través de la interfaz I2C.

VL53L0X pines

De las seis conexiones, sólo utilizamos las cuatro superiores para este proyecto, donde VCC se puede conectar tanto a 3,3V como a 5V.

A continuación, mi boceto para la construcción con los ojos brillantes, que se pueden personalizar con sus propias ideas. Como se mencionó anteriormente, necesitamos salidas con capacidad PWM para cada uno de los RGB LEDs. He conectado los dos RGB LEDs en paralelo, por lo que sólo utilizo tres pines: rojo en el pin ~ 3, verde en el pin ~ 5 y azul en el pin ~ 6. Los componentes de color respectivos se envían al pin correspondiente con analogWrite () y los valores entre 0 y 255.

Personalmente, he omitido el componente azul (pero he tomado precauciones para sus posibles deseos), el componente verde es alto a largas distancias y se vuelve más bajo, el componente rojo se hace más grande con la disminución de la distancia. Para simular el parpadeo de los ojos, los LEDs se apagan brevemente después de unos segundos.

Para distancias superiores a 255 cm, el valor se limita a 255. El valor PWM para el verde corresponde a la distancia (debido a la parte verde brillante de mi RGB LED dividí el valor por 2), el valor del para la parte roja se calcula con (255 - distance). A media distancia, los LEDs rojos y verdes brillan con la misma intensidad, lo que da lugar al color amarillo. Con la función de autodefinido twinkle () simulo el guiño de un ojo.

Como es habitual, se instala la librería del sensor de distancia en / Gestión de herramientas / Gestión de librerías ... decidí la librería de Polulu, que también presenta dos sketches de ejemplo.

Biblioteca pantalla administrador

Aquí está el sketch (descargar):

 /*
   Eyes of the pumpkin
   RGBLED and distance sensor VL53L0X
   based on example for library VL53L0X
   by Bernd Albrecht for AZ-Delivery
 */
 
 #include <Wire.h>
 #include <VL53L0X.h>
 
 VL53L0X sensor;
 
 const int redPin =  3;    // the number of the red pin
 const int greenPin =  5;  // the number of the green pin
 const int bluePin =  6;   // the number of the blue pin
 int red = 128;            // initial value for red
 int green = 128;          // initial value for green
 int blue = 0;             // initial value for blue
 long interval;            // interval at which to blink (milliseconds)
 unsigned long previousMillis = 0;        // will store last time LED was updated
 
 void setup() {
   Serial.begin(9600);
   Wire.begin();
   
 // set the digital pin as output:
   pinMode(redPin, OUTPUT);
   pinMode(greenPin, OUTPUT);
   pinMode(bluePin, OUTPUT);
 
   sensor.setTimeout(500);
   if (!sensor.init())
  {
     Serial.println("Failed to detect and initialize sensor!");
     while (1) {}
  }
 
   // Argument is the desired inter-measurement period in ms
   sensor.startContinuous(100);
 }
 
 void twinkle() {
   interval = random(3000,6000);  
   analogWrite(redPin,0);
   analogWrite(greenPin,0);  
   analogWrite(bluePin,0);
   delay(200);  
   analogWrite(redPin,red);
   analogWrite(greenPin,green);  
   analogWrite(bluePin,blue);
 }
 
 void loop() {
   unsigned long currentMillis = millis();
   int distance =  int(sensor.readRangeContinuousMillimeters()/10);
   Serial.print(distance);
   if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
   Serial.println();
 
   if (distance > 255)  distance=255;
   red = 255-distance;
   green = int(distance/2);
   analogWrite(redPin,red);
   analogWrite(greenPin,green);
   Serial.print("red = ");
   Serial.print(red);
   Serial.print(" green = ");
   Serial.print(green);      
   Serial.print(" Interval = ");  
   Serial.println(interval);
   if (currentMillis - previousMillis >= interval) {
     // save the last time you blinked the LED
     previousMillis = currentMillis;
     // set the LED with the ledState of the variable:
     twinkle();
     delay(250);
  }
 }

Por supuesto, en lugar del sensor de distancia VL53L0X, también puede utilizar el sensor de distancia ultrasónico HC-SR04. En este caso, necesitamos dos pines digitales; el pin de disparo controla el transmisor ultrasónico, que requiere 5V. El eco se evalúa a través del segundo PIN.

El algoritmo para controlar los RGB LEDS sigue siendo el mismo, pero se necesita otra librería para el HC-SR04. Aquí están las diferentes líneas del sketch (descargar):

 #include <HCSR04.h>
 byte triggerPin = 8;
 byte echoPin = 9;
En void setup()
 HCSR04.begin(triggerPin, echoPin);

en void loop ()

double* distances = HCSR04.measureDistanceCm();
 int distance =  int (distances[0]);

Diviértase con la reconstrucción. No dude en escribirme sus ideas para otros trucos.

Precipitador electrostático - 8266Para arduinoSensoresEspecialidades

11 comentarios

Andreas Wolter

Andreas Wolter

Für die anderen Probleme mit dem VL53L0X:
Stellen Sie bitte sicher, dass Sie den Quellcode aus dem Download entnehmen, statt aus dem Text im Beitrag. Eventuell werden falsche Formatierungen übernommen.
Ansonsten wurde der Quellcode noch einmal getestet und funktioniert.
Bibliothek ist von Pololu. VCC an +5V, GND an GND, SDA an A4 und SCL an A5. Dort die Kontakte prüfen. Eventuell direkt verbinden, also ohne Breadboard testen. Dann einmal den Beispielsketch “Continuous” testen. Wenn das nicht funktioniert, eventuell einen anderen MC probieren.

Bernd Albrecht

Bernd Albrecht

Danke für Ihr Interesse an diesem Projekt.
Für die Nutzer des HC-SR04: Wie Karsten Dee schreibt, konnten wir sein Problem durch Löschen der nicht benötigten „Konkurrenz“-Bibliotheken lösen. Die von mir benutzte Bibliothek stammt von Dirk Sarodnick, im Unterverzeichnis libraries erkennbar durch den Bindestrich HC-SR04.
Für die Nutzer des VL53L0X: Hier habe ich die Bibliothek von Polulu verwendet.

Andreas Kühn

Andreas Kühn

Habe dasselbe Problem wie Martin und Peter: die mit der Bibliothek veröffentlichten Beispielsketches bringen ein paar Ausgaben 65535, dann 65535 TIMEOUT. Vom I2C-Scanner wird die Adresse 0×29 erkannt.

Martin

Martin

Hallo,
ich habe einen Arduino Uno und den VL53L0X verwendet.
Ich bekomme aber immer ein Timeout. Anscheint bekomme ich keine Daten von diesen. Der I²C Scanner findet diesen aber unter der Adresse 0×29.
Was kann ich nun machen?
MfG Martin

Rolf-Dieter Gerke

Rolf-Dieter Gerke

Moin,
ich habe dasselbe Problem wie Karsten Dee. Welche Library für den HCSR04 wird verwendet?
Viele Grüße
Rolf-Dieter

Kreisel

Kreisel

Hallo Herr Albrecht, ein interessantes Projekt. Funktioniert leider mit dem Ultraschallsensor nicht (siehe Fehlerbeschreibung von Herrn Karsten Dee). Könnten sie vielleicht einmal die verwendete Bibliothek vom
HCSR04 angeben (gibt mindestens 6 mit unterschiedlichen Versionsständen). Danke !
Mit freundlichen Grüßen
Kreisel

Peter

Peter

Hallo Herr Albrecht,
die von mir bei Az-Delivery erworbenen Sensoren vl53LOX (3Stck.) reagieren auf keine Entfernungsänderung.
Das Programm und das Testprogramm gibt als gemessene Entfernung stets 65535 an.
Programmfehler oder Sensoren defekt ?
Viele Grüße
Peter

Karsten  Dee

Karsten Dee

Projekt läuft jetzt ohne Probleme,
Ich hatte mehrere Bibliotheken installiert und dadurch wurde die falsche eingebunden.

Andreas Wolter

Andreas Wolter

Circuit diagram has now been added

Karsten  Dee

Karsten Dee

Hallo Herr Albrecht,
Schönes Projekt. Möchte es nachbauen mit einen Ultraschallsensor. Aber ich bekomme immer die Fehlermeldung :
Bibliothek HCSR04 in Version 2.0.0 im Ordner: C:\Users\User\Documents\Arduino\libraries\HCSR04 wird verwendet

exit status 1

‘HCSR04’ was not declared in this scope
in Zeile 34. Was übersehe ich?
Schöne Grüsse, Karsten

sean turner

sean turner

do you have a circuit diagram of this as new to Arduino thanks

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas