Raspberry Pi - DS18B20


01.12.2014

Подключение цифрового датчика температуры DS18B20 к Raspberry Pi выполняется по следующей схеме:

DS18B20S

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

DS18B20Scircuit2

Если использовать провода, длиннее трех метров, могут возникнуть проблемы со считыванием. В этом случае рекомендуется использовать экранированные провода.

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


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

Смотри также:

Коментарі:

Додати коментар

* - обов'язкові поля

Архіви