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.

Эта статья — копия статьи из моего блога.


10 комментариев на «“Freeduino, DS1820 и PySerial”»

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

    • Тогда +85 отсеивать надо. Вычислять среднее или большие отклонения нет смысла — других аномалий я не встречал.

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

  2. Поправил скрипт:

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

    Исправил скейт, теперь +85 отсеивается и вывожу значение на conky:

    Home temperature:   ${execi 30 python ~/dev/temp.py}°C

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение