Датчики Arduino: Подключение и Примеры

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 секунда
}
Подключает библиотеки OneWire и DallasTemperature для работы с DS18B20.
Инициализирует один пин (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 секунды между измерениями
}
Подключает библиотеку DHT для работы с датчиком DHT22.
Инициализирует последовательный порт для вывода данных.
В loop() каждые 2 секунды:
считывает температуру и влажность,
проверяет корректность данных (isnan()),
выводит значения температуры в °C и влажности в % в Serial Monitor.
Датчики Arduino: Подключение

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);
}
Инициализирует PIR-датчик движения на пине 2 и последовательный порт на скорости 9600 бод.
В бесконечном цикле каждую секунду считывает состояние датчика (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);
}
Инициализирует пины для ультразвукового датчика HC-SR04: триггер на пине 9 и эхо на пине 10.
В бесконечном цикле:
генерирует короткий импульс на триггере для запуска ультразвукового сигнала,
измеряет длительность возврата импульса через pulseIn(echoPin, HIGH),
вычисляет расстояние в сантиметрах (duration * 0.034 / 2),
выводит расстояние в Serial Monitor.
Задержка delay(1000) обеспечивает обновление измерений каждую секунду.
Датчики Arduino: Подключение

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);
}
Настраивает аналоговый пин A0 для считывания значения с фоторезистора (LDR).
Инициализирует последовательный порт для вывода данных на скорость 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);
}

Подключает библиотеку для работы с датчиком освещённости TSL2561 через I2C.
Инициализирует последовательный порт для вывода данных.
Проверяет наличие датчика и выводит сообщение, если он не найден.
В 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.