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.
Per questo occorre :
1 |
|
in alternativa |
|
|
Alimentazione per l'MCU |
2 |
|
6 |
Resistor Kit: Assortimento di resistori da 525 pezzi, 0 Ohm -1M Ohm |
1 |
|
in alternativa |
|
|
Assortimento di tubi termoretraibili 560 pezzi, rapporto 2: 1, 12 taglie, 5 colori |
|
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.
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.
Inizio con l'anodo verde al centro. La gamba è avvolta e saldata.
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.
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.
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.
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.
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.
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.
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.
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
*/
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):
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.
11 commenti
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
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
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
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
Moin,
ich habe dasselbe Problem wie Karsten Dee. Welche Library für den HCSR04 wird verwendet?
Viele Grüße
Rolf-Dieter
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
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
Projekt läuft jetzt ohne Probleme,
Ich hatte mehrere Bibliotheken installiert und dadurch wurde die falsche eingebunden.
Andreas Wolter
Circuit diagram has now been added
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
do you have a circuit diagram of this as new to Arduino thanks