Sadržaj:
- Pribor
- Korak 1: Kako digitalni sat radi
- Korak 2: Državni stroj
- Korak 3: Štitnik LCD tipkovnice
- Korak 4: Povezivanje državnog stroja
- Korak 5: Ožič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 promjena: 2024-01-30 09:35
Pozdrav, pokazat ću vam kako se digitalni sat može stvoriti pomoću YAKINDU Statechart Tools i pokrenuti na Arduinu koji koristi štitnik LCD tipkovnice.
Izvorni model digitalnog sata preuzet je od Davida Harela. Objavio je rad o
"[…] Široko proširenje konvencionalnog formalizma državnih strojeva i dijagrama stanja."
U ovom se radu za svoje istraživanje poslužio primjerom digitalnog sata. Koristio sam ga kao inspiraciju i obnovio sat pomoću YAKINDU Statechart Tools (alat za stvaranje grafičkih modela državnih strojeva i generiranje C/C ++ koda s njim) i vratio ga u život na Arduinu.
Pribor
Hardver:
- Arduino Uno ili Mega
- Štit za LCD tipkovnicu
Softver:
- YAKINDU Alati za grafikone 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 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 uključeno/isključeno, način rada i gumb za postavljanje. Osim toga, možete uključiti i isključiti svjetlo. Gumbom za način rada možete razlikovati načine rada i aktivirati/onemogućiti značajke 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 gumb za uključivanje/isključivanje za konfiguriranje načina rada. Gumb za postavljanje omogućuje vam postavljanje vremena - npr. za sat ili alarme. Štopericom se može upravljati - pokrenuti i zaustaviti - pomoću gumba za uključivanje i isključivanje svjetla. Također možete koristiti integrirani brojač krugova
Nadalje, tu je 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žavni stroj
Ne želim ići u detalje s objašnjenjem ovog primjera. Nije zato što je previše složeno, 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žavnog stroja zbrajaju se u podregijama, poput zadanog vremenskog područja. 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 - navedena je logička izvedba modela. Za stvaranje stroja 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 temelju 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)
Osnovna izvedba državnog stroja već je definirana u odjeljku Kako digitalni sat radi. Unutar alata koristio sam neke "posebne" elemente modeliranja kao što su CompositeState, History, Pod-dijagrami, ExitNodes itd. Detaljan opis možete pronaći u Korisničkom priručniku.
Korak 3: Štitnik LCD tipkovnice
Štitnik LCD tipkovnice prilično je cool za jednostavne projekte, koji zahtijevaju zaslon za vizualizaciju i neke gumbe kao ulaz - tipičan, jednostavan HMI (sučelje čovjeka i stroja). Štitnik LCD tipkovnice sadrži pet korisničkih gumba i još jedan za resetiranje. Pet tipki zajedno spojeno je na A0 pin Arduina. Svaki od njih spojen je na razdjelnik napona, što omogućuje razlikovanje tipki.
Pomoću analogRead (0) možete pronaći određene vrijednosti, koje se, naravno, mogu razlikovati od proizvođača. Ovaj jednostavan projekt prikazuje trenutnu vrijednost na LCD -u:
#uključuje "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 (analogno čitanje (0)); kašnjenje (200); }
Ovo su moji izmjereni rezultati:
- Ništa: 1023
- Odaberite: 640
- Lijevo: 411
- Dolje: 257
- Gore: 100
- Desno: 0
S ovim pragovima moguće je pročitati gumbe:
#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 DOLJE; } if (rezultat <550) {return LIJEVO; } if (rezultat <850) {return SELECT; } return NONE; }
Korak 4: Povezivanje državnog stroja
Generirani C ++ kod državnog stroja pruža sučelja koja se moraju implementirati za upravljanje državnim strojem. Prvi korak je povezivanje događaja u događaju s tipkama štitnika tipkovnice. Već sam pokazao kako čitati gumbe, ali za njihovo povezivanje s državnim strojem potrebno je odricanje gumba - u protivnom bi se događaji podigli više puta, što rezultira nepredvidivim ponašanjem. Koncept uklanjanja softvera nije nov. Možete pogledati Arduino dokumentaciju.
U svojoj implementaciji otkrivam pad (otpuštanje gumba). Pročitao sam vrijednost gumba, pričekao 80 ms (dobili bolje rezultate s 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 gumb ranije bio pritisnut i sada je otpušten. Zatim podižem odgovarajući ulazni događaj stanja stroja.
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 (); pauza; } slučaj LIJEVO: {stateMachine-> getSCI_Button ()-> raise_set (); pauza; } slučaj DOLJE: {stateMachine-> getSCI_Button ()-> raise_light (); pauza; } slučaj UP: {stateMachine-> getSCI_Button ()-> raise_light_r (); pauza; } slučaj DESNO: {stateMachine-> getSCI_Button ()-> raise_onoff (); pauza; } zadano: {break; }}}}
Korak 5: Ožičite stvari zajedno
Glavni program koristi tri dijela:
- Državni stroj
- Tajmer
- Rukovatelj zaslona (tipičan lcd.tisak (…))
DigitalWatch* stateMachine = novi DigitalWatch (); CPPTimerInterface* timer_sct = novi CPPTimerInterface (); DisplayHandler* displayHandler = novi DisplayHandler ();
Državni stroj koristi rukovatelj zaslona i dobio je mjerač vremena, koji će se ažurirati radi kontrole vremenskih događaja. Nakon toga se stroj za stanje inicijalizira i unosi.
void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }Petlja čini tri stvari:
- Povisite ulazne događaje
- Izračunajte proteklo vrijeme i ažurirajte mjerač vremena
- Nazovite državni stroj
long current_time = 0; long last_cycle_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 aktivnom IDE -u pomoću: 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 uporabu!
Preporučeni:
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: Uvod Pozdrav momci, nadam se da vam je svima super. Ovo će biti kratak i jednostavan projekt o tome kako napraviti digitalni sat pomoću Arduina. U ovom projektu napravit ćemo digitalni sat uz pomoć Arduina i registra pomaka. Ovaj
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) " !!! Pretpostavljam da sam dobro rekao pa napravimo sat sa ALARM značajkom . NAPOMENA: čitanje će potrajati 2-3 minute, pročitajte cijeli projekt, inače neću b
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 spajanje na WiFi mrežu, dobivanje 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čunala. Koriste se za sinkronizaciju svih uzastopnih sklopova. koriste se i kao brojači za praćenje vremena i datuma. U ovom uputstvu naučit ćete kako