Arduino 3-in-1 დრო და ამინდის ჩვენება: 11 ნაბიჯი
Arduino 3-in-1 დრო და ამინდის ჩვენება: 11 ნაბიჯი
Anonim

ავტორის მიერ Boomer48

ATtiny85– ის გამოყენებით
ATtiny85– ის გამოყენებით
ATtiny85– ის გამოყენებით
ATtiny85– ის გამოყენებით
Pi Powered Pie Partitioning and Polygon Pruning Tool
Pi Powered Pie Partitioning and Polygon Pruning Tool
Pi Powered Pie Partitioning and Polygon Pruning Tool
Pi Powered Pie Partitioning and Polygon Pruning Tool
ციფრული კონტროლი ხელით აუდიო გამაძლიერებლისთვის
ციფრული კონტროლი ხელით აუდიო გამაძლიერებლისთვის
ციფრული კონტროლი ხელით აუდიო გამაძლიერებლისთვის
ციფრული კონტროლი ხელით აუდიო გამაძლიერებლისთვის

მომწონს PIC მიკროკონტროლერები და მომწონს პროგრამირება ასამბლეის ენაზე. სინამდვილეში, ბოლო რამდენიმე წლის განმავლობაში, მე გამოვაქვეყნე 40 -მდე პროექტი ჩემს ვებგვერდზე ამ კომბინაციის საფუძველზე. ამას წინათ ვყიდულობდი ნაწილებს ჩემი ერთ -ერთი საყვარელი ამერიკელი გამყიდველისგან და დავინახე Arduino Nano, პროგრამირების კაბელით, მხოლოდ 1,20 დოლარად, ვიდრე შიშველი ATMEGA328 პროცესორის ჩიპი. ასე რომ, მე ვიყიდე რამდენიმე მათგანი. შემდეგ გადმოვწერე Arduino IDE და ამოვიღე მეხსიერება "C ++" პროგრამირების შესახებ.

ეს პროექტი არის საათის ნაზავი, რომელიც იყენებს GPS- ს დროისათვის და RF მიმღები, რომელიც დეკოდირებას უკეთებს ამინდის შეტყობინებებს საერთო AcuRite სენსორიდან. შედეგი არის მცირე ზომის დროის და ტემპერატურის ჩვენება. GPS საათი და ამინდის რუტინა დაყენებულია ცალკე, მოიცავს ფაილებს, ასე რომ ადვილია შეხვიდეთ მთავარ რუტინაში და დააკონფიგურიროთ ის, რომ შეასრულოს მხოლოდ საათის ფუნქცია ან მხოლოდ ამინდის ფუნქცია. უბრალოდ გამოაქვეყნეთ შესაბამისი "#განსაზღვრეთ" მთავარი რუტინის ზედა ნაწილში, თუ გსურთ მხოლოდ ერთი ფუნქცია.

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

ნაბიჯი 1: ამინდის სენსორი

ამინდის სენსორი
ამინდის სენსორი
ამინდის სენსორი
ამინდის სენსორი
ამინდის სენსორი
ამინდის სენსორი

აქ გამოყენებული ამინდის AcuRite სენსორი აგზავნის ინფორმაციას ტემპერატურისა და ტენიანობის შესახებ ყოველ 16 წამში. უკანა მხარეს ის აჩვენებს 000592TXR მოდელის ნომერს, მაგრამ ის ჩვეულებრივ რეკლამირებულია როგორც 06002M მოდელი. ეს სენსორი გამოიყენება ამინდის სხვადასხვა სადგურის უამრავ მოდელში, ასე რომ მისი პოვნა ადვილია და მე შევძელი მათი eBay- ზე მოპოვება 20 დოლარამდე. AcuRite ყიდის მსგავს სენსორებს მათი ზოგიერთი ამინდის სადგურისთვის, მაგრამ ისინი შეიძლება იცავდნენ ან არ იცავდნენ ერთსა და იმავე საკომუნიკაციო პროტოკოლს. ინტერნეტში არის მითითება, რომ 00606 ტემპერატურის მხოლოდ სენსორი იყენებს იმავე შეტყობინების ფორმატს, მაგრამ ტენიანობის არასწორი ბაიტით.

როგორც ზემოთ ნაჩვენები პირველი ტალღის ფორმაში, ამინდის შეტყობინებები იგზავნება პაკეტებით, თანმიმდევრულ შეტყობინებებს შორის 2 ms ინტერვალით. ზემოთ ნაჩვენები მეორე ტალღის ფორმა აფართოებს ერთი შეტყობინების ნაწილს, რათა ნახოთ ბიტის ხანგრძლივობა და შაბლონები. არსებობს ოთხი სინქრონიზაციის ბიტი, რომლებიც დაახლოებით 600us მაღალია, რასაც მოჰყვება 600us დაბალი. მონაცემთა ბიტები წარმოდგენილია 400us მაღალი, შემდეგ 200us დაბალი (1) ან 200us მაღალი, რასაც მოყვება 400us დაბალი (0).

შეტყობინების ფორმატი შედგება 7 ბაიტი მონაცემისგან. პირველი ორი ბაიტი არის სენსორის ID და ეს არ იცვლება (ანუ: ის არ იყენებს მოძრავ კოდს). ბოლო ბაიტი არის პირველი ექვსი ბაიტის მარტივი დამატებითი დანამატი. მესამე ბაიტი არის ბატარეის დონის მაჩვენებელი და ყოველთვის უნდა იყოს 44 თექვსმეტი თუ ბატარეა კარგია. მეოთხე ბაიტი არის ტენიანობა და ის არის არასაკმარისი მნიშვნელობა 0-დან 99-მდე. მნიშვნელოვანია გავითვალისწინოთ, რომ ყველაზე მნიშვნელოვანი ბიტი 4, 5 და 6 არის პარიტეტული ბიტი და არ არის გაზომვის ნაწილი ღირებულებები. ბაიტი 5 და 6 არის მასშტაბური ტემპერატურა (ცელსიუსი), რომლის ქვედა 4 ბიტიანი ბაიტი 5 შერეულია ქვედა 7 ბიტიანი 6 ბაიტით და ქმნის 11 ბიტიან მნიშვნელობას. ტემპერატურა ყოველთვის წარმოდგენილია როგორც დადებითი რიცხვი და ხდება მხოლოდ ნეგატიური, როდესაც გამოიყენება სკალირება. სკალირება არის (C / 10) - 100. გაყოფა 10 -ზე საჭიროა, რადგან ტემპერატურის გარჩევადობა არის მეათედის ხარისხი. გამოკლება საჭიროა, რადგან სენსორს 100 ემატება, რათა გადაცემული მნიშვნელობა დადებითი იყოს.

ნაბიჯი 2: RF მიმღები

RF მიმღები
RF მიმღები
RF მიმღები
RF მიმღები

RF მოდული, რომელსაც მე ვიყენებ ამ პროექტისთვის არის RXB6. ეს არის სუპერ ჰეტეროდინული მიმღები, განსხვავებით ნაკლებად სასურველი სუპერ რეგენერაციული მიმღებებისგან. თუ გადახედავთ იაფი RF მოდულებს, აღმოაჩენთ, რომ გადამცემი და მიმღები დაფები ხშირად გაერთიანებულია ერთმანეთთან. შეფუთული მიმღებების უმეტესობა სუპერ რეგენერაციული ტიპებია, ამიტომ მათ აქვთ უფრო დაბალი შესრულების მახასიათებლები (დიაპაზონის ჩათვლით), ვიდრე სუპერ ჰეტეროდინ მიმღებები. ჩვენ გვჭირდება მხოლოდ მიმღების მოდული ამ პროექტისთვის, რადგან ჩვენ ვიღებთ სიგნალებს ამინდის სენსორის გადამცემიდან.

ნაბიჯი 3: RF ანტენები

RF ანტენები
RF ანტენები

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

კიდევ ერთი შესაძლებლობა არის საკუთარი ხვეული ანტენის გაკეთება. ინტერნეტში არსებობს მრავალფეროვანი გეგმა, მაგრამ ის, რაც ნაჩვენებია სურათზე, არის ის, რაც მე გავაკეთე. მე გამოვიყენე მყარი ძირითადი მავთული Ethernet კაბელის ჯართიდან და დავამუშავე იგი 5/32 ინჩიანი საბურღი ნაწილის გლუვი წვერის გარშემო. დატოვეთ იზოლაცია გარდა წვერი, რომელიც შემაგრებულია RF დაფაზე. თქვენ დაგჭირდებათ 20 ბრუნვა. თქვენ ასევე შეგიძლიათ გამოიყენოთ 7/32 ინჩიანი საბურღი და მის ნაცვლად გადაიტანოთ 17 ბრუნვა. რომელიმე მათგანი ალბათ კარგად იმუშავებს იმ დიაპაზონისთვის, რომელიც სავარაუდოდ გექნებათ თქვენი სენსორებისთვის. რეალური გასაღები არის კარგი RF მიმღების დასაწყებად. AcuRite სენსორებს ასევე აქვთ საკმაოდ ძლიერი გადამცემები.

ნაბიჯი 4: RF საკომუნიკაციო პროტოკოლი

მონაცემთა გადაცემის რამდენიმე განსხვავებული მოდულაციის ტექნიკა არსებობს, მაგრამ ეს სენსორები იყენებენ უმარტივესს, რომელიც არის OOK (ჩართვა-გამორთვა) ან ASK (ამპლიტუდის ცვლა-გასაღები). ვინაიდან ამ მაგალითში საქმე გვაქვს მონაცემების 0/1 ბიტთან, ამპლიტუდა სრული ან გამორთულია. ამრიგად, ჩვენი მიზნებისათვის, OOK და ASK ერთნაირია, რადგან OOK ნიშნავს, რომ RF გადამზიდავი არის ან ჩართული ან გამორთული. შეტყობინების ფორმატი ზოგადად განსაზღვრულია გადამცემი მოწყობილობის მწარმოებლის მიერ და მათ შეუძლიათ გამოიყენონ თითქმის ნებისმიერი გადაცემის სიჩქარე, ნებისმიერი ბიტი ფორმატირების სტილი და შეტყობინების ნებისმიერი სიგრძე. 433-MHz დიაპაზონი სავსეა გადაცემებით, როგორიცაა ჭკვიანი მრიცხველები და ა.შ. ასე რომ, პროგრამული უზრუნველყოფა უნდა იყოს მორგებული, რათა გაფილტროს მხოლოდ იმ შეტყობინების ფორმატი, რომლის გამოყენებაც გვსურს.

ნაბიჯი 5: დროის მონაცემები

დროის მონაცემები
დროის მონაცემები

მე ვიყენებ იაფი GPS ერთეულს, რათა მივიღო ზუსტი დროის მონაცემები, რომლებიც ავტომატურად განახლდება ელექტროენერგიის გათიშვის შემდეგ. მე მაქვს რამდენიმე GPS ერთეული (ეკრანის გარეშე), რომლითაც გამოდის სტანდარტული NMEA წინადადებები, მაგრამ ყველაზე პატარა და იაფი ერთეულიდან მაქვს NEO-6M. NEO-6M მოდული ადვილია Arduino– სთან, რადგან ის იყენებს TTL დონის სერიულ პორტს. ერთადერთი რეალური განსხვავება ისაა, რომ NMEA სტანდარტი განსაზღვრავს სერიული baud მაჩვენებელი 4800 მაგრამ NEO-6M ნაგულისხმევი 9600 baud. თქვენ შეგიძლიათ გაუშვათ უფასო "u-center" პროგრამა ბოდის სიჩქარის შესაცვლელად, მაგრამ მე ის დავტოვე ქარხნის ნაგულისხმევად. ასევე არსებობს უფასო პროგრამა, სახელწოდებით GPSInfo (გამოქვეყნებული Globalsat– ის მიერ), რომელიც ძალიან მოსახერხებელია კომპიუტერში GPS ინფორმაციის სანახავად. თქვენ შეგიძლიათ დააკავშიროთ GPS ერთეული სტანდარტულ USB to TTL კაბელთან, მისი შესამოწმებლად ან კომპიუტერის გამოყენებით დასაყენებლად. გაითვალისწინეთ, რომ GPS ჩიპი მოდულზე რეალურად მუშაობს 3.3 ვოლტზე (ბორტზე ძაბვის რეგულატორის საშუალებით), ასე რომ, თუ გსურთ დაუკავშირდეთ მის RXD პორტს, თქვენ უნდა გადაინაცვლოთ 5 ვოლტიდან ქვემოთ. TXD პორტს შეუძლია პირდაპირ დაუკავშირდეს არდუინოს ან კომპიუტერს.

ნაბიჯი 6: დროის ზონები

GPS დროის ჩვენება ადვილი საქმეა მანამ, სანამ თქვენ უბრალოდ გსურთ აჩვენოთ UTC (უნივერსალური დროის კოორდინირებული). NMEA წინადადებები შედგება ASCII სიმბოლოებისგან, რომელთა პირდაპირ გადმოტანა შესაძლებელია LCD– ზე. დროის ნაწილი არის HHMMSS. FF ფორმატში (საათი, წუთი, წამი და ფრაქციული წამი). ჩვენი საათისათვის წილადი ნაწილი არ არის სასარგებლო, ამიტომ ყველაფერი რაც ჩვენ გვჭირდება არის ექვსი სიმბოლო. პრობლემა ის არის, რომ თქვენ უნდა გადააკეთოთ თქვენს ადგილობრივ დროზე და 12-საათიანი AM/PM ფორმატში, თუ ეს გსურთ. მაგრამ ხანდახან პრობლემები არის ის, რაც ცხოვრებას საინტერესოს ხდის, სწორედ ეს არის პროგრამული უზრუნველყოფის ის ნაწილი.

რაც შეეხება დროის ზონებს, თქვენ შეიძლება იფიქროთ, რომ იქნებოდა მხოლოდ 24 მათგანი, მათგან 12 მათგანი UTC მდებარეობის აღმოსავლეთით (+ ზონები) და 12 მათგანი UTC ადგილმდებარეობის დასავლეთით (- ზონები). ფაქტობრივად, არსებობს რამდენიმე უცნაური, რომლებიც არის ფრაქციული საათები და წყვილი, რომელიც აღემატება 12 საათის "ლიმიტს". თუ შემთხვევით ცხოვრობთ ერთ – ერთ იმ უბანში, ბოდიშს ვიხდი, რადგან ჩემი პროგრამული უზრუნველყოფა მხოლოდ 24 – საათიან ზონებს ითვლის. ასევე არიან ჩვენგანნი, რომლებიც დღისით სარგებლობენ დღის ნაწილზე, მაგრამ ეს ავტომატურად არ არის გათვალისწინებული პროგრამულ უზრუნველყოფაში. ეს მოითხოვს მომავალი თარიღების საძიებო ცხრილს, პროგრამული უზრუნველყოფის დამატებით სირთულეს და პროგრამული უზრუნველყოფის განახლების აუცილებლობას, თუ წლის კვირები შეიცვლება. სამაგიეროდ, აპარატურა იყენებს მომენტალურ კონტაქტურ გადამრთველს, რათა მოხდეს დროის ზონის (UTC ოფსეტური) მარტივი დაყენება.

ნაბიჯი 7: სქემატური

სქემატური
სქემატური

სქემა ნაჩვენებია ზემოთ და მოიცავს კავშირებს 4 ბიტიანი 1602 LCD ინტერფეისისთვის. სერიული მონაცემები RF მიმღებიდან არის ციფრული ლოგიკის დონეზე, ასე რომ ის პირდაპირ არის დაკავშირებული Arduino მონაცემთა შეყვანის ერთ - ერთ პინთან. პროგრამული უზრუნველყოფის კონფიგურაციაა კონფიგურაცია, რომ შეასრულოს ცვლილებაზე ფუნქცია, რათა გავზომოთ პულსის სიგანე. GPS TXD გამომავალი პირდაპირ კავშირშია Arduino RX შესასვლელთან.

