Pull to refresh

Comments 33

Из Raspberry PI постепенно получается этакий Arduino level 2
А самое интересное зачем? Raspberry PI это недорогой компьютер, а Arduino это микроконтроллер, который имеет встроенные ЦАП/АЦП — это 2 устройства сделаны на разные области применения и нет большого смысла перемещать функции одного, на второго.
Более логично все датчики навешивать на Arduino, а саму Arduino уже подключать к Raspberry PI!
Тогда будет возможность повешать не только один датчик и быстро публиковать на Хабр свой подвиг, а сделать действительно хорошую стартовую площадку для измерения всего: температуры, влажность, яркость,… и не только замерить, а еще и управлять другими девайсами.
Даже если всего два датчика? Если данных небольшое количество, но частые обращения, то передача их может быть более затратной, даже если обработчик работает быстрее с ними. Я КЭП :)
Какие еще затраты и частые обращения? Это все программно легко реализуется и количество обращений и затраты.

Если всего 1-2 датчика, это только программа «Hello world», а как же дальше развитие?!
«Hello world» — это не тупик развития, а только первый шаг.

С другой стороны, плата Arduino имеет кучу плюшек для работы с температурами/влажностями и тому прочее — подключение батарейки и индикатора. Что бы оперативно посмотреть температуру не придется грузить операционную систему.
А кто говорит, что нельзя все это делать сразу на малинке? Зачем промежуточное звено, если кроме простого сбора информации можно ее обрабатывать, отображать, управлять удаленно и т.д. и т.п… Для этого в малинке и предназначены выводы GPIO.
Это можно делать, если данные потом нужно передать по Ethernet. Но если датчиков много, то лучше собрать с них всех информацию и через Rasperry передать дальше. Не стоит забывать, что Arduino «грузится» 100 ms или секунду, а Rasperry с Linux требуется минута или больше. А вообще, каждой задаче, своё решение. Где то, одна Rasperry, где то Rasperry + Microcontroller * X.
Нет доступа к таймерам, облегчающим декодирование таких сигналов, нет обработки в реальном времени. Вот пример того, как это делается при наличии прямого доступа к железу: habrahabr.ru/post/160017/#comment_5755239 Думаю, на BCM2835 тоже возможно подобное.
Мне нравится, то что устройство одно (Raspberry PI) вместо 2-х (Arduino + Raspberry PI).

Относительно измерения других параметров: попробую отдельно подготовить информацию о том, как можно производить измерения беспроводных датчиков температуры, яркости и управления реле.

Управлять с помощью Raspberry PI, тоже не сложно, реле на +3V можно подключить прямо к одному из GPIO.
Тут писал, как работать с датчиками Oregon с помощью Ардуино. Аналогично можно и к «малинке» подключить.
самое интересное, что кому-то удобнее прошить ардуину и радоваться, до следующей перепрошивки. А кому-то, удобнее дергать пины в полноценной операционной системе удобными средствами shell/python/perl/php.
Я кажется начинаю догадываться, почему так получается.
Raspberry Pi как и arduino сейчас у всех на слуху, люди их покупают в больших количествах, а потом и думают, что с ними делать. В итоге ничего больше не придумывают, как очередную вариацию термометра или мигания светодиодом )
Не могли бы Вы помочь с модернизацией скриптика получения данных с датчиков по 1-wire get_temp.pl, описанного здесь, дабы получать данные совместно и с Далласа, и DНТ, записывая их в rrdtool? Буду признателен.
Какие-то странные данны температуры DHT22 в этой строке
10/28/12 17:40 25 38 49.6 52.6
с чем это могло быть связано?

И заодно — у вас опечатка:
«или DHT11 подключен к GPIO17»
должно быть «или DHT22 подключен к GPIO17»
Да, несколько раз температура на DHT22 показывала странные значения. Еще видно, что разброс влажности между датчиками временами был тоже очень большой. Субъективное мнение, что если нужно строить систему управления например отоплением/кондиционированием, то лучше не принимать решение на основе первого значения, а только после серии измерений.
Еще обратите внимание на следующие особенности этих датчиков:

1. Опрос не чаще одного раза в 2 секунды (они реально медленные, но температура и влажность тоже не сильно быстро меняются в обычных условиях)
2. DHT11 — достаточно «грубый» датчик (температура с погрешностью +2%, влажность +5%) и работает только при положительных температурах
3. DHT22 — этот получше и работает уже от -40°C и погрешность поменьше ( +0,5%, влажность +2%)

Но даже зная эти паспортные данные, два датчика (11 и 22), находящиеся рядом, могут показывать влажность, которая отличается на 20% — так что это только «оценка».

Для измерения температуры DHT11 вообще плохо подходит, имхо. Хотя, возможно, где-то и такие грубые значения сойдут.
Когда натолкнулся на эти датчики, делал эксперимент. Использовал 5 датчиков DHT22, которые расположил в ряд. Писал данные неделю. Как показал эксперимент, один датчик был явно бракованный, у остальных показания влажности разнились до 10%. Температуру все регистрировали одинаково.

Датчики не плохи для домашнего применения. Но в коммерческий продукт я бы постеснялся их интегрировать.
Полностью согласен.

Хотя если использовать их в паре с DS18B20, то значение влажности с них (DHT22) — можно взять достаточно смело (но только для домашнего применения в составе погодной станции, например).

Предпринимать какие-то действия по ним я бы тоже не стал.

Хотя если у меня газовый отопительный котел «задыхается» (не хватает вытяжки и он результаты горения начинает отдавать в непосредственно в помещение, где стоит) — влажность (особенно под потолком) возрастает очень сильно и этот факт можно использовать для оповещения. Но там увеличение влажности идет сразу на несколько десятков процентов за достаточно короткое время — сложно такое пропустить.

P.S. котел оборудован собственной штатной системой защиты от всего, что с ним может случиться и сам «встанет», когда поймет, что с вытяжкой проблемы, но случается это обычно сильно позже того, как происходит описанное выше.
А каким образом котёл может выдавать результаты горения в помещение? В камеру горения поступает воздух. Клапан позволяет движение только в одну сторону. Результаты горения вытягиваются наружу по дымоходу за счёт разницы температуры или вентилятором. Газ поступает под давлением из конфорки. Если вытяжка не справляется, то в камере просто сгорит весь кислород, после чего пламя потухнет само. Самое страшное, что может случиться — это газ будет выкидываться в дымоход. И то датчики горения в бойлерах ставили даже в восьмидесятых. Может и раньше, просто не жил с более старыми бойлерами.
Котел современный — Electrolux.

У него нет принудительной вытяжки (т.е. нет вентилятора, который выдувает продукты горения в вытяжную трубу).

Из-за непродуманной системы вентиляции (плохая приточная вентиляция, недостаточно утепленная вытяжная труба) бывает такое, что в вытяжной трубе (особенно при сильных морозах) воздушный поток «опрокидывается» — со всеми вытекающими.
При этом кислород в область горелки подается и она не сразу гаснет, но вот продукты горения (вода и углекислота) начинают сочиться откуда только могут, что и приводит к соответствующему эффекту.

Безусловно, это аварийная работа котла (и это мониторится не только самим котлом, но и моими «поделками»: мониторятся температуры в доме, температуры батарей, влажность и температура в помещении, где стоит котел (там повыше этот датчик стоит для этих целей), дополнительно к котлу подключен хронотермостат (для комфорта) и параллельно ему еще одна «поделка», которая управляется СМС-командами (если требуется ввести «ручное» управление котлом) и т.п.).
Котел можно с помощью соответствующей СМС перезапустить (по питанию).
Спасибо, довольно интересный случай. Немного интересуюсь, так как хороший приятель работает инжинером в British Gas и часто слышу истории, но "чтобы начинают сочиться откуда только могут" ещё не помню.
Так внутри DHT22 вроде как раз и стоит DS18B20 + аналоговый датчик влажности + микросхемка с обвязкой. И показания у них сходятся (десять DS18B20 и два DHT22 при комнатной температуре показывают с разницей максимум +- 0.2 градуса)

upd: кстати, $10 за DHT22 дороговато, их на ебее по $5 продают с бесплатной доставкой.
Неплохое продолжение статьи про взаимодействие DS18B20 и Малинки, теперь и с DHT22. Ещеб протокол передачи показаний на карту добавили.
Ух ты! Странно, что не было ещё отдельного поста про cosm.
Я не Cosm имел ввиду вообще-то, но тож поддерживается
Отлично.

Только было бы здорово, если бы показали, что именно вы модифицировали в С Adafruit_DHT_Driver и почему. Кстати, авторам отписали?
  bcm2835_gpio_write(pin, HIGH);
  usleep(500000); // 500 ms
  bcm2835_gpio_write(pin, LOW);

заменен на
  bcm2835_gpio_write(pin, HIGH);
  usleep(100); // 500 ms
  bcm2835_gpio_write(pin, LOW);

Остальные изменения не принципиальны. Разработчики в курсе.
Попробовал повторить, на моем Raspberry+DHT22 завелось только с несколькими изменениями в коде. Если интересуют могу выслать. Для себя понял что связка Raspberry+DHT работает крайне неудовлетворительно, очень велик процент ошибок. Для уверенного снятия результатов с этого датчика — жизненно необходим какой нибудь контроллер. На stm32 за пол года измерений раз в 10 минут ошибок пока не видел, а тут каждое 5-10 измерение в топку. Для ради баловства подходит.
Вышлите мне, пожалуйста. Купил DHT22 (как раз для баловства)
Плюсую к нестабильности… Вот сижу и не могу завести никак… всё поставил уже и прозвонил… Новую версию от адафрута заюзал… и нифига… мусор летит и то не с первого раза даже
Я разобрался со своей проблемой. Вот новая версия библиотеки от адафрута github.com/adafruit/Adafruit_Python_DHT
Там в файле pi_dht_read.c есть такой код в как-бы-реалтайм области

 // Set pin low for ~20 milliseconds.
  pi_mmio_set_low(pin);
  busy_wait_milliseconds(20);

  // Set pin at input.
  pi_mmio_set_input(pin);
  // Need a very short delay before reading pins or else value is sometimes still low.
  for (volatile int i = 0; i < 50; ++i);

  // Wait for DHT to pull pin low.


Если проверить принтом насколько уровень 'still low', то легко убедиться что он действительно LOW. У меня начало работать с цифрой 70. думаю переписать на проверку этого уровня цикличную

P.S. Пошел разбираться что такой пул реквест и как его сделать…

Вот рабочая строчка вместо for():
while (!pi_mmio_input(pin));

UFO just landed and posted this here
Для запуска под Raspberry Pi 2 потребовалось использовать последнюю версию библиотеки bcm2835 (на текущий момент это 1.50). Из дополнительных плюсов — версия 1.50 не требует root для работы с GPIO.
Sign up to leave a comment.

Articles

Change theme settings