MicroPi > Мини ПК > Arduino > Arduino проекты
Датчик вибрации для Ардуино или «Vibration Sensor (SW-420 v1.1)» собран на основе датчика вибрации пружинного типа SW-420 и компаратора LM393, этот модули из серии Grove System. Grove модуль был предоставлен компанией Seeed Studio, модуль можно приобрести тут: Grove — Vibration Sensor (SW420) — Seeed Studio. Принцип действия датчика весьма прост. В состоянии покоя датчик SW-420 находится в разомкнутом состоянии и ток через него не …
Перейти
BMP280 — это цифровой датчик от Bosch Sensortec позволяющий получить текущие значения атмосферного давления и температуры окружающей среды.
Этот датчик специально разработан для мобильных приложений, где малый размер и низкое энергопотребление очень важны.
В данной статьи увидим, как подключить датчик атмосферного давления BMP280 к Arduino по I2C и SPI, какие библиотеки установить и приведём несколько …
Перейти
Для измерения освещенности отлично подходят модули Gy-30 и Gy-302 на базе сенсора BH1750.
Сенсор предназначен для измерения фонового освещения, имеет высокую чувствительность, а спектр чувствительности совпадает с кривой чувствительности человеческого глаза. Подключается BH1750 к Arduino по распространенному I2C интерфейсу.
Внутренняя логика BH1750 избавляет от необходимости каких-либо сложных вычислений, поскольку он напрямую выводит значимые цифровые данные в люксах (лк). С …
Перейти
TSL2561 — это цифровой датчик освещенности с интерфейсом I2C/TWI. Более подробное описание этого модуля можете найти на странице TSL2561 — Цифровой датчик освещенности (модуль GY-2561).
А в этом посте мы подключим по I2C датчик TSL2561 к Arduino, установим необходимую библиотеку и будем выводить значения в последовательный порт компьютера.
С помощью TSL2561 можно изготовить самодельный люксметр на Ардуино. …
Перейти
nRF24L01 один из самых популярных беспроводных модулей для интернета вещей (IoT).
Подключение модуля nRF24L01+ к Arduino позволит организовать многоканальную защищенную связь между Arduino и устройствами на расстоянии.
Рассмотрим, как наладить связь между двумя или несколько плат Ардуино по радиоканалу. Установка библиотеки RF24 Работать с nRF24L01+ можно с помощью библиотеки RF24 — довольно популярная и удобная …
Перейти
Рано или поздно, в создаваемых проектах Arduino появится необходимость дистанционного управления.
Одним из самых бюджетных решений является использование радиоприемника и радиопередатчика, такими являются WL101-341 и WL102-341.
Подключаются WL101-341 и WL102-341 к Arduino очень просто, библиотеки уже существуют (к примеру RadioHead), так что не составит большого труда обмениваться данными между ардуинками. Простейший пример их использования вы …
Перейти
Двухосевой джойстик (KY-023, PS2) — это модуль манипулятор, состоявший из двух потенциометров и одной тактовой кнопкой, позволяющий пользователю управлять различными устройствами (шасси, роботами), например для дистанционного управления двух-координатным поворотным устройством видеокамеры, которое можно вращать в двух плоскостях. Технические характеристики KY-023 Напряжение питания: 5 В Поворот ручки: 360° Размеры: 40 мм х 26 мм х 32 …
Перейти
DHT12 — это улучшенная версия датчика температуры и влажности DHT11 с интерфейсом I2C/TWI. Более подробное описание этого модуля можете найти на странице DHT12 — I2C датчик влажности и температуры. А в этом посте мы подключим по I2C датчик DHT12 к Arduino, установим необходимую библиотеку и будем выводить значения в последовательный порт компьютера и на дисплей …
Перейти
Ультразвуковой дальномер HC-SR04 предназначен для измерения расстояния от устройства до объекта. Работа модуля основана на принципе эхолокации. Модуль посылает ультразвуковой сигнал и принимает его отражение от объекта.
Измерив время между отправкой и получением импульса, не сложно вычислить расстояние до препятствия.
Поскольку в основе работы устройства используется ультразвук, модуль плохо подходит для определения расстояния до звукопоглощающих объектов. …
Перейти
Подключить LCD1602 к Arduino (или любой другой LCD на базе микросхем HD44780) не всегда удобно, потому что используются как минимум 6 цифровых выходов. LCD I2C модули на базе микросхем PCF8574 позволяют подключить символьный дисплей к плате Arduino всего по двум сигнальным проводам (SDA и SCL). PCF8574 — I2C модуль для LCD на базе HD44780 Микросхема PCF8574/PCF8574T …
Перейти
Электронные конструкторы и наборы, контроллеры, модули и датчики
Опубликовано: 23.04.2018
![]() |
Что такое Arduino?Платформа Ардуино пользуется огромной популярностью во всем мире благодаря удобству и простоте языка программирования, а также открытой архитектуре и программному коду. Плата Arduino состоит из микроконтроллера Atmel AVR и элементов обвязки для программирования и интеграции с другими схемами. Подробнее … |
![]() |
Первое включение. Установка Arduino IDEРазработка собственных приложений на базе плат, совместимых с архитектурой Arduino, осуществляется в официальной бесплатной среде программирования Arduino IDE. Среда предназначена для написания, компиляции и загрузки собственных программ в память микроконтроллера. Подробнее … |
![]() |
Умный дом и интернет вещей. Элементы, решения, системы управления, проекты Самый главный компонент любой «умной» системы – его контроллер. Контроллер предназначен для получения информации и управления «умным» домом. В нашем наборе два контроллера! Это плата Arduino MEGA и модуль NodeMCU v3 Lua WI-FI ESP8266 CH340. Вы можете выбрать любой из них. Подробнее … |
![]() |
Arduino проект 34: Организация подключения к сети Интернет с помощью модуля Ai-Thinker A6 В предыдущих главе мы рассмотрели мы сделали большие шаги построения «умного дома» – оснастили его датчиками и исполнительными устройствами и создали и обеспечили определенную степень автоматизации для создания комфорта и безопасности. Теперь пришло время сделать наш «умный дом» устройством IoT (Интернета вещей), чтобы получить доступ к нему для мониторинга и управления из любой точки мира по сети интернет. Организуем доступ контроллеров нашего дома к сети интернет. Подробнее … |
![]() |
Arduino проект 33: Модуль GPS. Принцип работы, подключение, примерыВ этом эксперименте рассмотрим работу модуля GPS-приемника, позволяющего определять наше местоположение с помощью глобальной системы GPS, и подключение данного приемника к плате Arduino. GPS (Global Positioning System) – это система, позволяющая с точностью не хуже 100 м определить местоположение объекта. Подробнее … |
![]() |
Arduino проект 32: Беспроводная связь. Модуль GSM/GPRS SIM900 |
37 датчиков за $37 для Arduino и Raspberry Pi
Какие бывают датчики для Arduino и Raspberry Pi? Сколько они стоят? Предлагаем обзор интересного дешевого набора из 37 датчиков за $37.
Разные датчики. Фото с DX.com
Изучая Arduino или Raspberry Pi, самое интересное, что можно сделать (после мигания светодиодами, подключения потенциометра, кнопки, двигателя и др.) — это, конечно, использование датчиков. Датчики позволяют определять, что происходит во внешней среде, и действовать на основе этой информации. Датчики, наверное, можно назвать органами чувств робота.
Какие бывают датчики для Arduino и Raspberry Pi?
Датчиков, называемых также сенсорами, существует огромное множество и в первую очередь они имеют разное назначение.
Разные датчики. Фото с DX.com
Основные датчики (по назначению):
- Датчик давления — используется для обнаружения физического давления, например, при щипках, сжимании, толчках.
- Фотоэлементы — используется для измерения уровня освещенности, обнаружения простого объекта по принципу светлый/темный
- Датчик температуры — используется для определения температуры окружающей среды или, например, жидкости
- Датчик вибрации — используется для обнаружения движения / вибрации и ориентации
- Датчик движения — используется для обнаружения двигательной активности, таких как животных или людей
- Термопары — используется для измерения температуры, как правило, выше 150°C.
- ИК-приемники — используется для обнаружения инфракрасных-сигналов от пульта дистанционного управления.
Это далеко не все по назначению датчики. Существуют также датчики определения влажности, огня, дыма и т.д. В принципе, можно подобрать датчики практически под любую задачу.
Все датчики имеют свои собственные методы взаимодействия. Некоторые можно просто подключить к плате, а подключение других требует дополнительных манипуляций. Например, могут потребоваться резисторы или дополнительные источники питания.
Датчики отличаются по типу сигнала на выходе: аналоговый или цифровой.
Выбирая датчики, можно заметить, что чаще всего упоминается совместимость с Arduino и не упоминается совместимость с Raspberry Pi.
Если датчик выдает цифровой сигнал, то его можно подключать к GPIO-портам Raspberry Pi.
Если же датчик выдает аналоговый сигнал, то подключить напрямую такой датчик к Raspberry Pi можно только с помощью аналого-цифрового преобразователя (АЦП), который часто включают в платы расширения Raspberry Pi.
Разные датчики могут сильно отличаться по цене, стоимость датчика может составлять $1 или $5, датчики с очень большой точностью определения сигналов могут стоить значительно дороже.
Набор из 37 датчиков для Arduino
В китайских интернет-магазинах очень популярен дешевый набор из 37 модулей (преимущественно различных датчиков) для Arduino. Например:
Доставка в обоих магазинах бесплатная.
Набор из 37 датчиков. Фото с Aliexpress
Этот набор содержит датчики и другие модули, позволяющие реализовать практически любую идею начинающего изучать Arduino, и является хорошим дополнением к наборам Arduino Starter Kit (о том, как выбрать Arduino начинающему и о наборах Arduino Starter Kit мы писали в статье).
Click To Tweet
Подробнее про входящие в этот набор датчики мы напишем отдельно. А сейчас приводим список компонентов, входящий в набор:
- Пассивный зуммер KY-006
- Активный зуммер KY-012
- Двухцветный светодиод KY-029
- Трехцветный светодиод KY-011
- Трехцветный светодиод KY-009
- Трехцветный светодиод KY-016
- Семицветный светодиод KY-034
- Датчик удара KY-031
- Вибровыключатель KY-002
- Фоторезистор KY-018
- Фоторезистор-выключатель KY-010
- Кнопка KY-004
- Датчик наклона KY-020
- Датчик наклона KY-017
- Датчик инфракрасного излучения KY-005
- Инфракрасный датчик KY-022
- Датчик температуры KY-013
- Датчик температуры KY-028
- Датчик температуры KY-001
- Датчик температуры и влажности KY-015 (сенсор DHT11. Схема подключения здесь)
- Датчик звука KY-037
- Датчик металла KY-036
- Датчик сердцебиения KY-039
- Датчик пламени KY-026
- Геркон KY-021
- Магнитный датчик KY-003
- Магнитный датчик KY-035
- Датчик магнитного поля KY-025
- Датчик магнитного поля KY-024
- Датчик магнитного поля KY-033
- Модуль световых эффектов «магическая чашка» KY-027
- Датчик угла поворота (энкодер) KY-040
- Датчик для избегания препятствий KY-032
- Датчика звука KY-038
- Лазерный модуль KY-008
- Реле KY-019
- Джойстик KY-023
Все цены приведены по состоянию на день выхода статьи.
Arduino и HC-SR501 (датчик движения)
Сегодня мы будем знакомиться с модулем, позволяющим отслеживать движение – пироэлектрическим инфракрасным (PIR) датчиком движения.
Для примера будем использовать модуль HC-SR501, как один из самых популярных и совместимых с Arduino.
Чаще всего он используется в устройствах, предназначенных для управления освещением, и для этого может использоваться вкупе с датчиком освещённости.
Этот модуль небольшой по размерам, потребляет малый ток и очень простой в использовании, благодаря чему его можно использовать и в устройствах с автономным питанием.
Характеристики датчика по даташиту:
- Широкий диапазон рабочего напряжения: 4,5 – 20 В постоянного тока;
- Потребляемый ток покоя: ≈50 мкА;
- Напряжение на выходе: 3.3 В;
- Рабочая температура: от -15° C до 70° C;
- Размеры: 32*24 мм;
- Два режима работы;
- Максимальный угол обнаружения – 110°;
- Максимальная дистанция срабатывания – от 3 до 7 м (регулируется); При температуре более 30° C это расстояние может уменьшаться.
На модуль установлена линза Френеля, которая фокусирует инфракрасные сигналы на пироэлектрический датчик под названием 500BP. Датчик называется PIR (Passive Infra-Red). Пассивный он потому, что для обнаружения движения не используется какая-либо дополнительная энергия, кроме той, что испускается самими объектами.
500BP состоит из двух чувствительных элементов. Управляющая микросхема модуля регистрирует изменения сигналов от обоих элементов и по характеру их изменения обнаруживает движение объектов, испускающих инфракрасные сигналы (живых организмов).
Модуль HC-SR501 имеет 3 вывода:
- Питание (VCC);
- Земля (GND);
- Выход 3v3 (OUT).
Сразу после подачи питания несколько секунд модуль будет калиброваться, в это время возможны ложные срабатывания. Примерно через минуту он перейдёт в режим ожидания. При срабатывании датчика на выходе появляется логическая единица, напряжение – 3.3 вольта.
Изменения этого сигнала зависят от выбранного режима работы. Он меняется перемычкой (отмечена на фото с подписями какой режим будет выбран). Если выбран H– при нескольких срабатываниях подряд на выходе датчика остаётся высокий уровень, при L– для каждого срабатывания будет подан свой импульс.
Также на самом модуле можно найти два переменных резистора, регулирующих дистанцию обнаружения движения (Distance Adjust) и время, в течение которого на выходе будет логическая единица (Delay Time Adjust). Дистанция регулируется в пределах 3 – 7 метров, задержка от 5 до 300 секунд.
И ещё немного о его особенностях. При работе с датчиком следует избегать источников света и тепла, закрывающих поверхность объектива модуля. Ветер также может создавать помехи. На большем расстоянии датчик более чувствителен.
Итак, мы прошли теорию, настало время проверить датчик в работе. Первым этапом станет его подключение к Arduino:
- GND подключаем к одноимённому выводу Arduino;
- VCC к 5V;
- OUT подключим к A0.
Подключение выхода модуля к аналоговому пину связано с тем, что цифровые пины Arduino работают с пятивольтовой логикой, а наш модуль рассчитан на 3.3 В. В скетче за логическую единицу мы примем значение более 500 на аналоговом порту. Это будет около 2.44 В и более.
Схема подключения hc-sr501:
Теперь загружаем в Arduino следующий скетч и открываем монитор порта.
Код для проверки работы датчика /*
* PIR Sensor[PIN GND] -> Arduino Nano[PIN GND]
* PIR Sensor[PIN 5V] -> Arduino Nano[PIN 5V]
* PIR Sensor[PIN OUT] -> Arduino Nano[PIN A0]
*/
void setup() {
//Установить соединение с монитором порта
Serial.begin(9600);
}
void loop() {
//Считываем пороговое значение с порта А0
if(analogRead(A0) > 500) {
//Сигнал с датчика движения
Serial.println(«Есть движение!»);
}
else {
//Нет сигнала
Serial.println(«Всё тихо…»);
}
}
* PIR Sensor[PIN GND] -> Arduino Nano[PIN GND] * PIR Sensor[PIN 5V] -> Arduino Nano[PIN 5V] * PIR Sensor[PIN OUT] -> Arduino Nano[PIN A0] //Установить соединение с монитором порта //Считываем пороговое значение с порта А0 if(analogRead(A0) > 500) { //Сигнал с датчика движенияSerial.println(«Есть движение!»); Serial.println(«Всё тихо…»); |
Этот скетч можно использовать лишь для проверки работы датчика, для практического применения он слабо годится.
Теперь расширим функционал устройства, добавив реле и лампу на 220 В.
Реле подключим к 3 цифровому пину Arduino. Питание – 5V.
Общий провод (COM) реле подключаем к фазе 220 В, NO (Normally Open, нормально разомкнутый контакт, пока через реле не потечёт ток, он будет разомкнут) подключаем к лампе, другой контакт лампы – к нолю 220 В.
Теперь немного переделаем скетч, убрав отправку данных в последовательный порт и добавив управление реле.
Код для работы датчика с реле и лампой /*
* PIR Sensor[PIN GND] -> Arduino Nano[PIN GND]
* PIR Sensor[PIN 5V] -> Arduino Nano[PIN 5V]
* PIR Sensor[PIN OUT] -> Arduino Nano[PIN A0]
* Relay Module[PIN IN] -> Arduino Nano[PIN 3]
*/
//relout — пин модуля реле
const int relout = 3;
//trigger — флаг срабатывания датчика движения
boolean trigger = false;
void setup()
{
/*Стандартная процедура инициализации порта на который подключен модуль реле.
ВАЖНО!!! — чтобы модуль реле оставался в первоначально выключенном состоянии,нужно записать в порт входа/выхода значение HIGH, это позволит избежать ложных «перещелкиваний»,
и сохранит состояние реле таким, каким оно было до включения всей схемы в работу*/
pinMode(relout, OUTPUT);
digitalWrite(relout, HIGH);
//задержка в минуту для инициализации датчика
delay(60000);
}
void loop()
{
//Считать значение с аналогового порта А0
//Если значение выше 500
if(analogRead(A0) > 500)
{
//Установить флаг срабатывания датчика движения
if(!trigger)
{
trigger = true;
}
}
else
{
//Снять флаг срабатывания датчика движения
trigger = false;
//Выключить реле
digitalWrite(relout, HIGH);
}
//Пока флаг срабатывания датчика движения установлен
while(trigger)
{
//Включить реле
digitalWrite(relout, LOW);
if(analogRead(A0) > 500)
{
//Установить флаг срабатывания датчика движения
if(!trigger)
{
trigger = true;
}
}
else
{
//Снять флаг срабатывания датчика движения
trigger = false;
//Выключить реле
digitalWrite(relout, HIGH);
}
}
}
* PIR Sensor[PIN GND] -> Arduino Nano[PIN GND] * PIR Sensor[PIN 5V] -> Arduino Nano[PIN 5V] * PIR Sensor[PIN OUT] -> Arduino Nano[PIN A0] * Relay Module[PIN IN] -> Arduino Nano[PIN 3]//relout — пин модуля реле//trigger — флаг срабатывания датчика движения /*Стандартная процедура инициализации порта на который подключен модуль реле. ВАЖНО!!! — чтобы модуль реле оставался в первоначально выключенном состоянии,нужно записать в порт входа/выхода значение HIGH, это позволит избежать ложных «перещелкиваний», и сохранит состояние реле таким, каким оно было до включения всей схемы в работу*/ digitalWrite(relout, HIGH); //задержка в минуту для инициализации датчика //Считать значение с аналогового порта А0 //Установить флаг срабатывания датчика движения //Снять флаг срабатывания датчика движения digitalWrite(relout, HIGH); //Пока флаг срабатывания датчика движения установлен digitalWrite(relout, LOW); //Установить флаг срабатывания датчика движения //Снять флаг срабатывания датчика движения digitalWrite(relout, HIGH); |
Длительность работы лампы после срабатывания датчика и дальность обнаружения движения будет регулироваться переменным резистором на датчике. В скетче ничего менять не надо.
При желании датчик можно подключать напрямую к реле без использования микроконтроллера. Однако в варианте с микроконтроллером возможна более гибкая настройка и простое расширение функциональности.
- #define piro 8
#define mosfet 9
#define foto A0
#define pot A1 - #define switch1 7
- #define nightVAL 200
#define minPWM 5 - #define smooth 7
- byte pwm;
- Bounce debouncer = Bounce();
- void setup() {
- pinMode (piro, INPUT);
pinMode (mosfet, OUTPUT); - pinMode (switch1, INPUT_PULLUP);
debouncer.attach(switch1);
debouncer.interval(5);
- TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09; - }
- void loop() {
- debouncer.update();
- pwm = map (analogRead (pot), 0, 1023, 0, 255);
if (digitalRead (switch1) == LOW) if (debouncer.fell()) { for (int i1 = 0; i1 = 0; i2–) { analogWrite (mosfet, i2); delay (smooth); } } else if (debouncer.
read() == HIGH) { if ((analogRead (foto) < nightVAL) && (digitalRead (piro) == HIGH)) { analogWrite (mosfet, minPWM);
- }
- else if (digitalRead (piro) == LOW) { digitalWrite (mosfet, LOW); } }
- }
- По вашей аналогии добавил пины и переименовал 8, но что то не то?
- #include
- #define piro_1 8
#define piro_2 2
#define piro_3 4
#define piro1 10
#define mosfet 9
#define foto A0
#define pot A1 - #define switch1 7
- #define nightVAL 200
#define minPWM 5 - #define smooth 7
- byte pwm;
- Bounce debouncer = Bounce();
- void setup() {
- pinMode (piro_1, INPUT);
pinMode (piro_2, INPUT);
pinMode (piro_3, INPUT);
pinMode (mosfet, OUTPUT); - pinMode (switch1, INPUT_PULLUP);
debouncer.attach(switch1);
debouncer.interval(5);
- TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09; - }
- void loop() {
- debouncer.update();
- pwm = map (analogRead (pot), 0, 1023, 0, 255);
if (digitalRead (switch1) == LOW) if (debouncer.fell()) { for (int i1 = 0; i1 = 0; i2–) { analogWrite (mosfet, i2); delay (smooth); } } else if (debouncer.
read() == HIGH) { if ((analogRead (foto) < nightVAL) && (digitalRead (piro_1) == HIGH)) if ((analogRead (foto) < nightVAL) && (digitalRead (piro_2) == HIGH)) if ((analogRead (foto) < nightVAL) && (digitalRead (piro_3) == HIGH)) { analogWrite (mosfet, minPWM);
- }
- else if (digitalRead (piro_1) == LOW) else if (digitalRead (piro_2) == LOW) else if (digitalRead (piro_3) == LOW) { digitalWrite (mosfet, LOW); } }
- }
Пишет мне что эти строчки неправильно:
else if (digitalRead (piro_2) == LOW) else if (digitalRead (piro_3) == LOW)
Я вас прошу помочь в этом вопросе!!!
Спасибо!
Ответить