сайт для палких паяльників

Raspberry Pi – DS18B20
(на русском языке)

Підключення цифрового датчика температури 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("\n")[1].split(" ")[9]
temperature=float(temp[2:])/1000
print temperature

Успіхів.

DS18B20 DS18B20

Дивись також:
Translate
Архіви

© 2011-2019 Андрій Корягін, Кременчук - Київ, Україна