Датчики Arduino: Подключение и Примеры
Arduino — замечательная платформа для создания устройств. Датчики позволяют взаимодействовать с окружением, измерять параметры, реагировать на изменения.
1. Температурные датчики: DS18B20 и DHT22
Измеряют температуру. DS18B20 — цифровой, 1-Wire. DHT22 — температура + влажность.
DS18B20
Интерфейс 1-Wire.
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // пин, к которому подключён датчик
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600); // инициализация последовательного порта
sensors.begin(); // запуск работы датчика
Serial.println("Датчик температуры готов");
}
void loop() {
sensors.requestTemperatures(); // запрос температуры с датчика
float tempC = sensors.getTempCByIndex(0); // получаем температуру первого датчика
Serial.print("Температура: ");
Serial.print(tempC);
Serial.println(" °C");
delay(1000); // задержка 1 секунда
}
Инициализирует один пин (2) как шину для 1-Wire датчиков.
В setup() запускает последовательный порт и инициализирует датчик.
В loop() каждые 1 секунду:
запрашивает температуру с датчика,
считывает температуру первого подключённого датчика,
выводит значение температуры в градусах Цельсия в Serial Monitor.
С этим кодом вы будете видеть температуру с DS18B20 в реальном времени.
DHT22
Температура и влажность.
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600); // инициализация последовательного порта
dht.begin();
}
void loop() {
float tempC = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(tempC) || isnan(humidity)) {
Serial.println("Ошибка чтения с DHT22!");
} else {
Serial.print("Температура: ");
Serial.print(tempC);
Serial.println(" °C");
Serial.print("Влажность: ");
Serial.print(humidity);
Serial.println(" %");
}
delay(2000); // задержка 2 секунды между измерениями
}
Инициализирует последовательный порт для вывода данных.
В loop() каждые 2 секунды:
считывает температуру и влажность,
проверяет корректность данных (isnan()),
выводит значения температуры в °C и влажности в % в Serial Monitor.
2. Датчики движения: PIR и HC-SR04
Обнаруживают движение. PIR — инфракрасный, HC-SR04 — ультразвуковой.
PIR
Реагирует на ИК-излучение.
int pirPin = 2;
void setup() {
pinMode(pirPin, INPUT);
Serial.begin(9600);
}
void loop() {
int motion = digitalRead(pirPin);
if (motion == HIGH) {
Serial.println("Motion detected!");
} else {
Serial.println("No motion");
}
delay(1000);
}
В бесконечном цикле каждую секунду считывает состояние датчика (HIGH — движение, LOW — отсутствует).
В зависимости от состояния выводит в Serial Monitor сообщение: «Motion detected!» или «No motion».
Задержка delay(1000) обеспечивает обновление раз в секунду.
HC-SR04
Измеряет расстояние ультразвуком.
const int trigPin = 9;
const int echoPin = 10;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.println(distance);
delay(1000);
}
В бесконечном цикле:
генерирует короткий импульс на триггере для запуска ультразвукового сигнала,
измеряет длительность возврата импульса через pulseIn(echoPin, HIGH),
вычисляет расстояние в сантиметрах (duration * 0.034 / 2),
выводит расстояние в Serial Monitor.
Задержка delay(1000) обеспечивает обновление измерений каждую секунду.
3. Датчики освещенности: LDR и TSL2561
Измеряют уровень света. LDR — аналоговый фоторезистор, TSL2561 — цифровой.
LDR
Меняет сопротивление от света.
int ldrPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int ldrValue = analogRead(ldrPin);
Serial.print("Light Intensity: ");
Serial.println(ldrValue);
delay(1000);
}
Инициализирует последовательный порт для вывода данных на скорость 9600 бод.
В бесконечном цикле каждую секунду:
считывает текущее значение освещённости с LDR (analogRead),
выводит значение в Serial Monitor с подписью «Light Intensity».
Задержка delay(1000) обеспечивает обновление раз в секунду.
TSL2561
Цифровой, точный.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_LOW, 12345);
void setup(void) {
Serial.begin(9600); // инициализация последовательного порта
if (!tsl.begin()) {
Serial.println("No TSL2561 found");
while (1);
}
Serial.println("TSL2561 готов к работе");
}
void loop(void) {
sensors_event_t event;
tsl.getEvent(&event); // исправлено & на &
if (event.light) {
Serial.print("Освещённость: ");
Serial.print(event.light);
Serial.println(" lux");
} else {
Serial.println("Нет данных освещённости");
}
delay(1000);
}
Инициализирует последовательный порт для вывода данных.
Проверяет наличие датчика и выводит сообщение, если он не найден.
В loop() каждую секунду:
считывает текущую освещённость в люксах (event.light),
выводит данные в Serial Monitor,
если данные отсутствуют, выводит сообщение «Нет данных освещённости».
Необходимые компоненты
- Arduino Uno/Nano
- DS18B20, DHT22, PIR, HC-SR04, LDR, TSL2561
- Резисторы (4.7 кОм для DS18B20), макетная плата
Подключение
- DS18B20: DQ → пин 2, + резистор 4.7 кОм к 5V
- DHT22: Data → пин 2
- PIR: OUT → пин 2
- HC-SR04: Trig → 9, Echo → 10
- LDR: к A0 + резистор 10 кОм к GND
- TSL2561: I2C (SDA → A4, SCL → A5)
Библиотеки
- OneWire, DallasTemperature — для DS18B20
- DHT sensor library — для DHT22
- Adafruit TSL2561 — для TSL2561
Заключение
Датчики — основа интерактивных проектов. Библиотеки и примеры упрощают работу. Экспериментируйте!
FAQ — датчики Arduino: подключение и примеры
Какие датчики совместимы с Arduino?
Arduino поддерживает множество датчиков: DS18B20 и DHT22 для температуры и влажности, PIR и HC-SR04 для движения, LDR и TSL2561 для измерения освещенности. Все они легко подключаются и имеют готовые библиотеки.
Как подключить датчик DS18B20 к Arduino?
Подключите вывод DQ к цифровому пину 2 и установите подтягивающий резистор 4,7 кОм между DQ и 5 V. Используйте библиотеки OneWire и DallasTemperature для получения данных температуры.
Чем отличается датчик DHT22 от DS18B20?
DS18B20 измеряет только температуру и использует интерфейс 1-Wire. DHT22 дополнительно измеряет влажность и передает данные по цифровому пину. Для работы применяются разные библиотеки.
Как работает датчик движения PIR?
PIR-датчик реагирует на инфракрасное излучение, исходящее от движущихся объектов. При обнаружении движения он подает высокий уровень сигнала на выходной пин, который считывается Arduino.
Как измерить расстояние с помощью HC-SR04?
Подключите Trig к пину 9, Echo — к пину 10. Отправьте короткий импульс на Trig и измерьте время возврата сигнала через Echo. Расстояние вычисляется как distance = duration * 0.034 / 2.
Можно ли использовать фоторезистор LDR для измерения освещенности?
Да, LDR подключается к аналоговому входу (например, A0) через делитель напряжения с резистором 10 кОм. Arduino считывает изменение напряжения, пропорциональное уровню света.
Какой датчик освещенности лучше выбрать — LDR или TSL2561?
LDR дешевле и проще, но менее точен. TSL2561 — цифровой сенсор с интерфейсом I2C, обеспечивающий высокую точность и измерения в люксах. Для проектов, где нужна стабильность, лучше использовать TSL2561.