Arduino და ციფრული DS18B20 ტემპერატურის სენსორი. DS18B20 ტემპერატურის სენსორული ციფრული DS18B20 ტემპერატურის სენსორის გამოყენების ინსტრუქცია

გჭირდებათ თუ არა ტემპერატურა გარემოში არახელსაყრელ გარემოში?

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

In DS18B20 მუდმივი მეხსიერება, თქვენ შეგიძლიათ შეინახოთ საზღვრის ტემპერატურის ღირებულებები, როდესაც თქვენ გასასვლელად სენსორი იქნება გადახვიდეთ სიგნალი რეჟიმში. მრავალ სენსორების საერთო საბურავზე, მიკროკონტროლერს შეუძლია გაირკვეს, რომელი მათგანმა შეცვალა. ამდენად, ეს ხდება მარტივი, რათა დადგინდეს პრობლემის არეალი კონტროლირებად გარემოში.

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

კავშირი

DS18B20 ჩიპზე დაფუძნებული Sealant სენსორი შეიძლება იყოს ორი გზით:

სამი მავთული: საკვები (წითელი), ადგილზე (შავი) და სიგნალი (თეთრი).

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

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

ARDUINO- ს ან Batch- ის ფორუმში სენსორის დაკავშირება, მოსახერხებელი იქნება ბიძგი ტერმინალის ბარი.

Arduino- სთვის 1 მავთულის მოწყობილობების დასაკავშირებლად, არის მზა ბიბლიოთეკა, და ეს არის DS18B20- დან DS18B20- ის მუშაობა. არსებობს Miles Burton- ის ბიბლიოთეკის ზედაპირზე.

მახასიათებლები:
  • ელექტროენერგია: 3.0..5.5
  • ტემპერატურის დიაპაზონი: -55 ° C. + 125 ° C
  • ტემპერატურის კითხვების სიზუსტე: 0.5 ° C
  • ჩვენების ნაბიჯი: 0.0625 ° С
  • ინტერფეისი: 1-მავთული
  • ხანგრძლივი მავთული: 1 მეტრი
  • მიმდინარე მოხმარება: 1mA

სენსორი ჩვენი მაღაზიის ასორტიმენტში გამოჩნდა dallas ტემპერატურა 18b20 moisture-proof საბინაო ფართო სპექტრი გაზომვა ტემპერატურა -55 დან + 125 ° C. ტენიანობის დაცვისა და მაქსიმალური ტემპერატურის მონაცემები +125 გრადუსში დაუყოვნებლივ მოქმედებდა მდუღარე წყალში ექსტრემალური ტესტირების შესახებ. ჩვენ ამას გაუმკლავდებით.

კომპონენტები განმეორებითი (ყიდვა ჩინეთში):

ეს სენსორი მუშაობს 1 მავთულის ავტობუსზე.

თითოეული ასეთი მოწყობილობა შეიცავს უნიკალურ 64-bit "ROM" კოდს, რომელიც შედგება 8 ბიტიდან, რომელიც განსაზღვრავს სერიის კოდექსს, 48 ბიტი უნიკალური რიცხვისა და ხმაურის მდგრადი CRC კოდის 8 ბიტი.

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

1 და 2 Bytes შენახვის ტემპერატურის ინფორმაცია.

3 და 4 ბაიტი ინახება ზედა და ქვედა ტემპერატურის ლიმიტის მიხედვით.

5 და 6 ბაიტი დაცულია.

7 და 8 Bytes გამოიყენება ულტრა-გაზომვის ტემპერატურის გაზომვისთვის.

9 Byte ინახავს ხმაურის მდგრადი CRC კოდი წინა 8 bytes.

ბიბლიოთეკასთან მუშაობისას გამოყენებული ძირითადი ბრძანებები:

ძიება (AddressArray)

ვეძებთ მომდევნო 1 მავთულის მოწყობილობას, თუ მოწყობილობა აღმოაჩინეს, შემდეგ 8 ბაიტიდან Addressarray, მისი ROM კოდი ჩაწერილია, სხვაგვარად დაბრუნდება ყალბი.

reset_search ()

ასრულებს ახალ ხელსაწყოს პირველ მოწყობილობას.

გადატვირთვა ()

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

აირჩიეთ (AddressArray)

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

დაწერეთ (byte)

გადასცემს ინფორმაციას Byte მოწყობილობაზე

დაწერეთ (ბაიტი, 1)

წაკითხული ()

კითხულობს ინფორმაციას მოწყობილობიდან

cRC8 (dataarray, სიგრძე)

ითვლის CRC Byte კოდს მონაცემთა ბაზის მასივიდან, გრძელ სიგრძეზე

ჩაწერეთ ბრძანების გამოყენებით, ჩვენ შეგვიძლია გადავიტანოთ საკონტროლო ბრძანებები ადგილმდებარეობის სენსორში ბაიტების სახით, განვიხილოთ მთავარი მათგანი:

0x44. - ტემპერატურის გაზომვის ჩატარება და RAM- ს მონაცემების ჩაწერა

0x4e. - RAM- ის 3, მე -4 და მე -5 და მე -5 ბაიტებში 3 ბაიტი

0x48. - EEPROM- ში RAM- ის მე -3 და მე -4 ბატის ასლი

0xb8. - მონაცემების ასლი მონაცემები EEPROM- დან 3 და 4y RAM BYTES

დაკავშირება Arduino.

სამი მავთული გამოდის სენსორიდან:

წითელი: "+" ძალა.

Შავი:"-" Ძალა

თეთრი: გამოყვანის გამომავალი

სენსორი კავშირი:

წითელი: ON + 5 VOLT Arduino.

Შავი ნებისმიერი GND ქინძისთავები --- Arduino.

თეთრი ნებისმიერი Arduino ციფრული შეყვანის (მაგალითად D10).

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

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

ნიმუშის პროგრამის კოდი

#Include. Onewire ds (10); // უკავშირდება 10 ქინძისთავას (Resistor On 4.7K საჭირო) ძალადაკარგულად setup (bybegin (9600);) ბათილად loop (byte i; byte present \u003d 0; byte type_s; byte addr; float celsius, Fahrenheit; თუ (! DS.Search ("აღარ მისამართები"); serial.println (); ds.reset_search (); დაგვიანებით (250); დაბრუნება;) ბეჭდვა ("ROM \u003d"); ამისთვის (i \u003d 0; მე< 8; i++) { Serial.write(" "); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // начало коммуникации delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); // читаем значение Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for (i = 0; i < 9; i++) { // смотрим 9 байтов data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Преобразуем получненный данные в температуру // Используем int16_t тип, т.к. он равен 16 битам // даже при компиляции под 32-х битный процессор int16_t raw = (data << 8) | data; if (type_s) { raw = raw << 3; if (data == 0x10) { raw = (raw & 0xFFF0) + 12 - data; } } else { byte cfg = (data & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); }

Dallas18B20 ექსტრემალური ტესტირება

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

სქემა დაემატა სარელეო, ავტომატურად გამორთეთ ქვაბში 99.5 ° C ტემპერატურაზე. იმისათვის, რომ არ მოჭრილი ხაზები საქვაბეზე, დაკავშირება მეშვეობით outlet, რომელიც შიგნით, რომელიც ზემოთ სარელეო მდებარეობს.

Მნიშვნელოვანი

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

მაგალითი კოდი

#Include. Onewire ds (10); // დაკავშირება 10 Pyuse (Resistor 4.7K საჭირო) ძალადაკარგულად კონფიგურაცია (ბათილი) (Serial.Begin (9600); Pinmode (3, გამომავალი); // ჩართეთ DigitalWrite Boiler (3, დაბალი);) ბათილობის მარყუჟის (ბათილად ) (Byte i; byte present \u003d 0; byte type_s; byte data; byte addr; float celsius, fahrenheit; თუ (! Ds.search (addr)) (serial.println ("აღარ მისამართები"); serial.println (); ds.reset_search (); დაგვიანებით (250); დაბრუნება;) Serial.print ("ROM \u003d"); ამისთვის (i \u003d 0;< 8; i++) { Serial.write(" "); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // начало коммуникации delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); // читаем значение Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for (i = 0; i < 9; i++) { // смотрим 9 байтов data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Преобразуем получненный данные в температуру // Используем int16_t тип, т.к. он равен 16 битам // даже при компиляции под 32-х битный процессор int16_t raw = (data << 8) | data; if (type_s) { raw = raw << 3; if (data == 0x10) { raw = (raw & 0xFFF0) + 12 - data; } } else { byte cfg = (data & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); // Если температура достигает температуры кипения (с погрешностью), отключаем кипятильник if (celsius > 99.5) (DigitalWrite (3, მაღალი);))

#Include.

Onewire ds (10); / / Connect სენსორი 10 ციფრული ფიჭვის

ძალადაკარგული კონფიგურაცია (ბათილია)
Serial.begin (9600);
Pinmode (3, გამომავალი);
// ჩართეთ ქვაბში
DigitalWrite (3, დაბალი);
}

ბათილი loop (ბათილი) (
Byte i;
Byte type_s;
Byte მონაცემები;
Byte addr;
Float Celsius, Fahrenheit;

// ჩვენ ვეძებთ ALRES სენსორს
თუ (! DS.Search (Addrr)) (
Serial.println ("აღარ მისამართები");
Serial.println ();
ds.reset_search ();
დაგვიანებით (250);
Დაბრუნების;
}

/ / შემოწმება თუ არა ჩარევა არ იყო გადაცემული
თუ (onewire :: CRC8 (Addr, 7)! \u003d Addr) (
Serial.println ("CRC არ არის სწორი!");
Დაბრუნების;
}
Serial.println ();

// განსაზღვრა სენსორი სერია
შეცვლა (Addr) (
საქმე 0x10:
Serial.println ("ჩიპი \u003d ds18s20");
Type_s \u003d 1;
შესვენება;
საქმე 0x28:
Serial.println ("ჩიპი \u003d ds18b20");
Type_s \u003d 0;
შესვენება;
საქმე 0x22:
Serial.println ("ჩიპი \u003d ds1822");
Type_s \u003d 0;
შესვენება;
ნაგულისხმევი:
Serial.Println ("მოწყობილობა არ არის DS18X20 საოჯახო მოწყობილობა");
Დაბრუნების;
}

ds.reset ();
ds.select (addr);
ds.Write (0xbe); // წაიკითხეთ სენსორის საოპერაციო მეხსიერება

(i \u003d 0; მე< 9; i++) {
მონაცემები [i] \u003d ds.read (); / / შეავსეთ წაკითხვის მონაცემები
}

/ / ტემპერატურის მონაცემები შეიცავს პირველ ორ ბაიტებს, თარგმნა მათ ერთი ღირებულებით და ჩვენ გადავცემთ ჰექსადეციალური რიცხვით
Int16_t raw \u003d (მონაცემები<< 8) | data;
თუ (type_s) (
Raw \u003d ნედლეული.<< 3;
თუ (მონაცემები \u003d\u003d 0x10) (
Raw \u003d (RAW & 0xFFF0) + 12 - მონაცემები;
}
}
სხვა
Byte CFG \u003d (მონაცემები & 0x60);
თუ (CFG \u003d\u003d 0x00) RAW \u003d RAW & ~ 7;
სხვა შემთხვევაში თუ (CFG \u003d\u003d 0x20) Raw \u003d Raw & ~ 3;
სხვა შემთხვევაში, თუ (CFG \u003d\u003d 0x40) Raw \u003d Raw & ~ 1;
}
Celsius \u003d (Float) Raw / 16.0;
Fahrenheit \u003d Celsius * 1.8 + 32.0;
Serial.print ("temp \u003d");
Serial.print (გრადუსი);
Serial.print ("C");
სერიალი (ფარენგეიტი);
Serial.println ("f");

/ / თუ ტემპერატურა მიაღწევს მდუღარე წერტილს (შეცდომით), გამორთეთ ქვაბში
თუ (გრადუსი\u003e 99.5)
{
DigitalWrite (3, მაღალი);
}
}

შეიძინე რუსეთში

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

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

DS18B20 ტემპერატურის სენსორი მრავალფეროვანი საბინაო ტიპებია. თქვენ შეგიძლიათ აირჩიოთ ერთი სამი - 8-pin ასე (150 მილი), 8-pin μsop, და 3-Pin to-92. ეს უკანასკნელი ყველაზე გავრცელებულია და წარმოებული სპეციალური ტენიანობის დაცვის შემთხვევაში, ისე, რომ ეს შეიძლება იყოს დაცული წყლის ქვეშ. თითოეულ სენსორს აქვს 3 კონტაქტი. To-92 შემთხვევაში, თქვენ უნდა გამოიყურებოდეს ფერის ხაზები: შავი - დედამიწა, წითელი კვება და თეთრი / ყვითელი / ლურჯი - სიგნალი. ინტერნეტ მაღაზიებში შეგიძლიათ შეიძინოთ მზა DS18B20 მოდული.

სად ვიყიდოთ სენსორი

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

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

DS18B20 მთავარი ამოცანაა განსაზღვროს ციფრული თვალსაზრისით მიღებული შედეგების ტემპერატურა და ტრანსფორმაცია. ჩვენ შეგვიძლია დამოუკიდებლად შევქმნათ აუცილებელი ნებართვა სიზუსტის ოდენობით - 9, 10, 11 და 12-ის ოდენობით. ამ შემთხვევაში, რეზოლუცია იქნება 0.5 ° C, 0.25С, 0.125С და 0.0625с.

შედეგად ტემპერატურის გაზომვები შენახულია SRAM სენსორში. 1 და 2 ბაიტი შეინარჩუნებს ტემპერატურის ღირებულებას, 3 და 4 დაზოგეთ გაზომვის ლიმიტები, 5 და 6 დაცულია, 7 და 8 გამოიყენება მაღალი სიზუსტის ტემპერატურის განსაზღვრისთვის, ბოლო 9 ბიტიანი კოდის რეზისტენტული CRC კოდი.

კავშირი DS18B20 to Arduino

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

1 მავთობის ინფორმაციის გაცვლა შემდეგ ოპერაციებს წარმოადგენს:

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

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

  • Arduino IDE;
  • Onewire ბიბლიოთეკა თუ რამდენიმე სენსორების გამოიყენება ავტობუსი, შეგიძლიათ გამოიყენოთ Dallastemperative ბიბლიოთეკა. ეს იმუშავებს onewire თავზე.

საწყისი აღჭურვილობა თქვენ დაგჭირდებათ:

  • ერთი ან მეტი DS18B20 სენსორები;
  • Arduino Microcontroller;
  • კონექტორები;
  • რეზისტორი 4.7 კ³ (ერთი სენსორის კავშირის შემთხვევაში, რეზისტორი 4-დან 10 კმ-მდე);
  • მიკროსქემის საბჭო;
  • USB კაბელი კომპიუტერთან დაკავშირების მიზნით.

Arduino ფორუმში, სენსორი აკავშირებს უბრალოდ: GND თერმული სენსორი თან ერთვის Arduino GND, VDD უკავშირდება 5V, მონაცემების ნებისმიერი ციფრული PIN.

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

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

  • სენსორის მისამართის განმარტება, შეამოწმეთ კავშირი.
  • სენსორი ემსახურება ტემპერატურის წაკითხვის მოთხოვნას და რეესტრში გაზომვის ღირებულებას. პროცედურა უფრო დიდია, ვიდრე დანარჩენი, დაახლოებით 750 ms.
  • ბრძანება ემსახურება ინფორმაციის წაკითხვის რეესტრიდან და გაგზავნის ღირებულებას "პორტის მონიტორის",
  • საჭიროების შემთხვევაში, იგი გარდაიქმნება გრადუსით Celsius / Fahrenheit.

მაგალითი Simple Sketch for DS18B20

ციფრული სენსორით მუშაობის მარტივი ესკიზი ასეთია. (Sketch ჩვენ ვიყენებთ onewire ბიბლიოთეკა, რომელიც იქნება საუბარი უფრო ცოტა მოგვიანებით).

#Include. / * * ურთიერთქმედების ურთიერთქმედების DS18B20 ციფრული სენსორი * დამაკავშირებელი DS18B20 to Arduino მეშვეობით PIN 8 * / onewire DS (8); // შექმენით 1 მავთულის ავტობუსით, რომელთანაც თქვენ მუშაობთ ძალადაკარგულად Setup (Serial.Begin (9600);) ძალადაკარგულად loop () (// განსაზღვრა ტემპერატურა DS18B20 Byte მონაცემთა სენსორი ; // ადგილი DS.Reset () ტემპერატურის ღირებულება; // ჩვენ დავიწყებთ ურთიერთქმედებას ყველა წინა ბრძანების გადატვირთვისას და DS.Write პარამეტრების (0xcc); // ჩვენ ვაძლევთ DS18B20 ბრძანებას, რათა გამოტოვოთ მისამართი მისამართი. შემოსული ჩვენი საქმე, მხოლოდ ერთი firmware ds.Write (0x44); // მისცეს DS18B20 სენსორი ტემპერატურის გაზომვისთვის. თავად ტემპერატურის ღირებულება ჯერ კიდევ არ არის - სენსორი დაყოვნების შიდა მეხსიერებაში (1000); // მიკროკროგუზი ზომავს ტემპერატურას და ველოდებით. DS.Reset (); / / ახლა თქვენ მზად ხართ გაზომვის ღირებულების ღირებულება (0xcc); DS.Write (0xbe); // გთხოვთ გადარიცხოთ ტემპერატურის ღირებულების რეგისტრაციის ღირებულება // მიიღეთ და წაიკითხეთ მონაცემები \u003d ds.read () რეაგირება () // წაიკითხეთ ახალგაზრდა ბიტიანი მონაცემების ტემპერატურის ღირებულება \u003d ds.read (); / ახლა მთავარი // ჩამოყალიბდეს საბოლოო ღირებულება I: // - პირველი "წებო" ღირებულება, // - შემდეგ გაამრავლოთ ის კოეფიციენტზე, რომელიც შეესაბამება რეზოლუციას (12 ბიტისთვის - ეს არის 0.0625) float ტემპერატურა \u003d ((მონაცემები<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Sketch მუშაობა DS18B20 სენსორი დაუყოვნებლივ

თქვენ შეგიძლიათ გაართულონ პატარა პროგრამა DS18B20- ისთვის, რათა მოშორდეს ესკიზის შესრულების დამუხრუჭების მოშორება.

#Include. Onewire ds (8); // ობიექტის Onewire Int ტემპერატურა \u003d 0; // გლობალური შენახვის ცვლადი ტემპერატურის ღირებულება DS18B20 ხანგრძლივი LastUpdateTeime \u003d 0 სენსორი; // ცვლადი შესანახად ბოლო წაკითხვის დრო Const Int Temp_Update_time \u003d 1000 სენსორი; // განსაზღვრავს ძალადაკარგული კონფიგურაციის სიხშირე () შემოწმება (Serial.Begin (9600);) ძალადაკარგულად Loop () (DetectTemperature (); // განსაზღვრა ტემპერატურა DS18B20 Serial.Println სენსორი (ტემპერატურა); / აჩვენებს შედეგს ტემპერატურა // ტ. ტემპერატურული ცვლადი აქვს int ტიპის, ფრაქციული ნაწილი უბრალოდ გაუქმდება) int detecttemperature (byte მონაცემები; ds.reset (); ds.write (0xcc); DS.Write (0x44) ; თუ (Millis () - temp_updatetime \u003d Millis (); ds.reset (); ds.write (0xcc); ds.write (0xbe); მონაცემები \u003d ds.read (); მონაცემები \u003d ds.read () ; // ფორმირების ღირებულება ტემპერატურა \u003d (მონაცემები<< 8) + data; temperature = temperature >> 4; } }

Dallastemperature და DS18B20 ბიბლიოთეკა

თქვენს სკეტჩებში, ჩვენ შეგვიძლია გამოვიყენოთ Dallastemperature Library, რომელიც ამარტივებს რამდენიმე ასპექტს მუშაობის DS18B20 სენსორი 1 მავთულის. Sketch მაგალითი:

#Include. / / Arduino Pina- ის ნომერი Connected #define Pin_DS18B20 8 // შექმნა onewire onewire ობიექტი (PIN_DS18B20); / / შექმნა Dallastemperative ობიექტი მუშაობა სენსორების, რომელმაც გადასცა მას ბმული ობიექტი მუშაობა 1 მავთულის. Dallastemperature Dallassensors (& onewire); // სპეციალური ობიექტი მისამართი მოწყობილობის DeviceAddress Sensoraddress; BOID LOOP (ბათილად) (// / ტემპერატურის სენსორული სერიული გაზომვის მოთხოვნა ("შეაფასეთ ტემპერატურა ..."); dallassensors.requestemperatures () // ჩვენ ვთხოვთ DS18B20 მონაცემთა შეგროვების მონაცემების სერიალენ ) / / მოთხოვნის მისაღებად გადაარჩინა printtemperature ტემპერატურის ღირებულება; dallassensors.gettempc (deviceaddress); serial.print ("temp c:"); serial.println (TEMPC);) // დამხმარე ფუნქცია DS18B20 BADDADDDDDDRESS SENSOR- ის ჩვენება მისამართი (for (for (uint8_t i \u003d 0; მე< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

Onewire ბიბლიოთეკა მუშაობის DS18B20

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

ყველა DS18B20 სენსორები დაკავშირებულია პარალელურად, მათთვის ყველა საკმარისი რეზისტორი. Neewire ბიბლიოთეკის გამოყენებით, შეგიძლიათ ერთდროულად წაიკითხოთ ყველა სენსორების ყველა მონაცემები. თუ დაკავშირებულ სენსორების რიცხვი 10-ზე მეტია, თქვენ უნდა აირჩიოთ რეზისტორი არაუმეტეს 1.6 კომისით. ასევე, უფრო ზუსტი ტემპერატურის გაზომვისთვის, თქვენ უნდა დააყენოთ დამატებითი რეზისტენტული 100 ... 120 ohms შორის მონაცემების გამომავალზე Arduino და მონაცემთა საბჭოს თითოეულ სენსორში. თქვენ შეგიძლიათ გაირკვეს, საიდანაც სენსორი ეს ან ღირებულება მიიღება უნიკალური სერიული 64-ბიტიანი კოდის გამოყენებით, რომელიც გაიცემა პროგრამის შესრულების შედეგად.

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

დასკვნები

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

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

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

DS18.B20- ციფრული ტემპერატურის სენსორი პროგრამირებადი კონვერტაციის რეზოლუციით.

Გამორჩეული მახასიათებლები:

1) 1 მავთულის მონაცემების ავტობუსის ინტერფეისის ავტობუსის გამოყენებით კონტროლის სისტემასთან ურთიერთქმედება;
2) შიდა ROM- ის მეხსიერებაში არსებული უნიკალური 64-ბიტიანი თანმიმდევრული საიდენტიფიკაციო კოდის არსებობა და მრავალპროფილიანი სისტემებისათვის განკუთვნილი, სადაც კონკრეტული სენსორი უნდა მიმართავენ;
3) მიწოდების ძაბვა არის 3-5.5V, რომელიც საშუალებას აძლევს არა მხოლოდ 5-ვოლტ სისტემას, არამედ 3.3 (ყველაზე მიკროკონტროლერს);
4) გაზომვის ტემპერატურის სპექტრი არის -55 ... + 125 ° C;
5) სიზუსტე ± 0.5 o C, თუმცა მართალია მხოლოდ სპექტრი -10 ... + 85 o გ;
6) კონვერტაციის რეზოლუცია განისაზღვრება მომხმარებლის მიერ და არის 9 ... 12 ბიტი;
7) აქვს შიდა და ქვედა ტრაქტოგრამების ზედა და ქვედა ტრაქტოგრამების სიგნალიზაციის სიგნალიზაციის სიგნალიზაციის სისტემები თერმოსტატული სამუშაო ლოგიკის გამოყენებით;
8) ეს სენსორები პროგრამით არის თავსებადი DS1822. ფართოდ გამოიყენება სამრეწველო თერმოსტატული მარეგულირებელი, სამრეწველო სისტემები, სამომხმარებლო ელექტრონიკაში და სხვა თერმული მგრძნობიარე სისტემებში.

მოწყობილობის აღწერა და პრინციპი:

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

ეს ასე გამოიყურება:

Inside, ეს რამ არის მოწყობილი ძალიან უბრალოდ, შეხედეთ:

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

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

გუნდის გაცემის შემდეგ კონვერტაცია.თ. ან ასლი.Scratchpad. თქვენ უნდა ჩართოთ ძლიერი Mosfet-Transistor Lift Line DQ არა უგვიანეს 10 მლნ (მაქსიმუმ), სენსორის დეველოპერების მიხედვით, რის შემდეგაც კონვერტაციის დრო (TCONV) ან მონაცემთა გადაცემის დრო (TWR \u003d 10 MC), ხოლო იმ დროს არ არსებობს ქმედება ძლიერი ეჭვქვეშ DQ ხაზი არ უნდა იყოს!

შესახებ სტანდარტული საკვები თქვენ უნდა ვთქვა პატარა, რადგან ყველაფერი მარტივია, და კიდევ Mosfet არ არის საჭირო:

ქვესისტემის "64-bit rom და 1 მავთულის პორტი" შეიცავს უნიკალურ 64-ბიტიანი სერიული საიდენტიფიკაციო კოდს, რომელიც მდებარეობს არა-არასტაბილურ ROM მეხსიერებაში, ასევე ამ კვანძში, არის 1 მავთულის კონტროლის სისტემაში ურთიერთქმედების ინტერფეისი. მეხსიერების კონტროლი ლოგიკა ქვესისტემს გადასცემს მონაცემებს 1 მავთულის ინტერფეისის და ScratchPad მეხსიერების შორის, რაც, თავის მხრივ, აქვს ტემპერატურის სენსორის რეგისტრაციის ხელმისაწვდომობა, ზედა და ქვედა სიგნალიზაცია, კონფიგურაციის რეგისტრაცია და გენერატორი რეგისტრაცია 8- Bitting CheckSum- ს სისტემაში არასწორი მონაცემები.

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

ტემპერატურის კონვერტაცია.

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

S ხატულა დროშა გამოიყენება ნომრის ნომრებზე (S \u003d 0 - ბიტი 10-0 დადებითად და S \u003d 1, თუ იგივე ბიტითა რიცხვი უარყოფითია, ანუ ამ შემთხვევაში, ტემპერატურა როგორც ჩანს, დამატებით კოდექსში (დანამატის კოდი ორამდე)).

12 ბიტის კონვერტაციის რეზოლუციის კონფიგურირებლად, ყველა 12 ბიტი (ცოტა 11-ბიტიანი 0) ჩართულია და შეიცავს საიმედო მონაცემებს. 11 ბიტის რეზოლუციის შექმნისას, ცოტა რაოდენობის 0 შინაარსი არ უნდა იქნეს გათვალისწინებული, როდესაც 10 ბიტი არ უნდა იქნეს გათვალისწინებული 0 და 1 და ა.შ.

სიგნალი არის თერმოსტატიანი ფუნქცია.

ეს უზრუნველყოფს 2 8-ბიტიანი რეესტრს, ე და TL- ს. ტემპერატურის ზედა ზღვრების ღირებულება და TL- ში, შესაბამისად, ქვედა ერთი. თუ ტემპერატურა ზემოთ ან ქვემოთ TL- ის მნიშვნელობას ანიჭებს სიგნალს. ეს განგაშის დროშა აღმოჩენილია წამყვანი მოწყობილობით ბრძანების გაცემით. სიგნალიზაცია ძიება. DQ ხაზზე. განგაშის დროშა განახლებულია თითოეული ტემპერატურის კონვერტაციის ოპერაციაში. სხვათა შორის, 11-დან მე -4 ტემპერატურის რეესტრში მხოლოდ ბიტი გამოიყენება მე -4 ტემპერატურის რეესტრთან შედარებით, შემდეგნაირად, რომ თერმოსტატის ფუნქცია მხოლოდ მთელი რიცხვითი ტემპერატურის ღირებულებებისთვის მუშაობს. რეგისტრაცია ფიზიკურად EEPROM მეხსიერებით, ამიტომ ისინი შეინარჩუნებენ მათ ღირებულებებს, როდესაც ძალა გამორთულია. რეესტრი თავად ტემპერატურის რეგისტრაციის მსგავსია, მხოლოდ 8 ბიტიანი, დროშა S არის აბსოლუტურად იგივე ღირებულება, როგორც წინა საქმეში:

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

ამ მეხსიერების ფორმატი არის:

უმცროსი 8 ბიტი გათიშულია ოჯახის დანიშნულებაზე და შეიცავს 0x28 ღირებულებას. მომდევნო 48 ბიტი შეიცავს უნიკალურ სერიულ რაოდენობას. უძველესი ბაიტი შეიცავს CRC- ის შემოწმების ღირებულებას, რომელიც გამოითვლება ROM მეხსიერების უმცროსი 56 ბიტისთვის.

მეხსიერების ორგანიზაცია.

სენსორის ხსოვნა შედგება Notepad მეხსიერების სივრცის (ScratchPad) და EEPROM მეხსიერებისგან, ზედა და ქვედა სიგნალიზაციის ზღურბლების რეგისტრაციისთვის კონფიგურაციის მონაცემებისა და ღირებულებების შენახვისთვის.

როდესაც ძალა გამორთულია, Byte მონაცემები 2, 3 და 4 მათი ღირებულება EEPROM- ს. კარგად, როდესაც ჩართული, ღირებულება მათ უცვლელი რჩება. Byte 0 და 1 შეიცავს კონვერტირებული ტემპერატურის ღირებულებას, ბაიტებს 5, 6, 7 დაცულია შიდა გამოყენებისათვის და არ შეიძლება ხელმისაწვდომი იყოს მომხმარებლისთვის.

მე -8 ბაიტი შეიცავს CRC კოდექსის ფორმირების ჩაშენებულ ლოგიკას 0-დან 7-მდე ბაიტებს, რომლებიც ამცირებენ საბოლოო ტემპერატურის განსაზღვრის შესაძლებლობას.

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

მონაცემები ჩაწერილია Bytes 2, 3 და 4 დაწყებული ახალგაზრდა ცოტა bit 2 გამოყენებით ბრძანება დაწერეთ scratchpad.. ჩაწერილი მონაცემების მთლიანობის შესამოწმებლად, შეგიძლიათ წაიკითხოთ ისინი, რისთვისაც აუცილებელია სენსორის ბრძანება წაიკითხეთ scratchpad.რის შემდეგაც სამაგისტრო უნდა მიიღოს მონაცემები ახალგაზრდა bitte byte 0.

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

როგორც ზემოთ აღინიშნა, EEPROM- ში უკვე ჩაწერილი მონაცემები, როდესაც ძალა გამორთულია, შენახულია. მაგრამ როდესაც ძალაუფლება ჩართულია შესაბამისი EEPROM- ის უჯრედებისგან, ფასეულობები ავტომატურად გადმოწერილია შესაბამის ScratchPad მეხსიერების რეესტრში. მოსახერხებელი, არა? :)

გარდა ამისა, EEPROM- ში ჩაწერილი მონაცემები შეიძლება ნებისმიერ დროს გადაწეროთ ScratchPad მეხსიერებაში. ეს აუცილებელია მაგალითად, როდესაც თქვენ შეიცვალა კონფიგურაცია პროცესში, და მაშინ თქვენ უნდა მიიღოთ up "სტანდარტული რეჟიმი ოპერაცია", I.E. დავუბრუნდეთ იმ სამუშაოს კონფიგურაციას, რომელიც ადრე იყო ScratchPad მეხსიერების რეგისტრაციის შინაარსის შეცვლაზე. აქ რეალურად ამისთვის, წამყვანი მოწყობილობა უნდა გაიაროს ბრძანება სენსორი. გავიხსენოთ ე2 .

კონფიგურაციის რეესტრში მხოლოდ 2 ბიტი შეიძლება განისაზღვროს: R0 და R1. ეს ბიტი განსაზღვრავს ტემპერატურის კონვერტაციის რეზოლუციას, ხოლო ნაგულისხმევად არის მითითებული 1, რომელიც განსაზღვრავს პირველადი პარამეტრი 12-ბიტიანი კონვერტაციის რეზოლუციას.

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

კონტროლის სისტემასთან ურთიერთქმედება.

DS18B20, როგორც ადრე აღნიშნა, რომ ორიენტირებული მოწყობილობა გამოიყენოს 1 მავთულის ინტერფეისის მონაცემთა ავტობუსით. აქედან გამომდინარე, დაკავშირება, კონტროლის სისტემა უნდა უზრუნველყოს outlet outlet ან hi-z ხაზის სტატუსი.

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

უმოქმედო მდგომარეობაში (მოჩვენებითი სახელმწიფოში), DQ ხაზი გამოყვანილია "+" ძალაუფლებაზე. ამდენად, ეს ხაზი ყოველთვის უნდა იყოს დაცული ამ სახელმწიფოში ტრანზაქციებს შორის (მონაცემთა მონაცემთა გადაცემები). თუ რაიმე მიზეზით, გარიგება უნდა შეჩერდეს, DQ ხაზი უნდა იყოს დაცული მაღალი ლოგიკური დონეზე, თუ ეს გადაცემა გაგრძელდება. გარიგების შეჩერების პროცესში, ჩვენ შეგვიძლია შევინარჩუნოთ DQ ხაზი დიდი ხნის განმავლობაში მაღალი ლოგიკით, დაწყებული 1 SCS- ით. მაგრამ, თუ მონაცემთა ავტობუსი ინახება დაბალი ლოგიკის დონეზე, ვიდრე 480μs, სრული გადატვირთვა ყველა სენსორი ამ ავტობუსში მოხდება.

გაცვლის ოპერაციების თანმიმდევრობა.

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

1) ინიციალიზაცია;
2) ROM ბრძანება (მოჰყვა საჭირო მონაცემების გაზიარებას);
3) სენსორის ფუნქციური ბრძანება (მოჰყვა საჭირო მონაცემების გაზიარებას).

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

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

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

ასე რომ, დამწყებთათვის, სამაგისტრო მოწყობილობა გადამრთველია გადამცემი რეჟიმში და ადგენს DQ ხაზს 0-ზე, ხოლო მინიმუმ 480μs (ხაზგასმით აღინიშნება თამამი შავი). ის განსაზღვრავს სენსორს. შემდეგ ხაზი უნდა გათავისუფლდეს და თარგმნა სამაგისტრო მოწყობილობის მიმღების რეჟიმში, ხოლო Pull-up Resistor იქნება მითითებული მონაცემების ხაზი მაღალი ლოგიკური დონეზე (ხაზგასმით თხელი შავი ფერი). სენსორის შემდეგ იზრდება მზარდი ფრონტი, სენსორი 15-60 მმ-ს მოუთმენლად ველით და მონაცემების ხაზს გადააჭარბებს და 60-240 მლნ. ამ დროის შემდეგ, სენსორი ხაზს უსვამს ხაზს და ეს იქნება ლოგიკური დონის 1-ში, მინიმუმ 480μs- ის გამოვლენის შემდეგ.

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

ნახატები:

ეს ყველაფერი იწყება იმით, რომ წამყვანმა უნდა გამოაგზავნოს ხაზი დაბალი ლოგიკური დონისთვის, და ამ ეტაპზე, ჩაწერის / კითხვის სლოტი 1/0, რომელიც 60-დან 120 მლნ. ჩანაწერის / წაკითხვის სლოტებს შორის, მონაცემთა ხაზი უნდა იყოს დამონტაჟებული 1-ში, არანაკლებ აღდგენის დრო (1μs). რეკორდული სლოტების ორგანიზება 0, აუცილებელია მონაცემთა ხაზის შენარჩუნება 0 ყველა დროის სლოტი, მაგრამ თუ სენსორს 1-ს უნდა დაწერა, მაშინ ჩვენ პირველად გადავდგათ მონაცემთა ხაზის 0-მდე, მაშინ ჩვენ ველოდებით 1 MX და გაათავისუფლეთ ხაზი 1-ში, ჩანაწერის სლოტზე 1 (60- 120μs) 1 (60- 120μs) ჩაიწერება 1 სენსორში (იხილეთ ზედა მარჯვენა ფიგურა).

სინამდვილეში, თუ 15-60 მმ, დაწყებისთანავე, მონაცემების ხაზში 1 გამოვლინდება, მაშინ 1 ჩაიწერება და თუ 60-240 კაით გაათავისუფლებს.

მონაცემების წაკითხვა თან ახლავს წამყვანი მოწყობილობას, როდესაც ის ხაზს უსვამს ხაზს, ელოდება მინიმუმ 1 MX- ს, და გამოიყურება 15 MX- ზე, რომელიც მიმდინარეობს: თუ ის რჩება 0, სენსორული ტრანსმისიები 0, შემდეგ 1.

გუნდები.

ROM გუნდი.

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

ძებნა rom

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

წაკითხული rom

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

მატჩი რომ

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

გამოტოვეთ ROM.

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

სიგნალიზაცია ძიება.

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

ფუნქციური გუნდები.

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

კონვერტაციის T.

ტემპერატურის კონვერტაციის გაშვება. ამ ბრძანების შესრულების შემდეგ, 2-byte მონაცემები შევიდა ტემპერატურის რეესტრში.

დაწერეთ scratchpad.

ჩანაწერებს მონაცემების რეგისტრაციაში 2-4 დაწყებული მეორე, უმცროსი ბიტი წინ. გადაცემისას სამი რეესტრში მონაცემები უნდა მონიტორინგი, ისე, რომ ოსტატი არ არის სენსორების არარსებობა, რადგან მონაცემთა დაკარგვა შესაძლებელია.

წაიკითხეთ scratchpad.

იგი იწყებს მონაცემების გადაცემის პროცესს ყველა ScratchPad მეხსიერების რეგისტრაციისთვის, დაწყებული ახალგაზრდა ბიტიანი 0-ით და დამთავრდება ხანდაზმული BITE 8 (CRC).

ასლი ScratchPad.

ეს ბრძანება ასრულებს Byte რეგისტრაციის შინაარსს 2, 3 და 4 შესაბამის EEPROM- ს უჯრედებს.

გავიხსენოთ ე2

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

წაკითხვის ელექტროენერგიის მიწოდება

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

მოწყობილობა სქემა:

ბეჭდური მიკროსქემის საბჭოს ასამბლეის ხატვა (მე ბოდიშს ვუხდი ხარისხს, მე მხოლოდ იმუშავებს, გამართვისთვის):

ნუ დაივიწყებთ საფასურის შეცვლას

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

ეს არის ის, რაც მოხდა ჩემთვის:

აღმოჩნდა ერთგვარი სენდვიჩი

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

ჩამოტვირთეთ წყარო და Lay PCB ქვემოთ

ყველა დამატებითი კითხვა, სურვილები ელოდება მისამართზე: [Email protected]

მიუხედავად ამისა, კომპანია "Dallas Semiconductor" ტაქსი. ჩვენ ვამზადებთ ბევრ უნიკალურ და იაფი ცალი. ერთი მათგანი არის ციფრული DS18B20 ტემპერატურის სენსორი. Fucks ცოტა ნაკლებად ალუბლის ძვლის სამი დასკვნები. პირველი დასკვნა არის ძალა + 5 ვოლტი, მეორე არის საერთო (ნულოვანი), მაგრამ მესამე არის სიგნალი, სერიული კოდი ამოღებულია პროპორციული ტემპერატურისგან. სენსორი უზრუნველყოფს ტემპერატურის გაზომვას დიაპაზონში (-55 ... +125) ° C გაზომვის შეცდომით ± 0.5 ° C დიაპაზონში (-10 ... +85) ° C. საბურავზე ყველა პროცესი აკონტროლებს ცენტრალურ მიკროპროცესორს. შიგნით - კომპლექსური სქემა სენსორით, ADC, ROM, STORAGE REGISTERS და SEQULITIAL OUTPUT SYSTEM.

DS18B20 ძირითადი მახასიათებლები მისი ტემპერატურის კონვერტორია. ტემპერატურის ტრანსფორმაციის რეზოლუცია შეიძლება შეიცვალოს მომხმარებლის მიერ და არის 9, 10, 11 ან 12 ბიტი, რომელიც შეესაბამება 0.5 ° C- ს, 0.25 ° C- ს, 0.125 ° C- ს და 0.0625 ° C- ს, შესაბამისად. ნაგულისხმევი ნებართვის უნარი 12-ბიტიანია.

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

საწყისი შენიშვნები:

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

2. ტემპერატურის დიაპაზონი -55 - +125 აშკარად არ არის სამრეწველო და ზოგადად, ვთქვათ, ჯილდოები Oymyakne ან მიწისქვეშა ნიობიუმის ნაღმები Taimyr (და იქ-50-60 და კიდევ -70 ეს მოხდება) არ აჩვენებს ტემპერატურას. ეს არის, არც კი მთელი საყოფაცხოვრებო სპექტრი მოიცავს.

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

ზემოდან. გამორთული გამონადენი - მინუს ტემპერატურა.

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

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

P.S. დღეს შედარებით ჩვენებები სხვა მოწყობილობასთან, სადაც სენსორი თერმაშია. როგორც ვხედავთ - ყველაფერი ემთხვევა.