Sisällysluettelo:
- Tarvikkeet
- Vaihe 1: Kuinka digitaalikello toimii
- Vaihe 2: Tilakone
- Vaihe 3: LCD -näppäimistön suoja
- Vaihe 4: Liitäntä tilakoneeseen
- Vaihe 5: Asioiden yhdistäminen yhteen
- Vaihe 6: Hae esimerkki
Video: Digitaalinen kello Arduinolla äärellisen tilan koneen avulla: 6 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Hei, näytän sinulle, kuinka digitaalinen kello voidaan luoda YAKINDU Statechart Tools -työkalulla ja käyttää Arduinolla, joka käyttää LCD -näppäimistön suojaa.
Digitaalikellon alkuperäinen malli on otettu David Harelilta. Hän on julkaissut paperin aiheesta
"[…] Laajentaa laajasti valtion koneiden ja tilakaavioiden perinteistä muodollisuutta."
Tässä artikkelissa hän käytti tutkimuksessaan digitaalisen kellon esimerkkiä. Olen käyttänyt sitä inspiraationa ja rakentanut kellon uudelleen YAKINDU Statechart Tools -työkalulla (työkalu tilakoneiden graafisten mallien luomiseen ja C/C ++ -koodin luomiseen sen avulla) ja herättänyt sen takaisin elämään Arduinolla.
Tarvikkeet
Laitteisto:
- Arduino Uno tai Mega
- LCD -näppäimistön suojus
Ohjelmisto:
- YAKINDU Statechart Tools
- Eclipse C ++ IDE Arduinolle
Vaihe 1: Kuinka digitaalikello toimii
Aloitetaan määrittelemällä, miten digitaalikello toimii. Muistatko nämä … sanotaanpa … "erittäin viileitä" digitaalisia kelloja, jotka kaikilla oli 90 -luvulla? Integroitu sekuntikello, eri hälytykset ja sen ärsyttävä piippaus joka täysi tunti. Jos ei, katso: 90 -luvun digitaalikello.
Joten periaatteessa se on konfiguroitava kello, jossa on erilaisia tiloja. Pääasiassa nykyinen aika näytetään, mutta on myös muita ominaisuuksia. Tulona sinulla on päälle/pois, tila ja asetuspainike. Lisäksi voit kytkeä valon päälle ja pois päältä. Tilapainikkeella voit erottaa tilat ja aktivoida/poistaa käytöstä kellotoiminnot:
- Näytä aika (kello)
- Näytä päivämäärä (päivämäärä)
- Aseta hälytys (hälytys 1, hälytys 2)
- Ota soittoääni käyttöön/poista se käytöstä (Aseta soittoääni)
- Sekuntikellon käyttäminen (sekuntikello)
Valikoissa voit määrittää tilan on/off -painikkeella. Asetuspainikkeella voit asettaa ajan - esim. kelloa tai hälytyksiä varten. Sekuntikelloa voidaan ohjata - käynnistää ja pysäyttää - käyttämällä valon sytytys- ja sammutuspainiketta. Voit myös käyttää integroitua kierroslaskuria
Lisäksi on kello, joka soi joka täysi tunti, ja sisäänrakennettu ohjattava taustavalo. Ensimmäisessä vaiheessa en langannut niitä Arduinolle.
Vaihe 2: Tilakone
En halua mennä yksityiskohtaisesti tämän esimerkin selitykseen. Se ei johdu siitä, että se on liian monimutkainen, vaan vain hieman liian suuri. Yritän selittää perusajatuksen siitä, miten se toimii. Suorituksen pitäisi olla itsestään selvää katsomalla mallia tai lataamalla ja simuloimalla sitä. Jotkin tilakoneen osat on summattu alialueille, kuten asetettu aika -alue. Tällä tavoin on varmistettava tilakoneen luettavuus.
Malli on jaettu kahteen osaan - graafinen ja tekstillinen. Tekstiosassa määritellään tapahtumat, muuttujat jne. Graafisessa osassa - tilakaaviossa - määritetään mallin looginen suoritus. Määritetyn toiminnon täyttävän tilakoneen luomiseksi vaaditaan joitain syöttötapahtumia, joita voidaan käyttää mallissa: onoff, set, mode, light ja light_r. Määritelmäosassa käytetään sisäistä tapahtumaa, joka lisää aika -arvoa 100 ms: n välein:
100 ms / kerta += 1
100 ms: n vaiheiden perusteella nykyinen aika lasketaan muodossa HH: MM: SS:
display.first = (aika / 36000) % 24;
display.second = (aika / 600) % 60; display.third = (aika / 10) % 60;
Arvot kytketään nestekidenäyttöön käyttämällä updateLCD -toimintoa aina, kun tilakonetta kutsutaan:
display.updateLCD (display.first, display.second, display.third, display.text)
Tilakoneen perustoiminnot on jo määritelty osiossa Digitaalikellon toiminta. Työkalussa olen käyttänyt joitain "erityisiä" mallinnuselementtejä, kuten CompositeState, Historia, Alakaaviot, ExitNodes jne. Yksityiskohtainen kuvaus löytyy käyttöoppaasta.
Vaihe 3: LCD -näppäimistön suoja
LCD -näppäimistön suojus on varsin siisti yksinkertaisiin projekteihin, jotka vaativat näytön visualisointiin ja joitain painikkeita syöttöön - tyypillinen, yksinkertainen HMI (Human Machine Interface). LCD -näppäimistön suojus sisältää viisi käyttäjäpainiketta ja yhden nollattavaksi. Kaikki viisi painiketta yhdistetään Arduinon A0 -nastaan. Jokainen niistä on kytketty jännitteenjakajaan, jonka avulla painikkeet voidaan erottaa toisistaan.
Voit käyttää analogReadia (0) löytääksesi arvot, jotka voivat tietysti vaihdella valmistajan mukaan. Tämä yksinkertainen projekti näyttää nykyisen arvon nestekidenäytössä:
#Sisällytä "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 ("mitattu arvo"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analoginenLue (0)); viive (200); }
Nämä ovat mitatut tulokset:
- Ei mitään: 1023
- Valitse: 640
- Vasen: 411
- Alas: 257
- Ylös: 100
- Oikea: 0
Näillä kynnyksillä on mahdollista lukea painikkeet:
#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5 staattinen int readButton () {int result = 0; tulos = analoginen (0); if (tulos <50) {return OIKEA; } if (tulos <150) {return UP; } if (tulos <300) {return DOWN; } if (tulos <550) {return VASEN; } if (tulos <850) {return SELECT; } palauta NONE; }
Vaihe 4: Liitäntä tilakoneeseen
Tilakoneen generoitu C ++ -koodi tarjoaa rajapintoja, jotka on toteutettava tilakoneen ohjaamiseksi. Ensimmäinen askel on yhdistää tapahtumat näppäimistön kilven näppäimiin. Olen jo osoittanut, miten painikkeita luetaan, mutta niiden liittämiseksi tilakoneeseen painikkeiden poistaminen on välttämätöntä - muuten tapahtumat nousevat useita kertoja, mikä johtaa arvaamattomaan käyttäytymiseen. Ohjelmiston poistamisen käsite ei ole uusi. Voit katsoa Arduinon dokumentaatiota.
Toteutuksessani havaitsen putoavan reunan (painikkeen vapauttaminen). Luin painikkeen arvon, odotan 80 ms (sain parempia tuloksia 80: llä 50: n sijasta), tallennan tuloksen ja luen uuden arvon. Jos oldResult ei ollut NONE (ei painettu) ja uusi tulos on NONE, tiedän, että painiketta on painettu aiemmin ja nyt se on vapautettu. Nostan sitten tilakoneen vastaavan syöttötapahtuman.
int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); viive (80); oldState = -painikePainettu; if (oldState! = NONE &&& readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); tauko; } tapaus VASEN: {stateMachine-> getSCI_Button ()-> raise_set (); tauko; } tapaus ALAS: {stateMachine-> getSCI_Button ()-> raise_light (); tauko; } tapaus YLÖS: {stateMachine-> getSCI_Button ()-> raise_light_r (); tauko; } tapaus OIKEA: {stateMachine-> getSCI_Button ()-> raise_onoff (); tauko; } oletus: {break; }}}}
Vaihe 5: Asioiden yhdistäminen yhteen
Pääohjelma käyttää kolmea osaa:
- Valtion kone
- Ajastin
- Näytönkäsittelijä (tyypillinen lcd.print (…))
DigitalWatch* stateMachine = new DigitalWatch (); CPPTimerInterface* timer_sct = new CPPTimerInterface (); DisplayHandler* displayHandler = uusi DisplayHandler ();
Tilakone käyttää näytönkäsittelijää ja sai ajastimen, joka päivitetään hallitsemaan ajastettuja tapahtumia. Tämän jälkeen tilakone alustetaan ja syötetään.
void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }Silmukka tekee kolme asiaa:
- Nosta syöttötapahtumia
- Laske kulunut aika ja päivitä ajastin
- Soita valtion koneelle
pitkä nykyinen_aika = 0; pitkä viimeinen_jakso_aika = 0; void loop () {raiseEvents (); last_cycle_time = nykyinen_aika; nykyinen_aika = millis (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
Vaihe 6: Hae esimerkki
Se siitä. Luultavasti en ole maininnut kaikkia toteutuksen yksityiskohtia, mutta voit katsoa esimerkkiä tai jättää kommentin.
Lisää esimerkki käynnissä olevaan IDE: hen seuraavasti: Tiedosto -> Uusi -> Esimerkki -> YAKINDU Statechart Esimerkit -> Seuraava -> Arduino -Digitaalikello (C ++)
> Voit ladata IDE: n täältä <<
Voit aloittaa 30 päivän kokeilujaksolla. Jälkeenpäin sinun on hankittava lisenssi, joka on ilmainen ei-kaupalliseen käyttöön!
Suositeltava:
Digitaalinen kello Arduinon ja Led Dot Matrix -näytön avulla: 6 vaihetta
Digitaalinen kello Arduinon ja Led Dot Matrix -näytön avulla: Nykyään valmistajat ja kehittäjät pitävät Arduinoa projektien prototyyppien nopeasta kehittämisestä. Arduino on avoimen lähdekoodin elektroniikka-alusta, joka perustuu helppokäyttöiseen laitteistoon ja ohjelmistoon. Arduinolla on erittäin hyvä käyttäjäyhteisö.Tässä projektissa
Digitaalinen manometri/CPAP -koneen näyttö: 6 vaihetta (kuvilla)
Digitaalinen manometri/CPAP -koneen näyttö: Oletko koskaan herännyt aamulla, jos huomasit, että CPAP -naamio on pois päältä? Tämä laite hälyttää, jos olet poistanut naamion tahattomasti unen aikana. CPAP (jatkuva positiivinen hengitysteiden paine) -hoito on yleisin hoitomuoto obstruktiiviselle unelle A
Yksinkertainen digitaalinen kello Arduino Nanon ja DS1307: 4 askeleen avulla
Yksinkertainen digitaalikello Arduino Nanon ja DS1307: n avulla: Tässä artikkelissa näytän sinulle opetusohjelman digitaalisen kellon tekemiseksi Arduinolla. Käyttämäni Arduino -kortti on Arduino Nano V3, DS1307 aikatietojen tarjoajana, MAX7219 7 Segmentti katsella näyttöä. ennen opetusohjelmaan astumista suosittelen, että
"Yksinkertainen" Digilog -kello (digitaalinen analoginen) kierrätysmateriaalin avulla!: 8 vaihetta (kuvilla)
"Yksinkertainen" Digilog -kello (digitaalinen analoginen), joka käyttää kierrätettyä materiaalia!: Hei kaikille! Joten tässä opetusohjelmassa jaan, miten tämä digitaalinen + analoginen kello tehdään halvalla materiaalilla! Jos luulet, että tämä projekti on "perseestä", voit mennä pois äläkä jatka tämän ohjeen lukemista. Rauha! Olen todella pahoillani, jos
Yksinkertainen digitaalinen kello Arduinon avulla: 6 vaihetta
Yksinkertainen digitaalinen kello Arduinon avulla: Tee yksinkertainen digitaalinen kello käyttämällä arduinoa ja yksinkertaista piirilevyä