17.04.2013

ArduinoIDE 1.0.4

Новая ArduinoIDE 1.0.4 вышла 11.03.2013, и почти весь ее смысл - исправление ошибок.

Лично мне видится три главных момента:

  • Добавлена новая библиотека GSM, для работы с Arduino GSM Shield. С ее помощью можно не только передавать данные с использованием конструкции Client/Server по аналогии с Ethernet, но и отправлять/получать SMS-сообщения, а также голосовые вызовы;
  • Все драйверы собраны в один пакет, с цифровой подписью для Windows 8. По идее, это упрощает процесс установки, избавляя вас от лишних вопросов и подозрений со стороны операционной системы;
  • Официально исправлены накопившиеся (видимо, за все время) ошибки в бутлоадере Mega2560. Ошибки это были знаменитые, ко многим давно существовали патчи - взять, например, ошибку с незагрузкой скетча, в котором встречается комбинация "!!!". Разумеется, аналогичные изменения войдут и в бутлоадер, прошитый во Freeduino Mega2560.
Впереди - слияние ветки 1.5.x и 1.0.x, но когда именно оно произойдет, пока сказать трудно...

03.04.2013

Температура и влажность (2)

У датчика измерения температуры и влажности DHT-11 (о его возможностях и стыковке с Arduino я подробно писал в предыдущей статье) есть "старший брат", сенсор DHT-22 (часто под этим названием фигурирует AM2302, производимый фирмой AOSONG):



Несколько проигрывая DHT11 по габаритам, этот датчик имеет более широкий диапазон измеряемых величин и обладает большей точностью. Ранние версии даташитов объясняют, что измерением температуры занимается встроенный DS18B20, однако в последних вариантах его заменили на термистор.

Сравнительная таблица из предыдущей статьи должна быть дополнена так:

ПоказательDS18B20DHT11DHT22
Допустимый диапазон t,°C-55..+1250..+50-40..+80
Погрешность измерения t, min±0.5°C@-10..+85°C±2°C@0..+50°C±0.5°C@+15..+55°C
Погрешность измерения t, max±2°C±2°C±1°C
Разрешение шкалы t,°C0.5/0.25/0.125,/0.062510.1
Допустимый диапазон RH, %-20..950..99.9
Погрешность измерения RH, min-±4% +25°C±2% +25°C
Погрешность измерения RH, max-±5%±4%
Разрешение шкалы RH, %-10.1

Точность измерения относительной влажности возрастает для значений меньших 12% и больших 90%, а также имеет некоторый гистерезис. Считывание очередного значения возможно не чаще, чем один раз в 2 секунды. Более подробно можно прочесть в документации: AM2302.pdf.

Подключение DHT22 к Arduino выглядит аналогично DHT11. Пины имеют идентичное назначение, схема подключения не отличается, да и протокол общения с датчиком, по сути, тот же.




Отличия начинаются в трактовке считываемых значений. Мы по-прежнему получаем от сенсора по 40 бит:
  1. Старшая часть значения влажности;
  2. Младшая часть значения влажности;
  3. Старшая часть значения температуры;
  4. Младшая часть значения температуры;
  5. Контрольная сумма.
Значение относительной влажности и температуры выдаются в десятых долях, например: если прочитано 010Dh, то эту цифру надо перевести в десятичный формат (269), а затем разделить на 10 - получится 26,9. И, кстати, отрицательные значения температуры кодируются единицей в старшем разряде считываемого 16-битного значения: 1000 0000 0110 0101 означает -10,1 °C.


Существует несколько вариантов библиотек для Arduino (и вы можете написать свой собственный!), вот наиболее известные:
В примере ниже я использую именно последний вариант, он простой и универсальный (работает не только с DHT22, но и с DHT11).  Архив с библиотекой надо распаковать в каталог sketchbook/libraries и перед загрузкой скетча в Arduino не забыть исправить значение константы DHT22_PIN на номер пина, к которому подключен вывод DATA датчика:

#include <dht.h>

dht DHT;

#define DHT22_PIN 6

void setup()
{
  Serial.begin(115200);
  Serial.println("DHT TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT_LIB_VERSION);
  Serial.println();
  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}

void loop()
{
  // READ DATA
  Serial.print("DHT22, \t");
  int chk = DHT.read22(DHT22_PIN);
  switch (chk)
  {
    case DHTLIB_OK:  
                Serial.print("OK,\t"); 
                break;
    case DHTLIB_ERROR_CHECKSUM: 
                Serial.print("Checksum error,\t"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: 
                Serial.print("Time out error,\t"); 
                break;
    default: 
                Serial.print("Unknown error,\t"); 
                break;
  }
  // DISPLAY DATA
  Serial.print(DHT.humidity, 1);
  Serial.print(",\t\t");
  Serial.println(DHT.temperature, 1);

  delay(2000);
}


После старта программы надо вызвать окно Serial Monitor-а (Ctrl+Shift+M):



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

Диапазон питания датчика составляет +3.3...+5.5В, поэтому его можно с успехом использовать с трехвольтовыми Arduino и конструировать довольно компактные и малопотребляющие конструкции - например, при помощи Freeduino Pro Mini.  Рекомендуемая длина кабеля, соединяющего DHT22 с MCU при питании от 3.3В не должна превышать 100 см

Ссылки по теме: