Inhoudsopgave:
- Stap 1: Onderdelenlijst
- Stap 2: Stappen van de montage
- Stap 3: 1. Stationaire basis met gelijkstroommotor
- Stap 4: 2. Neopixel-bijlage
- Stap 5: 3. Montage van roterende rig
- Stap 6: 4. Bedrading van elektrische componenten
- Stap 7: 5. Arduino-code
Video: Adventslantaarn met POV-animatie: 7 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Persistence of Vision (POV)-projecten bestaan al geruime tijd, eenvoudige en goedkope doe-het-zelfkits zijn zelfs online te koop. POV is gebaseerd op een optische illusie waarbij we verlichte objecten zien nadat het object niet langer verlicht is, al is het maar voor een korte tijd. Traditionele POV-projecten bevatten stilstaande beelden op basis van dit principe of hooguit lopende klokken. Niets verhindert echter om animaties te projecteren met behulp van microcontrollers met voldoende kloksnelheid en slimme RGB-LED's. Deze specifieke animatie is van een door een rendier gesleept kersttrucje voor adventsversiering die op afstand kan worden bestuurd door elk mobiel apparaat met wifi en een webbrowser. De lantaarn wordt aangedreven door de Wemos ESP8266 D1 Mini-microcontroller van de Arduino-familie. Krediet voor de geanimeerde 8-bit rendier-sleight-frames gaat naar een getalenteerde graficus Richard Fenyo.
Stap 1: Onderdelenlijst
U hebt voor dit project een koffer nodig die zwaar genoeg is om de roterende eenheid op zijn plaats te houden zonder om te vallen. Een oude PSU-behuizing is perfect, pas op dat u de condensatoren laat ontladen voordat u ze uit elkaar haalt. U hebt ook een 5V-12V voedingsadapter nodig om de DC-motor van stroom te voorzien. Werkelijk elke stroomsterkte vanaf 500mA en hoger zal het doen.
Hieronder staan de benodigde onderdelen vermeld met webshoplinks en actuele prijzen.
- 2 stuks 18650 batterij, USD 4, 78
- Batterijhouder voor 2x18650, USD 0, 63
- Wemos D1 Mini, USD 2, 14
- Zwart stro, USD 0, 10
- Infrarood reflecterende sensor, USD 0, 38
- 250V Power-tuimelschakelaar, USD 0, 10
- Toggle schuifschakelaar, USD 0, 02
- 6-900 tpm gelijkstroommotor, USD 3, 99
- Adafruit Neopixel WS2812 8-bit, USD 1, 01
De totale kosten zijn minder dan USD 15,- maar je hebt ook wat handgereedschap, boren, lijm nodig, evenals soldeerapparatuur en vaardigheden.
Stap 2: Stappen van de montage
Na deze stappen kan de unit volledig worden gemonteerd.
- Stationaire basis is gebouwd met een DC-motor en een schakelaar.
- Neopixels zijn gesoldeerd en bevestigd aan de stro-schacht.
- Roterende rig is gebouwd met microcontroller, schuifschakelaar, infraroodsensor en stro-as.
- Bedrading is gesoldeerd op de connectoren van de elektrische onderdelen
- Arduino-code wordt geüpload naar de Wemos-microcontroller.
Stap 3: 1. Stationaire basis met gelijkstroommotor
- Boor een gat in de behuizing en bevestig de gelijkstroommotor zodanig dat de as naar boven wijst.
- Soldeer de tuimelschakelaar en een gewone 5V-12V voedingsadapter volgens het onderstaande bedradingsschema.
- De genoemde DC-motor draait met ongeveer 800 RPM (rotaties per minuut) bij 12V, wat resulteert in ongeveer 10 FPS (frames per seconde) in de uiteindelijke opstelling, afhankelijk van de werkelijke windweerstand van de stro-as.
- Sluit de voedingsadapter aan op het stopcontact (110 of 220V).
- Schakel de rocker in en controleer de werking van de DC-motor.
Vervolgens wordt de roterende rig geassembleerd en bevestigd op de DC-motoras van de basis.
Stap 4: 2. Neopixel-bijlage
- Snijd het uiteinde van het rietje in twee tegenover elkaar liggende zijden aan het ene uiteinde in ongeveer 1,5 cm zoals op de afbeelding te zien is.
- Rijg drie langere draden aan het rietje. Deze zullen Neopixel-pinnen verbinden met Wemos-poorten op de rig.
- Soldeer de drie draden op Neopixel-pinnen GND, 5V en D-IN.
- Heetlijm de draden netjes en opgeruimd van het gesoldeerde uiteinde van Neopixels helemaal tot precies in het midden van de LED-balk.
- Trek de gesneden vleugels van het rietje uit elkaar en lijm ze exact symmetrisch op het midden van de LED-balk (bovenop de draden aan één kant).
- De draden lopen door het rietje tot aan het tuig om de bijpassende Wemos-poorten te bereiken.
Stap 5: 3. Montage van roterende rig
De hele installatie moet volledig worden gemonteerd voordat deze op de DC-motoras wordt bevestigd. De bevestigingsplek moet namelijk uitgebalanceerd worden zodat de rotatie perfect gecentreerd is zonder wiebelen.
- Heetlijm de Wemos D1 Mini-microcontroller en de schuifschakelaar aan één kant van de batterijhouder, zoals op de afbeelding te zien is.
- Heetlijm de infraroodreflectiesensor aan de andere kant van de batterijhouder.
- Plaats de batterijen in de houder.
- Plaats en bevestig het andere uiteinde van het rietje bovenop de batterijen. Een kleine schroef of een rubberen ring zal het doen. Zorg ervoor dat het niet verloren gaat zodra het tuig begint te draaien met 10 RPM.
- Lokaliseer het zwaartepunt van het hele tuig aan de onderkant. Het balanceren op het topje van je vinger zal het doen.
- Maak een klein gaatje op de exacte plek aan de onderkant van de batterijhouder.
- Breng wat hete lijm aan en bevestig de motoras in dat gat. Zorg ervoor dat de hete lijm niet in het motorhuis komt. Houd het stabiel totdat de lijm droogt.
- Knip een klein stukje wit papier en plak het op de stationaire basis zodat de infraroodreflecterende sensor precies in de buurt van dat papier draait. Dit activeert het tekenen van de frames van de animatie op de exacte plaats in elke rotatie. De afbeelding toont dit reflectiestuk in de linkerbenedenhoek van de basis.
Stap 6: 4. Bedrading van elektrische componenten
Volg het bedradingsschema en soldeer de elektrische componenten in de volgende stappen. Merk op dat dezelfde poort van de Wemos D1 Mini-microcontroller meerdere keren wordt gesoldeerd met meerdere verschillende draden. Dat vergt wat oefening, of sluit deze draden ter voorbereiding aan voordat je op de Wemos-poort gaat solderen.
- Drie draden (GND, 5V en D-IN) zijn gesoldeerd op respectievelijk Wemos-poorten G, 5V en D3.
- Twee draden van de infraroodreflecterende sensor (VCC, GND, OUT) zijn gesoldeerd op respectievelijk Wemos-poorten 5V, G en D2.
- De aardedraad van de batterijhouder (zwart) is gesoldeerd op Wemos-poort G.
- De positieve (rode) draad van de batterijhouder is op de dichtstbijzijnde pin van de schuifschakelaar gesoldeerd.
- Wemos 5V-poort is gesoldeerd op de andere pin van de schuifschakelaar.
Stap 7: 5. Arduino-code
Deze specifieke code is voor de 24-bits versie van de POV-lantaarn, kan op afstand worden bestuurd door elk mobiel apparaat met webbrowser en heeft visuele effecten zoals Wereldkaart, Matrix-animatie-effect en de Reindeer Sleight-animatie. Voel je vrij om het aantal pixels, effectparameters of WiFi-afstandsbedieningsinterface aan te passen aan je behoeften in de broncode.
// 24 bits POV-lantaarn - 2019 Peter Csurgay
#include ESP8266WiFiMulti.h
#include WiFiClient.h #include ESP8266WebServer.h #include WebSocketsServer.h #include Adafruit_NeoPixel.h
#define DEBUG 1
String tekst [3] = { "INSTRUCTABLES", "ARDUINO", "WEDSTRIJD" };
const uint8_t palet [8][3] = {
{ 0, 0, 0 }, // 0 - Transparant { 0, 0, 127 }, // 1 - Blauw { 127, 0, 0 }, // 2 - Rood { 127, 127, 0 }, // 3 - Geel { 0, 127, 0 }, // 4 - Groen { 127, 24, 0 }, // 5 - Oranje { 127, 0, 127 }, // 6 - Magenta { 127, 127, 127 } // 7 - Wit };
const unsigned char world[24][42] PROGMEM =
{ { 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
const unsigned char pepper[24][8+31] PROGMEM =
{ { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
const unsigned char abc[8][27*5] PROGMEM = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
const unsigned char santa [4][8][41] PROGMEM = {
{ { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 } } };
#define INFRATRIGGER_PIN D2
#define NEOPIXELS_PIN D3 #define NEO_NUMPIXELS 24
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NEO_NUMPIXELS, NEOPIXELS_PIN, NEO_GRB + NEO_KHZ800);
IPA-adres lokaalIP-adres;
IP-adres apIP-adres; WiFiServer-server (80); WebSocketsServer webSocket = WebSocketsServer(81); uint8_t canvas[24][65]; uint8_t co = 0; uint8_t scène = 0; uint8_t numScenes = 5; String scenes [6] = { "WERELD", "SANTA", "PEPPER", "TEXT", "MATRIX" }; uint8_t roteren = 1; uint8_t numGreens = 0; // MATRIX aantal vallende lijnen uint8_t greens[64][2]; // MATRIX willekeurige pos x en y van vallende lijnen
ongeldige setup() {
if (DEBUG) { Serial.begin (9600); Serial.println("Start…"); } vertraging (3000);
ESP8266WiFiMulti wifiMulti;
wifiMulti.addAP("wifissid", "pwd"); wifiMulti.addAP("mobilessid", "pwd"); wifiMulti.addAP("laptopssid", "pwd"); if (DEBUG) Serial.print("Verbindstation met "); while (wifiMulti.run() != WL_CONNECTED) { delay(1000); if (DEBUG) Serial.print("."); } if (DEBUG) Serial.println(""); if (DEBUG) Serial.print("WiFi verbonden: SSID="); if (DEBUG) Serial.println(WiFi. SSID()); localIPaddress = WiFi.localIP(); if (DEBUG) Serial.print("Local Station IP-adres: "); if (DEBUG) Serial.println(localIPaddress);
server.begin();
if (DEBUG) Serial.println("Server(80) gestart"); webSocket.begin(); webSocket.onEvent (webSocketEvent); if (DEBUG) Serial.println("WebSocket(81) gestart"); uint8_t coli = 0; for (int i=0; i<24; i++) { for (int j=0; j<64; j++) { canvas[j] = coli++; coli = coli % 7; } doek[64] = 0; } pinMode (INFRATRIGGER_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(INFRATRIGGER_PIN), verf, RISING); pixels.begin(); pixels.show(); if (DEBUG) { Serial.print("Neopixel gestart, NUMPIXELS: "); Serial.println(pixels.numPixels()); } }
void webSocketEvent (uint8_t num, WStype_t type, uint8_t * payload, size_t lengte) {
if (type == WStype_TEXT){ String req = String ((const char *)payload); if (DEBUG) { Serial.print("81 Req: "); Serial.println(req); } procesReq(req); } }
String rip2(String s) {
Snaaronderzoek; int i=0; while(s!='/') i++; i++; while(s!='/') i++; i++; while(s!='/' && s!=' ' && s!='\r' && s!='\n') res += s[i++]; retourneert; }
void processReq(String req) {
if (req.indexOf("/rotate") != -1) { roteren = 1; } else if (req.indexOf("/scene") != -1) { roteren = 0; String sc = rip2(req); if (isDigit(sc[0])) scene = sc.toInt(); anders {scène = 0; voor (int i=0; i
lege lus() {
webSocket.loop(); WiFiClient-client = server.beschikbaar(); if (!client) { return; } String req = client.readStringUntil('\r'); if (DEBUG) { Serial.print("80 Req: "); Serial.println(req); } procesReq(req);
cliënt.flush();
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\nAccess-Control-Allow-Headers: Content-Type\r\nAccess-Control-Allow-Origin: *\r\nVerbinding: sluiten\r\n\r\n"; s += "localIP: " + ipToString(localIPaddress) + ""; s += "apIP: " + ipToString(apIPadres) + ""; klant.afdruk(ten); vertraging (100); klant.stop(); }
ongeldige verf() {
for (int i=0; i<65; i++) { for (int j=0; j<24; j++) { unsigned char ind = canvas[j]; pixels.setPixelColor(j, pixels. Color(palet[ind][0], palet[ind][1], palet[ind][2])); } pixels.show(); vertraging Microseconden (10); } co = (co + 1) % 40; if (roteren) { if (co==0) { scene = (scene+1) % numScenes; if (DEBUG) { Serial.print("Scène: "); Serial.println(scène); } } if (co==0) loadCanvas(scènes[scène]); } if (scènes[scène].indexOf("SANTA") != -1) { for (int i=0; i<8; i++) for (int j=0; j=co && j
void loadCanvas (String wat) {
clearCanvas(); if (DEBUG) { Serial.print("loadCanvas: "); Serial.println(wat); } if (what.indexOf("TEXT") != -1) { for (int l=0; l<3; l++) for (int n=0; n=12 && j<51) canvas[j] = pgm_read_byte_near(peper+j-12); } else if (what.indexOf("WORLD") != -1) { for (int i=0; i<24; i++) for (int j=0; j=11 && j<53) canvas [j] = pgm_read_byte_near(wereld+j-11); } }
leegte clearCanvas() {
if (DEBUG) Serial.println("clearCanvas"); voor (int i=0; i<24; i++) voor (int j=0; j<65; j++) canvas[j] = 0; }
String ipToString(IP-adres ip) {
Tekenreeks s=""; voor (int i=0; i<4; i++) s += i ? "." + String(ip): String(ip); geeft terug; }
Aanbevolen:
Maak je eigen POV LED-globe: 5 stappen (met afbeeldingen)
Maak je eigen POV LED Globe: In dit project laat ik je zien hoe ik een paar stalen stukken heb gecombineerd met een Arduino, een APA102 LED Strip en een Hall-effectsensor om een POV (persistentie van visie) RGB LED Globe te creëren. Hiermee kun je allerlei bolvormige afbeeldingen maken
Hoe maak je een fan POV-weergave: 6 stappen (met afbeeldingen)
Hoe maak je een fan POV-display: In dit project laat ik je zien hoe ik een gewone oude fan heb getransformeerd in een LED POV-display die je lichtpatronen, woorden of zelfs de tijd kan laten zien. Laten we beginnen
Eén POV-display om ze allemaal te regeren! 10 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Eén POV-display om ze allemaal te regeren!: Motivatie Ik hou echt van POV-displays (persistentie van visie)! Ze zijn niet alleen interessant om naar te kijken, maar ook een grote uitdaging om ze te ontwikkelen. Het is echt een interdisciplinaire taak. Je hebt veel vaardigheden nodig: mechanisch, elektronisch, programmeren en
Eenvoudige POV maken: 6 stappen (met afbeeldingen)
Hoe maak je een eenvoudige POV: Hallo, vandaag ben ik terug met een interessant project LED POV (Persistence of Vision) Met dit project kun je een naam weergeven die 5 letters bevat. Het is heel eenvoudig projectwerk met arduino. Maak je geen zorgen als je zijn beginner met arduino, dan moet je defi
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze