В этой статье напишу про получение температуры из цифрового датчика DS1820 и передачи её по последовательному порту.
Схема соединения очень простая и состоит собственно из самого датчика и сопротивления на 4.7 кОм:
Собственно сам скейтч:
#include <OneWire.h> #include <OneWireTempSensor.h> OneWireTempSensor sensors(12); int numdevs; void setup(void) { numdevs = sensors.getDevices(); Serial.begin(9600); Serial.println("Dallas Temperature Demo"); } void loop(void) { int currdev; int temp; for (currdev = 0; currdev < numdevs; ++currdev) { temp = (int) sensors.getTempC(currdev); Serial.print("Temperature: "); Serial.println(temp); delay(1000); } }
Для работы понадобится библиотека OneWireTempSensor.h, которую легко можно найти в интернете. Для удобного наблюдения за температурой лучше всего выводить информацию на LCD дисплей, но так как его у меня нет, то будем выводить температуру в последовательный порт. Для просмотра передаваемой информации можно использовать функцию в IDE Arduino, которая называется Serial Monitor, но я написал простенький скрипт на Python.
#!/usr/bin/python __author__="aspire89" __date__ ="$03.04.2010 22:24:23$" import serial ser = serial.Serial('/dev/ttyUSB0', 9600) while 1: s = ser.readline().strip() print s
Для работы скрипта понадобится библиотека PySerial и как видно из кода, ничего сложного там нет.
Записал небольшое видео, в котором можно это все увидеть.
Если внимательно приглядеться, то можно увидеть, как в один момент температура подпрыгнет до +85 градусов. Это проблема в моем датчике, библиотека написана для более современных сенсоров, таких как DS18b20, DS18s20, а у меня старенький DS1820.
Эта статья — копия статьи из моего блога.
10 комментариев на «“Freeduino, DS1820 и PySerial”»
отличное начало!
на видео обратил внимание на эти скачки до 85-градусов — очень забавно может получиться если вешать на это дело события 🙂
Думаю, это можно поправить если брать несколько отсчётов и выводить среднее значение 🙂 Или же просто отсеивать слишком большие отклонения из выборки.
Один я звук не слышу?
Кстати, +85 это скорее всего не в датчике проблема:
Ищите плохой контакт )
Звука нет.такую схему и тоже были проблемы с +85.
До этого я на этом датчике собирал
Тогда +85 отсеивать надо. Вычислять среднее или большие отклонения нет смысла — других аномалий я не встречал.
Странно, вроде как все то же самое сделал, но ардуина дальше строчки «Dallas Temperature Demo» ничего не выдает…
Попробуйте использовать эти библиотеки:dl.dropbox.com/u/2957764/libraries.zip
использовал DallasTemperature.h и все очень даже получилось. а с OneWireTempSensor так и не понял где проблема.
У меня DS18B20. В сериал порт вообще ничего не выводит, т.к. numdevs = 0.
Специально сфоткал:img-fotki.yandex.ru/get/4405/oleamm.2/0_556ce_5f737cf9_XXXL
Видно что первой ножкой датчик подключен к земле, второй ножкой к 12 пину и через резистр к питанию. Контакты между собой где не надо не замыкаются (на фото можно подумать иначе).
Поправил скрипт:
Исправил скейт, теперь +85 отсеивается и вывожу значение на conky: