Advertentie
Je kunt van alles doen met knipperende LED's, en in dit eenvoudige project maken we een klein apparaatje dat berichten in de lucht oplicht als je heen en weer zwaait. Het is gemakkelijker dan u denkt en de totale kosten van onderdelen zijn minder dan $ 5.
Dit project maakt gebruik van een optische illusie die persistentie van het gezichtsvermogen wordt genoemd om tekst in de lucht te laten verschijnen. U bent dit fenomeen waarschijnlijk tegengekomen wanneer iemand 's nachts snel een brandend sterretje beweegt. We zullen een Arduino en enkele LED's gebruiken om dit effect na te bootsen. Dit project is eenvoudig te bouwen, met weinig componenten en weinig solderen (maar als je wat tips wilt om aan de slag te gaan met je soldeerbout, bekijk dan deze gids Leer hoe u kunt solderen met deze eenvoudige tips en projectenBen je een beetje geïntimideerd door de gedachte aan een heet strijkijzer en gesmolten metaal? Als je met elektronica wilt gaan werken, moet je leren solderen. Laat ons helpen. Lees verder ).
Je zal nodig hebben
- Arduino (ik gebruikte een Nano van $ 2 omdat hij compact en goedkoop is, maar elk model zou goed moeten zijn).
- 5x Rode leds.
- 5x 220 Ohm weerstanden.
- 1x 9v batterijhouder.
- 1x tuimelschakelaar.
- 1x stuk protoboard.
- Een behuizing voor het eindproduct (ik gebruikte een kleine kartonnen doos die zwart geverfd was).
Je hebt ook een soldeerbout en wat soldeer nodig om alles in elkaar te zetten.
Hoewel optioneel, kan een soldeer lont erg handig zijn als u soldeerfouten maakt. Een breadboard en enkele aansluitdraden zijn ook handig om je circuit te testen.

Bedrading
De bedrading kan niet eenvoudiger zijn. Sluit eerst uw Arduino, LED's en weerstanden aan zoals weergegeven in dit diagram.

De pinnen D2 tot en met D6 gaan respectievelijk naar elke weerstand, die zijn bevestigd aan de positieve anode (lange poot) van elke LED. De kathode is verbonden met aarde, die weer aansluit op de Arduino. Als het klaar is, ziet het er ongeveer zo uit:

Dat is het: ons circuit is klaar! We zullen er later een batterijbehuizing en een schakelaar aan toevoegen, maar dit is alles wat we nodig hebben om te testen of het werkt.
Code
Sluit nu uw Arduino aan op de computer en open de Arduino IDE. Als u de Arduino nog niet eerder hebt gebruikt en een goede handleiding wilt hebben om aan de slag te gaan, deze link Aan de slag met Arduino: een beginnershandleidingArduino is een open-source prototypeplatform voor elektronica, gebaseerd op flexibele, gebruiksvriendelijke hardware en software. Het is bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees verder zal nuttig zijn.
Open een nieuwe schets en kopieer deze code in. De code is gewijzigd van dit project en je kunt het volledig downloaden op deze Gist.
// hoe lang elke led blijft branden. int delayTime = 1; // hoe lang tussen elke int charBreak = 3; // hoe lang u moet wachten nadat het bericht is voltooid voordat het wordt herhaald. int resetTime = 20; int LED1 = 2; int LED2 = 3; int LED3 = 4; int LED4 = 5; int LED5 = 6; ongeldige 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 ik [] = {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}; leegte displayLine (int line) { int myline; myline = lijn; if (myline> = 16) {digitalWrite (LED1, HIGH); myline- = 16;} anders {digitalWrite (LED1, LOW);} if (myline> = 8) {digitalWrite (LED2, HIGH); myline- = 8;} anders {digitalWrite (LED2, LOW);} if (myline> = 4) {digitalWrite (LED3, HIGH); myline- = 4;} anders {digitalWrite (LED3, LOW);} if (myline> = 2) {digitalWrite (LED4, HIGH); myline- = 2;} anders {digitalWrite (LED4, LOW);} if (myline> = 1) {digitalWrite (LED5, HIGH); myline- = 1;} anders {digitalWrite (LED5, LOW);} } nietig displayChar (char c) { if (c == 'a') {voor (int i = 0; ik <5; i ++) {displayLine (a [i]); delay (delayTime);} displayLine (0);} if (c == 'b') {voor (int i = 0; ik <5; i ++) {displayLine (b [i]); delay (delayTime);} displayLine (0);} if (c == 'c2') {voor (int i = 0; ik <5; i ++) {displayLine (c2 [i]); delay (delayTime);} displayLine (0);} if (c == 'd') {voor (int i = 0; ik <5; i ++) {displayLine (d [i]); delay (delayTime);} displayLine (0);} if (c == 'e') {voor (int i = 0; ik <5; i ++) {displayLine (e [i]); delay (delayTime);} displayLine (0);} if (c == 'f') {voor (int i = 0; ik <5; i ++) {displayLine (f [i]); delay (delayTime);} displayLine (0);} if (c == 'g') {voor (int i = 0; ik <5; i ++) {displayLine (g [i]); delay (delayTime);} displayLine (0);} if (c == 'h') {voor (int i = 0; ik <5; i ++) {displayLine (h [i]); delay (delayTime);} displayLine (0);} if (c == 'i') {voor (int it = 0; het <5; it ++) {displayLine (i [it]); delay (delayTime);} displayLine (0);} if (c == 'j') {voor (int i = 0; ik <5; i ++) {displayLine (j [i]); delay (delayTime);} displayLine (0);} if (c == 'k') {voor (int i = 0; ik <5; i ++) {displayLine (k [i]); delay (delayTime);} displayLine (0);} if (c == 'l') {voor (int i = 0; ik <5; i ++) {displayLine (l [i]); delay (delayTime);} displayLine (0);} if (c == 'm') {voor (int i = 0; ik <5; i ++) {displayLine (m [i]); delay (delayTime);} displayLine (0);} if (c == 'n') {voor (int i = 0; ik <5; i ++) {displayLine (n [i]); delay (delayTime);} displayLine (0);} if (c == 'o') {voor (int i = 0; ik <5; i ++) {displayLine (o [i]); delay (delayTime);} displayLine (0);} if (c == 'p') {voor (int i = 0; ik <5; i ++) {displayLine (p [i]); delay (delayTime);} displayLine (0);} if (c == 'q') {voor (int i = 0; ik <5; i ++) {displayLine (q [i]); delay (delayTime);} displayLine (0);} if (c == 'r') {voor (int i = 0; ik <5; i ++) {displayLine (r [i]); delay (delayTime);} displayLine (0);} if (c == 's') {voor (int i = 0; ik <5; i ++) {displayLine (s [i]); delay (delayTime);} displayLine (0);} if (c == 't') {voor (int i = 0; ik <5; i ++) {displayLine (t [i]); delay (delayTime);} displayLine (0);} if (c == 'u') {voor (int i = 0; ik <5; i ++) {displayLine (u [i]); delay (delayTime);} displayLine (0);} if (c == 'v') {voor (int i = 0; ik <5; i ++) {displayLine (v [i]); delay (delayTime);} displayLine (0);} if (c == 'w') {voor (int i = 0; ik <5; i ++) {displayLine (w [i]); delay (delayTime);} displayLine (0);} if (c == 'x') {voor (int i = 0; ik <5; i ++) {displayLine (x [i]); delay (delayTime);} displayLine (0);} if (c == 'y') {voor (int i = 0; ik <5; i ++) {displayLine (y [i]); delay (delayTime);} displayLine (0);} if (c == 'z') {voor (int i = 0; ik <5; i ++) {displayLine (z [i]); delay (delayTime);} displayLine (0);} if (c == '!') {voor (int i = 0; ik <5; i ++) {displayLine (excl [i]); delay (delayTime);} displayLine (0);} if (c == '?') {voor (int i = 0; ik <5; i ++) {displayLine (ques [i]); delay (delayTime);} displayLine (0);} if (c == '.') {voor (int i = 0; ik <5; i ++) {displayLine (eos [i]); delay (delayTime);} displayLine (0);} if (c == '') {voor (int i = 0; ik <5; i ++) {displayLine (spatie [i]); delay (delayTime);} displayLine (0);} vertraging (charBreak); } void displayString (char * s) {for (int i = 0; ik <= strlen (s); i ++) {displayChar (s [i]); } } void loop () {// Verander de tekst hier binnen om de weergegeven tekst te veranderen. // Zorg ervoor dat u de haakjes en de aanhalingstekens behoudt. displayString (".. hallo ..."); vertraging (40); }
Sla de schets op en upload deze naar je bord. Als u fouten krijgt, zorg dan dat u de juiste kaart en com-poort hebt geselecteerd. Uw LED's zouden moeten gaan knipperen. Als dat niet het geval is, controleer dan al je verbindingen op je breadboard. De gehele getallen die aan het begin van de code zijn gedeclareerd, bepalen hoe snel de tekst wordt weergegeven. Hoe hoger het nummer, hoe sneller u het apparaat moet zwaaien. Ik ontdekte dat de hier gebruikte nummers goed werkten.
Nu om een snelle test te doen. Koppel uw Arduino los van de USB-kabel en bevestig uw batterijhouder aan de VIN- en GND-pinnen van uw Arduino

Nu je het kunt verplaatsen, probeer je voorzichtig de LED's voor je te zwaaien. Je zou een paar letters in de lucht moeten zien verschijnen, op voorwaarde dat het donker genoeg om je heen is. Ik merkte dat het hielp om mijn telefoon in te stellen om dit vast te leggen.

Het werkt! Om het nu wat permanenter te maken.
IJzers in de aanslag!
Leg je Arduino-bord, weerstanden en LED's als volgt op je protoboard:

Je kunt de layout natuurlijk zo compact maken als je wilt, zolang het circuit maar hetzelfde blijft. Zorg ervoor dat u aan elke kant van uw Arduino ten minste één regel protoboard-contacten laat voor de componenten en voeding. Als je een beginner bent in elektronica, zijn hier enkele goede tips voor jou Elektronica voor beginners: 10 vaardigheden die u moet kennenVelen van ons hebben nog nooit een soldeerbout aangeraakt, maar dingen maken kan ongelooflijk lonend zijn. Hier zijn tien van de meest elementaire DIY-elektronicavaardigheden om u op weg te helpen. Lees verder .
We zullen de LED-kathodes samen in een lijn solderen om een gemeenschappelijke basis te maken, net zoals we deden toen we onze maakten LED-matrix Upgrade uw kerstkrans met een bewegingsgeactiveerde LED-matrixDeze DIY-kerstkrans maakt gebruik van een Arduino en LED-matrix om een geweldig verlicht display te produceren dat indruk zal maken op je vrienden en familie. Lees verder .

Vouw elke kathode zodat deze de volgende overlapt en soldeer ze om een ononderbroken lijn te creëren. Nu moeten we onze anodes solderen aan de poten van de weerstanden ernaast. Ik vond de gemakkelijkste manier om dit te doen door elk been aan hun respectievelijke pad te solderen en vervolgens de strijk ertussen om beide gewrichten te verwarmen, voordat je eindelijk meer soldeer toevoegt om de kloof ertussen te overbruggen hen.
Controleer elke verbinding om te zien of deze stevig is bevestigd en gebruik vervolgens draadscharen om de overtollige poten van de weerstanden en LED's af te snijden.

Nu om dezelfde taak te herhalen, maar deze keer het andere uiteinde van onze weerstanden verbinden met de poten van de Arduino. Dit is het lastigste deel van het solderen. Elke weerstand hecht veel alleen aan zijn Arduino-pin, anders werkt het circuit niet zoals het bedoeld is. Ik heb hier verschillende fouten gemaakt en moest soldeer lont gebruiken om meerdere keren ongewenste soldeer te verwijderen.
Nadat u alle juiste verbindingen hebt gemaakt, controleert u nogmaals of geen van hen overlapt met hun buren. Als u hier toegang heeft tot een multimeter, kunt u de continuïteitsmodus gebruiken om te controleren of elke pin alleen een ononderbroken lijn naar de weerstand heeft. Als je net een multimeter hebt, is er een geweldige handleiding om aan de slag te gaan in dit artikel. 7 DIY-technische vaardigheden om uw kinderen te leren, omdat scholen dat niet zullen doen Lees verder

Nadat u elke verbinding hebt gecontroleerd, knipt u de overtollige lengte van de poten van de weerstanden
Kracht toevoegen
Leid nu een stuk draad van de GND-pin van uw Arduino naar een gat naast waar uw lijn gesoldeerde kathodes eindigt, en plaats de zwarte draad van uw batterijhouder ernaast.

Soldeer nu de draad aan de GND-pin, op dezelfde manier als we deden met de weerstanden, en soldeer beide draden aan het einde van de lijn van kathoden om een gemeenschappelijke aarde voor het circuit te creëren.
Bevestig ten slotte een draad aan de VIN-pin van uw Arduino en plaats uw schakelaar tussen die draad en de batterij. Excuses voor de met hete lijm bedekte schakelaar op deze foto, ik moest de voltooide machine demonteren om deze fase te fotograferen!

Zodra alles aan elkaar is gesoldeerd, plaatst u een batterij en drukt u op de schakelaar. Gefeliciteerd! Het circuit is klaar. Als u niets ziet oplichten, controleer dan zorgvuldig elke soldeerverbinding om te zien waar er een breuk of kortsluiting kan zijn.
Behuizing
Nu we het hebben, laten we het in een doos stoppen. Hier werd een geverfde kartonnen doos gebruikt, hoewel je iets duurzamer kon maken met een doos die je in een hobbywinkel had gekocht, of zelfs een oude tupperware-doos. Voor extra geek-cred, zou je zelfs je eigen 3D kunnen printen een van deze goedkope 3D-printers. 5 goedkope 3D-printers die u vandaag echt kunt kopenEen paar jaar geleden waren zelfs de goedkoopste 3D-printers ongemakkelijk dicht bij de grens van $ 1.000 - nu kun je een hoogwaardige 3D-printer krijgen voor slechts $ 400. Lees verder
Snijd je protoboard op maat door het te scoren en voorzichtig delen weg te knippen die je niet nodig hebt.

Plaats uw circuit in uw behuizing en markeer waar de LED's en de schakelaar doorheen moeten steken. U kunt optioneel ook markeren waar de USB-connector op het Arduino-bord de rand raakt, zodat u deze kunt aansluiten om de tekst te wijzigen zonder de doos te openen. Boor of snijd de benodigde gaten in de behuizing.

Voeg nu een beetje hete lijm toe aan de randen van de LED's en plak ze op hun plaats. Ik heb een stuk spons onder het circuit gelijmd zodat het goed in de doos zou zitten. Bevestig uw schakelaar aan de zaak. Ik heb hete lijm gebruikt, hoewel schroeven of bouten een veel sterkere verbinding zouden maken. U kunt ook de batterijhouder aan de achterkant van de printplaat lijmen om te voorkomen dat deze binnenin beweegt het item is in gebruik, maar zorg ervoor dat metalen contactpunten op de behuizing geen van uw soldeerverbindingen raken!

Job is klaar!
Sluit uw behuizing en u bent klaar! Om de tekst te wijzigen, sluit u uw USB-kabel aan op het Arduino-bord en wijzigt u daarna de tekst tussen de haakjes displayString in de lus methode. Zoek een donkere plek en veel plezier!

Heeft u al eerder een POV-machine gebouwd en weet u hoe u het ontwerp kunt verbeteren? Ben je van plan er zelf een te bouwen? Vertel ons over uw project in de onderstaande opmerkingen, we horen het graag!
Ian Buckley is freelance journalist, muzikant, artiest en videoproducent en woont in Berlijn, Duitsland. Als hij niet schrijft of op het podium staat, sleutelt hij aan doe-het-elektronica of code in de hoop een gekke wetenschapper te worden.