Freeduino, DS1820 и PySerial

В этой статье напишу про получение температуры из цифрового датчика 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.

Эта статья — копия статьи из моего блога.
  • +2
  • 4 апреля 2010, 00:37
  • aspire89

Комментарии (10)

RSS свернуть / развернуть
+
+1
отличное начало!
на видео обратил внимание на эти скачки до 85-градусов — очень забавно может получиться если вешать на это дело события :)
Думаю, это можно поправить если брать несколько отсчётов и выводить среднее значение :) Или же просто отсеивать слишком большие отклонения из выборки.
avatar

noonv

  • 4 апреля 2010, 09:59
+
0
Один я звук не слышу?
Кстати, +85 это скорее всего не в датчике проблема:
*The power-on reset value of the temperature register is +85°C.
Ищите плохой контакт )
avatar

boa

  • 5 апреля 2010, 11:45
+
+1
Звука нет.
До этого я на этом датчике собирал такую схему и тоже были проблемы с +85.
avatar

aspire89

  • 5 апреля 2010, 12:06
+
0
Тогда +85 отсеивать надо. Вычислять среднее или большие отклонения нет смысла — других аномалий я не встречал.
avatar

boa

  • 5 апреля 2010, 12:21
+
+1
Поправил скрипт:
import serial

ser = serial.Serial('/dev/ttyUSB0', 9600)
print ser.readline().strip()

Исправил скейт, теперь +85 отсеивается и вывожу значение на conky:
Home temperature:   ${execi 30 python ~/dev/temp.py}°C
avatar

aspire89

  • 10 апреля 2010, 19:12
+
0
Странно, вроде как все то же самое сделал, но ардуина дальше строчки «Dallas Temperature Demo» ничего не выдает…
avatar

dokluch

  • 18 августа 2010, 18:17
+
0
Попробуйте использовать эти библиотеки: dl.dropbox.com/u/2957764/libraries.zip
avatar

aspire89

  • 18 августа 2010, 18:39
+
0
использовал DallasTemperature.h и все очень даже получилось. а с OneWireTempSensor так и не понял где проблема.
avatar

dokluch

  • 18 августа 2010, 20:31
+
0
У меня DS18B20. В сериал порт вообще ничего не выводит, т.к. numdevs = 0.
avatar

oleamm

  • 30 марта 2011, 21:55
+
0
Специально сфоткал: img-fotki.yandex.ru/get/4405/oleamm.2/0_556ce_5f737cf9_XXXL
Видно что первой ножкой датчик подключен к земле, второй ножкой к 12 пину и через резистр к питанию. Контакты между собой где не надо не замыкаются (на фото можно подумать иначе).
avatar

oleamm

  • 30 марта 2011, 22:31

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.