გამოიყენება ორი გადამრთველი. როგორც უკვე აღვნიშნეთ, მომენტალური კონტაქტური გადამრთველი იძლევა UTC ოფსეტის დაყენების საშუალებას. გადამრთველის დაჭერა შესაძლებელია ნებისმიერ დროს დაყენებული რეჟიმში შესასვლელად. თავდაპირველად, ეკრანზე ნაჩვენები იქნება არასწორი UTC ოფსეტი "+77". იხილეთ "საათის პროგრამული უზრუნველყოფა" განყოფილება UTC ოფსეტური პარამეტრების მითითებისთვის.

მეორე გადამრთველი არის მარტივი ჩართვა/გამორთვა. "გამორთული" პოზიციის დროს დრო ნაჩვენები იქნება 12-საათიანი ფორმატით (AM/PM) და "ჩართულ" პოზიციაში დრო გამოჩნდება 24-საათიან ფორმატში. ეს გადამრთველი შეიძლება შეიცვალოს ნებისმიერ დროს ფორმატებს შორის გადასატანად.

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

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

მე ჩვეულებრივ ვიყენებ LCD ინტერფეისების ორი ტიპიდან ერთს. ერთი არის სტანდარტული 4 ბიტიანი ინტერფეისი და მეორე არის 3 მავთულის ინტერფეისი, რომელიც იყენებს ცვლის რეგისტრს. მე შევიმუშავე ეს ინტერფეისი, როდესაც ვმუშაობდი მცირე PIC მიკროკონტროლერებთან, რომლებსაც ჰქონდათ შეზღუდული რაოდენობის I/O ქინძისთავები. მე გამოვიყენე 4-ბიტიანი ინტერფეისი ამ პროექტისთვის, მაგრამ მე მაქვს საკუთარი LCD ფაილი, ნაცვლად ზოგადი Arduino LCD ბიბლიოთეკისა. ეს ამცირებს მეხსიერების მოხმარებას და კოდის სირთულეს და ასევე მაძლევს საშუალებას შეცვალონ კოდი კონკრეტული პროექტებისთვის, როგორიცაა ეს.

ნაბიჯი 9: საათის პროგრამული უზრუნველყოფა

GPS ერთეული აწარმოებს სტანდარტულ NMEA-0183 წინადადებას, რომელიც არის ASCII სტრიქონი, რომელიც შეიცავს მრავალფეროვან ინფორმაციას. ამ პროგრამისთვის მე შევარჩიე GGA წინადადება დროის ინფორმაციის მისაღებად, რადგან ეს არის წინადადება, რომელიც გამოვიყენე წინა GPS პროექტისთვის. NMEA წინადადებებში ინფორმაციის ველები გამოყოფილია მძიმეებით, ასე რომ, GGA წინადადების სათაურის გამოვლენის შემდეგ, პროგრამული უზრუნველყოფა ჩვეულებრივ ითვლის მძიმეებს და დარეკავს შესაბამის რუტინას GPS ინფორმაციის თითოეული სასურველი სფეროსთვის. აქ მხოლოდ დროის ინფორმაციაა საჭირო და ის არის პირველი მძიმის შემდეგ ველში, ასე რომ დათვლა არ არის საჭირო.

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

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

UTC ადგილობრივ დროზე გადასაყვანად, UTC ოფსეტი (დროის ზონა) უნდა იქნას გამოყენებული. იმის გამო, რომ UTC დრო GPS– დან არის ASCII ფორმატში, პროგრამული უზრუნველყოფა გარდაქმნის ASCII საათის სიმბოლოებს ათწილადში და შემდეგ ამატებს UTC ოფსეტს. UTC ოფსეტი ინახება, როგორც დადებითი BCD მნიშვნელობა, ნიშნის ბიტით, ასე რომ, ის ჯერ გადაიქცევა მთელ რიცხვზე და შემდეგ უარყოფს, თუ ნიშნის ბიტი დაყენებულია. მას შემდეგ, რაც გამოითვლება ადგილობრივი დროის საათის მნიშვნელობა, საძიებელი ცხრილი გამოიყენება მის BCD– ად გადასაყვანად, შემდეგ კი BCD გადადის ASCII– ზე საჩვენებლად. საძიებო ცხრილს უნდა გაუმკლავდეს 24 საათიანი UTC ფორმატი, ასევე +/- 12 დროის ზონა. ამის გასაკეთებლად, UTC ჯერ 0000 – დან 2300 – მდე იკავებს შუა 24 ჩანაწერს ცხრილში, 12 ჩანაწერი ადრე და 12 ჩანაწერი დროის ზონების გათვალისწინებით. ერთი მაგიდა არის 12-საათიანი ფორმატით, ამიტომ მე ასევე დავამატე საძიებელი ცხრილი ეკრანის AM/PM ნაწილისთვის. მეორე მაგიდა არის 24 საათიანი ფორმატით. როგორც უკვე აღვნიშნეთ, ჩართვა/გამორთვა საშუალებას გაძლევთ აირჩიოთ 12 საათიანი ან 24 საათიანი ფორმატი.

დროის ზონა ამოღებულია EEPROM– დან ინიციალიზაციის დროს და მოკლედ გამოჩნდება. თუ ის ერთხელ მაინც არ არის დაყენებული, მაშინ ეწოდება პარამეტრების რეჟიმს. კონფიგურაციის რუტინა ასევე შეიძლება გამოძახდეს ნებისმიერ დროს, კონტაქტური მომენტალური გადამრთველის დაჭერით. დაყენების რუტინა ინიციალიზებს ეკრანს "UTC OFFSET +77". გადამრთველის მოკლე დაჭერით შეიცვლება მნიშვნელობა "-00". თუ საჭიროა პოზიტიური დროის ზონა, მაშინ სხვა მოკლე დაჭერით შეიცვლება მნიშვნელობა "+00". ხანგრძლივი დაჭერით (> 1 წამი) გადავა პარამეტრების რეჟიმი შემდეგ საფეხურზე. ამ დროს ყოველი მოკლე დაჭერა გაზრდის დროის მნიშვნელობას მაქსიმუმ 12 -მდე. სასურველი დროის სარტყლის მიღწევის შემდეგ დააჭირეთ და გააჩერეთ გადამრთველი 1 წამზე მეტხანს და შემდეგ გაათავისუფლეთ. პროგრამული უზრუნველყოფა შემდეგ შეინახავს UTC მნიშვნელობას EEPROM- ში და მოკლედ აჩვენებს "OFFSET SAVED". თუ შესვლისას შეცდომა დაუშვით, უბრალოდ გამოდით და შემდეგ კვლავ დააჭირეთ ღილაკს გადასატვირთად.

NEO-6M არ საჭიროებს პოზიციის კარგ დაფიქსირებას დროის გამოსაყვანად, ამიტომ უნდა გამოუშვას შეტყობინებები როგორც კი მიიღებს ერთ თანამგზავრს. მანამდე ჩვენება წაიკითხავს "არ არის მონაცემები".

ნაბიჯი 10: ამინდის პროგრამული უზრუნველყოფა

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

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

შეწყვეტის დამმუშავებელი განსაზღვრავს, არის თუ არა დაკავებული რიცხვი საკმარისად გრძელი, რომ იყოს საწყისი პულსი. როგორც უკვე აღვნიშნეთ, მრავალ შეტყობინებას შორის უფსკრულია 2 ms, ეს არის ის, რასაც ეძებს პროგრამული უზრუნველყოფა. 433 MHz ტრაფიკის გამო, პროგრამული უზრუნველყოფის საწყისი სკრინინგი დარწმუნებულია, რომ გაზომილი დრო არის მინიმუმ 1.8 ms, მაგრამ არა უმეტეს 2.4 ms. დაწყების აღმოჩენის შემდეგ პროგრამული უზრუნველყოფა ეძებს სინქრონიზაციის ბიტებს (600us) და ითვლის, რომ დარწმუნდეს, რომ ოთხი მათგანი მიღებულია. ამ ტესტების ჩაბარების შემდეგ, პროგრამული უზრუნველყოფა ეძებს სათანადო ბიტ დროს 200us და 400us.

მიღებული ბიტები ყალიბდება ბაიტებად და თითოეული ბაიტი ინახება. მას შემდეგ, რაც შვიდი ბაიტი მიიღება, გზავნილის შემოწმება დასტურდება შემდგომი დამუშავების დაშვებამდე. თუ ნედლი ბაიტი უნდა გამოვიდეს (გამართვის რეჟიმი), მაშინ ბაიტები გარდაიქმნება ASCII სიმბოლოებად და იგზავნება LCD– ზე. თუ სასურველია ტენიანობა და ტემპერატურა, მაშინ ხდება შესაბამისი გარდაქმნები.

RF შეტყობინებაში Centigrade– ის მონაცემების ორი ბაიტი გაერთიანებულია ერთმანეთთან და ქმნის 11 – ბიტიან მნიშვნელობას. ქვედა ნაწილი გადაინაცვლებს მარცხნივ ერთი ბიტი პარიტეტული ბიტის აღმოსაფხვრელად და ზედა ნაწილში მის ბიტებთან გასათანაბრებლად. ორი ბაიტი ჩამოყალიბებულია 16-ბიტიანი სიტყვის ცვლადად და შემდეგ ყველაფერი სწორად არის გადატანილი ერთი ბიტი საბოლოო ბიტის გასწორების მისაღებად. სიტყვა ცვლადი შემდეგ გარდაიქმნება მცურავი წერტილის ცვლადად მათემატიკური გამოთვლებისთვის.

P +– ზე Arduino– ს C ++ - ის გამოყენების ერთი დიდი უპირატესობა ის არის, რომ ეს ამარტივებს მათემატიკურ გამოთვლებს. როგორც უკვე აღვნიშნეთ, Centigrade– ის გარდაქმნა არის (C / 10) -100. შედეგი გარდაიქმნება სტრიქონად და იგზავნება LCD ეკრანზე. ფარენჰაიტის გაანგარიშება არის (C * 1.8) + 32. შედეგი კვლავ გარდაიქმნება სტრიქონად და იგზავნება LCD ეკრანზე. ორივე შემთხვევაში, სიმებიანი გარდაქმნა მოიცავს უარყოფით ნიშანს (საჭიროების შემთხვევაში) და ათობითი წერტილს. ათწილადის შემოწმება ხდება იმის უზრუნველსაყოფად, რომ ათწილადის შემდეგ მხოლოდ ერთი სიმბოლო იგზავნება ეკრანზე. ეს შემოწმება საჭიროა, რადგან სტრიქონი შეიძლება იყოს 3 -დან 5 სიმბოლომდე სიგრძემდე.

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

პროგრამული უზრუნველყოფა აკონტროლებს ბატარეის სტატუსს (byte3) და აჩვენებს შეტყობინებას, თუ ის მიუთითებს დაბალ ბატარეაზე. ეს შეტყობინება გადაწერს ამ სენსორის ყველა სხვა მონაცემს.

ნაბიჯი 11: აჩვენებს

აჩვენებს
აჩვენებს
აჩვენებს
აჩვენებს
აჩვენებს
აჩვენებს

აქ მოცემულია რამდენიმე ფუნქციის ეკრანის მაგალითი. მე მაქვს რამდენიმე სხვა ინსტრუქცია, მაგრამ ჩემი PIC მიკროკონტროლის პროექტების უმეტესობა შეგიძლიათ იხილოთ ჩემს ვებგვერდზე: www.boomerrules.wordpress.com

გირჩევთ: