Sadržaj:
- Supplies
- Korak 1: Kako digitalni sat radi
- Korak 2: Državna mašina
- Korak 3: Štitnik LCD tastature
- Korak 4: Povezivanje državne mašine
- Korak 5: Povežite stvari zajedno
- Korak 6: Uzmite primjer
Video: Digitalni sat na Arduinu pomoću stroja s konačnim stanjem: 6 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:06
Hej, pokazat ću vam kako se digitalni sat može stvoriti pomoću YAKINDU Statechart Tools i pokrenuti na Arduinu koji koristi štitnik LCD tipkovnice.
Originalni model digitalnog sata preuzet je od Davida Harela. Objavio je rad o
"[…] Široko proširenje konvencionalnog formalizma državnih mašina i dijagrama stanja."
U ovom radu je za svoje istraživanje koristio primjer digitalnog sata. Koristio sam ga kao inspiraciju i obnovio sat pomoću YAKINDU Statechart Tools (alat za kreiranje grafičkih modela državnih mašina i generisanje C/C ++ koda s njim) i vratio ga u život na Arduinu.
Supplies
Hardver:
- Arduino Uno ili Mega
- Štitnik LCD tastature
Softver:
- YAKINDU Alati dijagrama stanja
- Eclipse C ++ IDE za Arduino
Korak 1: Kako digitalni sat radi
Počnimo definiranjem načina na koji bi digitalni sat trebao funkcionirati. Sjećate li se ovih … recimo … "super cool" digitalnih satova koje su svi imali 90 -ih? Integrirana štoperica, različiti alarmi i dosadni zvučni signali na svakih sat vremena. Ako niste, pogledajte: digitalni sat 90 -ih.
Dakle, u osnovi je to sat koji se može konfigurirati s različitim načinima rada. Uglavnom će se prikazivati trenutno vrijeme, ali postoje i neke druge značajke. Kao ulaz, imate dugme za uključivanje/isključivanje, način rada i dugme za postavljanje. Osim toga, možete uključiti i isključiti svjetlo. Pomoću gumba za način rada možete razlikovati načine rada i aktivirati/onemogućiti funkcije sata:
- Prikaz vremena (sat)
- Prikaz datuma (Datum)
- Postavite alarm (Alarm 1, Alarm 2)
- Omogući/onemogući zvono (Postavi zvono)
- Koristite štopericu (štoperica)
Unutar izbornika možete koristiti tipku za uključivanje/isključivanje za konfiguriranje načina rada. Dugme za postavljanje vam omogućava da postavite vrijeme - npr. za sat ili alarme. Štopericom se može upravljati - startovati i zaustavljati - pomoću dugmeta za uključivanje i isključivanje svetla. Možete koristiti i integrirani brojač krugova
Nadalje, tu je i zvono koje zvoni svakih sat vremena i integrirano pozadinsko osvjetljenje koje se može kontrolirati. U prvom koraku nisam ih povezao s Arduinom.
Korak 2: Državna mašina
Ne želim ići previše u detalje za objašnjenje ovog primjera. Nije zato što je previše kompleksno, samo je malo preveliko. Pokušat ću objasniti osnovnu ideju kako to funkcionira. Izvođenje bi trebalo biti samorazumljivo, ako pogledate model ili ga preuzmete i simulirate. Neki dijelovi državne mašine sumirani su u podregijama, poput zadanog vremenskog regiona. Time bi se trebala osigurati čitljivost državnog stroja.
Model je podijeljen na dva dijela - grafički i tekstualni. U tekstualnom dijelu bit će definirani događaji, varijable itd. U grafičkom dijelu - dijagramu stanja - navedeno je logičko izvođenje modela. Da biste stvorili stroj stanja koji ispunjava navedeno ponašanje, potrebni su neki ulazni događaji koji se mogu koristiti u modelu: onoff, set, mode, light i light_r. Unutar odjeljka definicije koristi se interni događaj koji svakih 100 ms povećava vrijednost vremena:
svakih 100 ms / vrijeme += 1
Na osnovu koraka od 100 ms, trenutno vrijeme će se izračunati u HH: MM: SS formatu:
display.first = (vrijeme / 36000) % 24;
display.second = (vrijeme / 600) % 60; display.third = (vrijeme / 10) % 60;
Vrijednosti će se spojiti na LCD zaslon pomoću operacije updateLCD svaki put kada se pozove državni stroj:
display.updateLCD (display.first, display.second, display.third, display.text)
Osnovno izvođenje državne mašine već je definirano u odjeljku Kako digitalni sat radi. Unutar alata koristio sam neke "posebne" modele kao što su CompositeState, History, Sub-Diagrams, ExitNodes, itd. Detaljan opis možete pronaći u Korisničkom vodiču.
Korak 3: Štitnik LCD tastature
Štit LCD tastature je prilično cool za jednostavne projekte, koji zahtijevaju ekran za vizualizaciju i neke tipke kao ulaz - tipičan, jednostavan HMI (Human Machine Interface). Štitnik LCD tipkovnice sadrži pet korisničkih gumba i još jedno za resetiranje. Pet tipki zajedno spojeno je na A0 pin Arduina. Svaki od njih spojen je na razdjelnik napona, što omogućava razlikovanje tipki.
Možete koristiti analogRead (0) za pronalaženje određenih vrijednosti, koje se, naravno, mogu razlikovati od proizvođača. Ovaj jednostavan projekt prikazuje trenutnu vrijednost na LCD -u:
#include "Arduino.h"
#include "LiquidCrystal.h" LiquidCrystal lcd (8, 9, 4, 5, 6, 7); void setup () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("Mjerena vrijednost"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); kašnjenje (200); }
Ovo su moji izmjereni rezultati:
- Ništa: 1023
- Odaberite: 640
- Lijevo: 411
- Dole: 257
- Gore: 100
- Desno: 0
S ovim pragovima moguće je čitati dugmad:
#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5 static int readButton () {int result = 0; rezultat = analogRead (0); if (rezultat <50) {return RIGHT; } if (rezultat <150) {return UP; } if (rezultat <300) {return DOWN; } if (rezultat <550) {return LEFT; } if (rezultat <850) {return SELECT; } return NONE; }
Korak 4: Povezivanje državne mašine
Generirani C ++ kod državne mašine pruža sučelja koja se moraju implementirati za kontrolu državne mašine. Prvi korak je povezivanje ulaznih događaja pomoću tipki štitnika tipkovnice. Već sam pokazao kako čitati dugmad, ali za njihovo povezivanje sa državnom mašinom potrebno je otkazivanje dugmadi - u suprotnom bi se događaji podigli više puta, što rezultira nepredvidivim ponašanjem. Koncept uklanjanja softvera nije nov. Možete pogledati Arduino dokumentaciju.
U mojoj implementaciji otkrivam pad (otpuštanje dugmeta). Pročitao sam vrijednost gumba, pričekao 80 ms (dobili bolje rezultate sa 80 umjesto 50), spremio rezultat i pročitao novu vrijednost. Ako oldResult nije bio NONE (nije pritisnut), a novi rezultat je NONE, znam da je dugme ranije pritisnuto i sada je otpušteno. Zatim podižem odgovarajući ulazni događaj državne mašine.
int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); kašnjenje (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); break; } slučaj LIJEVO: {stateMachine-> getSCI_Button ()-> raise_set (); break; } slučaj DOLJE: {stateMachine-> getSCI_Button ()-> raise_light (); break; } slučaj gore: {stateMachine-> getSCI_Button ()-> raise_light_r (); break; } slučaj DESNO: {stateMachine-> getSCI_Button ()-> raise_onoff (); break; } default: {break; }}}}
Korak 5: Povežite stvari zajedno
Glavni program koristi tri dijela:
- Državna mašina
- Tajmer
- Rukovatelj ekrana (tipičan lcd.print (…))
DigitalWatch* stateMachine = novi DigitalWatch (); CPPTimerInterface* timer_sct = novi CPPTimerInterface (); DisplayHandler* displayHandler = novi DisplayHandler ();
Državni stroj koristi rukovatelj ekrana i ima mjerač vremena, koji će biti ažuriran za kontrolu vremenskih događaja. Nakon toga, mašina za stanje se inicijalizira i unosi.
void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }Petlja čini tri stvari:
- Podizanje ulaznih događaja
- Izračunajte proteklo vrijeme i ažurirajte mjerač vremena
- Pozovite državnu mašinu
long current_time = 0; long last_cycle_time = 0; void loop () {raiseEvents (); last_cycle_time = current_time; current_time = millis (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
Korak 6: Uzmite primjer
To je to. Vjerojatno nisam spomenuo svaki detalj implementacije, ali možete pogledati primjer ili ostaviti komentar.
Dodajte primjer tekućem IDE -u sa: Datoteka -> Novo -> Primjer -> Primjeri grafikona stanja YAKINDU -> Dalje -> Arduino -Digitalni sat (C ++)
> IDE možete preuzeti ovdje <<
Možete započeti s probnim periodom od 30 dana. Nakon toga morate dobiti licencu koja je besplatna za nekomercijalnu upotrebu!
Preporučuje se:
Kako napraviti analogni sat i digitalni sat sa LED trakom pomoću Arduina: 3 koraka
Kako napraviti analogni sat i digitalni sat sa LED trakom pomoću Arduina: Danas ćemo napraviti analogni sat & Digitalni sat sa Led Stripom i MAX7219 Dot modulom s Arduinom. Popravit će vrijeme s lokalnom vremenskom zonom. Analogni sat može koristiti dužu LED traku pa se može objesiti na zid kako bi postao umjetničko djelo
Arduino digitalni sat pomoću DS1302: 4 koraka
Arduino digitalni sat pomoću DS1302: UvodZdravo momci, nadam se da vam svima ide odlično. Ovo će biti kratak i jednostavan projekt o tome kako napraviti digitalni sat pomoću Arduina. U ovom projektu ćemo napraviti digitalni sat uz pomoć Arduina i registra pomaka. Ovo
Digitalni sat pomoću mikrokontrolera (AT89S52 bez RTC kruga): 4 koraka (sa slikama)
Digitalni sat pomoću mikrokontrolera (AT89S52 bez RTC kruga): Opišimo sat … " Sat je uređaj koji broji i prikazuje vrijeme (relativno) " . NAPOMENA: čitanje će potrajati 2-3 minute. Pročitajte cijeli projekt ili inače neću
Mrežno vrijeme Digitalni sat pomoću ESP8266: 4 koraka (sa slikama)
Mrežno vrijeme Digitalni sat pomoću ESP8266: Naučimo kako izgraditi slatki mali digitalni sat koji komunicira s NTP poslužiteljima i prikazuje mrežno ili internetsko vrijeme. WeMos D1 mini koristimo za povezivanje na WiFi mrežu, dobijanje NTP vremena i njegovo prikazivanje na OLED modulu. Video iznad t
Digitalni sat pomoću kristalnog oscilatora i japanki: 3 koraka
Digitalni sat pomoću kristalnog oscilatora i japanki: Satovi se nalaze u gotovo svim vrstama elektronike, oni su srce svakog računara. Koriste se za sinhronizaciju svih sekvencijalnih kola. koriste se i kao brojači za praćenje vremena i datuma. U ovom uputstvu ćete naučiti kako