Maak een Prachtige LED Hart Fotolijst met Arduino – Stap-voor-stap DIY Handleiding
In dit Arduino-project laat ik je zien hoe je een geweldige LED-hart fotolijst kunt maken met Arduino. Je kunt de volgende video bekijken of het geschreven artikel hieronder lezen voor meer details.
Op het eerste gezicht ziet het eruit als een gewone fotolijst, maar zodra je de schakelaar aan de achterkant indrukt, verandert het in een buitengewone fotolijst. Het bouwen van dit Arduino-project is erg leuk en het kan een perfecte Valentijns-, verjaardags- of verjaardagscadeau zijn voor je geliefden. Laten we beginnen met bouwen.
Fotolijst Voorbereiding

Eerst hebben we een eenvoudige 18 x 13 cm fotolijst en een vezelplaat die op maat is gesneden voor de lijst, waarop we gaten boren voor de LEDs. Vervolgens moeten we een hartvorm met 32 LEDs tekenen en printen, wat als patroon zal dienen. We boren de gaten voor de LEDs met een boormachine.

Zodra we klaar zijn met boren, beginnen we met het plaatsen van de LEDs. We moeten alle LEDs aan dezelfde kant plaatsen, met de anode (de langere poot) naar buiten gericht, zodat we ze kunnen buigen en later de anodes van alle LEDs met elkaar kunnen solderen.

Zodra we alle LEDs hebben gesoldeerd, moeten we controleren of ze allemaal goed werken. Hiervoor verbinden we de positieve 5V VCC-pin met de anodes van de LEDs via een 220-Ohm-weerstand en controleren we met de Ground-pin elke LED of hij oplicht.
Schakelschema
Hier is het schakelschema van dit project en je kunt een complete lijst met benodigde componenten hieronder vinden. We zullen de Arduino Nano en twee TLC5940 IC's gebruiken voor het aansturen van de LEDs. De TLC5940 is een 16-kanaals LED-driver die PWM-uitgangen biedt. Je kunt meer details vinden over hoe je deze IC met de Arduino kunt verbinden en gebruiken in mijn specifieke Arduino en TLC5940-tutorial.

Componenten nodig voor dit Arduino-project
Je kunt de componenten bij een van de onderstaande sites verkrijgen:
- Arduino Nano
- Ultra heldere rode LEDs
- Schakelaar
- Voedingsconnector
- DC 5V >1A adapter
- 2x TLC5940 LED-drivers
- 2x 2k-weerstanden
- 1uF & 0.1uF condensatoren
Monteren
Hier plaatsen we eerst de IC-sockets en de pinheaders op hun plaats en solderen ze op de experimenteerprint, zodat we de IC's en de Arduino Nano eraan kunnen bevestigen. We hebben ook twee extra pinheaders met een paar sleuven nodig voor de voeding, de 5V VCC en de Ground-pins, evenals twee condensatoren voor ontkoppeling.

We moeten erg voorzichtig zijn bij het verbinden van de componenten, want met zoveel draden kan het erg rommelig worden als we iets verkeerd aansluiten. Op dit moment moeten we de Arduino-code uploaden om te controleren of we alles correct hebben aangesloten.

Arduino-code
Laten we eens kijken naar de Arduino-code die ik voor dit project heb gemaakt. We zullen de TLC5940-bibliotheek van Alex Leone gebruiken. Zodra we deze bibliotheek hebben gedownload en geïnstalleerd, moeten we het bestand tlc_config.h aanpassen en de waarde van de variabele NUM_TLCS wijzigen in het aantal TLC5940 IC's dat in serie is aangesloten, wat in ons geval 2 is.

Met dit gedaan, kunnen we nu gemakkelijk alle LEDs van 0 tot 31 adresseren. Aan het begin moeten we ook enkele variabelen definiëren die voor het programma nodig zijn. In de setup-sectie initialiseren we de TLC's en in de loop-sectie maken we het programma. Ik heb het programma georganiseerd in 9 verschillende fasen of light-shows van de LEDs met behulp van de switch-instructie.
Bijvoorbeeld, laten we eens kijken naar de eerste fase. We genereren willekeurige INT-waarden van 0 tot 31 en gebruiken ze als adressen voor de LEDs. De functie Tlc.set() wordt gebruikt om in te stellen welke LED we aansturen. De eerste parameter is het adres van de LED, en de tweede parameter is de helderheidswaarde of de PWM-waarde, die van 0 tot 4095 loopt. Dit zal de LED echter niet direct laten oplichten, het stelt alleen in welke LED de volgende keer zal oplichten wanneer de Tlc.update()-functie wordt uitgevoerd. Met deze "if"-instructie activeeren we de tweede fase na het aansturen van 8 willekeurige LEDs. Nu bekijken we nog een voorbeeld, zeg fase 3. Met deze "for"-lus stellen we alle 32 LEDs in om aan te gaan wanneer de Tlc.update()-functie wordt uitgevoerd. Na een halve seconde vertraging wissen en schakelen we alle LEDs uit met de Tlc.clear()-functie. Op dezelfde manier kun je de code aanpassen en meer light-shows toevoegen.
/* LED Hart Fotolijst - Arduino Project
* Programma gemaakt door Dejan Nedelkovski,
* www.HowToMechatronics.com
*/
/* TLC5940 Bibliotheek door Alex Leone, https://code.google.com/archive/p/tlc5940arduino/
* Je moet tlc_config.h aanpassen in de TLC5940 bibliotheek
* en de waarde van de variabele NUM_TLCS wijzigen in het aantal TLC5940 IC's verbonden */
#include "Tlc5940.h"
int stage = 0;
int randomNumber;
int count = 0;
int brightness = 3500;
int brightUp = 50;
int dir = 1;
void setup() {
Tlc.init();
}
void loop() {
switch(stage) {
//-----Fase 1
case 0:
randomNumber = (int)random(0,31);
Tlc.set(randomNumber, 4095);
delay(1500);
Tlc.update();
if(count >= 8) {
stage = 1;
count = 0;
} else {
++count;
}
break;
//-----Fase 2
case 1:
delay(75);
for(int i = 31; i >= 0; i--) {
Tlc.set(i, 4095);
delay(100);
Tlc.update();
}
delay(500);
Tlc.clear();
Tlc.update();
stage = 2;
delay(500);
break;
//-----Fase 3
case 2:
for(int i = 0; i <= 31; i++) {
Tlc.set(i, 4095);
}
Tlc.update();
delay(500);
Tlc.clear();
Tlc.update();
delay(350);
if(count > 6) {
stage = 3;
count = 0;
} else {
++count;
}
break;
//-----Fase 4
case 3:
for (int i = 0; i <= 15; i++) {
Tlc.set(i, 4095);
Tlc.set(31-i, 4095);
Tlc.update();
delay(70);
}
delay(50);
for (int i = 15; i >= 0; i--) {
Tlc.set(i, 0);
Tlc.set(31-i, 0);
Tlc.update();
delay(70);
}
for (int i = 15; i >= 0; i--) {
Tlc.set(i, 4095);
Tlc.set(31-i, 4095);
Tlc.update();
delay(70);
}
for (int i = 0; i <= 15; i++) {
Tlc.set(i, 0);
Tlc.set(31-i, 0);
Tlc.update();
delay(70);
}
delay(50);
Tlc.clear();
Tlc.update();
delay(100);
if(count > 1) {
stage = 4;
count = 0;
} else {
++count;
}
break;
//-----Fase 5
case 4:
for (int i = 15; i >= count; i--) {
Tlc.set(32-i, 4095);
Tlc.update();
delay(5);
Tlc.set(32-i-1, 0);
Tlc.update();
delay(5);
Tlc.set(i, 4095);
Tlc.update();
delay(5);
Tlc.set(i+1, 0);
Tlc.update();
delay(50);
}
if(count > 15) {
Tlc.set(16, 4095);
Tlc.update();
delay(2000);
stage = 5;
count = 0;
} else {
++count;
}
break;
//-----Fase 6
case 5:
for (int i = 0; i <= 31; i++) {
Tlc.set(i, brightness);
Tlc.update();
}
Tlc.update();
brightness = brightness + brightUp;
if (brightness >= 3500) {
brightUp = -50;
++count;
}
if (brightness <= 150) {
brightUp = 50;
}
if(count > 6) {
stage = 6;
count = 0;
brightness = 3500;
Tlc.clear();
Tlc.update();
}
delay(40);
break;
//-----Fase 7
case 6:
for (int i = 0; i <= 30; i += 2) {
Tlc.set(i, 4095);
Tlc.set(i+1, 0);
}
Tlc.update();
delay(500);
for (int i = 0; i <= 30; i += 2) {
Tlc.set(i, 0);
Tlc.set(i+1, 4095);
}
Tlc.update();
delay(500);
if(count > 20) {
stage = 7;
count = 0;
} else {
++count;
}
break;
//-----Fase 8
case 7:
for(int i = 31; i >= 16; i--) {
Tlc.clear();
Tlc.update();
delay(2);
Tlc.set(i, 4095);
Tlc.set(i+1, 2000);
Tlc.set(i+2, 1000);
Tlc.set(i+3, 500);
Tlc.set(i+4, 300);
Tlc.set(i+5, 200);
Tlc.set(i+6, 100);
Tlc.set(i+7, 50);
Tlc.set(i+8, 0);
Tlc.set(i-16, 4095);
Tlc.set(i-15, 2000);
Tlc.set(i-14, 1000);
Tlc.set(i-13, 500);
Tlc.set(i-12, 300);
Tlc.set(i-11, 200);
Tlc.set(i-10, 100);
Tlc.set(i-9, 50);
Tlc.set(i-8, 0);
Tlc.update();
delay(50);
}
if(count > 8) {
for(int i = 31; i >= 0; i--) {
Tlc.set(i, 4095);
Tlc.update();
delay(50);
}
stage = 8;
count = 0;
} else {
++count;
}
break;
//-----Fase 9
case 8:
for(int i = 31; i >= 0; i--) {
Tlc.set(i+8, 4095);
Tlc.set(i+7, 2000);
Tlc.set(i+6, 1000);
Tlc.set(i+5, 500);
Tlc.set(i+4, 300);
Tlc.set(i+3, 200);
Tlc.set(i+2, 100);
Tlc.set(i+1, 50);
Tlc.set(i, 0);
Tlc.update();
delay(50);
}
for(int i = 31; i >= 0; i--) {
Tlc.set(i, 4095);
}
Tlc.update();
delay(10);
if(count > 8) {
delay(8000);
Tlc.clear();
Tlc.update();
stage = 0;
count = 0;
} else {
++count;
}
break;
}
}
Laatste Afwerking
Zodra we klaar zijn met programmeren en weten dat alles goed werkt, moeten we de LEDs op de vezelplaat bevestigen, wat ik met een lijmpistool deed. Vervolgens moeten we een afdekdoos voor de elektronica maken met een lijmpistool en 4 extra stukken vezelplaat op maat gesneden.

Wat er nu nog over is, is de voedingsdraden van de schakelaar en de voedingsconnector verbinden, die in de vezelplaat van de fotolijst zitten, de foto toevoegen, de hele doos aan de fotolijst bevestigen en we zijn klaar!

Hier kun je de complete demovideo van de LED-hart fotolijst bekijken.
Stel gerust je vragen in de reacties hieronder!
Productieproces
- Bouw Je Eigen LUMAZOID: Een DIY Arduino Muziek Visualizer
- Bouw een betrouwbare infrarode hartslagsensor met Arduino: stapsgewijze handleiding
- Arduino Audio Frequentie Detector – Meet de luidste geluidspieken met hoge gevoeligheid
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Arduino Boter-Kaas-Eieren met MAX7219 LED Matrix en Kartonnen Behuizing
- Bouw een DIY Voltmeter met Arduino en Nokia 5110 Display – Stap-voor-Stap Handleiding
- Bouw een Slimme Arduino Vierpotige Robot: Stap-voor-Stap Handleiding
- Bouw een Betrouwbare Arduino Afteltimer met SparkFun 7‑Segment Display
- Arduino RGB LED Kleurmixer – Beginner-vriendelijk DIY-project
- Bouw een DIY Arduino Radionica EMR Behandelapparaat
- Bouw je eigen RC Porsche-auto met Arduino: Stap-voor-stap handleiding