Датчиков существует великое множество. Начиная от температуры, заканчивая какими-нибудь специфическими датчиками паров бензола или этанола 🙂
Для минимальной картины окружающей среды нам надо знать: температуру, влажность, давление. Не помешало бы еще знать: осадки, силу и направление ветра, уровень CO2, освещенность, уровень шума. Продолжать можно еще долго, но лучше начать с малого и ограничиться для начала минимумом.
Датчики температуры в-общем и целом бывают аналоговые и цифровые.
Подключение датчика LM35 к Arduino:
Вот характеристики из даташита:
- Точность измерений: ± 0.5°C (при 25°C)
- Диапазон измерений: −55°C to 150°C
Подключение датчика LM35 к Arduino
Скетч также не представляет из себя ничего сложного:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//объявляем переменные float tempC; int tempPin = 0; void setup() { Serial.begin(9600); } void loop() { tempC = analogRead(tempPin); //читаем значение с сенсора tempC = (5.0 * tempC * 100.0)/1024.0; //конвертируем в температуру Serial.print((byte)tempC); //выводим температуру в Serial Monitor delay(1000); //ждём 1 секунду } |
Теперь, запустив монитор последовательного порта и выставив скорость 9600, можно увидеть температуру, однако в реальности точность измерений оставляет желать лучшего... Если интересно, вот тут есть способ как улучшить точность измерений, но с изменением диапазона.
Подключение датчика DHT11 и DHT22 к Arduino:
Теперь перейдём к цифровым датчикам, а именно к датчикам DHT11 и DHT22. Эти датчики умеют измерять не только температуру, но и относительную влажность.
Разберемся подробнее в их технических характеристиках:
Характеристика | DHT11 | DHT22 |
внешний вид | ||
напряжение питания | 3,3 - 5,5 В | 3,3 - 5,5 В |
потребление в режиме ожидания | 0 - 150 мкА | 0 - 50 мкА |
потребление в режиме измерения | 0,5 - 2,5 мА | 1 - 1,5 мА |
диапазон измерения температуры | от 0 0С до 50 0С | от -40 0С до 80 0С |
точность измерения температуры | ± 2 0С | ± 0,5 0С |
диапазон измерения отн. влажности | 20 - 90% RH | 0 - 100% RH |
точность измерения отн. влажности | ± 5% RH | ± 2% RH |
время отклика | 2 сек. | 2 сек. |
примерная стоимость | от 0,7$ | от 2,9$ |
Отличные датчики, но меня смутил диапазон измерений температуры и точность у датчика DHT11 и поэтому, несмотря на цену в 4 раза выше, я купил DHT22.
Распиновка (pinout) датчиков DHT11 и DHT22 совпадает:
Слева направо:
- Питание
- Данные
- не используется
- Земля
Между 1 и 2 ножкой должен быть подключен резистор номиналом 10кОм.
Подключение датчика DHT22 к Arduino (как и подключение датчика DHT11 к Arduino) не представляет никакого труда. Вот схема подключения:
За работу с этим датчиком отвечает библиотека "DHT" последнюю версию которой можно скачать отсюда.
Открываем пример из библиотеки под названием DHTtester:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// Example testing sketch for various DHT humidity/temperature sensors // Written by ladyada, public domain #include "DHT.h" #define DHTPIN 2 // what pin we're connected to // Uncomment whatever type you're using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); } void loop() { // Wait a few seconds between measurements. delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius float t = dht.readTemperature(); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); } |
Если Вы подключили датчик как на схеме и использовали датчик DHT22, тогда у Вас всё должно заработать! Если Вы используете не DHT22, тогда Вам нужно раскомментировать соответствующие строки вот в этом месте скетча:
1 2 3 4 |
// Uncomment whatever type you're using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) |
На Serial monitor Вы должны получить вот такой результат:
Вот и всё на сегодня! Скоро продолжим на XDomus.ru