Სარჩევი:

Raspberry Pi-Arduino-SignalR სახლის ავტომატიზაციის კერა: 11 ნაბიჯი (სურათებით)
Raspberry Pi-Arduino-SignalR სახლის ავტომატიზაციის კერა: 11 ნაბიჯი (სურათებით)

ვიდეო: Raspberry Pi-Arduino-SignalR სახლის ავტომატიზაციის კერა: 11 ნაბიჯი (სურათებით)

ვიდეო: Raspberry Pi-Arduino-SignalR სახლის ავტომატიზაციის კერა: 11 ნაბიჯი (სურათებით)
ვიდეო: How to build a robot arm with .NET 7, Raspberry Pi, Blazor, and SignalR 2024, ნოემბერი
Anonim
Raspberry Pi-Arduino-SignalR სახლის ავტომატიზაციის კერა
Raspberry Pi-Arduino-SignalR სახლის ავტომატიზაციის კერა

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

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

ამრიგად, ეს ავტომატიზაციის კერა შედგება შემდეგი კომპონენტებისგან:

SQL Server 2012 მონაცემთა ბაზა, რომელიც:

  • ინახავს წინასწარ განსაზღვრული ინფრაწითელი (IR) კოდების ჩამონათვალს ცხრილში, უნიკალურ "კოდის გასაღებთან" ერთად
  • კოდის გასაღებები ინტუიციურად არის დასახელებული (მომხმარებლის მიერ), რათა განსაზღვროს მათი ასოცირებული IR კოდების დანიშნულება

რეალურ დროში ASP. NET SignalR Hub ვებ პროგრამა, რომელიც:

  • ელოდება და იღებს "კოდის გასაღებებს", როგორც ბრძანებებს მომხმარებლისგან, რომელიც დგას HTML კლიენტის წინაშე
  • მიღებისას უკავშირდება SQL მონაცემთა ბაზას და იღებს IR კოდს მოწოდებული კოდის გამოყენებით
  • აგზავნის მოძიებულ IR კოდს Python SignalR კლიენტზე

მომხმარებლის წინაშე დგას HTML SignalR Dashboard კლიენტი, რომელიც:

  • გადასცემს უნიკალურ კოდს Hub– ს jQuery SignalR Client API– ების საშუალებით
  • დაფის თითოეული ღილაკი წარმოადგენს SQL მონაცემთა ბაზის ცხრილში ჩაწერილ უნიკალურ კოდს

Raspberry Pi 2.0 -ზე გაშვებული Python SignalR ფონის სერვისის პროგრამა:

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

Arduino IR გადამცემის ესკიზი, რომელიც:

  • ელოდება და იღებს IR კოდის თითოეულ სეგმენტს სერიული პორტის თავზე
  • აერთიანებს კოდის სეგმენტებს IR Code ბუფერულ მასივში
  • შეფუთავს ბუფერს IR გადაცემის ბრძანებაში IRLib Arduino ბიბლიოთეკის გამოყენებით

თუ სამიზნე მოწყობილობა არის IR გადამცემის სიახლოვეს, მაშინ მოწყობილობა (შეიძლება) რეაგირებდეს არდუინოს მიერ გადაცემულ IR სიგნალზე

ᲨᲔᲜᲘᲨᲕᲜᲐ

მიუხედავად იმისა, რომ სამიზნე მოწყობილობა, რომელსაც მე ვიყენებ ამ დემონსტრაციაში რეაგირებს IR სიგნალებზე, შეიძლება დაგჭირდეთ ჩემი სხვა IBLE- ის ამ ნაწილის წაკითხვა იმ მიზეზების გამო, რის გამოც მე ვამბობ, რომ მოწყობილობა (შეიძლება) რეაგირებდეს IR სიგნალზე.

დროა გააფართოვოს.

ნაბიჯი 1: რაც გჭირდებათ, სანამ გჭირდებათ

რაც გჭირდებათ, მანამდე რაც გჭირდებათ
რაც გჭირდებათ, მანამდე რაც გჭირდებათ
რაც გჭირდებათ, მანამდე რაც გჭირდებათ
რაც გჭირდებათ, მანამდე რაც გჭირდებათ
რაც გჭირდებათ, მანამდე რაც გჭირდებათ
რაც გჭირდებათ, მანამდე რაც გჭირდებათ

ეს გაკვეთილი იწყებს მუშაობას ადრე შესრულებული სამუშაოებით, რამაც ასევე გამოიწვია ჩემი ბოლო IBLE.

ასე რომ, სანამ ჩვენ გადავდგამთ იმას, რაც ჩვენ გვჭირდება ამ IBLE– სთვის, გირჩევთ, რომ წაიკითხოთ ეს ინსტრუქცია, თუ როგორ:

  1. შეიქმნა Arduino IRLib ინფრაწითელი ბიბლიოთეკა
  2. როგორ გამოიყენება IR კოდი ამ IBLE– ში IR მიმღების გამოყენებით
  3. როგორ იქნა გამოყენებული გადაღებული IR კოდები სამიზნე მოწყობილობის გასაკონტროლებლად IR გადამცემით

ამ IBLE დასრულების შემდეგ, მე განვათავსე ASP. NET IR Code Recorder ვებ პროგრამა, რომელიც:

  • მიიღე გადაღებული IR კოდი ინტუიციურად დასახელებული კოდის გასაღებთან ერთად, როგორც ვებ - ფორმის შეყვანა
  • ძალიან გრძელი IR კოდი დაყავით 64 სიმბოლოზე ნაკლებ სეგმენტებად, რომ დარჩეთ Arduino Uno– ს სერიული ბუფერული ლიმიტის ქვეშ.
  • კოდების ბოლო სეგმენტი წინასწარ იქნება დაფიქსირებული "E"-ით, რაც Arduino- ს მიუთითებს, რომ მან მიიღო კოდის ბოლო სეგმენტი
  • თითოეული სეგმენტი გამოყოფილი იქნება მილის გამყოფით, სანამ კვლავ შეიკრიბება გრძელ სტრიქონში
  • დაბოლოს, სეგმენტირებული IR კოდი და მისი გასაღები შეინახეს SQL Server 2012 მონაცემთა ბაზაში

ეს არის SQL მონაცემთა ბაზა, რომელიც ქმნის ამ IBLE- ში შემუშავებული სახლის ავტომატიზაციის ცენტრის ერთ -ერთ კომპონენტს.

ᲨᲔᲜᲘᲨᲕᲜᲐ

IR Code Recorder ვებ პროგრამა არ არის აქ განხილვის ნაწილი შემდეგი მიზეზების გამო:

  • თქვენ შეგიძლიათ ხელით გადაიღოთ კოდები Arduino Sketch– ის გამოყენებით, გაყოთ ისინი მილებით განსაზღვრულ ნაწილებად და შეინახოთ ისინი მონაცემთა ბაზაში, შემუშავებული ვებ პროგრამის შექმნის გარეშე.
  • ამ IBLE– სგან განსხვავებით, IR ჩამწერი ყურადღებას ამახვილებს საპირისპირო კომუნიკაციაზე არდუინოდან ჟოლოს პიამდე

ამიტომ ამ პროექტის დეტალები იქნება თემა სხვა IBLE- სთვის

ნაბიჯი 2: რაც გჭირდებათ - აპარატურა

რაც გჭირდებათ - აპარატურა
რაც გჭირდებათ - აპარატურა
რაც გჭირდებათ - აპარატურა
რაც გჭირდებათ - აპარატურა

მოქმედი Raspberry Pi 2.0 - გირჩევთ დააინსტალიროთ Ubuntu Mate, რადგან მას აქვს უფრო მდიდარი მახასიათებლები, მათ შორის OpenLibre Office, რომელიც სხვათა შორის შეუცვლელი იყო ამ სასწავლო ინსტრუქციის დოკუმენტაციაში, ზუსტად იქ, Raspberry Pi– ზე.

გარდა ამისა, Pi, დაგჭირდებათ შემდეგი გარეგანი საშუალებები:

  • Arduino Uno პროტოტიპის პლატფორმა ან კლონი
  • IR გადამცემები LED - მე გამოვიყენე ბრენდი სახელწოდებით სამი ფეხი Amazon.com– დან
  • 330 ან 220 Ohm რეზისტორები-მე გამოვიყენე 220 (ფერის კოდი წითელი-წითელი-ყავისფერი), რადგან რამდენიმე მოსახერხებელი მქონდა
  • დამონტაჟებულია ჩვეულებრივი პურის დაფა, კონექტორები და კომპიუტერი Arduino Environment– ით
  • ტესტის კანდიდატი - მაგალითად, ყველგან გავრცელებული Samsung LED მონიტორი დისტანციური მართვის პულტით

ნაბიჯი 3: რაც გჭირდებათ - პროგრამული უზრუნველყოფა

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

Raspberry Pi– ზე თქვენ უნდა დააინსტალიროთ შემდეგი:

  • Arduino IDE - გამოიყენება ესკიზის შესაქმნელად და გაგზავნის UNO– ში
  • პითონის მოდული Arduino– სთვის - UNO– სა და Pi– ს შორის სერიული კომუნიკაციისთვის
  • Python SignalR კლიენტის ბიბლიოთეკა - შეგიძლიათ იხილოთ აქ თანდართული ინსტრუქციები

Windows მანქანა დაინსტალირებული შემდეგი განვითარების გარემოთი:

  • Microsoft Visual Studio Express 2013 -ის უფასო გამოცემა SignalR Hub და ვებ კლიენტის პროგრამის შესაქმნელად
  • SQL Server 2012 Express– ის უფასო გამოცემა მონაცემთა ბაზის შემუშავებისა და შექმნისთვის

Windows ინტერნეტ ინფორმაციის სერვერის (IIS) ჰოსტინგის გარემო:

  • მას შემდეგ რაც SignalR Hub და ვებ კლიენტი აშენდება და შემოწმდება, ის უნდა განთავსდეს ადგილობრივ IIS სერვერზე
  • ჩემს შემთხვევაში, ვგეგმავ გამოვიყენო ძველი ლეპტოპი Windows 7 -ით, IIS- ით, სახლის ქსელში

ᲨᲔᲜᲘᲨᲕᲜᲐ

ყველა ინსტრუქცია გამოიყენება Python 2.7.x ვერსიისთვის. ვერსია 3.0 შეიძლება მოითხოვოს გადაწერა

ნაბიჯი 4: SQL სერვერის მონაცემთა ბაზა

SQL სერვერის მონაცემთა ბაზა
SQL სერვერის მონაცემთა ბაზა

თანდართული სქემა გვიჩვენებს ამ პროგრამაში გამოყენებული ძირითადი SQL Server მონაცემთა ბაზის სტრუქტურას და შეიცავს მხოლოდ ორ ცხრილს.

ცხრილის AutoHubCode

ამ ცხრილის ორი მნიშვნელოვანი სვეტი არის:

AutoCodeKey - ინახავს კოდის გასაღების მოსახერხებელ სახელს

თითოეული კოდის გასაღები გადაცემულია ავტომატიზაციის კლიენტის მიერ - ჩვენს შემთხვევაში, HTML ღილაკი ვებ გვერდიდან

AutoCodeVal - ინახავს ნედლი IR კოდის თანმიმდევრობას

ეს არის ფაქტობრივი IR კოდი, რომელიც გადაეცემა კლიენტს SignalR Hub– ის საპასუხოდ

ამ შემთხვევაში, პითონის კლიენტი მუდმივ კავშირშია ცენტრთან, იღებს IR კოდის თანმიმდევრობას და გადასცემს მას სერიულ პორტზე Arduino UNO– ს.

ცხრილი AutoHubLog

  • აღრიცხავს ავტომატიზაციის კლიენტის მიერ მოთხოვნილ კოდს.
  • ეს არის ღონისძიება იმის დასადგენად, თუ ვინ და როდის გამოიყენა სისტემა და რა კოდი იყო მოთხოვნილი

როგორც აღვნიშნე, მე გამოვიყენე SQL Server 2012, როგორც ჩემი მონაცემთა ბაზის არჩევა. თქვენ შეგიძლიათ ხელახლა შექმნათ ეს მარტივი დიზაინი მონაცემთა ბაზის სხვადასხვა პლატფორმაზე, როგორიცაა MySQL, Oracle და ა.

მიუხედავად ამისა, SQL სკრიპტი ამ მონაცემთა ბაზის შესაქმნელად დაერთო აქ

ᲨᲔᲜᲘᲨᲕᲜᲐ

  1. SignalR Hub– ის კოდი შექმნილია SQL Server 2012 მონაცემთა ბაზასთან დასაკავშირებლად
  2. სხვა მონაცემთა ბაზასთან მუშაობა ნიშნავს ჰაბის შეცვლას მონაცემთა ბაზის სხვა დრაივერის გამოსაყენებლად

ნაბიჯი 5: ASP. NET SignalR Hub ვებ პროგრამა

ვებ პროგრამა ASP. NET SignalR Hub
ვებ პროგრამა ASP. NET SignalR Hub
ვებ პროგრამა ASP. NET SignalR Hub
ვებ პროგრამა ASP. NET SignalR Hub

ASP. NET SignalR Hub ვებ პროგრამა ერთობლივად მოიცავს შემდეგ კომპონენტებს, როგორც ეს მითითებულია თანდართულ სქემაში:

ნაწილი 1 - SignalR Hub, რომელიც იღებს მოთხოვნებს და პასუხობს კლიენტისგან

სექციები 2, 4 - HTML კლიენტის ვებ გვერდი და მისი სტილის ფურცელი, რომლებიც ერთობლივად ქმნიან ავტომატიზაციის სისტემის წინა ნაწილს და გასცემს ბრძანებებს ავტომატიზაციის ცენტრს

ნაწილი 3 - jQuery SignalR API, რომელიც გამოიყენება HTML კლიენტის მიერ ავტომატიზაციის ცენტრთან კომუნიკაციისთვის

ნაწილი 5 - SignalR Hub პირდაპირ არ ექვემდებარება მონაცემთა ბაზას. ის ამას აკეთებს Entity Framework– ის გამოყენებით წარმოქმნილი შუალედური კლასების საშუალებით

ეს კლასები აბსტრაქციას უწევს მონაცემთა ბაზის დეტალებს წინა პროგრამიდან

ნაწილი 6 - მონაცემთა ბაზის სერვისის კლასი, რომელიც ეხმარება SQL მონაცემთა ბაზის წაკითხვა -ჩაწერის ოპერაციებს (აღწერილია ადრე) Entity Framework კლასების გამოყენებით

ASP. NET და SignalR არის Microsoft ტექნოლოგიები და ეს სამეურვეო დაგეხმარებათ გაარკვიოთ, თუ როგორ არის აგებული და განლაგებული მარტივი SignalR პროგრამა.

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

შენიშვნა კოდზე

დაერთო ZIP ფაილი, რომელიც შეიცავს კოდის ამოღებულ ვერსიას

საქაღალდის სტრუქტურა არის ვიზუალურად ნაჩვენები - თუმცა, ყველა ჩარჩო კლასი და jQuery სკრიპტები ამოღებულია დანართის ზომის შესამცირებლად

რეკომენდაციაა, რომ ეს კოდი გამოყენებულ იქნას როგორც სახელმძღვანელო, რადგან როდესაც თქვენ შექმნით ახალ SignalR ვებ პროგრამას ზემოხსენებული სამეურვეო ბმულის შესაბამისად, ავტომატურად დაემატება უახლესი jQuery ბიბლიოთეკები და ASP. NET ჩარჩო კლასები

ასევე, jQuery სკრიპტების მითითება index.html გვერდზე უნდა შეიცვალოს, რათა ასახოს jQuery SignalR კლიენტის ბიბლიოთეკების უახლესი ვერსია, რომელიც ავტომატურად დაემატება თქვენი ვებ პროგრამის შექმნისას.

დაბოლოს, კავშირის სტრიქონი უნდა შეიცვალოს, რათა შეესაბამებოდეს თქვენს მონაცემთა ბაზას ისეთ ფაილებში, როგორიცაა Web.config*

ნაბიჯი 6: Python SignalR სერვისის კლიენტი

Python SignalR სერვისის კლიენტი
Python SignalR სერვისის კლიენტი

მიუხედავად იმისა, რომ HTML SignalR კლიენტი არის მომხმარებლის ინტერფეისის წინაშე, Python Client არის სერვისის პროგრამა, რომლის ძირითადი ფუნქციაა მიიღოს კვანძის მიერ გადაცემული IR კოდი და მიაწოდოს მას Arduino UNO სერიული კომუნიკაციის საშუალებით.

თანდართული კოდი თავისთავად ახსნადია და საკმარისად არის დოკუმენტირებული მისი ფუნქციონირების აღსაწერად

როგორც ნაჩვენებია კომპოზიციური ეკრანის კადრში, HTML კლიენტი და პითონის სერვისის კლიენტი ურთიერთობენ SignalR Hub– ის საშუალებით შემდეგნაირად:

  1. ავტომატიზაციის სისტემის მომხმარებელი გასცემს ბრძანებას Hub ღილაკს დაჭერით
  2. თითოეული ღილაკი ასოცირდება IR გასაღების კოდთან და როდესაც დააწკაპუნებთ, ეს კოდი გადაეცემა ცენტრს
  3. ცენტრი იღებს ამ კოდს, უკავშირდება მონაცემთა ბაზას და იღებს უმი IR სიგნალის კოდს და გადასცემს მას ყველა დაკავშირებულ კლიენტს

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

  4. პითონის სერვისის კლიენტი იღებს IR კოდს და გადასცემს მას Arduino UNO– ს შემდგომი დამუშავებისათვის

ნაბიჯი 7: Arduino UNO IR გადაცემის ესკიზი და კოდი

Arduino UNO IR გადაცემის ესკიზი და კოდი
Arduino UNO IR გადაცემის ესკიზი და კოდი
Arduino UNO IR გადაცემის ესკიზი და კოდი
Arduino UNO IR გადაცემის ესკიზი და კოდი
Arduino UNO IR გადაცემის ესკიზი და კოდი
Arduino UNO IR გადაცემის ესკიზი და კოდი

არდუინოს წრე, როგორც ნაჩვენებია ვიზუალში, საკმაოდ მარტივია ამ სისტემისთვის და ამიტომ მოკლედ არის აღწერილი:

  • უფერო IR LED უნდა იყოს მიერთებული ციფრული PIN 3 -ით UNO– ში - ეს არის IRLib Arduino ბიბლიოთეკის მოთხოვნა
  • მიზეზები აღწერილია ჩემს ადრინდელ IBLE– ში დისტანციური მართვის კლონირება IRLib ბიბლიოთეკასთან დაკავშირებულ განყოფილებაში
  • მწვანე LED, რომელიც დაკავშირებულია ციფრულ PIN 4 -თან, არის ვიზუალური მაჩვენებელი, რომელიც ანათებს მაშინ, როდესაც UNO მიიღებს IR კოდის ყველა მონაკვეთს პითონის კლიენტისგან, რომელიც მუშაობს Raspberry Pi– ზე.
  • ამ LED ნათურის დადასტურება ადასტურებს, რომ სერიული კომუნიკაცია Raspberry Pi- სა და UNO– ს შორის მუშაობს
  • სერიული კომუნიკაციის გასააქტიურებლად, UNO უკავშირდება Raspberry Pi– ს USB პორტის საშუალებით
  • თანდართული Arduino Sketch არის საკმარისად კომენტარი მისი ფუნქციის აღსაწერად
  • კოდის ზედა ნაწილში გაკეთებული კომენტარები ასევე აღწერს, თუ როგორ არის საჭირო მიკროსქემის შეერთება

ᲨᲔᲜᲘᲨᲕᲜᲐ

პრაქტიკაში, Arduino და Pi შეიძლება ერთობლივად იყოს დაკავშირებული USB კვანძთან, რომელიც საკმარისად ძლიერია Pi, Arduino– ს მართვისთვის და ასევე გადასცემს ძლიერ სიგნალს IR LED– ის საშუალებით

ნაბიჯი 8: დაკავშირება და სისტემის ტესტირება

დაკავშირება და სისტემის ტესტირება
დაკავშირება და სისტემის ტესტირება
დაკავშირება და სისტემის ტესტირება
დაკავშირება და სისტემის ტესტირება
დაკავშირება და სისტემის ტესტირება
დაკავშირება და სისტემის ტესტირება
  1. შექმენით და განათავსეთ ASP. NET SignalR Hub, HTML კლიენტი SQL Server 2012 მონაცემთა ბაზასთან ერთად ინტერნეტ ინფორმაციის სერვერზე (IIS) თქვენს ადგილობრივ საშინაო ქსელში
  2. ვებ აპლიკაციაზე წვდომა HTML SignalR კლიენტის HTTP– ით გახსნით

    ამ გვერდის URL ჩვეულებრივ იქნება https:// yourComputer: port_number/

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

    დაიმახსოვრე! თქვენ მოგიწევთ კოდების ჩატვირთვა თქვენს მონაცემთა ბაზაში IR მიმღების ბიბლიოთეკის შექმნით და კოდების აღებით, როგორც ეს აღწერილია ჩემს წინა IBLE- ში

  4. დაუკავშირეთ Arduino Raspberry Pi– ს USB– ით - გახსენით Arduino IDE Pi– ზე და დარწმუნდით, რომ UNO– ს შეუძლია დაამყაროს კავშირი Pi– სთან

    ეს არდუინოს სამეურვეო სტატიები დაგეხმარებათ სწრაფად მიაღწიოთ ამას

  5. გახსენით პითონის კოდი და განახორციელეთ შემდეგი ცვლილებები თქვენი გარემოსთვის

    • თქვენი გაეროს სერიული პორტის მისამართი, როგორც მე –4 ნაბიჯიდან
    • SignalR ჰაბის URL ემთხვევა თქვენს ადგილობრივ URL– ს ნაბიჯი 2 – დან - ამ მაგალითში ეს იქნება https:// yourComputer: port_number/signalr
  6. დაბოლოს, გახსენით Arduino Sketch Arduino IDE– ში Raspberry Pi– ზე და მიაწოდეთ UNO– ს
  7. მოათავსეთ პურის დაფა, რომელიც აკავშირებს წრეს მოწყობილობასთან სიახლოვეს გასაკონტროლებლად - IR LED- ს უნდა ჰქონდეს მკაფიო ხედვა მოწყობილობის IR მიმღების პორტთან
  8. დაიწყეთ პითონის პროგრამა Raspberry Pi– ზე F5 ღილაკზე დაჭერით Python IDLE ინსტრუმენტების ზოლზე
  9. დაბრუნდით საკონტროლო პანელში HTML კლიენტის პროგრამაში (ნაბიჯი 2) და დააწკაპუნეთ ღილაკზე (როგორიცაა ჩართვა ან მოცულობის გაზრდა)

თუ სისტემა სწორად არის დაყენებული, მაშინ თქვენ უნდა შეძლოთ თქვენი ტელეფონის ან ტაბლეტის HTML კლიენტის გვერდის გაშლა და თქვენი მოწყობილობის მართვა HTML კლიენტის გვერდის ღილაკებით.

ნაბიჯი 9: სისტემა მოქმედებაში

სისტემა მოქმედებაში
სისტემა მოქმედებაში
სისტემა მოქმედებაში
სისტემა მოქმედებაში
სისტემა მოქმედებაში
სისტემა მოქმედებაში
სისტემა მოქმედებაში
სისტემა მოქმედებაში

ზემოთ მოყვანილი ვიზუალი აჩვენებს სახლის ავტომატიზაციის სისტემას, როდესაც ის დაყენებულია.

მას შემდეგ რაც გამოქვეყნდა ეს IBLE, მე გავაფართოვე ინტერფეისი ჩემი VIZIO LED ტელევიზიის რამდენიმე IR კოდის გადაღებით

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

შემდგომ ვიზუალებში ნაჩვენებია პლანშეტი წინა პლანზე, ტელევიზორი უკანა მხრიდან, რომელიც პასუხობს ვებ ინტერფეისის ბრძანებებს:

  1. Power OFF ბრძანება - ტელევიზია გამორთულია
  2. ჩართვის ბრძანება - ტელევიზია ჩართულია და ეკრანის გაძლიერებისთანავე გამოჩნდება "V" ლოგო
  3. მუნჯი ჩართვის ბრძანება - ჰორიზონტალური ზოლი გამოდის დინამიკით დადუმებული

ყველა ტესტში, ნაცრისფერი მხარე ტაბლეტის ეკრანზე დაფის გვერდით აჩვენებს კლიენტის მიერ გაცემულ ბრძანებას და დისტანციური SignalR Hub– ის მიერ გამოგზავნილ პასუხს.

ნაბიჯი 10: ავტომატიზაციის სისტემის გაძლიერება და მასთან დაკავშირებული ცვლილებები

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

გაძლიერება 1 (სწრაფი): სხვადასხვა სიგრძის IR სიგნალებთან მუშაობა

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

    მაგალითად, ამ შემთხვევაში, IR კოდის მასივის სიგრძე LED ტელევიზორისთვის არის 67, ხოლო სამსუნგის ხმოვანი ზოლის სიგრძე დაახლოებით 87

  2. რაც იმას ნიშნავს, რომ თუ პირველად ჩავრთავდი ხმოვან ზოლს, არდუინოს ესკიზში IR ბუფერული მასივი ივსებოდა IR კოდის თანმიმდევრობით, რომელიც შეიცავს 87 კოდს
  3. ამის შემდეგ, თუ ჩართავდი LED ტელევიზორს, ის შეავსებდა IR ბუფერულ მასივს მხოლოდ 67 კოდით, მაგრამ წინა ოპერაციიდან დარჩენილი 20 კოდი მაინც იქნება

Შედეგი? LED ტელევიზორი არ ირთვება, რადგან IR კოდის ბუფერი დაზიანებულია დამატებითი 20 კოდით, რომელიც არ არის გასუფთავებული წინა ოპერაციისგან!

დაფიქსირება 1 (მარტივი გამოსავალი, არ არის რეკომენდებული)

შეცვალეთ Arduino Sketch შემდეგნაირად:

შეცვალეთ შემდეგი ფუნქციის ზარები მარყუჟის () {} ფუნქციაში

transmitIRCode ();

გადააქვთ კოდი (გ);

შეიტანეთ ცვლილებები ზემოაღნიშნული ფუნქციის ხელმოწერაში:

void transmitIRCode (int codeLen) {// RAWBUF მუდმივი შეიცვალა codeLen IRTransmitter. IRSendRaw:: send (IRCodeBuffer, codeLen, 38); }

მიუხედავად იმისა, რომ ეს ადვილია, მასივი არასოდეს ხდება მთლიანად გაწმენდილი და, შესაბამისად, ეს არ არის ძალიან სუფთა გამოსავალი

დაფიქსირება 2 (არ არის რთული, რეკომენდირებულია)

გამოაცხადეთ დამატებითი ცვლადი Arduino Sketch– ის ზედა ნაწილში, კომენტარების განყოფილების შემდეგ:

ხელმოუწერელი EMPTY_INT_VALUE;

დაამატეთ ეს setup () ფუნქციის ზედა ნაწილში:

// აიღეთ ცარიელი ხელმოუწერელი მთელი ცვლადის ბუნებრივი მდგომარეობა EMPTY_INT_VALUE = IRCodeBuffer [0];

გადაახვიეთ ქვემოთ და დაამატეთ ახალი ფუნქცია ესკიზს transmitIRCode () ფუნქციისთანავე:

void clearIRCodeBuffer (int codeLen) {// მასივიდან ყველა კოდის გასუფთავება // შენიშვნა: მასივის ელემენტების 0-ზე დაყენება არ არის გამოსავალი! (int i = 1; i <= codeLen; i ++) {IRCodeBuffer [i-1] = EMPTY_INT_VALUE;}}

დაბოლოს, დარეკეთ ზემოთ ახალი ფუნქცია მარყუჟის () ფუნქციის შემდეგ ადგილას:

// გადატვირთვა - განაგრძეთ სერიული PortclearIRCodeBuffer კითხვა (გ);…

ეს უფრო სუფთა მიდგომაა, რადგან ის რეალურად აღადგენს IR Buffer მასივის ყველა მდებარეობას, რომელიც დასახლებული იყო უახლესი IR კოდის სიგნალით, შემთხვევისათვის არაფრის დატოვების გარეშე.

გაძლიერება 2 (უფრო მეტად ჩართული): IR სიგნალის გადაცემის გამეორება გარკვეული მოწყობილობებისთვის

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

კონცეფციის გამოსწორება აქ განიხილეს, რადგან ის ცოტა უფრო მეტად არის ჩართული და საჭიროებს ტესტირებას

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

ამის ნაცვლად, ამ შესწორების დამატება HTML SignalR კლიენტსა და Python SignalR სერვისის პროგრამაში გადაწყვეტილებას ბევრად მოქნილს ხდის. და ეს შეიძლება მიღწეული იყოს პრინციპში შემდეგნაირად:

შეცვალეთ SignalR HTML კლიენტი, რომ გადასცეთ განმეორებითი ინფორმაცია კერას

გახსენით index.html და ჩასვით განმეორებითი მნიშვნელობა HTML ღილაკში ასე:

მნიშვნელობა = "SMSNG-SB-PWR-ON" გახდება მნიშვნელობა = "SMSNG-SB-PWR-ON_2_1000"

სადაც, 2 არის განმეორებითი მნიშვნელობა და 1000 არის შეფერხების მნიშვნელობა მილიწამებში ორ განმეორებით სიგნალს შორის

როდესაც დააწკაპუნებთ ამ ღილაკზე, SignalR კერა მიიღებს საკვანძო კოდს+Repeat_Spec

შეცვალეთ SignalR Server– ის გვერდითი მეთოდები მხოლოდ გასაღები კოდის გასაანალიზებლად:

  • გამოიყენეთ გასაღები კოდი, როგორც ყოველთვის, მონაცემთა ბაზიდან IR კოდის ამოსაღებად
  • გადასცეს ძირითადი კოდი+Repeat_Spec და IRCode SingalR კლიენტებს ჩვეულებისამებრ

შეცვალეთ Python SignalR სერვისის პროგრამა სიგნალების გადასაცემად განმეორებითი მნიშვნელობების გამოყენებით:

გახსენით Python კლიენტი და შეცვალეთ შემდეგი ორი ფუნქცია:

def print_command_from_hub (buttonId, cmdSrc):

# გაანალიზეთ განმეორებითი კოდი ღილაკიდან მნიშვნელობა

def transmitToArduino (IRSignalCode, delim, endPrefix):

# დააყენეთ ცოტა ხნით ან მარყუჟისთვის, რომ გადასცეს სიგნალი სასურველ სიხშირეზე

  • ამრიგად, არდუინოს არაერთხელ უნდა აციმციმდეს
  • ნებისმიერი რაოდენობის განმეორებითი სიხშირე შეიძლება ჩაშენდეს ამ სისტემაში
  • გარდა ამისა, თუ თქვენ იყენებთ გაეროს, არსებობს შეზღუდვა იმ ზომებზე, რომლითაც თქვენი ესკიზი შეიძლება გაიზარდოს!

ნაბიჯი 11: ცნობილი საკითხები და უსაფრთხოების საკითხები

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

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

  • Python SignalR კლიენტის გადატვირთვა აღადგენს სისტემას ნორმალურ ფუნქციონირებაზე
  • შეიძლება დაუყოვნებლივ მოგვარდეს ის, რომ წაშალოთ Debug– ის არასასურველი შედეგები ორივეში, Python SignalR კლიენტში და ასევე Arduino Sketch– ში და გაიმეოროთ ეს ტესტები
  • სხვა ადგილი, რომელიც უნდა ვეძებოთ, იქნება თავად სერიული კომუნიკაცია - შესაძლებელია თუ არა კოდის დამატება ბუფერის სწრაფად გასათავისუფლებლად?

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

საკითხი 2: HTML ეკრანი წყვეტს ღილაკების დაწკაპუნებაზე რეაგირებას დიდი ხნის უმოქმედობის შემდეგ

როგორც წესი, გვერდის განახლება წყვეტს ამ ქცევას - ამ ქცევის მიზეზი მაინც გაურკვეველია

უსაფრთხოებას ეხება

ეს სისტემა შემუშავებულია მხოლოდ ადგილობრივი (სახლის) ქსელის გამოყენებისთვის და არ გააჩნია უსაფრთხოების აუცილებელი გარანტიები ინტერნეტში გამოსაყენებლად

ამიტომ რეკომენდირებულია, რომ SignalR Hub განთავსდეს ადგილობრივ აპარატზე თქვენს ადგილობრივ/სახლის ქსელში

მადლობა რომ კითხულობ ჩემს IBLE- ს და ვიმედოვნებ გაერთობი!

გირჩევთ: