Სარჩევი:

ციფრული საათი Arduino– ზე სასრული მდგომარეობის აპარატის გამოყენებით: 6 ნაბიჯი
ციფრული საათი Arduino– ზე სასრული მდგომარეობის აპარატის გამოყენებით: 6 ნაბიჯი

ვიდეო: ციფრული საათი Arduino– ზე სასრული მდგომარეობის აპარატის გამოყენებით: 6 ნაბიჯი

ვიდეო: ციფრული საათი Arduino– ზე სასრული მდგომარეობის აპარატის გამოყენებით: 6 ნაბიჯი
ვიდეო: 7 projects Build LED LCD Alarm Clock using DS1307 with Arduino | Lesson 105 2024, ნოემბერი
Anonim
ციფრული საათი Arduino– ზე სასრული მდგომარეობის აპარატის გამოყენებით
ციფრული საათი Arduino– ზე სასრული მდგომარეობის აპარატის გამოყენებით

გამარჯობა, მე ვაჩვენებ, თუ როგორ შეიძლება ციფრული საათის შექმნა YAKINDU Statechart Tools– ით და გაშვება Arduino– ზე, რომელიც იყენებს LCD კლავიატურის ფარს.

ციფრული საათის ორიგინალური მოდელი აღებულია დევიდ ჰარელისგან. მან გამოაქვეყნა ნაშრომი თემაზე

"[…] სახელმწიფო მანქანებისა და სახელმწიფო დიაგრამების ჩვეულებრივი ფორმალიზმის ფართო გაფართოება."

ამ ნაშრომში მან გამოიყენა ციფრული საათის მაგალითი თავისი კვლევისთვის. მე გამოვიყენე ის როგორც შთაგონება და გადავაკეთე საათი YAKINDU Statechart Tools– ით (სახელმწიფო მანქანების გრაფიკული მოდელების შესაქმნელად და მასთან ერთად C/C ++ კოდის შესაქმნელად) და დავუბრუნე მას Arduino– ზე.

მარაგები

აპარატურა:

  • არდუინო უნო ან მეგა
  • LCD კლავიატურის ფარი

პროგრამული უზრუნველყოფა:

  • YAKINDU Statechart ინსტრუმენტები
  • Eclipse C ++ IDE არდუინოსთვის

ნაბიჯი 1: როგორ მუშაობს ციფრული საათი

Image
Image

დავიწყოთ იმის განსაზღვრით, თუ როგორ უნდა იმუშაოს ციფრული საათი. გახსოვთ ეს… ვთქვათ…”ულტრა მაგარი” ციფრული საათები, რომლებიც ყველას ჰქონდა 90 -იან წლებში? ინტეგრირებული წამზომი, სხვადასხვა სიგნალიზაცია და მისი შემაშფოთებელი სიგნალი ყოველ სრულ საათში. თუ არა, გადახედეთ: 90 -იანი წლების ციფრული საათი.

ძირითადად ეს არის კონფიგურირებადი საათი სხვადასხვა რეჟიმებით. ძირითადად, ნაჩვენები იქნება მიმდინარე დრო, მაგრამ არის სხვა მახასიათებლები. როგორც შეყვანის, თქვენ გაქვთ ჩართვა/გამორთვა, რეჟიმი და მითითებული ღილაკი. გარდა ამისა, თქვენ შეგიძლიათ ჩართოთ და გამორთოთ შუქი. რეჟიმის ღილაკით შეგიძლიათ განასხვავოთ რეჟიმები და გააქტიუროთ/გამორთოთ საათის ფუნქციები:

  • დროის ჩვენება (საათი)
  • თარიღის ჩვენება (თარიღი)
  • დააყენეთ მაღვიძარა (მაღვიძარა 1, მაღვიძარა 2)
  • ზარის ჩართვა/გამორთვა (ზარის დაყენება)
  • გამოიყენეთ წამზომი (Stop Watch)

მენიუებში შეგიძლიათ გამოიყენოთ ჩართვის/გამორთვის ღილაკი რეჟიმის კონფიგურაციისთვის. მითითებული ღილაკი საშუალებას გაძლევთ განსაზღვროთ დრო - მაგ. საათის ან სიგნალიზაციისთვის. წამზომი შეიძლება კონტროლდებოდეს - დაიწყო და გაჩერდეს - შუქის ჩართვისა და გამორთვის ღილაკის გამოყენებით. თქვენ ასევე შეგიძლიათ გამოიყენოთ ინტეგრირებული წრე მრიცხველი

გარდა ამისა, არის ზარი, რომელიც რეკავს ყოველ საათში და კონტროლირებადი შუქნიშანი ინტეგრირებულია. პირველ ნაბიჯზე, მე მათ არდუინოზე არ მივუყვანივარ.

ნაბიჯი 2: სახელმწიფო მანქანა

LCD კლავიატურის ფარი
LCD კლავიატურის ფარი

არ მინდა ამ მაგალითის ახსნაზე უფრო დეტალურად. ეს არ არის იმიტომ, რომ ის ძალიან რთულია, ის უბრალოდ ძალიან დიდია. შევეცდები ავხსნა ძირითადი იდეა, თუ როგორ მუშაობს იგი. შესრულება უნდა იყოს თავისთავად ახსნილი, მოდელის გადახედვით ან გადმოტვირთვით და სიმულაციით. სახელმწიფო აპარატის ზოგიერთი ნაწილი შეჯამებულია ქვე რეგიონებში, ისევე როგორც დადგენილი დროის რეგიონი. ამასთან, უზრუნველყოფილი უნდა იყოს სახელმწიფო მანქანის წაკითხვადობა.

მოდელი იყოფა ორ ნაწილად - გრაფიკული და ტექსტური. ტექსტურ ნაწილში განისაზღვრება მოვლენები, ცვლადები და ა.შ. გრაფიკულ ნაწილში - მდგომარეობის დიაგრამა - მითითებულია მოდელის ლოგიკური შესრულება. სახელმწიფო მანქანის შესაქმნელად, რომელიც ასრულებს მითითებულ ქცევას, საჭიროა შეყვანის ზოგიერთი მოვლენა, რომელიც შეიძლება გამოყენებულ იქნას მოდელში: გამორთვა, დაყენება, რეჟიმი, შუქი და light_r. განსაზღვრების განყოფილებაში გამოიყენება შიდა მოვლენა, რომელიც ზრდის დროის მნიშვნელობას ყოველ 100 ms:

ყოველ 100 ms / დროს += 1

100 ms ნაბიჯების საფუძველზე მიმდინარე დრო გამოითვლება HH: MM: SS ფორმატში:

ჩვენება.პირველი = (დრო / 36000) % 24;

ჩვენება.მეორე = (დრო / 600) % 60; ჩვენება. მესამე = (დრო / 10) % 60;

მნიშვნელობები შეუერთდება LCD ეკრანს ოპერაციის განახლების LCD გამოყენებით ყოველ ჯერზე, როდესაც სახელმწიფო მანქანას დაურეკავს:

display.updateLCD (ჩვენება.პირველი, ჩვენება.მეორე, ჩვენება.მესამე, ჩვენება.ტექსტი)

სახელმწიფო აპარატის ძირითადი შესრულება უკვე განსაზღვრულია განყოფილებაში როგორ მუშაობს ციფრული საათი. ინსტრუმენტის ფარგლებში მე გამოვიყენე "სპეციალური" მოდელირების ელემენტები, როგორიცაა CompositeState, History, Sub-Diagrams, ExitNodes და სხვა. დეტალური აღწერა შეგიძლიათ იხილოთ მომხმარებლის სახელმძღვანელოში.

ნაბიჯი 3: LCD კლავიატურის ფარი

LCD კლავიატურის ფარი საკმაოდ მაგარია მარტივი პროექტებისთვის, რომლებიც საჭიროებენ ეკრანს ვიზუალიზაციისთვის და რამდენიმე ღილაკს შეყვანისთვის - ტიპიური, მარტივი HMI (ადამიანის აპარატის ინტერფეისი). LCD კლავიატურის ფარი შეიცავს ხუთ მომხმარებლის ღილაკს და კიდევ ერთს გადატვირთვისთვის. ხუთი ღილაკი ყველა ერთად არის დაკავშირებული Arduino– ს A0 პინთან. თითოეული მათგანი დაკავშირებულია ძაბვის გამყოფთან, რაც საშუალებას იძლევა განასხვავოს ღილაკებს შორის.

თქვენ შეგიძლიათ გამოიყენოთ analogRead (0) კონკრეტული მნიშვნელობების მოსაძებნად, რაც, რა თქმა უნდა, შეიძლება განსხვავდებოდეს მწარმოებლის მიერ. ეს მარტივი პროექტი აჩვენებს მიმდინარე მნიშვნელობას LCD– ზე:

#მოიცავს "Arduino.h"

#მოიცავს "LiquidCrystal.h" LiquidCrystal LCD (8, 9, 4, 5, 6, 7); void setup () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("გაზომილი ღირებულება"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); დაგვიანება (200); }

ეს არის ჩემი გაზომილი შედეგები:

  • არცერთი: 1023
  • აირჩიეთ: 640
  • მარცხნივ: 411
  • ქვემოთ: 257
  • ზევით: 100
  • მარჯვნივ: 0

ამ ზღურბლებით შესაძლებელია ღილაკების წაკითხვა:

#განსაზღვრეთ NONE 0 #განსაზღვრეთ SELECT 1 #განსაზღვრეთ მარცხნივ 2 #განსაზღვრეთ ქვემოთ 3 #განსაზღვრეთ UP 4 #განსაზღვრეთ RIGHT 5 სტატიკური int readButton () {int შედეგი = 0; შედეგი = analogRead (0); თუ (შედეგი <50) {დაბრუნება მარჯვნივ; } if (შედეგი <150) {დაბრუნება ზემოთ; } if (შედეგი <300) {დაბრუნება ქვემოთ; } if (შედეგი <550) {დაბრუნება მარცხნივ; } if (შედეგი <850) {return SELECT; } დაბრუნება არავის; }

ნაბიჯი 4: სახელმწიფო აპარატთან დაკავშირება

სახელმწიფო აპარატთან დაკავშირება
სახელმწიფო აპარატთან დაკავშირება

სახელმწიფო მანქანის გენერირებული C ++ კოდი უზრუნველყოფს ინტერფეისებს, რომლებიც უნდა განხორციელდეს სახელმწიფო აპარატის გასაკონტროლებლად. პირველი ნაბიჯი არის მოვლენების დაკავშირება კლავიატურის ფარის გასაღებებთან. მე უკვე ვაჩვენე, თუ როგორ უნდა წავიკითხო ღილაკები, მაგრამ მათ სახელმწიფო აპარატთან დასაკავშირებლად საჭიროა ღილაკების დემონსტრირება - წინააღმდეგ შემთხვევაში, მოვლენები რამდენჯერმე გახმაურდება, რაც იწვევს არაპროგნოზირებად ქცევას. პროგრამული უზრუნველყოფის დემონსტრირების კონცეფცია არ არის ახალი. შეგიძლიათ გადახედოთ Arduino– ს დოკუმენტაციას.

ჩემი განხორციელებისას, მე აღმოვაჩინე დაცემის ზღვარი (ღილაკის გაშვება). ვკითხულობ ღილაკის მნიშვნელობას, ველოდები 80 ms (მივიღე უკეთესი შედეგები 80 – ის ნაცვლად 50 – ით), შევინახე შედეგი და წავიკითხე ახალი მნიშვნელობა. თუ ძველი შედეგი არ იყო არცერთი (არაპრესირებული) და ახალი შედეგი არავინაა, მე ვიცი, რომ ღილაკი დაჭერილი იყო ადრე და ახლა გამოვიდა. შემდეგ, მე ვაყენებ სახელმწიფო აპარატის შეყვანის მოვლენას.

int oldState = არა; სტატიკური სიცარიელე raiseEvents () {int buttonPressed = readButton (); დაგვიანება (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); შესვენება; } შემთხვევა მარცხნივ: {stateMachine-> getSCI_Button ()-> raise_set (); შესვენება; } საქმე ქვემოთ: {stateMachine-> getSCI_Button ()-> raise_light (); შესვენება; } საქმე UP: {stateMachine-> getSCI_Button ()-> raise_light_r (); შესვენება; } case RIGHT: {stateMachine-> getSCI_Button ()-> raise_onoff (); შესვენება; } ნაგულისხმევი: {შესვენება; }}}}

ნაბიჯი 5: ნივთების გაყვანილობა ერთად

ძირითადი პროგრამა იყენებს სამ ნაწილს:

  • სახელმწიფო მანქანა
  • ტაიმერი
  • ჩვენების დამმუშავებელი (ტიპიური lcd.print (…))

DigitalWatch* stateMachine = ახალი DigitalWatch (); CPPTimerInterface* timer_sct = ახალი CPPTimerInterface (); DisplayHandler* displayHandler = ახალი DisplayHandler ();

სახელმწიფო მანქანა იყენებს ჩვენების დამმუშავებელს და მიიღო ტაიმერი, რომელიც განახლდება დროული მოვლენების გასაკონტროლებლად. ამის შემდეგ, სახელმწიფო მანქანა ინიციალიზდება და შედის.

void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }მარყუჟი სამ რამეს აკეთებს:

  • გაზარდეთ შეყვანის მოვლენები
  • გამოთვალეთ გასული დრო და განაახლეთ ტაიმერი
  • დარეკეთ სახელმწიფო აპარატში

ხანგრძლივი მიმდინარე_დრო = 0; გრძელი ბოლო_ციკლი_დრო = 0; void loop () {raiseEvents (); last_cycle_time = მიმდინარე_ დრო; მიმდინარე_დრო = მილი (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }

ნაბიჯი 6: მიიღეთ მაგალითი

Ის არის. ალბათ, მე არ ვახსენე განხორციელების ყველა დეტალი, მაგრამ თქვენ შეგიძლიათ გადახედოთ მაგალითს ან დატოვოთ კომენტარი.

დაამატეთ მაგალითი გაშვებულ IDE– სთან ერთად: ფაილი -> ახალი -> მაგალითი -> YAKINDU Statechart მაგალითები -> შემდეგი -> Arduino -ციფრული საათი (C ++)

> IDE შეგიძლიათ ჩამოტვირთოთ აქ <<

თქვენ შეგიძლიათ დაიწყოთ 30 დღიანი საცდელი პერიოდით. ამის შემდეგ, თქვენ უნდა მიიღოთ ლიცენზია, რომელიც უფასოა არაკომერციული გამოყენებისთვის!

გირჩევთ: