В этой статье напишу про получение температуры из цифрового датчика 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» ничего не выдает…
Попробуйте использовать эти библиотеки:
использовал DallasTemperature.h и все очень даже получилось. а с OneWireTempSensor так и не понял где проблема.
У меня DS18B20. В сериал порт вообще ничего не выводит, т.к. numdevs = 0.
Специально сфоткал:
Видно что первой ножкой датчик подключен к земле, второй ножкой к 12 пину и через резистр к питанию. Контакты между собой где не надо не замыкаются (на фото можно подумать иначе).
Поправил скрипт:
import serial ser = serial.Serial('/dev/ttyUSB0', 9600) print ser.readline().strip()Исправил скейт, теперь +85 отсеивается и вывожу значение на conky:
Home temperature: ${execi 30 python ~/dev/temp.py}°C