კიდევ ერთი Arduino თერმოსტატი, მაგრამ OpenTherm-ით. ვენტილატორი Arduino-ს გამოყენებით, რაც დამოკიდებულია ტემპერატურაზე. თერმოსტატი საკუთარი ხელებით გასათბობად Arduino-ს გამოყენებით.

კიდევ ერთი Arduino თერმოსტატი, მაგრამ OpenTherm-ით. ვენტილატორი Arduino-ს გამოყენებით, რაც დამოკიდებულია ტემპერატურაზე. თერმოსტატი საკუთარი ხელებით გასათბობად Arduino-ს გამოყენებით.

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

წინა გაკვეთილზე ჩვენ შევიმუშავეთ დენის რეგულატორი. კავშირი ძალასა და ტემპერატურის რეგულატორებს შორის ასე გამოიყურება.

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

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

PID კონტროლერი.

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

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

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

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

PID კონტროლერის გამომავალი სიგნალის გენერირებაში მონაწილეობს შემდეგი:

  • პროპორციული კომპონენტი- მნიშვნელობა არის შეუსაბამობის შეცდომის პროპორციული (სხვაობა კონტროლირებადი პარამეტრის მითითებულ და რეალურ მნიშვნელობებს შორის).
  • ინტეგრირებული კომპონენტი- შეუსაბამობის შეცდომის ინტეგრალი.
  • განმასხვავებელი კომპონენტი– შეუსაბამობის შეცდომის წარმოებული.

PID კონტროლერის კანონის ჩაწერის მათემატიკური ფორმაა:

o(t) = P + I + D = K p e(t) + K i ∫e(t)dt + K d de(t)/dt

  • o(t) – გამომავალი სიგნალი;
  • P – პროპორციული კომპონენტი;
  • I – ინტეგრირებული კომპონენტი;
  • D – განმასხვავებელი კომპონენტი;
  • Kp, Ki, Kd – პროპორციული, ინტეგრირებული, განმასხვავებელი რგოლების კოეფიციენტები;
  • e(t) – შეუსაბამობის შეცდომა.

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

PID ძაბვის რეგულატორის U ბლოკ-სქემა ასე გამოიყურება.

  • გაზომილი ძაბვა Ureal(t) აკლდება მოცემულ გამოყენებას.
  • შედეგად მიღებული შეუსაბამობის შეცდომა e(t) მიეწოდება პროპორციულ, ინტეგრირებულ და განმასხვავებელ ბმულებს.
  • კომპონენტების ჯამის შედეგად მიიღება საკონტროლო მოქმედება o(t), რომელიც გამოიყენება საკონტროლო ელემენტზე.

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

PID კონტროლერის კომპონენტები.

ისევ. PID კონტროლერის გამომავალი სიგნალი არის სამი კომპონენტის ჯამი:

  • პროპორციული;
  • ინტეგრირება;
  • დიფერენცირებადი.

პროპორციული კომპონენტი.

P(t) = K p * e(t)

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

პროპორციულ კომპონენტს არ შეუძლია შეცდომის სრულად ანაზღაურება. ეს ჩანს ფორმულიდან. გამომავალი სიგნალი არის Kp გამრავლებული შეცდომაზე. თუ შეუსაბამობის შეცდომა არის 0, მაშინ კონტროლერის გამომავალი სიგნალი არის 0. და მაშინ არაფერია კომპენსირებული.

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

პროპორციული კონტროლერების ნაკლოვანებები მოიცავს:

  • სტატიკური რეგულირების შეცდომის არსებობა;
  • დაბალი სტაბილურობა მზარდი კოეფიციენტით.

მნიშვნელოვანი უპირატესობაა:

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

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

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

ინტეგრირებული კომპონენტი.

I(t) = K i ∫e(t)dt

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

I(t) = I(t -1) + K i * e(t)

  • I(t-1) – I-ის მნიშვნელობა წინა დროის შერჩევის წერტილში.

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

ინტეგრალური რეგულატორის უარყოფითი მხარეები მოიცავს:

  • დაბალი შესრულება;
  • საშუალო სტაბილურობა.

ღირსება:

  • შეუსაბამობის შეცდომის სრულად კომპენსირების შესაძლებლობა ნებისმიერ მოგებაზე.

პრაქტიკაში ხშირად გამოიყენება ინტეგრირებული კონტროლერები (მხოლოდ ინტეგრირებული კომპონენტი) და პროპორციული ინტეგრირებადი კონტროლერები (ინტეგრაციული და პროპორციული კომპონენტები).

PID კონტროლერში ინტეგრირებული ბმულის მთავარი ამოცანაა სტატიკური შეცდომის კომპენსირება და კონტროლის მაღალი სიზუსტის უზრუნველყოფა.

განმასხვავებელი კომპონენტი.

D(t) = K d de(t)/dt

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

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

D(t) = K d * (e(t) - e(t -1))

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

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

PID კონტროლერში განმასხვავებელი რგოლის მთავარი ამოცანაა სტაბილურობის გაზრდა.

PID კონტროლერის დაყენება.

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

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

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

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

PID კონტროლერის კომპონენტები კონფიგურირებულია ცალკე.

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

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

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

შემდეგ გაკვეთილზე ჩვენ შევიმუშავებთ PID ტემპერატურის კონტროლერს.

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

როგორ დაიწყო ეს ყველაფერი

უპირველეს ყოვლისა, მინდა ვთქვა, რომ მე საერთოდ არ ვარ პროგრამისტი და არასდროს მქონია საქმე რეალურ მიკროკონტროლერთან. ჩემი პირველი გაცნობა AVR MK-თან (და ზოგადად MK-თან) ისევ საშუალო სკოლაში იყო, როდესაც მინდოდა გამეგო, როგორ მუშაობს ეს იდუმალი რამ სინამდვილეში. რამდენიმე სტატია წავიკითხე და მას შემდეგ მეხსიერებაში მხოლოდ ფრაგმენტები მაქვს, რომელთა აღწერა მხოლოდ ორი სიტყვით შეიძლებოდა - DDR და PORT - და აქ დასრულდა ჩემი ცოდნა. შემდეგ იყო უნივერსიტეტი, მე-5 კურსი - „მიკროკონტროლერების პროგრამირება“, სადაც ყველამ ვირტუალურ გარემოში გავეცანით MSC51-ს. უკვე იყო შეფერხებები, ტაიმერი და სხვა ყველაფერი. ისე, ამ რაოდენობის ცოდნით მივედი პრობლემამდე. ამ ავტობიოგრაფიულ ნოტაზე დავასრულოთ და გადავიდეთ უფრო საინტერესო ნაწილზე.

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

ეს პრობლემა მოგვარდა ძალიან მარტივად - OTC (გარე ტემპერატურის კომპენსაციის) სენსორით, რომელიც დაკავშირებულია ქვაბთან და საშუალებას აძლევს მას ავტომატურად დაარეგულიროს გამაგრილებლის ტემპერატურა გარე ტემპერატურის მიხედვით. როგორც ჩანს, პრობლემა მოგვარდა, მაგრამ ქვაბის მომსახურების სახელმძღვანელოს წაკითხვამ (Ferolli Domiproject C24D) სწრაფად გათელვა ჩემი იმედები - გარე ტემპერატურის სენსორის დაკავშირება ამ მოდელში არ არის გათვალისწინებული. ყველა? ყველა. ახლა კი, ალბათ, შეგვეძლო მისი დასრულება, მაგრამ ზაფხულში, ჭექა-ქუხილის დროს, საკონტროლო დაფა ისევ იწვის ქვაბში ისე, როგორც ჩემთვის ჯერ კიდევ გაუგებარია და მომსახურე კაცთან საუბრისას (დაფა იყო მოგვიანებით გარემონტდა), ვკითხე, იყო თუ არა შესაძლებელი OTC ჩემს ქვაბთან დაკავშირება? მან უპასუხა, რომ ისინი უკავშირდებიან გარე თერმოსტატების გამოყენებით. ეს ჩამრჩა მეხსიერებაში, მაგრამ მასზე კონცენტრირება არ მქონდა, სანამ ცივი ამინდი არ დამდგარა, შემდეგ კი ისევ იგივე პრობლემა იყო.

იმავე სერვისის ინსტრუქციების გაცნობის მიზნით, მაგრამ იმ მიზნით, რომ მენახა როგორ არის დაკავშირებული თერმოსტატი, შევამჩნიე, რომ "OpenTherm რეგულატორი" დაკავშირებულია იმავე ტერმინალებთან. სწორედ მაშინ მივხვდი - ეს არის ის! „OpenTherm Arduino“-ს გუგლის ძიებამ ისევ იმედგაცრუებული გამიცრუა - არაფერი განსაკუთრებით გონივრული. იყო შეტყობინებების მონიტორი, მაგრამ ეს არ არის - მე არაფერი მაქვს მოსასმენი - უბრალოდ მჭირდება თერმოსტატი.

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

ამ გაკვეთილზე თქვენ გაეცნობით Arduino ტემპერატურის კონტროლირებად ვენტილატორების შესახებ DHT22 სენსორისა და რელეს გამოყენებით. ჩვენ გამოვიყენებთ DHT22 სენსორს ტემპერატურის მნიშვნელობის მისაღებად და ამ ტემპერატურის მნიშვნელობის ჩვენება LCD ეკრანზე. შემდეგ შევამოწმებთ ტემპერატურის მნიშვნელობა 35-ზე მეტია თუ არა, თუ ტემპერატურა 35-ზე მეტია მაშინ რელე გააქტიურდება და ვენტილატორი დაიწყებს ბრუნვას.

აქსესუარები

ჩვენი პროექტისთვის დაგვჭირდება შემდეგი ნაწილები:

Arduino ვენტილატორის წრედის დიაგრამა

ჩვენი გულშემატკივრის სქემატური დიაგრამა ასე გამოიყურება:

მოდით გაერკვნენ, თუ როგორ დააკავშიროთ ყველა ნაწილი. უპირველეს ყოვლისა, დააკავშირეთ LCD დისპლეი Arduino-სთან შემდეგნაირად:

  • დააკავშირეთ VSS პინი LCD-ზე Arduino-ს მიწაზე.
  • დააკავშირეთ VDD პინი 5 ვ Arduino-ზე.
  • შეაერთეთ V0 პინი 10K პოტენციომეტრის ცენტრალურ პინთან. შეაერთეთ პოტენციომეტრის დანარჩენი ორი პინი 5 ვ-ზე და მიწასთან.
  • შეაერთეთ RS პინი Arduino-ს მე-2 პინზე.
  • შეაერთეთ R/W პინი Arduino მიწაზე. ეს დებს LCD-ს კითხვის რეჟიმში.
  • დააკავშირეთ პინი E (ჩართვა) Arduino-ს მე-3 პინზე.
  • შეაერთეთ D4-D7 ქინძისთავები Arduino-ს 4, 5, 6, 7 პინებთან.
  • შეაერთეთ პინი 15, რომელიც არის LED უკანა განათების დადებითი მიმავალი 5 პინიან ქინძისთავთან 220 ომიანი რეზისტორის საშუალებით.
  • შეაერთეთ პინი 16, რომელიც არის LED განათების უარყოფითი პინი, Arduino მიწას.

შემდეგ შეაერთეთ სარელეო მოდული Arduino-სთან. სარელეო მოდულის შეყვანის მხარეს გააკეთეთ კავშირები შემდეგნაირად:

  • შეაერთეთ სარელეო მოდულის VCC პინი Arduino-ს 5V პინთან.
  • შეაერთეთ სარელეო მოდულის IN პინი Arduino-ს მე-9 პინთან.
  • შეაერთეთ სარელეო მოდულის GND პინი Arduino-ს GND-თან.

სარელეო მოდულის გამომავალ მხარეს, შეაერთეთ 9 ვ ბატარეის ნეგატივი რელეს მოდულის საერთო (C) და სარელეო მოდულის NC შეაერთეთ ვენტილატორის ნეგატივთან. შემდეგ შეაერთეთ ბატარეის პოზიტივი ვენტილატორის დადებითთან.

და ბოლოს, გააკეთეთ კავშირი DHT22 ტემპერატურისა და ტენიანობის სენსორისთვის.

  • დააკავშირეთ DHT22-ის პინი 1, რომელიც არის VCC პინი, Arduino-ს 5V-ს.
  • დააკავშირეთ DHT22-ის პინი 2, რომელიც არის მონაცემთა პინი Arduino-ს მე-8 პინთან.
  • შეაერთეთ პინი 4 DHT22-დან, რომელიც არის დამიწის პინი, Arduino გრუნტს.

ესკიზი Arduino-სთვის

ქვემოთ შეგიძლიათ დააკოპიროთ და ჩამოტვირთოთ კოდი თქვენს Arduino Uno-ში.

#include "DHT.h" #include "LiquidCrystal.h" LiquidCrystal lcd(7, 8, 9, 10, 11 ,12); #define DHTPIN 6 #define DHTTYPE DHT22 DHT sensor(DHTPIN, DHTTYPE); int relay_pin = 9; void setup() ( lcd.begin(16,2); sensor.begin(); pinMode(relay_pin, OUTPUT); digitalWrite(relay_pin, HIGH); ) void loop() (lcd.clear(); float t = სენსორი .readTemperature(); //ტემპერატურის წაკითხვა სენსორიდან // შემოწმება, აგზავნის თუ არა სენსორი მნიშვნელობებს, თუ (isnan(t)) ( lcd.print("Failed"); delay(1000); დაბრუნება; ) lcd.setCursor( 0,0); lcd.print("ტემპ:"); LCD გამორთულია "); ) დაგვიანებით (2000);)

კოდის ახსნა

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

თქვენ შეგიძლიათ ჩამოტვირთოთ ყველა საჭირო ბიბლიოთეკა თქვენი პროექტებისთვის ჩვენს ვებ – გვერდზე - განყოფილებაში.

#include "DHT.h" #include "LiquidCrystal.h"

შემდეგ ჩვენ მოვახდინეთ ინიციალიზაცია ქინძისთავები, რომლებზეც დავაკავშირეთ LCD და DHT22 სენსორი. ამის შემდეგ, ჩვენ დავადგინეთ DHT სენსორის ტიპი, რომელიც გამოიყენება. არსებობს მრავალი სხვა ტიპის DHT სენსორები, როგორიცაა DHT11, ამიტომ აქ მნიშვნელოვანია ტიპის იდენტიფიცირება.

LiquidCrystal LCD (2, 3, 4, 5, 6, 7); #define DHTPIN 8 #define DHTTYPE DHT22 DHT sensor(DHTPIN, DHTTYPE);

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

LCD.begin(16,2); sensor.begin(); pinMode(relay_pin, OUTPUT); digitalWrite(relay_pin, HIGH);

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

LCD.clear(); float t = sensor.readTemperature(); if (isnan(t)) ( lcd.print ("Failed"); delay (1000); დაბრუნება; )

შემდეგ ვბეჭდავთ ტემპერატურულ მნიშვნელობას LCD-ზე და თუ ტემპერატურის მნიშვნელობა 35-ზე მეტია მაშინ რელე გააქტიურდება და ვენტილატორი დაიწყებს ტრიალს.

LCD.setCursor(0,0); lcd.print("ტემპერატურა:"); LCD.print(t); lcd.print("C"); if (t > 35) ( digitalWrite (relay_pin, LOW); lcd.setCursor (0,1); lcd.print ("Fan is ON"); delay (10); )

Სულ ეს არის. გქონდეთ შესანიშნავი პროექტი!

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

რამდენიმე თვის წინ წავიკითხე არაერთი სტატია Arduino-ს შესახებ და ძალიან დავინტერესდი ამ აპარატით და მალე გადავწყვიტე მისი შეძენა. უნდა აღინიშნოს, რომ მე შორს ვარ მიკროელექტრონიკისგან, ამიტომ მომეწონა დაფა, პირველ რიგში, მისი შედარებით მარტივი გამოყენების გამო. LED-ებით და „Hello world“ სისტემებთან შეხებით, მინდოდა რაღაც პრაქტიკული გამეკეთებინა და ამავდროულად უფრო გამეცნობა Arduino-ს შესაძლებლობები. 2010 წლის არანორმალურად ცხელი ზაფხულის გათვალისწინებით, გაჩნდა იდეა აეწყოთ უფრო მაგარი სიჩქარის კონტროლერი, რომელიც დამოკიდებულია ტემპერატურაზე, LCD ეკრანზე გამოსახული ყველა დაკავშირებული მახასიათებლით. იმედი მაქვს, რომ ეს სქემა ან მისი ვარიაციები ვინმეს გამოადგება, ამიტომ გადავწყვიტე ჩემი ესკიზების განთავსება.

ამ სქემისთვის დაგვჭირდება:

  • სინამდვილეში თავად დაფა არდუინოან მსგავსი;
  • პურის დაფამიკროსქემის კომპონენტების აწყობისთვის;
  • ჩვენება WH1601A-NGG-CT ჩართული მორთვის რეზისტორით 20 kOhmან მსგავსი;
  • რეზისტორები - 220 Ohm, 10 kOhm, 4.7 kOhm;
  • ბიპოლარული ტრანზისტორი SS8050Dან მსგავსი;
  • ციფრული ტემპერატურის სენსორი DS18B20;
  • დიოდი 1N4148ან ექვივალენტი;
  • ფანიღერძული სამი მავთული (12V), მაგალითად - კომპიუტერი;
  • ჯეკ კონექტორი კვება 2.1/5.5 მმ.

კომპიუტერის ქულერი აქვს სამი მავთული, რომელთაგან ორი - წითელი (+12V) და შავი (GND) გამოიყენება ელექტრომომარაგებისთვის, ხოლო მესამე (ყვითელი) უკავშირდება ჰოლის ელემენტზე აგებულ ტაქომეტრს. სამწუხაროდ, დაფიდან 5 ვ აშკარად არ არის საკმარისი ჩვენთვის, მაგრამ 6 Arduino ციფრულ გამომავალს შეუძლია იმუშაოს PWM რეჟიმში (ისინი დაფაზე აღინიშნება თეთრი კვადრატებით ან ასოებით PWM), ასე რომ, ჩვენ შეგვიძლია დავარეგულიროთ სიგნალის მიწოდება დაფიდან. რელეს, რომელიც პასუხისმგებელია ვენტილატორისთვის მიწოდებული ძაბვის შეცვლაზე.

ჩვენ მივიღებთ ინფორმაციას რევოლუციების შესახებ მესამე მავთულიდან ტაქომეტრიდან, განხორციელების საფუძველზე შეცვლილი მეთოდის გამოყენებით წყვეტს, რომელიც არდუინოების უმეტესობისთვის შეიძლება მივიდეს ციფრულ პინზე 2 (შეწყვეტა 0) და 3 (შეწყვეტა 1). სხვათა შორის, Arduino Mega-ს აქვს 4 დამატებითი პინი შეფერხებების მიღების შესაძლებლობით.

ახლა თქვენ გჭირდებათ პოზიცია ციფრული ტემპერატურის სენსორი, რომლის მონაცემებსაც გამოვიყენებთ PWM-ით ციფრულ გამომავალზე მიწოდებული ძაბვის დასარეგულირებლად და შესაბამისად ვენტილატორის ძაბვის არხის „გახსნისთვის“. დალასის სენსორებს აქვთ საკუთარი Arduino ბიბლიოთეკა - DallasTemperature, რომელსაც მოგვიანებით დავაკავშირებთ ესკიზში. ბიბლიოთეკა უნდა გაიხსნას arduino-0018/libraries/ დირექტორიაში.

ბოლო რაც დარჩა არის დააკავშირეთ LCD, სადაც ჩვენ გამოვაჩენთ ყველა მიმდინარე ინფორმაციას ტემპერატურისა და ვენტილატორის სიჩქარის შესახებ. მას შემდეგ, რაც მე გამოვიყენე WH1601A ეკრანი კონსტრუქციისთვის, შეიძლება იყოს ცნობილი პრობლემები ხაზების ჩვენებასთან დაკავშირებით. მათ აღმოსაფხვრელად, ჩვენ გამოვიყენებთ LiquidCrystalRus ბიბლიოთეკას, რომელიც ასევე უნდა გაიხსნას arduino-0018/libraries/ დირექტორიაში.

//შეაერთეთ ბიბლიოთეკა ტემპერატურის სენსორისთვის#შეიცავს //დააერთეთ ბიბლიოთეკა LCD-სთვის#შეიცავს #define PowerPin 9 // პინი ვენტილატორის სიმძლავრის გასაკონტროლებლად#define HallSensor 2 // პინი ვენტილატორის სიჩქარის სენსორისთვის (შეწყვეტა)#define TempPin 7 // პინი ტემპერატურის სენსორისთვის LiquidCrystalRus lcd(12, 11, 10, 6, 5, 4, 3); //LCD DallasTemperature tempSensor-ის დაკავშირება; int NbTopsFan, Calc, fadeValue; //მთლიანი ცვლადები გამოთვლებისთვისმცურავი ხასიათი; //რეალური ცვლადი შენახვის ტემპერატურაზე typedef struct( // თაყვანისმცემლებისთვის ახალი ტიპის ცვლადების დანერგვა char fantype; ხელმოუწერელი int fandiv; )fanspec; //ახალი ტიპის ცვლადების მასივი fanspec fanspace=((0,1),(1,2),(2,8)); //ცვლადი, რომელიც პასუხისმგებელია ვენტილატორის ტიპის არჩევაზე (1 – ერთპოლარული ჰოლის სენსორი, 2 – ბიპოლარული ჰოლის სენსორი) char fan = 2; //ეს ფუნქცია გამოიძახება ყოველ ჯერზე, როცა შევწყვეტთ void rpm() (NbTopsFan++;) // ფუნქცია PWM-ით ციფრულ პინზე გამოყენებული ძაბვის გამოსათვლელად void temp() ( fadeValue = min(int(temper*7),255); // გავამრავლოთ ტემპერატურა კოეფიციენტზე, // აიღეთ მთელი რიცხვი ნაწარმოებიდან } // იმიტომ მაქსიმალური PWM მნიშვნელობა არის 255, მაშინ აზრი არ აქვს მეტის მიწოდებას - აიღეთ მინიმუმ ორიბათილად აწყობა() (tempSensor.begin(TempPin); //ტემპერატურული სენსორის გაშვება lcd.begin(16, 2); //LCD მახასიათებლების დაყენება lcd.setDRAMModel(LCD_DRAM_WH1601); //და ეკრანის ტიპი pinMode (HallSensor, INPUT ); // პინის კონფიგურაცია შეფერხებების მისაღებად attachInterrupt(0, rpm, RISING); //ჩვენ ვუკავშირებთ შეწყვეტის ნომერს 0 ჩვენს ფუნქციას და ის გამოითვლება ყოველ ჯერზე, როცა სიგნალი იცვლება) ბათილად მარყუჟი() ( temper = tempSensor.getTemperature(); // მიიღეთ ტემპერატურატემპი(); // გამოთვალეთ მიწოდებული ძაბვა PWM-ზე analogWrite (PowerPin, fadeValue); // Feed it NbTopsFan = 0; // რევოლუციების შემცველი ცვლადის გადატვირთვა ნულამდედაგვიანებით (1000); //მოიცადეთ 1 წამი Calc = ((NbTopsFan * 60)/fanspace.fandiv); //გამოთვალეთ RPM მნიშვნელობა 60 წამის განმავლობაში გაყოფილი ვენტილატორის მულტიპლიკატორზე lcd.print (Calc, DEC); //გამოანგარიშებული მნიშვნელობის გამოტანა ათობითი ფორმით lcd.print(" rpm - " ); lcd.print(temper); //გამომავალი ტემპერატურა LCD.home(); )

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

ჩვენ უკვე აღვნიშნეთ (იხ თავი 18), რომ AVR კონტროლერები მოიცავს 10-ბიტიან მრავალარხიან ADC-ს. Arduino-ს დაფებზე მისი ქინძისთავები სპეციალურად არის მონიშნული, როგორც ანალოგური შეყვანა (ასოებით ნულიდან ხუთამდე რიცხვებით). გთხოვთ გაითვალისწინოთ, რომ ისინი ასევე შეიძლება გამოყენებულ იქნას როგორც ჩვეულებრივი ციფრული ნომრები 14-დან 18-მდე და ჩვენ გამოვიყენებთ მათ ამ შესაძლებლობით. ჩვენ გამოვიყენებთ ერთ-ერთ ასეთ შეყვანას ტემპერატურის გასაზომად და ჩვენ ვაკონტროლებთ დატვირთვის კავშირს ერთ-ერთი ციფრული გამოსასვლელიდან.

საერთო ჯამში დაგვჭირდება:

□ Arduino Uno დაფა (ნებისმიერი სხვა გააკეთებს);

ტემპერატურის სენსორად მაქვს თერმისტორი. ვარგისია, მაგალითად, არსებული

□ „Amperke“ В57164‑К 103‑J ნომინალური წინააღმდეგობით 10 kOhm 25 °C ტემპერატურაზე - მისი მახასიათებლები მოცემულია თავი 13როგორც თერმისტორების თვისებების ილუსტრაცია;

□ ცვლადი რეზისტორი 10 kOhm, ფიქსირებული რეზისტორი 620 Ohm;

□ აღმასრულებელი რელე – ელექტრომაგნიტური (აუცილებლად გამაძლიერებელი ტრანზისტორი გადამრთველით, იხილეთ ქვემოთ) ან მყარი მდგომარეობის.

გასაყიდად ხელმისაწვდომია მოდულები, რომლებიც დაფუძნებულია 5 ვოლტ ელექტრომაგნიტურ რელეებზე, სპეციალურად მორგებული Arduino-ს გამომავლების კონტროლისთვის. ელექტრომაგნიტური რელეები თავისთავად მოითხოვს საკმაოდ დიდ საკონტროლო დენს (და რაც უფრო ძლიერია რელე, მით უფრო მძლავრია; მხოლოდ ყველაზე დაბალი სიმძლავრის ლერწმის რელეებს შეუძლიათ იმუშაონ პირდაპირ ლოგიკით), ამიტომ ყველა ასეთ სარელეო მოდულს უნდა ჰქონდეს ტრანზისტორი გამაძლიერებელი გადამრთველი. მაგალითად, Amperka ყიდის ასეთ მოდულს HLS8L‑DC5V‑S‑C რელეზე დაყრდნობით. თუ არ ხართ კმაყოფილი ელექტრომაგნიტური რელეთ და ცდილობთ მიკროსქემის უკიდურეს სიმარტივეს, მაშინ შეგიძლიათ მოძებნოთ მყარი მდგომარეობის რელეები - მაგალითად, შესაფერისია CX240D5R Crydom-დან ან მსგავსი, 3-15 ვ ოპერაციული ძაბვით. მათი კონტროლის დენი არის დაახლოებით 15 mA 5 ვოლტზე შეყვანისას, რაც მისაღებია AVR-ებისთვის, რადგან მათი კონტროლის შეყვანა შეიძლება პირდაპირ დაუკავშირდეს Arduino ციფრულ გამომავალს. მართალია, 220 ვოლტის ძაბვისას CX240D5R ვერ ცვლის დატვირთვას კილოვატზე მეტი სიმძლავრით, მაგრამ ამ ამოცანისთვის მეტი არ გვჭირდება.

თერმოსტატის წრე Arduino Uno-ზე ნაჩვენებია ნახ. 21.2.

ბრინჯი. 21.2. თერმოსტატის დიაგრამა ჩართულია არდუინო უნო

დიაგრამაში, რელეს გრაგნილი K1 (ჩვეულებრივ ღია კონტაქტებით) პირობითად არის დაკავშირებული პირდაპირ Arduino-ს ციფრულ გამომავალთან - ვარაუდობენ, რომ ეს არის ან ადრე ნახსენები მყარი მდგომარეობის რელე საჭირო მახასიათებლებით, ან უბრალოდ საკონტროლო შეყვანა. დასრულებული სარელეო მოდულის დაფა. მიკროსქემის მდგომარეობის მონიტორინგისთვის, გამათბობელთან ერთად აქტიურდება LED. თერმოსტატის პროგრამა ამ სქემის შესაბამისად ძალიან მარტივია:

რეზისტორების მნიშვნელობები მორგებულია მითითებულ თერმისტორზე B57164‑K ნომინალური წინააღმდეგობით 10 kOhm 25 °C (103‑J). პროგრამის შესაბამისად, რელე იმუშავებს ADC გამომავალი მნიშვნელობის მახლობლად 500. ეს არის დაახლოებით 10-ბიტიანი დიაპაზონის შუა (მთელი მასშტაბი არის 1024 გრადაცია), ანუ ეს მნიშვნელობა დადგინდება, როდესაც ზედა და ქვედა წინააღმდეგობები დაახლოებით ტოლია AO შეყვანის მიმართ (ძაბვა ამ შეყვანისას იქნება დაახლოებით 2,5 ვოლტი).

გთხოვთ გაითვალისწინოთ, რომ ორივე ფუნქცია თუარ დასრულდეს ჩვეულებით სხვა. ჭორების თავიდან ასაცილებლად პროგრამაში შევიდა ჰისტერეზი: რელე ირთვება, როცა კოდის მნიშვნელობა აჭარბებს 510-ს და ითიშება, როცა 490-მდე დაეცემა. ამასობაში ის ინარჩუნებს წინა მდგომარეობას. კოდის ოცი ერთეული (რა არის თავი 12ჩვენ დავურეკეთ მკვდარი ზონა) შეესაბამება დაახლოებით 10 მილივოლტს, ანუ ჰისტერეზი 30-40 გრადუსის დიაპაზონში იქნება ოდნავ ნაკლები ხარისხის მეათედზე (შეამოწმეთ ეს ცხრილი 13.1-დან თავი 13).

რეაგირების ტემპერატურის დაყენება რეზისტორი R2-ის გამოყენებით ამ პარამეტრებით შესაძლებელია დაახლოებით 22-დან 96 °C-მდე დიაპაზონში. რა თქმა უნდა, პრაქტიკაში ასეთი ფართო კორექტირების დიაპაზონი არ არის საჭირო, ამიტომ მიზანშეწონილია R2 მნიშვნელობის შემცირება. R1-ის მნიშვნელობა შეირჩევა ისე, რომ R1 და R2-ის ნომინალური მნიშვნელობა დაემატოს თერმისტორის წინააღმდეგობას სასურველი ტემპერატურის დიაპაზონის ქვედა მნიშვნელობაზე (ცხრილი 13.1-ის შესაბამისად). უფრო ზუსტი მორგებისთვის, შეგიძლიათ დაკალიბროთ და შეცვალოთ ზღვრული მნიშვნელობები პროგრამაში დადგენილი ტემპერატურის რეგულარული თერმომეტრით გაზომვით.

თუ ამ წრეში სხვა სენსორებს იყენებთ, არ დაივიწყოთ ტემპერატურის კოეფიციენტის ნიშანი. ჩვეულებრივი დიოდი ან ტრანზისტორი დიოდის შეერთებაში (როგორც სქემებში თავი 13) ასევე აქვს მახასიათებლის უარყოფითი დახრილობა, ამიტომ მათთვის პროგრამაში მხოლოდ პასუხის ზღურბლის რიცხვითი მნიშვნელობების შეცვლა მოგიწევთ. მაგრამ ნახევარგამტარული სენსორები, როგორიცაა TMP35 (იხ. თავი 13) ან უბრალოდ ლითონის წინააღმდეგობის თერმომეტრები (როგორც დიზაინისგან დამზადებული თავი 17) აქვს დადებითი ტემპერატურული კოეფიციენტი, ამიტომ სამუშაო პირობები უნდა შეიცვალოს. და არა მხოლოდ შეცვალეთ "მეტი" "ნაკლებად" და პირიქით, არამედ შეცვალეთ ჰისტერეზის ზღურბლების თანაფარდობა - ახალ სიტუაციაში გამათბობელი უნდა ჩართოთ, თუ მნიშვნელობა ნაკლებია პატარა ზღურბლზე და შემობრუნდეს. გამორთულია, თუ ის უფრო დიდია.

© 2023 steadicams.ru - აგური. დიზაინი და დეკორი. ფასადი. პირისპირ. ფასადის პანელები