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

Halloween arriva sempre così, all'improvviso. Manca ancora un po' di tempo al lancio dell'intaglio della zucca, ma possiamo già fare alcuni preparativi. Dopo il fantastico progetto di Andreas Wolter l'anno scorso con gli occhi mobili, quest'anno ho voluto armeggiare e programmare una soluzione più economica e resistente alle intemperie per gli occhi. 

L'idea è di mettere occhi scintillanti con RGBLED nelle orbite oculari che possono assumere colori diversi a seconda della distanza dalle persone che si avvicinano.

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

Per questo occorre :

1

Microcontrollore Atmega328 con cavo USB

in alternativa

D1 Mini Nodemcu con ESP8266-12F WLAN modulo


Alimentazione per l'MCU

2

Assortimento di diodi luminosi LED, 350 pezzi, 5 colori

6

Resistor Kit: Assortimento di resistori da 525 pezzi, 0 Ohm -1M Ohm

1

Sensore di distanza laser VL53L0X Time-of-Flight (ToF)

in alternativa

HC-SR04 sensore modulo ad ultrasuoni


Assortimento di tubi termoretraibili 560 pezzi, rapporto 2: 1, 12 taglie, 5 colori


65pz. Breadboard Jumper

Acquista direttamente il progetto completo (senza zucca 🎃): Accessori completi

Nella seguente serie di immagini vi mostrerò come ho equipaggiato l'RGBLED con resistenze in serie e come l'ho adattato per l'uso in tutte le stagioni con un tubo termorestringente. Ma prima vorrei ricordarvi le cose più importanti sugli RGBLED.

Gli RGBLED sono, per così dire, tre LED in un solo alloggiamento. Se li guardi da vicino, puoi vedere i diversi colori: RGB sta per rosso - verde - blu. Pertanto, il componente ha quattro "gambe", una per ogni colore e una gamba comune. Ed ecco il primo ostacolo: la gamba comune è l'anodo (il polo positivo) o il catodo (il polo negativo)? Non si può dire dalla forma. L'unica cosa che si capisce dalla lunghezza delle gambe è il collegamento comune: è il più lungo dei quattro fili. Il filo singolo accanto è la connessione per il rosso, poi dall'altra parte ci sono due fili per il verde e il blu. L'unico modo per sapere se la connessione comune è il catodo o l'anodo è provare. (I miei RGBLED hanno un catodo comune, cioè qui la connessione è a terra. Le altre tre gambe sono collegate tramite una resistenza in serie alle connessioni compatibili PWM, spesso contrassegnate dalla tilde ~.

Quando ho impostato l'esperimento, ho notato che il componente verde è molto più luminoso del rosso e del blu, quindi uso una resistenza in serie più alta qui e rifletto questo nello schizzo (vedi sotto). Successivamente, è il momento di saldare.

Materiale

Ecco il materiale utilizzato: Il ramo più lungo dell'RGBLED è la connessione comune, nel mio caso il catodo. Uso resistenze in serie da 330 Ohm per l'anodo rosso e blu, 680 Ohm per la connessione verde.

Centro anodo verde

Inizio con l'anodo verde al centro. La gamba è avvolta e saldata.

anodo saldato

Poi ho saldato un cavo verde volante alla resistenza.

Attenzione: a causa delle dimensioni del connettore Dupont, ho dovuto tirare la guaina verde restringente sul cavo prima di saldarlo.

Shrink tubo

Nessuna resistenza in serie è necessaria per la connessione comune. Ecco perché non ho accorciato il cavo di collegamento, ma ho solo applicato l'isolamento e saldato la gamba del LED RGB. Oh sì, se necessario, applicate la guaina termorestringente sul cavo all'inizio.

Catodo saldato e isolato

Ho poi ristretto i tubi nero e verde. In mancanza di un ugello per l'aria calda, si utilizza un accendino a gas o una candela.

Tutti i collegamenti saldati e isolati

Successivamente ho saldato i due collegamenti esterni (rosso e blu) allo stesso modo e ho ristretto i tubi rimanenti. Puoi ancora distinguere le resistenze in serie dall'ispessimento dei tubi termoretraibili colorati.

isolamento completo

Infine, ho applicato una guaina termorestringente più grande sui quattro cavi di collegamento e sulle resistenze in serie. Questo non solo garantisce la protezione dall'umidità (pioggia o zucca), ma anche la protezione dalla tensione e la stabilità meccanica.

Finito LED RGB

Il mio sensore di distanza preferito è il VL53L0X Time of Flight, che misura la distanza con impulsi di luce infrarossa e trasmette il valore al microcontrollore attraverso l'interfaccia I2C.

VL53L0X Pinout

Delle sei connessioni, usiamo solo le prime quattro per questo progetto, poiché VCC può essere collegato a 3.3V o 5V.

Ecco il mio sketch per il setup degli occhi luminosi, che potete naturalmente adattare alle vostre idee. Come detto sopra, abbiamo bisogno di uscite PWM compatibili per ciascuno degli RGBLED. Ho collegato i due RGBLED in parallelo, in modo da utilizzare solo tre pin: rosso sul pin ~3, verde sul pin ~5 e blu sul pin ~6. Le rispettive componenti di colore sono inviate al rispettivo pin con analogWrite() e valori compresi tra 0 e 255.

Personalmente ho rinunciato alla componente blu (ma ho preso precauzioni per i vostri possibili desideri), la componente verde è alta a lunga distanza e diventa più bassa, la componente rossa diventa più alta con la diminuzione della distanza. Per simulare il battito degli occhi, i LED si spengono brevemente dopo alcuni secondi.

Per distanze superiori a 255 cm, il valore è limitato a 255. Il valore PWM per il verde corrisponde alla distanza (a causa della componente verde brillante del mio LED RGB ho diviso il valore per 2), il valore per la componente rossa è calcolato con (255 - distanza). A media distanza, i LED rossi e verdi brillano con la stessa intensità, il che dà il giallo. Simulo l'occhiolino con la funzione autodefinita twinkle().

Come al solito, si installa la libreria per il sensore di distanza sotto /Tools/Manage Libraries... Ho scelto la libreria Polulu, che fornisce anche due sketch d'esempio.

Biblioteca amministratore screenshot

Ecco lo Sketch (Download):

 /*
   Occhi della zucca
   Sensore rgbbled e distanza VL53L0X
   sulla base di esempio per vl53l0x biblioteca
   di Bernd Albrecht per AZ-CONSEGNA
 */
 
 #include
 #include
 
 VL53L0X. sensore;
 
 contam. Int. redpin. =  3;    // il numero del perno rosso
 contam. int Greenpin. =  5;  // il numero del perno verde
 contam. Int. Bluepin. =  6;   // il numero del perno blu
 Int. rosso = 128;            // valore iniziale per rosso
 int Verde = 128;          // Valore iniziale per Green
 Int. blu = 0;             // valore iniziale per blu
 lungo intervallo;            // intervallo in cui a lampeggiare (millisecondi)
 Unsigned. lungo PrecedenteMillis. = 0;        // memorizzerà l'ultima volta ha portato ciò che ha aggiornato
 
 vuoto impostare() {
   Seriale.Inizio(9600);
   Filo.Inizio();
   
 // Impostare il perno digitale come output:
   pinmode.(redpin., PRODUZIONE);
   pinMode(Greenpin., PRODUZIONE);
   pinmode.(Bluepin., PRODUZIONE);
 
   sensore.Settimeout.(500);
   SE (!sensore.dentro())
  {
     Seriale.Println.("Impossibile rilevare e inizializzare il sensore!");
     Mentre (1) {}
  }
 
   // Argomento è il periodo inter-misurazione desiderato in SM
   sensore.StartonContinuo(100);
 }
 
 vuoto scintillio() {
   intervallo = a caso(3000,6000);  
   analogWrite(redpin,0);
   analogrite.(Greenpin.,0);  
   analogWrite(Bluepin.,0);
   ritardo(200);  
   analogrite.(redpin.,rosso);
   analogrite.(Greenpin.,Verde);  
   analogrite.(bluepin,blu);
 }
 
 vuoto ciclo continuo() {
   Unsigned. lungo AttualeMilli. = millis.();
   Int. distanza =  Int.(sensore.Readrencintiningmillimeters.()/10);
   Seriale.Stampa(distanza);
   SE (sensore.Timeotocurred.()) { Seriale.Stampa("Tempo scaduto"); }
   Seriale.Println.();
 
   SE (distanza > 255)  distanza=255;
   rosso = 255-distanza;
   Verde = int(distanza/2);
   analogWrite(redpin.,rosso);
   analogrite.(Greenpin,Verde);
   Seriale.Stampa("rosso =");
   Seriale.Stampa(rosso);
   Seriale.Stampa("Green =");
   Seriale.Stampa(Verde);      
   Seriale.Stampa("Intervallo =");  
   Seriale.Println.(intervallo);
   SE (AttualeMilli. - PrecedenteMillis. >= intervallo) {
     // Salva l'ultima volta che lampeggia il LED
     PrecedenteMillis. = AttualeMilli.;
     // Impostare il LED con il LEDSTATE della variabile:
     scintillio();
     ritardo(250);
  }
 }

Al posto del sensore di distanza VL53L0X, si può naturalmente utilizzare il sensore di distanza a ultrasuoni HC-SR04. Qui abbiamo bisogno di due pin digitali; la connessione di trigger controlla il trasmettitore di ultrasuoni; questo richiede 5 V. L'eco viene valutato attraverso il secondo pin.

L'algoritmo per controllare gli RGBLED rimane lo stesso, ma una libreria diversa è necessaria per l'HC-SR04. Ecco le linee deviate nello Sketch (Download):

 #include 
 byte triggerpin. = 8;
 byte ECHOPIN. = 9;
in void setup()
 HCSR04..Inizio(triggerpin., ECHOPIN.);

in void loop()

 Doppio * distanziamento = HCSR04..MisuraSistancecm.();
 Int. distanza =  Int. (distanziamento[0]);

Godetevi e divertitevi con la replica. Sentitevi liberi di scrivermi le vostre idee per altri gadget.

Esp-8266Für arduinoSensorenSpecials

11 commenti

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

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione