Სარჩევი:

მინი ამინდის სადგური Attiny– ით 85: 6 ნაბიჯი (სურათებით)
მინი ამინდის სადგური Attiny– ით 85: 6 ნაბიჯი (სურათებით)

ვიდეო: მინი ამინდის სადგური Attiny– ით 85: 6 ნაბიჯი (სურათებით)

ვიდეო: მინი ამინდის სადგური Attiny– ით 85: 6 ნაბიჯი (სურათებით)
ვიდეო: ლუკა და მარიამი 2024, ნოემბერი
Anonim
მინი ამინდის სადგური Attiny85– ით
მინი ამინდის სადგური Attiny85– ით
მინი ამინდის ამინდის სადგური Attiny85
მინი ამინდის ამინდის სადგური Attiny85
მინი ამინდის ამინდის სადგური Attiny85
მინი ამინდის ამინდის სადგური Attiny85

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

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

2-მავთულის LCD ინტერფეისი Arduino– სთვის ან Attiny– სთვის და მონაცემების მიღება და გაგზავნა Attiny85– ს შორის (Arduino IDE 1.06), მაშინ სამუშაოების უმეტესობა უკვე შესრულებულია. საჭიროა მხოლოდ პროგრამული უზრუნველყოფის ოდნავ მორგება.

მე ავირჩიე ორი მავთულის LCD გადაწყვეტა ცვლის რეგისტრით, ვიდრე I2C LCD, რადგან Attiny– ზე ცვლის რეგისტრი უფრო ადვილია განხორციელება, ვიდრე I2C ავტობუსი. თუმცა … თუ თქვენ გსურთ BMP180 ან BMP085 წნევის სენსორის წაკითხვა, თქვენ მაინც გჭირდებათ I2C, ასე რომ თქვენ შეიძლება ასევე გამოიყენოთ I2C LCD. TinyWireM არის კარგი ბიბლიოთეკა I2C Attiny– ზე (მაგრამ ის დამატებით ადგილს მოითხოვს).

BOM გადამცემი: DHT11 Attiny85 10 კ რეზისტორი 433 მჰც გადამცემი მოდული

მიმღები Attiny85 10k რეზისტორი 433 MHz მიმღების მოდული

ჩვენება 74LS164 ცვლა რეგისტრი 1N4148 დიოდი 2x1k რეზისტორი 1x1k ცვლადი რეზისტორი LCD ჩვენება 2x16

ნაბიჯი 1: მინი ამინდის სადგური Attiny85– ით: გადამცემი

მინი ამინდის სადგური Attiny85– ით: გადამცემი
მინი ამინდის სადგური Attiny85– ით: გადამცემი
მინი ამინდის სადგური Attiny85– ით: გადამცემი
მინი ამინდის სადგური Attiny85– ით: გადამცემი
მინი ამინდის სადგური Attiny85– ით: გადამცემი
მინი ამინდის სადგური Attiny85– ით: გადამცემი
მინი ამინდის სადგური Attiny85– ით: გადამცემი
მინი ამინდის სადგური Attiny85– ით: გადამცემი

გადამცემი არის Attiny85– ის ძალიან ძირითადი კონფიგურაცია გადატვირთვის ხაზზე. გადამცემი მოდული თან ერთვის ციფრულ პინ '0' -ს და DHT11 მონაცემების პინი მიმაგრებულია ციფრულ პინ 4 -ზე. მიამაგრეთ მავთული 17.2 სმ ანტენის სახით (ბევრად უკეთესი ანტენისთვის იხილეთ ნაბიჯი 5). პროგრამული უზრუნველყოფა ასეთია:

// იმუშავებს Attiny // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // ბიბლიოთეკები #მოიცავს // რობ ტილაარტიდან #მოიცავს dht DHT11; #განსაზღვრეთ DHT11PIN 4 #განსაზღვრეთ TX_PIN 0 // პინი, სადაც თქვენი გადამცემი არის დაკავშირებული // ცვლადი ცურავს h = 0; float t = 0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. ტენიანობა; t = DHT11.temperature; // ვიცი, მე აქ ვიყენებ 3 მთელ ცვლადს // სადაც შეიძლება გამოვიყენო 1 // მაგრამ ეს მხოლოდ ასეა, რომ უფრო ადვილია დაიცვას transmit_h = 100* (int) h; transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); დაგვიანება (500); }

პროგრამული უზრუნველყოფა იყენებს მანჩესტერის კოდს მონაცემების გასაგზავნად. ის კითხულობს DHT11– ს და ინახავს ტემპერატურასა და ტენიანობას 2 ცალკეულ ბუდეში. რადგან მანჩესტერის კოდი არ აგზავნის ათწილადებს, არამედ მთელ რიცხვს, მე მაქვს რამდენიმე ვარიანტი: 1- გავყოთ მცურავები ორ რიცხვში თითოეული და გავაგზავნო ის 2- გავაგზავნოთ თითოეული ათწილადი მთლიანი რიცხვით 3- გავაგზავნოთ ორი ათწილადი როგორც ერთი მთელი რიცხვი ვარიანტი 1-ით მე უნდა გავაერთიანო მთელი რიცხვები ისევ მიცურავს მიმღებში და მე უნდა დავადგინო რომელი მთელი რიცხვი რა არის, რაც კოდს გახანგრძლივებს 2 ვარიანტით მე მაინც უნდა გამოვყო რომელი რიცხვი არის ტენიანობისთვის და რომელი ტემპერატურისთვის. მე არ შემიძლია მხოლოდ თანმიმდევრობით გადავიდე იმ შემთხვევაში, თუ ერთი მთელი რიცხვი დაიკარგება გადაცემაში, ამიტომ მე უნდა გამომიგზავნო იდენტიფიკატორი, რომელიც მიმაგრებულია მთელ რიცხვზე. მე –3 ვარიანტით, მე შემიძლია მხოლოდ ერთი მთელი რიცხვის გაგზავნა. ცხადია, ეს კითხვებს ოდნავ ნაკლებ სიზუსტეს ხდის - 1 გრადუსში - და არ შეიძლება ნულოვან ტემპერატურაზე დაბლა გაგზავნა, მაგრამ ეს არის უბრალო კოდი და ამის გზებიც არსებობს. ჯერჯერობით ეს მხოლოდ პრინციპია. ასე რომ, რასაც ვაკეთებ, ვტრიალებ მთელს რიცხვში და ვამრავლებ ტენიანობას 100 -ით. შემდეგ ტემპერატურა ვამატებ გამრავლებულ ტენიანობას. იმის გათვალისწინებით, რომ ტენიანობა არასოდეს იქნება 100% მაქსიმალური რიცხვი, რომელსაც მე მივიღებ არის 9900. იმის გათვალისწინებით, რომ ტემპერატურა ასევე არ იქნება 100 გრადუსზე მაღლა, მაქსიმალური რიცხვი იქნება 99, ამიტომ ყველაზე დიდი რიცხვი, რომელსაც მე გამოგიგზავნით არის 9999 და რომ ადვილია გამიჯვნა მიმღების მხარეს. რა თქმა უნდა ჩემი გაანგარიშება, რომელშიც მე ვიყენებ 3 მთელ რიცხვს, ზედმეტია, რადგან ეს მარტივად შეიძლება გაკეთდეს 1 ცვლადის გამოყენებით. მე უბრალოდ მინდოდა კოდის გაადვილება. კოდი ახლა შედგენილია როგორც:

ორობითი ესკიზის ზომა: 2, 836 ბაიტი (მაქსიმუმ 8, 192 ბაიტი) ისე, რომ ჯდება Attiny 45 ან 85 შენიშვნა dht.h ბიბლიოთეკა, რომელსაც ვიყენებ არის რობ ტილაარტის. ეს ბიბლიოთეკა ასევე შესაფერისია DHT22– ისთვის. მე ვიყენებ 1.08 ვერსიას. თუმცა Attiny85– ს შეიძლება ჰქონდეს პრობლემა DHT22– ის კითხვისას ბიბლიოთეკის ქვედა ვერსიებით. დადასტურდა, რომ 1.08 და 1.14 –ს მიუხედავად იმისა, რომ ჩვეულებრივ Arduino– ზე ვმუშაობ, უჭირთ DHT22– ის კითხვა Attiny85– ზე. თუ გსურთ DHT22 გამოიყენოთ Attiny85– ზე, გამოიყენეთ ამ ბიბლიოთეკის 1.20 ვერსია. ეს ყველაფერი შეიძლება გაკეთდეს დროში. ბიბლიოთეკის 1.20 ვერსიას აქვს უფრო სწრაფად წაკითხვა. (მადლობა Jeroen მომხმარებლის გამოცდილებისთვის)

ნაბიჯი 2: მინი ამინდის სადგური Attiny85– ით: მიმღები

მინი ამინდის სადგური Attiny85– ით: მიმღები
მინი ამინდის სადგური Attiny85– ით: მიმღები

ისევ Attiny85 გამოიყენება ძირითად კონფიგურაციაში, Reset pin- ით 10 კ რეზისტორით მაღალი. მიმღების მოდული მიმაგრებულია ციფრულ პინ 1 -ზე (პინ 6 ჩიპზე). LCD მიმაგრებულია ციფრული ქინძისთავებით 0 და ორი. მიამაგრეთ მავთული 17.2 სმ ანტენის სახით. კოდი ასეთია:

#ჩართეთ

#მოიცავს LiquidCrystal_SR LCD (0, 2, TWO_WIRE); #define RX_PIN 1 // = ფიზიკური pin 6 void setup () {lcd.begin (16, 2); LCD. მთავარი (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } void loop () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("ტენიანი:"); lcd. ბეჭდვა (მ/100); lcd.setCursor (0, 1); lcd.print ("ტემპი"); lcd.print (m%100); }}

კოდი საკმაოდ მარტივია: გადაცემული მთელი რიცხვი მიიღება და ინახება ცვლადი 'm' - ში. ის იყოფა 100 -ზე ტენიანობის მისაცემად და 100 -ის მოდული იძლევა ტემპერატურას. ასე რომ დავუშვათ მიღებული მთელი რიცხვი იყო 33253325/100 = 333325 % 100 = 25 ეს კოდი შედგენილია 3380 ბაიტის სახით და შესაბამისად მისი გამოყენება მხოლოდ 85 -ით შეიძლება და არა 45 -ით

ნაბიჯი 3: მინი ამინდის სადგური Attiny85/45: ჩვენება

მინი ამინდის სადგური Attiny85/45: ჩვენება
მინი ამინდის სადგური Attiny85/45: ჩვენება
მინი ამინდის სადგური Attiny85/45: ჩვენება
მინი ამინდის სადგური Attiny85/45: ჩვენება

ჩვენებისათვის უმჯობესია მივმართო ჩემს ინსტრუქტაჟს ორი მავთულის ეკრანზე. მოკლედ, საერთო 16x2 ეკრანი იყენებს shiftregister– ს, ასე რომ მას შეუძლია იმუშაოს ორი ციფრული ქინძისთავით. რა თქმა უნდა, თუ გირჩევნიათ გამოიყენოთ I2C მზა ჩვენება, ანუ შესაძლებელია, მაგრამ შემდეგ თქვენ უნდა განახორციელოთ I2C პროტოკოლი Attiny– ზე. Tinywire პროტოკოლს შეუძლია ამის გაკეთება. მიუხედავად იმისა, რომ ზოგიერთი წყარო ამბობს, რომ ის ელოდება 1 Mhz საათს, მე არ მქონია რაიმე პრობლემა (სხვა პროექტში) მისი 8Mhz– ზე გამოსაყენებლად.

ნაბიჯი 4: მინი ამინდის სადგური Attiny85/45: შესაძლებლობები/დასკვნები

მინი ამინდის სადგური Attiny85/45: შესაძლებლობები/დასკვნები
მინი ამინდის სადგური Attiny85/45: შესაძლებლობები/დასკვნები
მინი ამინდის სადგური Attiny85/45: შესაძლებლობები/დასკვნები
მინი ამინდის სადგური Attiny85/45: შესაძლებლობები/დასკვნები
მინი ამინდის სადგური Attiny85/45: შესაძლებლობები/დასკვნები
მინი ამინდის სადგური Attiny85/45: შესაძლებლობები/დასკვნები

როგორც ვთქვი, მე ეს ინსტრუქცია ვაჩვენე, რომ შეიძლება გაკეთდეს მინი ამინდის სადგური ორი attiny85– ით (თუნდაც ერთი attiny85+ 1 attiny45). ის აგზავნის მხოლოდ ტენიანობას და ტემპერატურას DHT11– ის გამოყენებით. თუმცა, Attiny– ს აქვს 5 ციფრული ქინძისთავი, 6 თუნდაც ზოგიერთი ხრიკით. აქედან გამომდინარე, შესაძლებელია მონაცემების გაგზავნა მეტი სენსორისგან. ჩემს პროექტში- როგორც ჩანს სურათებში სტრიპტბორდზე და პროფესიონალურ PCB (OSHPark)- მე ვაგზავნი/ვიღებ მონაცემებს DHT11– დან, LDR– დან და PIR– დან, ყველა გამოყენებით ორი შეზღუდვა attiny85– ის მიმღებად გამოყენების შეზღუდვის მიუხედავად, არის მონაცემების წარმოდგენა მოციმციმე სტილში. მეხსიერება შეზღუდულია: ტექსტები, როგორიცაა "ტემპერატურა, ტენიანობა, სინათლის დონე, საგანი ახლოვდება" საკმაოდ სწრაფად შეავსებს ძვირფას მეხსიერებას. მიუხედავად ამისა, არანაირი მიზეზი არ აქვს ორი Arduino- ს გამოყენება მხოლოდ ტემპერატურისა და ტენიანობის გასაგზავნად/მისაღებად. გარდა ამისა, შესაძლებელია რომ გადამცემი დაიძინოს და მხოლოდ ის გაიღვიძოს მონაცემების გაგზავნა თქვით ყოველ 10 წუთში და ამით იკვებება იგი ღილაკის უჯრედიდან. ცხადია, არა მხოლოდ ტემპერატურის ან ტენიანობის მონაცემების გაგზავნა შეიძლება, არამედ შეიძლება მცირე გადამცემების მასივის გაგზავნა ნიადაგის ტენიანობის მაჩვენებლები ასევე, ან დაამატეთ ანემომეტრი, ან წვიმის მეტრი

ნაბიჯი 5: მინი ამინდის სადგური: ანტენა

მინი ამინდის სადგური: ანტენა
მინი ამინდის სადგური: ანტენა

ანტენა ნებისმიერი 433 მჰც -ის მნიშვნელოვანი ნაწილია. მე ჩავატარე ექსპერიმენტი სტანდარტული 17,2 სმ -იანი ჯოხის ანტენაზე და მქონდა მოკლე ფლირტი კოჭის ანტენაზე, რაც საუკეთესოდ მუშაობდა არის კოჭით დატვირთული ანტენა, რომლის დამზადებაც ადვილია. დიზაინი ბენ შულერისგან არის და როგორც ჩანს გამოქვეყნდა ჟურნალში "Elektor". PDF ადვილია ამ ჰაერის გაგრილებით 433 MHz ანტენის აღწერით. (ლინკი გაქრა, შეამოწმეთ აქ)

ნაბიჯი 6: BMP180- ის დამატება

BMP180- ის დამატება
BMP180- ის დამატება

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

გირჩევთ: