Inhoudsopgave:
- Benodigdheden
- Stap 1: Laten we een feed maken in Adafruit
- Stap 2: Laten we nu een dashboard maken
- Stap 3: Verkrijg onze sleutel
- Stap 4: Open het voorbeeld van het lezen van feeds
- Stap 5: Laten we onze verbinding opzetten
- Stap 6: Controleer de verbinding met Adafruit IO
- Stap 7: Laat LED
- Stap 8: Timing toevoegen aan de timer
- Stap 9: Aftellen
- Stap 10: Maak het op afstand bestuurbaar: deel I
- Stap 11: Maak het op afstand bestuurbaar: deel II
- Stap 12: Speel rond! We zijn klaar… of zijn we dat?
- Stap 13: EXTRA: Tijdelijke knop maken
- Stap 14: EXTRA: voeg de resetfunctie toe
Video: Op afstand bediende timer met NodeMCU - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Hier gaan we een timer maken met behulp van een NodeMCU en Adafruit. We gaan onze timer weergeven met een LED-strip en we kunnen hem bedienen met onze telefoon of computer!
Ons doel:
Maak een timer met behulp van een LED-strip die we kunnen: starten, pauzeren en resetten met onze telefoon of computer.
Benodigdheden
Hardware:
- NodeMCU ESP 8266
- Adafruit NeoPixel LED-strip
Bibliotheken:
- Adafruit_NeoPixel.h
- AdafruitIO_WiFi.h
Ander:
Een fatsoenlijke wifi-verbinding
Stap 1: Laten we een feed maken in Adafruit
Nu we alles hebben wat we nodig hebben, zijn we klaar om te gaan bouwen! Allereerst moeten we een feed aanmaken in Adafruit. Adafruit is een service die het voor ons heel gemakkelijk maakt om onze Arduino met internet te verbinden en handige op afstand bedienbare functies te maken. Meld je aan voor Adafruit als je dat nog niet hebt gedaan.
Laten we nu een nieuwe feed maken
We kunnen onze feed elke naam geven die we willen, ik noem het 'timer'.
Wat een feed doet, is alles wat we doen op te nemen in ons dashboard (dat we binnen een minuut zullen maken) en die gegevens naar ons bord stuurt, maar dat is iets waar we naar zullen kijken zodra we gegevens hebben die moeten worden verzonden.
Stap 2: Laten we nu een dashboard maken
Op dezelfde manier waarop we een feed hebben gemaakt, gaan we een nieuw dashboard maken. Ik noem mijn dashboard: 'timer interface' want dat is eigenlijk wat ons dashboard zal zijn: een interface met de knoppen om onze timer te bedienen.
Stap 3: Verkrijg onze sleutel
Als we onze Arduino met onze feed willen verbinden, hebben we onze Adafruit-sleutel nodig, dit is uw geheime wachtwoord dat ervoor zorgt dat alleen u verbinding kunt maken met uw feeds.
U kunt uw sleutel ophalen door op de gele AIO Key-knop rechtsboven in uw scherm in Adafruit te klikken.
Bewaar deze sleutel ergens, we hebben hem later nodig.
Deel uw sleutel niet! Anders kunnen mensen met slechte bedoelingen verbinding maken met uw feeds en apparaten.
Stap 4: Open het voorbeeld van het lezen van feeds
Laten we nu onze Arduino IDE openen en het coderingsproces starten. Allereerst moeten we de Adafruit IO Arduino-bibliotheek hebben geïnstalleerd.
Weet u niet hoe u bibliotheken moet installeren? dit is een geweldige gids van Adafruit: Arduino Libraries
Adafruit biedt veel kant-en-klare voorbeelden die we kunnen gebruiken en waarvan we kunnen leren. Een van deze voorbeelden is: adafruitio_21_feed_read. U kunt dit voorbeeld hier vinden: Bestand - Voorbeelden Adafruit IO Arduino adafruitio_21_feed_read
(excuseer mijn nederlandse interface in de afbeelding)
Stap 5: Laten we onze verbinding opzetten
Als je de schets adafruitio_21_feed_read met succes hebt geopend, zou je 2 tabbladen in je schets moeten zien: adafruitio_21_feed_read en config.h. Deze schets is gemaakt zodat we kunnen aansluiten op de feed die we in stap 1 hebben gemaakt.
Om verbinding te maken met deze feed moeten we een paar details invullen over onze wifi en ons Adafruit-account,
Laten we naar config.h reizen, hier vullen we de volgende details in:
Uw Adafruit-gebruikersnaam:
#define IO_USERNAME "joopert"
Uw Adafruit-sleutel:
#define IO_KEY "1234567890abcdefghijklmnop"
De naam van je wifi:
#define WIFI_SSID "MijnWifi"
En je wifi-wachtwoord:
#define WIFI_PASS "aVerySecretPassword"
Laten we nu teruggaan naar het tabblad adafruitio_21_feed_read en invullen:
Uw Adafruit-gebruikersnaam… nogmaals:
#define FEED_OWNER "joopert"
En tot slot je feednaam (van de feed die we in stap 1 hebben gemaakt):
AdafruitIO_Feed *sharedFeed = io.feed("timer", FEED_OWNER);
Stap 6: Controleer de verbinding met Adafruit IO
Om te controleren of de stappen die we eerder hebben genomen correct zijn uitgevoerd, gaan we onze schets uploaden naar de NodeMCU. Als u uw seriële monitor opent, zou deze er ongeveer zo uit moeten zien als de afbeelding hierboven. Eerst laat de seriële monitor zien dat hij verbinding probeert te maken met je wifi en met Adafruit. als dat compleet is, zou er moeten staan:
Adafruit IO aangesloten
Dit is geweldig nieuws! Nu kunnen we beginnen met het toevoegen van functionaliteit aan onze timer…
Stap 7: Laat LED
Nu is het tijd om onze LED-strip aan te zetten!
Verbind uw LED-strip met de D5-pincode (als u de D5 niet kunt vinden, verbind hem dan met een andere pincode en wijzig de LED_PIN in de code).
Definieer ledstrip
De volgende code voegt de NeoPixel-bibliotheek toe (lees hier meer over deze bibliotheek: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) en zorgt ervoor dat onze Arduino weet waar onze LED-strip is en hoeveel lampen het heeft. Als je ledstrip andere specificaties heeft, verander dit dan in de code.
Voeg de volgende code BOVEN de void setup():
// stel NeoPixel-verbinding in#include #ifdef _AVR_ #include #endif
#define LED_PIN D5 // Waar is de ledstrip op aangesloten?
#define LED_COUNT 30 // Hoeveel pixels heeft het?
#define HELDERHEID 50 // NeoPixel-helderheid, 0 (min) tot 255 (max)
Adafruit_NeoPixel-strip (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
Opstarten LED-strip
Nu zullen we onze LED-strip opstarten en de helderheid instellen (helderheid gaat van 0 min tot 255 max, maar ik raad 50 aan … 255 is ECHT helder).
Voeg de volgende code toe IN de void setup():
strip.begin(); // INITIALISEER NeoPixel-stripobject (VEREIST) strip.show (); // Schakel alle pixels zo snel mogelijk UIT strip.setBrightness (50); // Stel HELDERHEID in op ongeveer 1/5 (max = 255)
ledsAan(); // Roept de functie op om elke LED één voor één in te schakelen
Doe het licht aan
Misschien is het je al opgevallen dat we een functie aanroepen die nog niet bestaat, dat wordt ons volgende deel van het coderen. Als we onze lichten willen aandoen, moeten we een 'for-lus' maken die elke individuele LED één voor één aanzet (weet niet wat een for-lus is? Bekijk het hier: www.arduino.cc/reference/ nl/taal/structuur/controlestructuur/voor/).
Nu gaan we de functie maken: ledsOn();
Voeg de volgende code HIERONDER void handleMessage() toe:
void ledsOn () { for (int i = 0; i < strip.numPixels (); i ++) { // Voor elke pixel in strip … strip.setPixelColor (i, 0, 0, 255); // Stel de kleur van de pixel in op blue strip.show(); // Update strip om overeen te komen } }
Uploaden
Nu is het leuke gedeelte, laten we onze code uploaden naar de NodeMCU… Als alles correct werkt, zou je LED-strip nu volledig blauw moeten worden!
Verschijnen er geen pixels?: heb je de strip aan de juiste pincode gekoppeld? Of misschien is uw internetverbinding weggevallen.
Worden er maar een paar pixels niet weergegeven?: controleer of je het juiste aantal pixels hebt ingesteld!
Stap 8: Timing toevoegen aan de timer
Nu gaan we ervoor zorgen dat onze timer eigenlijk… nou ja… tijden, iets.
Er zijn verschillende manieren om timing te doen met Arduino, een daarvan is delay(), dit stopt de verwerking van ons bord voor een bepaalde periode. We gaan dit niet gebruiken omdat onze Arduino in principe vastloopt tijdens de vertraging, en we willen dat ons bord regelmatig wordt bijgewerkt. Dus we gaan Millis() gebruiken, dit is een elegantere manier om timing in Arduino te doen, met Millis() kunnen we nog steeds code tussen intervallen uitvoeren.
Als je geïnteresseerd bent in hoe dit werkt, kun je dit artikel lezen:
Laten we de code voor Millis() toevoegen:
Zet deze code BOVEN de void setup()
unsigned lange vorigeMillis = 0; // slaat de laatste keer op dat de LED-strip werd bijgewerktint interval = 1000; // interval van onze timer (milliseconden)
En laten we deze code IN de void loop():
unsigned long currentMillis = millis();// start TIMER RITHM ********************************************* ********** if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis;
// eind TIMER RITME ********************************************* **********
Wat we zojuist hebben gedaan, was een ritme maken voor onze LED-strip om LED's uit te schakelen, in de volgende stap zullen we de code toevoegen om precies dat te doen.
Stap 9: Aftellen
In deze stap: we zullen een functie maken die ervoor zorgt dat we elke seconde (of welk interval je ook hebt ingesteld) ÉÉN LED aan het einde van de strip uitschakelen totdat al onze LED's uit zijn.
We maken bovenaan een 'int' genaamd 'leds'. Dit zal onze timer later vertellen hoeveel leds hij nog moet uitschakelen.
Voeg de volgende code BOVEN de void setup():
int leds = LED_COUNT-1; // tels hoeveel pixels moeten worden verlicht
Laten we nu de functie 'timer();' toevoegen, hierdoor gaat elke seconde een lampje uit
Voeg de volgende code toe ONDER de lege ledsOn():
void timer () { strip.setPixelColor (leds, 0, 0, 0);
if (leds > -1) { leds--; } anders { blinkie(); } }
We willen de gebruiker wat feedback geven dat de timer klaar is nadat alle lichten zijn doorgebrand. Met 'blinkie();' de LED's knipperen rood nadat de timer is afgelopen!
Voeg de volgende code BOVEN de void setup():
int blinkStatus = 1; // vertelt de blinkie(); functie of het licht aan of uit moet zijn
Voeg de volgende code toe ONDER de void timer():
void blinkie() { if (blinkStatus == 1) {
knipperstatus = 0; strip.clear(); } else { blinkStatus = 1; for (int i = 0; i <strip.numPixels(); i++) {// Voor elke pixel in strip… strip.setPixelColor(i, 255, 0, 0); // Stel de kleur van de pixel in (in RAM) strip.show(); // Update strip zodat deze overeenkomt met } } } }
Ten slotte moeten we de functie aanroepen in onze void loop();, Weet je nog het TIMER RITHM dat we in stap 8 hebben toegevoegd? In dit if-statement noemen we de functie timer();.
TIMER RITHM zou er nu als volgt uit moeten zien:
// start TIMER RITHM ********************************************* *******
if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; tijdopnemer(); strip.show();} // einde TIMER RITHM ************************************ ****************
Upload nu deze code!
Op dit moment zou uw LED-strip elke seconde 1 LED moeten uitschakelen en rood knipperen als het klaar is …
Laten we deze motherlover nu op afstand bestuurbaar maken!
Stap 10: Maak het op afstand bestuurbaar: deel I
We hebben onze timer, dat is allemaal prima, maar ik heb je beloofd dat je hem met je telefoon zou kunnen bedienen, toch? Laten we de laatste fase van ons project ingaan: onze timer op afstand bedienen.
Staat je Adafruit-tabblad nog steeds open? Laten we teruggaan naar io.adafruit.com en laten we naar ons timerinterface-dashboard gaan en een nieuw blok maken: TOGGLE
- Verbind de schakelaar met de TIMER-feed
- Stel de AAN-waarde in op: 1
- Stel de UIT-waarde in op: 0
De reden hiervoor is dat Adafruit geen tekstgegevens naar onze NodeMCU stuurt, maar alleen cijfers.
Je kunt de Toggle ook een naam geven als je wilt, misschien: 'Aan/Uit schakelaar'
Laten we nu teruggaan naar de Arduino IDE
Laten we onze code nogmaals UPLOADEN om er zeker van te zijn dat onze code up-to-date is.
OPEN DE SERILE MONITOR zodra het uploaden klaar is en DRUK een paar keer op DE SCHAKELAAR op ons Adafruit-dashboard. We zouden nu zoiets als dit moeten zien opduiken in onze seriële monitor:
ontvangen <- 0ontvangen <- 1 ontvangen <- 0 ontvangen <- 1 ontvangen <- 0
Dit betekent dat we controles daadwerkelijk naar onze NodeMCU kunnen sturen!
Als u deze berichten niet ontvangt, controleer dan of uw Adafruit-gegevens in uw config.h nog steeds correct zijn.
Stap 11: Maak het op afstand bestuurbaar: deel II
Nu rest er alleen nog iets te doen met onze ontvangen controles.
Om dat te doen, moeten we ons TIMER RYTHM if-statement in de void loop(); een klein beetje.
We gaan onze NodeMCU vertellen dat hij de timer pas moet starten als we '1' (wat betekent: AAN) van Adafruit hebben ontvangen.
Laten we eerst de gegevens verzamelen die Adafruit ons stuurt
Voeg de volgende code BOVEN de void setup():
int adaData; // verzamelt de gegevens die AdaFruit ons stuurt
Laten we die gegevens nu eens gaan verzamelen
Voeg de volgende code toe BINNEN de void handleMessage():
adaData = data->toInt();
Laten we onze void loop();
TIMER RITHM zou er nu als volgt uit moeten zien:
// start TIMER RITHM ********************************************* *********if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (adaData == 0) { Serial.println ("ik ben niet actief"); } else if (adaData == 1) { timer(); } strip.show(); } // eind TIMER RITME ********************************************* ***********
UPLOADEN uw code…
Nu zou je de timer aan en uit moeten kunnen zetten met de schakelaar in Adafruit!
Stap 12: Speel rond! We zijn klaar… of zijn we dat?
Op dit moment zou je een volledig functionerende externe timer moeten hebben! Als dat het voor jou is, bedankt voor je komst met dit project!
Als je wat langer wilt doorgaan, voegen we in de volgende paar stappen een RESET-knop toe voor onze timer!
Stap 13: EXTRA: Tijdelijke knop maken
Laten we terugkeren naar ons dashboard. Nu willen we weer EEN NIEUW BLOK MAKEN.
- Een tijdelijke knop maken
- Sluit hem aan op de 'timer' feed
- Stel de perswaarde in op: 2
- VERWIJDER de vrijgavewaarde
- Geef het een mooi kleurtje!
Handig is dat de momentknop al 'Reset' heet!
Nadat je dit blok hebt gemaakt, test je het uit, de knop werkt als je het volgende ontvangt:
ontvangen <- 2
In uw seriële monitor.
Als je dit bericht niet ziet, probeer dan de schets opnieuw te uploaden
Stap 14: EXTRA: voeg de resetfunctie toe
Om de resetknop iets te laten doen, moeten we een functie toevoegen die alle LED's terugzet naar de oorspronkelijke staat.
Voeg de volgende code toe ONDER de void blinkie():
void rerun() { leds = LED_COUNT; ledsAan(); }
Nu rest alleen nog het aanroepen van onze functie, daarvoor moeten we TIMER RYTHM nog een laatste keer veranderen
TIMER RITHM zou er nu als volgt uit moeten zien:
// start TIMER RITHM ********************************************* *********if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis if (adaData == 0) { Serial.println ("ik ben niet actief"); } else if (adaData == 1) { timer(); } else if (adaData == 2) { rerun(); } strip.show(); } // eind TIMER RITME ********************************************* ***********
UPLOADEN uw code…
Nu zou je de timer ook moeten kunnen resetten door op de knop te drukken!
Aanbevolen:
Meet de afstand met de ultrasone sensor HC-SRF04 (nieuwste 2020): 3 stappen
Meet de afstand met de ultrasone sensor HC-SRF04 (nieuwste 2020): Wat is de ultrasone sensor (afstand)? Een echografie (Sonar) met golven op hoog niveau die mensen niet kunnen horen. We kunnen echter overal in de natuur de aanwezigheid van ultrasone golven zien. Gebruik bij dieren zoals vleermuizen, dolfijnen… ultrasone golven om
Stappenmotor met D Flip Flops en 555 Timer; het eerste deel van het circuit de 555 Timer: 3 stappen
Stappenmotor met D-flip-flops en 555-timer; het eerste deel van het circuit de 555-timer: de stappenmotor is een gelijkstroommotor die in discrete stappen beweegt. Het wordt vaak gebruikt in printers en zelfs robotica. Ik zal dit circuit in stappen uitleggen. Het eerste deel van het circuit is een 555 tijdopnemer. Het is de eerste afbeelding (zie hierboven) met een 555-chip met
RSSI naar afstand met RF-modules (Xbees): 4 stappen
RSSI naar afstand met RF-modules (Xbees): Xbees zijn kleine radiofrequentiemodules die handig kunnen zijn voor het heen en weer verzenden van informatie en voor een aantal andere specifiekere toepassingen. Voor dit project gebruik ik ze om Received Signal Strength Indicator (RSSI) -waarden te krijgen om de dis
Arduino-robot met afstand, richting en rotatiegraad (oost, west, noord, zuid) spraakgestuurd met behulp van Bluetooth-module en autonome robotbeweging: 6 stappen
Arduino-robot met afstand, richting en rotatiegraad (oost, west, noord, zuid) bestuurd door spraak met behulp van Bluetooth-module en autonome robotbeweging. , Links, Rechts, Oost, West, Noord, Zuid) vereiste afstand in centimeters met spraakopdracht. Robot kan ook autonoom worden verplaatst
AVR-microcontroller. LED's Flasher met behulp van timer. Timers worden onderbroken. Timer CTC-modus: 6 stappen
AVR-microcontroller. LED's Flasher met behulp van timer. Timers worden onderbroken. Timer CTC Mode: Hallo allemaal! Timers is een belangrijk begrip op het gebied van elektronica. Elk elektronisch onderdeel werkt op tijdbasis. Deze tijdbasis helpt om al het werk gesynchroniseerd te houden. Alle microcontrollers werken op een vooraf gedefinieerde klokfrequentie, de