Raspberry Pi - DS18B20


28.11.2014

Підключення цифрового датчика температури DS18B20 до Raspberry Pi виконується за наступною схемою:

DS18B20S

DS18B20 - це цифровий датчик температури який працює з інтерфейсом 1-Wire. Він вимірює температуру в межах -10..+85 градусів за шкалою Цельсія. Як видно зі схеми для його використання нам потрібно сам датчик DS18B20 та резистор 4,7 КОм. Ви можете підключити декілька датчиків як вказано на наступній схемі:

DS18B20Scircuit2

Якщо використовувати дроти, довші за 3 метри, можуть виникнути проблеми зі зчитуванням. У цьому випадку рекомендується використовувати екрановані дроти.

Після підключення датчика виконуємо наступні команди:


sudo modprobe w1-gpio && sudo modprobe w1_therm
ls -l /sys/bus/w1/devices/

Маємо побачити щось схоже на наступне:

total 0
total 0
lrwxrwxrwx 1 root root 0 Nov 29 10:49 28-000000d7970b -> ../../../devices/w1_bus_master1/28-000000d7970b
lrwxrwxrwx 1 root root 0 Nov 29 10:49 w1_bus_master1 -> ../../../devices/w1_bus_master1
Якщо подібного результату немає, редагуємо файл /boot/config.txt:



sudo nano /boot/config.txt

додаємо рядок:

dtoverlay=w1-gpio

записуємо файл і перезавантажуємо Raspberry командою reboot.

Кожен датчик має унікальний номер. Знаходимо ID датчика. В моєму випадку 28-000000d7970b.

Далі виконуємо команду (Ви маєте замінити значення 28-000000d7970b на ID свого датчика):


cat /sys/bus/w1/devices/28-000000d7970b/w1_slave

Бачимо інформацію, яку видає датчик:

7c 01 4b 46 7f ff 04 10 09 : crc=09 YES
7c 01 4b 46 7f ff 04 10 09 t=23750
Серед цієї інформації є наступний фрагмент: t=23750. Це температура за шкалою Цельсія, помножена на  1000. Тобто, температура 23750/1000=23,750 oC. Не треба поринати у ілюзії стосовно трьох знаків після коми. Абсолютна точність датчика всього 0,5 oC.

Програмно отримати значення температури можна наступним чином:

Bash:


cat /sys/bus/w1/devices/28-000000d7970b/w1_slave | sed -n `s/^.*\(t=[^ ]*\).*/\1/p` | sed `s/t=//` | awk `{x=$1}END{print(x/1000)}`

Python:


tfile=open("/sys/bus/w1/devices/28-000000d7970b/w1_slave")
ttext=tfile.read()
tfile.close()
temp=ttext.split("")[1].split(" ")[9]
temperature=float(temp[2:])/1000
print temperature

Успіхів.

DS18B20 DS18B20

Дивись також:

Raspberry Pi
Коментарі:
Додати коментар
Code
* - обов'язкові поля

Архіви