Du kan göra alla möjliga saker med blinkande lysdioder, och i det här enkla projektet kommer vi att göra en liten enhet som lyser upp meddelanden i luften när du viftar fram och tillbaka. Det är enklare än du tror, och den totala kostnaden för delar är under $5.
Detta projekt använder sig av en optisk illusion som kallas persistens of vision för att få text att synas i luften. Du har förmodligen stött på detta fenomen när någon flyttar ett tänd tomtebloss snabbt på natten. Vi kommer att använda en Arduino och några lysdioder för att efterlikna denna effekt. Det här projektet är enkelt att bygga, med få komponenter och lite lödning (men om du vill ha några tips om hur du kommer igång med din lödkolv, kolla in den här guiden).
Du kommer behöva
Arduino (jag använde en $2 Nano eftersom den är kompakt och billig, men vilken modell som helst borde vara bra). 5x röda lysdioder. 5x 220 Ohm motstånd. 1x 9v batterihållare. 1x vippbrytare. 1x bit protoboard. Ett hus för den färdiga produkten (jag använde en liten svartmålad kartong).
Du behöver också en lödkolv och lite lod för att få ihop allt.
Även om det är valfritt, kan en del lödveke vara väldigt praktisk om du gör några lödningsfel. En breadboard och några anslutningskablar är också användbara för att testa din krets.
Kabeldragning
Ledningarna kunde inte vara enklare. Anslut först din Arduino, lysdioder och motstånd som visas i detta diagram.
Stiften D2 till D6 går till respektive resistor, som är fästa på den positiva anoden (långa benet) på varje lysdiod. Katoden är ansluten till jord, som ansluter tillbaka till Arduino. När det är klart ska det se ut ungefär så här:
Det var allt: vår krets är klar! Vi kommer att lägga till ett batterihus och en switch till det senare, men det här är allt vi behöver för att testa om det fungerar.
Koda
Koppla nu din Arduino till datorn och öppna Arduino IDE. Om du är ny på att använda Arduino och vill ha en bra guide för att komma igång, kommer den här länken att vara användbar.
Öppna en ny skiss och kopiera in den här koden. Koden modifierades från detta projekt och du kan ladda ner den i sin helhet på denna Gist.
// how long each led stays on for
int delayTime = 1;
//how long between each
int charBreak = 3;
//how long to wait after the message is finished before it repeats
int resetTime = 20;
int LED1 = 2;
int LED2 = 3;
int LED3 = 4;
int LED4 = 5;
int LED5 = 6;
void setup(){
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
}
int a[] = {1, 6, 26, 6, 1};
int b[] = {31, 21, 21, 10, 0};
int c2[] = {14, 17, 17, 10, 0};
int d[] = {31, 17, 17, 14, 0};
int e[] = {31, 21, 21, 17, 0};
int f[] = {31, 20, 20, 16, 0};
int g[] = {14, 17, 19, 10, 0};
int h[] = {31, 4, 4, 4, 31};
int i[] = {0, 17, 31, 17, 0};
int j[] = {0, 17, 30, 16, 0};
int k[] = {31, 4, 10, 17, 0};
int l[] = {31, 1, 1, 1, 0};
int m[] = {31, 12, 3, 12, 31};
int n[] = {31, 12, 3, 31, 0};
int o[] = {14, 17, 17, 14, 0};
int p[] = {31, 20, 20, 8, 0};
int q[] = {14, 17, 19, 14, 2};
int r[] = {31, 20, 22, 9, 0};
int s[] = {8, 21, 21, 2, 0};
int t[] = {16, 16, 31, 16, 16};
int u[] = {30, 1, 1, 30, 0};
int v[] = {24, 6, 1, 6, 24};
int w[] = {28, 3, 12, 3, 28};
int x[] = {17, 10, 4, 10, 17};
int y[] = {17, 10, 4, 8, 16};
int z[] = {19, 21, 21, 25, 0};
int eos[] = {0, 1, 0, 0, 0};
int excl[] = {0, 29, 0, 0, 0};
int ques[] = {8, 19, 20, 8, 0};
int space[] = {0, 0, 0, 0, 0};
void displayLine(int line){
int myline;
myline = line;
if (myline>=16) {digitalWrite(LED1, HIGH); myline-=16;} else {digitalWrite(LED1, LOW);}
if (myline>=8) {digitalWrite(LED2, HIGH); myline-=8;} else {digitalWrite(LED2, LOW);}
if (myline>=4) {digitalWrite(LED3, HIGH); myline-=4;} else {digitalWrite(LED3, LOW);}
if (myline>=2) {digitalWrite(LED4, HIGH); myline-=2;} else {digitalWrite(LED4, LOW);}
if (myline>=1) {digitalWrite(LED5, HIGH); myline-=1;} else {digitalWrite(LED5, LOW);}
}
void displayChar(char c){
if (c == 'a'){for (int i = 0; i <5; i++){displayLine(a[i]);delay(delayTime);}displayLine(0);}
if (c == 'b'){for (int i = 0; i <5; i++){displayLine(b[i]);delay(delayTime);}displayLine(0);}
if (c == 'c2'){for (int i = 0; i <5; i++){displayLine(c2[i]);delay(delayTime);}displayLine(0);}
if (c == 'd'){for (int i = 0; i <5; i++){displayLine(d[i]);delay(delayTime);}displayLine(0);}
if (c == 'e'){for (int i = 0; i <5; i++){displayLine(e[i]);delay(delayTime);}displayLine(0);}
if (c == 'f'){for (int i = 0; i <5; i++){displayLine(f[i]);delay(delayTime);}displayLine(0);}
if (c == 'g'){for (int i = 0; i <5; i++){displayLine(g[i]);delay(delayTime);}displayLine(0);}
if (c == 'h'){for (int i = 0; i <5; i++){displayLine(h[i]);delay(delayTime);}displayLine(0);}
if (c == 'i'){for (int it = 0; it <5; it++){displayLine(i[it]);delay(delayTime);}displayLine(0);}
if (c == 'j'){for (int i = 0; i <5; i++){displayLine(j[i]);delay(delayTime);}displayLine(0);}
if (c == 'k'){for (int i = 0; i <5; i++){displayLine(k[i]);delay(delayTime);}displayLine(0);}
if (c == 'l'){for (int i = 0; i <5; i++){displayLine(l[i]);delay(delayTime);}displayLine(0);}
if (c == 'm'){for (int i = 0; i <5; i++){displayLine(m[i]);delay(delayTime);}displayLine(0);}
if (c == 'n'){for (int i = 0; i <5; i++){displayLine(n[i]);delay(delayTime);}displayLine(0);}
if (c == 'o'){for (int i = 0; i <5; i++){displayLine(o[i]);delay(delayTime);}displayLine(0);}
if (c == 'p'){for (int i = 0; i <5; i++){displayLine(p[i]);delay(delayTime);}displayLine(0);}
if (c == 'q'){for (int i = 0; i <5; i++){displayLine(q[i]);delay(delayTime);}displayLine(0);}
if (c == 'r'){for (int i = 0; i <5; i++){displayLine(r[i]);delay(delayTime);}displayLine(0);}
if (c == 's'){for (int i = 0; i <5; i++){displayLine(s[i]);delay(delayTime);}displayLine(0);}
if (c == 't'){for (int i = 0; i <5; i++){displayLine(t[i]);delay(delayTime);}displayLine(0);}
if (c == 'u'){for (int i = 0; i <5; i++){displayLine(u[i]);delay(delayTime);}displayLine(0);}
if (c == 'v'){for (int i = 0; i <5; i++){displayLine(v[i]);delay(delayTime);}displayLine(0);}
if (c == 'w'){for (int i = 0; i <5; i++){displayLine(w[i]);delay(delayTime);}displayLine(0);}
if (c == 'x'){for (int i = 0; i <5; i++){displayLine(x[i]);delay(delayTime);}displayLine(0);}
if (c == 'y'){for (int i = 0; i <5; i++){displayLine(y[i]);delay(delayTime);}displayLine(0);}
if (c == 'z'){for (int i = 0; i <5; i++){displayLine(z[i]);delay(delayTime);}displayLine(0);}
if (c == '!'){for (int i = 0; i <5; i++){displayLine(excl[i]);delay(delayTime);}displayLine(0);}
if (c == '?'){for (int i = 0; i <5; i++){displayLine(ques[i]);delay(delayTime);}displayLine(0);}
if (c == '.'){for (int i = 0; i <5; i++){displayLine(eos[i]);delay(delayTime);}displayLine(0);}
if (c == ' '){for (int i = 0; i <5; i++){displayLine(space[i]);delay(delayTime);}displayLine(0);}
delay(charBreak);
}
void displayString(char* s){
for (int i = 0; i<=strlen(s); i++){
displayChar(s[i]);
}
}
void loop(){
//Change the text inside here to change the text displayed.
//Make sure to keep the brackets and the quotation marks.
displayString("..hello!..");
delay(40);
}
Spara skissen och ladda upp den till din tavla. Om du får några fel, se till att du har valt rätt kort och com-port. Dina lysdioder bör börja flimra. Om de inte gör det, kontrollera alla dina anslutningar på din breadboard. Heltalen som deklareras i början av koden bestämmer hur snabbt texten visas. Ju högre siffra, desto snabbare måste du vifta med enheten. Jag tyckte att siffrorna som används här fungerade bra.
Nu ska vi göra ett snabbt test. Koppla bort din Arduino från USB-kabeln och anslut din batterihållare till VIN- och GND-stiften på din arduino
Nu när du kan flytta runt den, försök försiktigt att svänga lysdioderna framför dig. Du bör se några bokstäver bildas i luften förutsatt att det är tillräckligt mörkt runt dig. Jag tyckte att det hjälpte att ställa in min telefon för att fånga detta.
Det fungerar! Nu för att göra det lite mer permanent.
Strykjärn vid redo!
Lägg ditt Arduino-kort, motstånd och lysdioder på ditt protoboard så här:
Du kan naturligtvis göra layouten så kompakt som du vill, så länge kretsen förblir densamma. Se till att du lämnar minst en rad protoboardkontakter på varje sida av din Arduino för komponenterna och strömförsörjningen. Om du är nybörjare inom elektronik, här är några bra tips för dig.
Vi kommer att löda samman LED-katoderna i en linje för att skapa en gemensam grund, ungefär som vi gjorde när vi gjorde vår LED-matris.
Vik varje katod så att den överlappar nästa, och löd dem för att skapa en obruten linje. Nu måste vi löda våra anoder till benen på motstånden bredvid dem. Jag fann att det enklaste sättet att göra detta var att löda fast varje ben på deras respektive dyna och sedan placera strykjärnet mellan dem för att värma båda lederna, innan jag slutligen tillsatte mer lod för att överbrygga gapet mellan dem.
Kontrollera varje anslutning för att se att den är ordentligt fastsatt, och använd sedan trådskärare för att skära av överflödiga ben från motstånden och lysdioderna.
Nu för att upprepa samma uppgift, men den här gången kopplar vi den andra änden av våra motstånd till benen på Arduino. Detta är den mest krångliga delen av lödningen. Varje motstånd fäster mycket till sin Arduino-stift ensam, annars kommer kretsen inte att fungera som den är tänkt att göra. Jag gjorde flera misstag här och var tvungen att använda lodvike för att ta bort oönskat lod flera gånger.
När du har gjort alla korrekta anslutningar, dubbelkolla att ingen av dem överlappar med sina grannar. Om du har tillgång till en multimeter här kan du använda kontinuitetsläget för att kontrollera att varje stift endast har en obruten linje till sitt motstånd. Om du precis har en multimeter finns det en bra guide för att komma igång i den här artikeln.
När du har kontrollerat varje anslutning, klipp av överskottslängden från benen på motstånden
Tillför kraft
Dra nu en bit tråd från GND-stiftet på din Arduino till ett hål bredvid där din rad med lödda katoder slutar, och placera den svarta tråden på batterihållaren bredvid den.
Löd nu tråden till GND-stiftet, på samma sätt som vi gjorde med motstånden, och löd båda ledningarna till änden av katodraden för att skapa en gemensam jord för kretsen.
Fäst slutligen en ledning till VIN-stiftet på din arduino och placera strömbrytaren mellan den ledningen och batteripaketet. Ber om ursäkt för den varmlimtäckta strömbrytaren på det här fotot, jag var tvungen att demontera den färdiga maskinen för att fotografera detta stadium!
När allt är sammanlödt sätter du i ett batteri och trycker på knappen. Grattis! Kretsen är klar. Om du inte ser att något lyser, kontrollera varje lödfog noga för att se var det kan vara ett avbrott eller en kortslutning.
Inhägnad
Nu när vi har det fungerar, låt oss lägga det i en låda. Här användes en målad kartong, men man kunde göra något mer permanent med en låda köpt i en hobbyaffär, eller till och med en gammal tupperware-låda. För extra geek cred kan du till och med 3D-skriva ut din egen på en av dessa billiga 3D-skrivare.
Skär ner din protoboard till storlek genom att skära den och försiktigt snäppa bort delar du inte behöver.
Placera din krets inuti ditt hölje och markera var lysdioderna och switchen måste peka igenom. Du kan valfritt också markera var USB-kontakten på Arduino-kortet möter kanten så att du kan koppla in den för att ändra texten utan att öppna lådan. Borra eller skär de hål du behöver i höljet.
Lägg nu lite varmt lim till kanterna på lysdioderna och fäst dem på plats. Jag limmade en bit svamp under kretsen så att den skulle sitta tätt i lådan. Fäst strömbrytaren på fodralet. Jag använde varmt lim, även om skruvar eller bultar skulle göra en mycket starkare anslutning. Du kan också limma batterihållaren på baksidan av kretskortet för att förhindra att den rör sig inuti när föremålet används, men se till att eventuella metallkontakter på höljet inte rör någon av dina lödfogar!
Jobbet är klart!
Stäng upp ditt hölje, och du är klar! För att ändra texten, anslut din USB-kabel till Arduino-kortet och ändra texten inom parentesen efter displayString i slinga metod. Hitta en mörk plats och ha kul!
Har du byggt en POV-maskin tidigare och vet hur du kan förbättra designen? Planerar du att bygga en själv? Berätta för oss om ditt projekt i kommentarerna nedan, vi vill gärna höra det!
Om författaren
Ian Buckley (220 publicerade artiklar)
Ian Buckley är en frilansjournalist, musiker, artist och videoproducent bosatt i Berlin, Tyskland. När han inte skriver eller står på scen, pysslar han med DIY-elektronik eller kod i hopp om att bli en galen vetenskapsman.
Mer från Ian Buckley
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, free e-böcker och exklusiva erbjudanden!
Klicka här för att prenumerera
