Урок 13. arduino и реле

Оглавление

Таймер

Диапазон таймера можно регулировать вверх или вниз от 14400 с помощью переменной задержки.

Максимальное время ожидания составляет примерно 4 часа. Также можно настроить уровень освещенности, при котором срабатывает реле. Изначально значение переменной (яркость) было установлено на 5, но при повышении этого значения свет будет активироваться при более высоком уровне освещенности.

С другой стороны, понижение его значения заставит комнату темнеть, прежде чем свет станет более активным. Однако не следует устанавливать значение параметра выше 14.

Тайминг основан на функции задержки, которая работает в миллисекундах. Потенциометр времени представляет аналоговый вход, считанный в переменную .

Затем он преобразуется с помощью функции » map » в диапазон от 0 до 100. Вы можете попробовать варьировать диапазон до (0-50) с помощью этого кода:

или (0-250) с помощью этого:

Расположите фоторезистор так, чтобы он не находился в прямой линии со светом, когда он включается. Вы можете настроить чувствительность фоторезистора, как упоминалось ранее, с помощью переменной .

Скетч управления реле с датчиком движения

В реальных проектах изменение состояния реле должно происходить в ответ на какую то реакцию среды. Например, в ответ на сигнал сработавшего датчика движения можно включить свет, замкнув цепь с помощью реле. В данном скетче мы рассмотрим такой вариант подключения.

Схема подключения реле

Следует понимать, что в реальных проектах обходятся вообще без ардуино – просто подключая сигнальный выход датчика к реле.

Пример скетча

В данном примере мы добавим в цикл loop проверку состояния PIR датчика с помощью функции digitalRead (). Если мы получаем HIGH, то это означает сработку датчика и мы выполняем действие – включаем реле. Если к нему присоединить лампочку, то она загорится. Но, как и в прошлом примере, можно просто послушать щелчки.

/*
   Скетч для управления реле ардуино с помощью PIR датчика

   PIN_RELAY содержит номер пина, к которому подключено реле, которым мы будем управлять
   PIN_PIR содержит номер пина с подключенным PIR-сенсором

   В функции setup устанавливаем начальное положение реле (закрытое)
   В теле функции loop проверяем наличия высокого уровня сигнала от датчика с помощью функции digitalRead

   Для отладки текущее значение датчика выводим в окно монитора порта
*/


#define PIN_RELAY 8 // Определяем пин, используемый для подключения реле
#define PIN_PIR 5 // Определяем пин, используемый для подключения PIR-датчика

// В этой функции определяем первоначальные установки
void setup()
{
  Serial.begin(9600);
  pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход
  digitalWrite(PIN_RELAY, HIGH); // Выключаем реле - посылаем высокий сигнал
}
void loop()
{

  int val = digitalRead(PIN_PIR); // Считваем значение с датчика движения в отдельную переменную

  if (val == HIGH) {
    Serial.println("Датчик сработал");
    digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала
  } else {
    digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала
  }

  delay(1000); // Проверяем значения один раз в секунду.
}

Часть 1. Соединение с компьютером (WIN7)

Если в вашем компьютере нет встроенного блютуза, то можно воспользоваться . Найти его в салонах связи или на радио рынках не составит труда.

После установки драйверов на блютуз можно приступать к работе.

.
Действие 1

Идем в панель управления, щелкаем на иконку блютуза и выбираем «Показать устройства Bluetooth»

Через некоторое время компьютер произведет поиск и вы увидите ваш модуль (У вашего модуля может быть другое имя).

Выбираем второй вариант — «Введите код образования пары устройства»

Для HC-06 этот код 1234

Завершается все такой картиной.

А за ним еще одно

Первый этап настройки завершен

В случае, если вы забудете каким COM портом у вас определился блютуз, это всегда можно посмотреть выполнив следующие действия:

Действия

P.S. Или посмотреть в диспетчере устройств

. Действие 2

Для передачи данных можно использовать любой терминал. Я использовал простой и бесплатный «Termite «.

В качестве примера мы будем изменять состояние встроенного на плату Arduino светодиода «LED 13». Включаться он будет при приеме символа «W», а отключаться при «S». Приведенный ниже скетч нужно залить в плату Arduino. При заливке в плату необходимо отсоединить питание от блютуз модуля
, после заливки снова подсоединить.

пример программного кода:

setup
Serial
loop
Serial
Serial
// При символе «W» включаем светодиод
// При символе «S» выключаем светодиод
Termite

В настройках выбираем наш порт, скорость (9600).

Также модуль можно проверить и без Arduino просто замкнув выводы TX и RX. Termite отправляемые символы отмечает синим цветом, полученные зелеными. Т.е. если при закороченных выводах мы отправили и нам пришло тоже самое — значит что модуль работает исправно. На фото ниже это и продемонстрировано.

Схемы подключения датчика давления воздуха

Следующая конструкция построена на сенсоре-анероиде BMP180. Экран, в нее входящий, будет отображать текущее давление атмосферного воздуха и температуру окружающей среды. Для изготовления понадобятся:

Элемент Наименование/характеристика Количество
Микроконтроллер Arduino UNO/Nano 1
Датчик BMP180 1
Экран HD447080LCD-1602 1
Резистор 100 Ом 1
Регулируемый резистор До 10 кОм 1

Ну и конечно провода для связки всего названого в единую систему.

Библиотека, управляющая сенсором берется тут: https://github.com/adafruit/Adafruit-BMP085-Library

Принципиальная схема

Фотография итогового устройства:

Плата-шилд самодельная, для желающих повторить, она вблизи:

Датчик питается от 3.3V, соответственно и подключаются его контакты получения энергии (VCC и GND) к плате Arduino. Для передачи данных используются входы A5 (SCL) и A4(SDA). Дисплей с микроконтроллером соединяется согласно следующей таблицы:

Arduino Экран
D6 E и D4 вместе
D4 D5
D3 D6
D2 D7
GND GND
D7 RS

Скетч

Приведенная программа — всего лишь базис операций. Ее можно модифицировать по собственному разумению, добавляя функции отслеживания давления или температуры. Можно даже использовать конечное устройство, после необходимой модификации кода, в качестве своеобразного барометра, предупреждающего об идущей буре. Показания давления, в названом случае сильно упадут.

Мигание светодиода после нажатия на кнопку

В предыдущем примере со светодиодами мы подключили кнопку к плате ардуино и поняли, как она работает. Светодиод включался и выключался, но делал это в совершенно пассивном режиме – сам контроллер здесь был абсолютно лишним, его можно было бы заменить батарейками. Поэтому давайте сделаем наш новый проект более «интеллектуальным»: при нажатии на кнопку заставим светодиод непрерывно мигать. Обычной схемой с лампочкой и выключателем этого уже не сделаешь – мы будем использовать мощь нашего микроконтроллера для решения этой пусть и простой, но не тривиальной задачи.

Полная схема проекта изображена на рисунке:

Фрагмент схемы со светодиодом уже хорошо нам знаком. Мы собрали обычный маячок со светодиодом и ограничительным резистором. А вот во второй части мы видим знакомую нам кнопку и еще один резистор. Пока не будем вдаваться в подробности, просто соберем схему и закачаем в ардуино простой скетч. Все элементы схемы  идут в самых простых стартовых наборах ардуино.

/*
  Скетч для схемы с использованием тактовой кнопки и светодиода
  Светодиод мигает, пока нажата кнопка.
  Кнопка подтянута к земле, нажатию соответствует HIGH на входе
*/

const int PIN_BUTTON = 2;
const int PIN_LED = 13;

void setup() {
  Serial.begin(9600);
  pinMode(PIN_LED, OUTPUT);
}

void loop() {
  // Получаем состояние кнопки
  int buttonState = digitalRead(PIN_BUTTON);
  Serial.println(buttonState);
  // Если кнопка не нажата, то ничего не делаем
  if (!buttonState) {
    delay(50);
    return;
  }

  // Этот блок кода будет выполняться, если кнопка нажата
  // Мигаем светодиодом
  digitalWrite(PIN_LED, HIGH);
  delay(1000);
  digitalWrite(PIN_LED, LOW);
  delay(1000);
}

Нажимаем и держим – светодиод мигает. Отпускаем – он гаснет. Именно то , что хотели. Хлопаем от радости в ладоши и приступаем к анализу того, что сделали.

Давайте посмотрим на скетч. В нем мы видим довольно простую логику.

  1. Определяем, нажата ли кнопка.
  2. Если кнопка не нажата, то просто выходим из метода loop, ничего не включая и не меняя.
  3. Если кнопка нажата, то выполняем мигание, используя фрагмент стандартного скетча:
    1. Включаем светодиод, подавая напряжение на нужный порт
    2. Делаем нужную паузу при включенном светодиоде
    3. Выключаем светодиод
    4. Делаем нужную паузу при выключенном светодиоде

Логика поведения кнопки в скетче может зависеть от способа подключения с подтягивающим резистором. Об этом мы поговорим в следующей статье.

Подключение Bluetooth-модуля к Arduino

Так теперь нам нужно подключить нашу Arduino с Bluetooth. Если на Arduino нет вывода с 3.3В, а только 5В то нужен будет поставить стабилизатор чтобы снизить питание. Назначение выводов HC-05 легко найти в интернете. Для использования рекомендуем вам сделать плату с выведенными линиями питания, Rx и Tx. Подключение к Arduino необходимо производить в следующем порядке:

  • вывод Arduino 3.3В или (5В через стабилизатор!) — к 12 пину модуля Bluetooth
  • вывод Arduino GND — к 13 пину модуля Bluetooth
  • вывод Arduino TX — к 2 пину модуля RX Bluetooth
  • вывод Arduino RX — к 1 пину модуля TX Bluetooth

После подключения необходимо проверить работоспособность Bluetooth модуля. Подключим Светодиод к 12 выводу Arduino и загрузим на плату следующий скетч:

Char incomingByte; // входящие данные
int LED = 12; // LED подключен к 12 пину
void setup() {
Serial.begin(9600); // инициализация порта
pinMode(LED, OUTPUT); //Устанавливаем 12 вывод как выход
Serial.println(«Press 1 to LED ON or 0 to LED OFF…»);
}
void loop() {
if (Serial.available() > 0) { //если пришли данные
incomingByte = Serial.read(); // считываем байт
if(incomingByte == «0»)
{
digitalWrite(LED, LOW); // если 1, то выключаем LED
Serial.println(«LED OFF. Press 1 to LED ON!»); // и выводим обратно сообщение
}
if(incomingByte == «1») {
digitalWrite(LED, HIGH); // если 0, то включаем LED
Serial.println(«LED ON. Press 0 to LED OFF!»);
}
}
}

Исходный код программы

Принцип работы схемы достаточно прост – нам просто нужно подать на контакт A0 платы Arduino напряжение высокого уровня (логическую «1») когда мы хотим включить реле и напряжение низкого уровня (логический «0») когда мы хотим выключить реле. Соответственно, реле при этом будет замыкать и размыкать цепь электрической лампочки.

В программе мы будем переключать состояние контакта A0 платы Arduino с задержкой в 1 секунду:

Arduino

void loop()
{
digitalWrite(relay, HIGH);
delay(interval);
digitalWrite(relay, LOW);
delay(interval);
}

1
2
3
4
5
6
7

voidloop()

{

digitalWrite(relay,HIGH);

delay(interval);

digitalWrite(relay,LOW);

delay(interval);

}

Далее приведен полный текст программы – он тоже достаточно прост.

Arduino

#define relay A0
#define interval 1000
void setup() {
pinMode(relay, OUTPUT);
}
void loop()
{
digitalWrite(relay, HIGH);
delay(interval);
digitalWrite(relay, LOW);
delay(interval);
}

1
2
3
4
5
6
7
8
9
10
11
12

#define relay A0
#define interval 1000

voidsetup(){

pinMode(relay,OUTPUT);

}

voidloop()

{

digitalWrite(relay,HIGH);

delay(interval);

digitalWrite(relay,LOW);

delay(interval);

}

Кнопка ардуино

Тактовые кнопки и кнопки-переключатели

Как обычно, начинаем раздел с простых вещей, интересных только начинающим. Если вы владеете азами  и хотите узнать о различных вариантах подключения кнопки к ардуино – можете пропустить этот параграф.

Что такое кнопка? По сути, это достаточно простое устройство, замыкающее и размыкающее электрическую сеть. Выполнять это замыкание/размыкание можно в разных режимах, при этому  фиксировать или не фиксировать свое положение. Соответственно, все кнопки можно поделить на две большие группы:

  • Кнопки переключатели с фиксацией. Они возвращаются в исходное состояние после того, как их отпустили. При в зависимости от начального состояния разделяют на нормально-замкнутые и нормально-разомкнутые кнопки.
  • Кнопки без фиксации (тактовые кнопки). Они фиксируются и остаются в том положении, в котором их оставили.

Вариантов различных кнопок великое множество, это действительно один из самых распространенных видов электронных компонентов.

Кнопки ардуино для простых проектов

В наших проектах мы будем работать с очень простыми тактовыми кнопками с 4 ножками, которые идут практически в любом наборе ардуино. Кнопка представляет собой переключатель с двумя парами контактов. Контакты в одной паре соединены между собой, поэтому больше одного выключателя в схеме реализовать не удастся, но вы можете одновременно управлять двумя параллельными сегментами, это бывает полезно.

В зависимости от ситуации, вы можете создавать как схемы с нормально замкнутыми, так и с нормально разомкнутыми контактами – для этого нужно будет только соответствующим образом выполнить соединение в схеме.

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

Идея 2. На транзисторах

Принцип действия такого реле времени основывается на использовании полупроводниковых приборов для задачи временного промежутка. На практике могут использоваться схемы как с одним транзистором, так и с большим числом. Наиболее актуальные для самостоятельного изготовления реле времени на двух транзисторах – они характеризуются лучшей стабильностью и управляемостью.

Пример такого электронного устройства приведен на рисунке ниже:


Рис. 5. На транзисторах

Для ее практической реализации вам понадобится обзавестись следующими элементами:

  • резисторами – одним на 100 кОм и тремя на 1 кОм;
  • двумя транзисторами КТ3102Б или идентичными;
  • конденсатором для создания задержки выключения/включения;
  • кнопка для запуска реле времени;
  • промежуточное реле или коммутатор;
  • светодиод для сигнализации состояния;
  • печатная плата для сборки всех деталей.

Принцип работы такого реле времени заключается в подаче напряжения 12 В на емкостной элемент C1. После чего происходит зарядка конденсатора до определенного потенциала, величины которого будет достаточно для открытия транзистора VT1.

Ток заряда для емкостного элемента определяется сопротивлением ветви C1 – R1 – чем больше сопротивление, тем меньше ток, а время накопления заряда больше. Соответственно, для повышения или уменьшения времени включения или выключения нагрузки можно использовать переменный резистор для R1.


Рис. 6. Установить переменный резистор

После разряда емкости на базу транзистора VT1 поступит сигнал открытия, и электрический ток начнет протекать через эмиттер и коллектор, резисторы R2 и R3. Эти номиналы резисторов подбираются для открытия второго транзистора VT2, работающего в режиме электронного ключа на включение основной нагрузки.

Открытый VT2 подает напряжение на обмотку реле K1, сердечник в нем притягивается и производит операции с нагрузкой. Одна из пар контактов электромагнитного реле воздействует своими контактами на цепь питания светодиода, сигнализирующего о состоянии устройства.

Кнопка SB1 в цепи позволяет обнулить заряд конденсатора – это обязательная процедура пере каждым последующим пуском, что составляет определенные трудности, которые решаются установкой микросхем.

УРОК 13. ARDUINO И РЕЛЕ

В этом опыте, мы будем управлять реле, точнее сказать не мы, а ардуино, и для этого попробуем воспользоваться полученными знаниями из предыдущих 12 уроков. Реле это электрически управляемый, механический переключатель. Внутри этого простенького на первый взгляд, пластмассового корпуса, находится мощный электромагнит, и когда он получает заряд энергии, происходит срабатывание, в результате чего якорь притягивается к электро магниту, контактная группа замыкает или размыкает цепь питания нагрузки. В этой схеме вы узнаете, как управлять реле, придав Arduino еще больше способностей!

На тот случай, если у вас в наборе идет не просто реле, а именно модуль, т.е уже собранная схема на печатной плате, Вам не нужно собирать схему (см. ниже), а нужно правильно подключить модуль к плате Arduino.

Реле и Электронный модуль Реле для Arduino на 5V.

VCC — питание +5 Вольт

GND — общий (земля) — минус.

IN1 — управление

NO — нормально разомкнутый (Normally Open)

NC — нормально замкнутый (Normally Closed)

COM — обший (Common)

К контактам NC и NO подключаются светодиоды, общий COM подключается к + питания (+5V), GND к земле (-), VCC к +5 Вольт, IN1 (управление, обозначение может быть другим) к порту ардуино Pin 2.

Когда реле выключено, общий контакт «COM» (common) будет подключен к нормально замкнутому контакту «NC» (Normally Closed). Когда же реле сработает «общий» контакт COM соединится с «нормально разомкнутым» контактом «NO» (Normally Open).

Принципиальная схема Arduino и Реле. Урок 13

Выше, вы видите саму принципиальную схему к уроку 13, думаю сложностей возникнуть не должно, при правильном соединении, т.е соблюдая указания маркировки и «полюсность», все должно получиться.

Для этого опыта вам понадобится:

1. Arduino UNO — 1 шт.

2. Реле или «Электронный модуль Реле» — 1 шт.

3. Транзистор 2N222A — 1 шт.

4. Диод 1N4148 — 1 шт.

5. Резистор 330 Ом.

6. Светодиоды различных цветов — 2 шт.

7. Соединительные провода.

8. Макетная плата.

Далее идет схема электрических соединений к уроку 13.

Cхема электрических соединений макетной платы и Arduino. Уроку 13. Arduino и Реле

Скачать код к опыту 13. Скетч и подробное описание (Обязательно прочтите весь скетч!):

Набор для экспериментов ArduinoKit
Код программы для опыта №13: sketch 13

Вид созданного урока на макетной схеме:

Arduino и Реле. Урок 13

В результате проделанного опыта Вы должны увидеть…

Вы должны услышать щелчки переключающегося реле, а также увидеть два светодиода по переменно загорающимися с секундным интервалом. Если этого нет, — проверьте правильно ли вы собрали схему, и загружен ли код в Arduino.

Возможные трудности:

Светодиоды не светятся
Дважды проверьте правильность установки светодиодов, — длинный вывод является плюсовым контактом..

Не слышны щелчки реле
Проверьте правильность подключение реле и транзистора.

Срабатывает через раз
Проверьте надежность подключение реле, у реле, если это не электронный модуль очень короткие выводы, попробуйте слегка придавить его в макетную плату.

Всем удачи! Ждём ваши комментарии к ARDUINO УРОК 13 — ARDUINO УПРАВЛЯЕТ РЕЛЕ.

2018-09-19T15:18:27+03:00Arduino уроки|

Safety warning

Before proceeding with this project, I want to let you know that you’re dealing with mains voltage. Please read the safety warning below carefully.

Warning: when you are making projects that are connected to mains voltage, you really need to know what you are doing, otherwise you may shock yourself. This is a serious topic, and we want you to be safe. If you’re not 100% sure what you are doing, do yourself a favor and don’t touch anything. Ask someone who knows!

Parts required

Here’s the needed parts for this example:

  • Relay Module
  • Arduino UNO – read Best Arduino Starter Kits
  • PIR Motion Sensor 
  • Lamp Cord Set (view on eBay)

You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!

Code

Copy the following code to your Arduino IDE and upload it to your Arduino board.

Warning: you shouldn’t upload new code while your Arduino is connected to the relay.

How the code works

First, we create variables to hold the pin the relay IN1 pin is connected to and to save the relay state:

The PIR motion sensor is connected to pin 2:

We need to create some auxiliary variables to handle timers with the PIR motion sensor. The lastDebounceTime variable saves the last time motion was detected. The debounceDelay saves how much time the lamp should remain on after motion is detected (here we’re setting 10 seconds = 10000 milliseconds)

In the setup(), we set the relay as an OUTPUT and turn it off by default:

Because we’re using a normally open configuration, there is no contact between the COM and NO sockets unless you trigger the relay. The relay is triggered when the input goes below about 2 V. That means if you send a LOW signal from the Arduino, the relay turns on, and if you send a HIGH signal, the relay turns off;  it works with inverted logic.

Set the PIR motion sensor as an interrupt:

Whenever the PIR motion sensor is triggered, it calls the detectMotion() function declared at the end of the code to turn the relay on:

In the loop(), we check whether 10 seconds have passed since the relay is on. If that condition is true, we can turn the relay off.

Schematic

Assemble all the parts as shown in the schematic diagram.

Warning: do not touch any wires that are connected to mains voltage. Also make sure you have tighten all screws of the relay module.

The lamp is connected to the relay using a normally open configuration. The Arduino controls the relay through pin 8 (pin 8 is connected to the relay IN1 pin). Finally, the PIR motion sensor is connected to pin 2.

3 Скетч управления реле с помощью Arduino

Будем поочерёдно зажигать пару светодиодов одного цвета, и каждую секунду переключаться на пару другого цвета. Напишем вот такой скетч.

Const int relay1 = 2; // пин управления 1-ым реле
const int relay2 = 3; // пин управления 2-ым реле
const int led1 = 4; // коммутируемый вывод — питание 1-го светодиода
const int led2 = 5; // коммутируемый вывод — питание 2-го светодиода
void setup() {
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
// установим оба реле в исходное положение:
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
// подадим питание на светодиоды:
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
}
void loop() {
// переключим оба реле:
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
delay(1000);
// переключим оба реле обратно:
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
delay(1000);
}

Если вы собирали не по приведённой схеме, а вместо D4 и D5 подключали центральную точку реле напрямую к питанию +5V, то от констант led1
и led2
и от всего связанного с ними кода в скетче можно совершенно безболезненно избавиться.

Теперь загрузим скетч в память Arduino. Вот как это всё выглядит у меня. Реле громко пощёлкивают раз в секунду, а светодиоды весело моргают.

Кстати, существуют другие типы коммутирующих устройств, например, оптроны. Эти устройства не имеют механических частей, что существенно повышает их износоустойчивость и скорость срабатывания. Кроме того, они имеют меньший размер и меньшее энергопотребление.

Скачать техническое описание (datasheet) реле SRD-05VDC-SL-C

Цифровые пины на Arduino могут принимать значения high или low. Именно это свойство используется для управления большинством внешних двигателей, датчиков и т.п.

Но иногда возникают ограничения, связанные с тем, что устройсва требуют большие токи, чем может предоставить Arduino. Судя по спеку, платы Arduino предоставляют нам в распоряжение всего лишь 20 мА.

Если вы слишком часто будете работать с токами, которые превышают эти рекомендации, у вас не толь будет ненадежная электрическая цепь, но можно повредить и ваш контроллер Arduino.

Вместо этого вам надо подключать необходимую силу тока. Один из вариантов — использовать реле. Кроме этого, порой вам понадобятся и транзисторы, например, TIP122, который рассмотрен в этой статье.

Переключение режимов с помощью кнопки

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

Факт нажатия мы определяем с помощью функции digitalRead(). В результате мы получим HIGH (1, TRUE) или LOW(0, FALSE), в зависимости от того, как подключили кнопку. Если мы подключаем кнопку с помощью внутреннего подтягивающего резистора, то нажатие кнопки приведет к появлению на входе уровня 0 (FALSE).

Для хранения информации о нажатии на кнопку можно использовать переменную типа boolean:

boolean keyPressed = digitalRead(PIN_BUTTON)==LOW;

Почему мы используем такую конструкцию, а не сделали так:

boolean keyPressed = digitalRead(PIN_BUTTON);

Все дело в том, что digitalRead() может вернуть HIGH, но оно не будет означать нажатие кнопки. В случае использования схемы с подтягивающим резистором HIGH будет означать, что кнопка, наоборот, не нажата. В первом варианте (digitalRead(PIN_BUTTON)==LOW ) мы сразу сравнили вход с нужным нам значением и определили, что кнопка нажата, хотя и на входе сейчас низкий уровень сигнала. И сохранили в переменную статус кнопки. Старайтесь явно указывать все выполняемые вами логические операции, чтобы делать свой код более прозрачным и избежать лишних глупых ошибок.

Как переключать режимы работы после нажатия кнопки?

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

Логика работы программы очень проста:

  • Запоминаем факт нажатия в служебной переменной.
  • Ожидаем, пока не пройдут явления, связанные с дребезгом.
  • Ожидаем факта отпускания кнопки.
  • Запоминаем факт отпускания и устанавливаем в отдельной переменной признак того, что кнопка была полноценно нажата.
  • Очищаем служебную переменную.

Как определить нажатие нескольких кнопок?

Нужно просто запомнить состояние каждой из кнопок в соответствующей переменной или в массиве ардуино. Здесь главное понимать, что каждая новая кнопка – это занятый пин. Поэтому если количество кнопок у вас будет большим, то возможно возникновение дефицита свободных контактов. Альтернативным вариантом является использование подключения кнопок на один аналоговый пин по схеме с резистивным делителем. Об этом мы поговорим в следующих статьях.

Скетч

После того, как все подключено в соответствии с электрической схемой выше, загрузите этот код в ваш Arduino:

После загрузки и компиляции кода, установите потенциометр 10K на минимум.

Реле включит свет, когда фоторезистор будет темным (покрытым). А когда управление установлено на минимальный уровень, реле включит свет, а затем выключит, как только вернется свет (закат на рассвет).

Однако, если вы хотите, чтобы свет появился в темноте, оставьте его включенным на некоторое время, а затем выключите до восхода солнца.

Отрегулируйте потенциометр 10K, чтобы контролировать, как долго свет будет гореть после наступления темноты. Таймер активируется, как только регулятор выше 0V (нуля вольт).

Слегка повернув вверх, регулятор времени включит свет на несколько минут, прежде чем снова выключится. При полном включении таймера свет останется включенным примерно на 4 часа до его выключения.

По истечении времени все автоматически сбрасывается, и свет становится доступным. При полном выключении регулятора (до нуля вольт) свет включается в темноте и остается включенным до тех пор, пока свет не вернется (от захода солнца до восхода солнца).

Если вам необходимо вручную перезагрузить устройство, подумайте о добавлении кнопочного переключателя для заземления кнопки сброса (RST).

Описание

Радио модули с частотой 433 MHz – самый простой способ связать две Ардуины по беспроводному каналу. Чем они лучше радио 2.4 GHz, например nRF24?

  • Неприхотливы к питанию
  • Потребляют небольшой ток
  • Занимают один пин МК
  • В два раза дешевле
  • Выше дальность связи при той же мощности
  • Более высокая проникающая способность

Также на этой частоте работают пульты управления (брелоки) радио-реле и шлагбаумов, что позволяет перехватывать их команды и подменять при желании.

Модулей данного типа на китайских площадках существует несколько, продаются они парой (передатчик TX и приёмник RX), либо по отдельности.

Наборы GyverKIT до 2 партии комплектовались парой модулей как по центру на картинке выше (модель SYNxxx), со второй партии в наборах идут модули FS1000A и MX-RM-5V (слева на картинке) как более удобные для подключения и более стабильные в работе. Правые модули, несмотря на самый высокий ценник, работают хуже всех и к покупке не рекомендуются.

Ток потребления модулей:

  • FS1000A : передача 12 мА, холостой 10 мкА
  • MX-RM-5V : 3.7 мА
  • SYN115 : передача 14 мА, холостой 0.5 мкА
  • SYN480R : 4.5 мА

Для лучшего качества связи к модулям в пин ANT нужно припаять антенну длиной 17.3 см (четверть волны) в виде одножильного провода, при желании можно свернуть в спираль:

Описание транзистора TIP122 и его распиновка

TIP122 — это биполярный транзистор. То есть для базы надо обеспечить большее позитивное напряжение, чем на эмиттере, что позволит току поступать от эмиттера к коллектору. Расположение базы, эмиттера и коллектора TIP122 показаны на рисунке ниже.

Главное, что надо помнить об этом транзисторе — то, что он позволяет протекать току в 5 А от эмиттера через коллектор и 120 мА от эмиттера через базу.

Также очень круто то, что вы можете получить разницу в 100 В между коллектором и эмиттером и 100 вольт между коллектором и базой.

Не чересчур ли это? Для большинства проектов на Arduino — действительно чересчур. Но при этом они дешевые и когда появляется новая идея, не приходится заморачиваться и подбирать нужный транзистор, так как этот наверняка подойдет. Когда проект или конструкция апробирована, можно оптимизировать уже после тестового образца.

Идея 4. На базе таймера NE555

Этот вариант также относится к электронным реле, в котором задержка времени устанавливается при помощи популярного таймера NE555. С его помощью вы сможете собрать таймер, который оперирует коммутационными процессами, как на включение, так и на отключение.


Рис. 8. На базе таймера NE555

Как видите на схеме, таймер выполняет роль управляющего ключа, разрешающего выдачу электрического сигнала либо напрямую к прибору, либо через оперирующий орган – катушку реле. Когда времязадающая цепочка из двух резисторов и конденсатора достигнет насыщения, таймер выдаст на выход реле времени управляющий сигнал, который притянет к катушке прибора сердечник и замкнет контакты. К выходной катушке параллельно подключается светодиод, сигнализирующий о состоянии реле.

Практическая реализация этой схемы также требует определенных навыков и знаний в пайке радиодеталей и изготовлении печатных плат.

Примеры

Рассмотрим тестовый пример, который отправляет строку Hello from #<счётчик>:

Отправка

#include <Gyver433.h>
Gyver433_TX<2> tx;  // указали пин

void setup() {
}

char data[] = "Hello from #xx"; // строка для отправки
byte count = 0;                 // счётчик для отправки

void loop() {
  // добавляем счётчик в строку
  data = (count / 10) + '0';
  data = (count % 10) + '0';
  if (++count >= 100) count = 0;
  tx.sendData(data);
  delay(100);
}

Приём

#include <Gyver433.h>
Gyver433_RX<2, 20> rx;  // указали пин и размер буфера

void setup() {
  Serial.begin(9600);  
  attachInterrupt(0, isr, CHANGE);  // прерывание пина радио по CHANGE
}

// спец. тикер вызывается в прерывании
void isr() {
  rx.tickISR();
}

void loop() {
  if (rx.gotData()) {                   // если успешно принято больше 0
    Serial.write(rx.buffer, rx.size);   // выводим
    Serial.println();
  }
}

Библиотека позволяет отправлять данные любого типа (массив, структура) любой длины, что охватывает все возможные сценарии работы с радио.

3Скетч управления реле с помощью Arduino

Будем поочерёдно зажигать пару светодиодов одного цвета, и каждую секунду переключаться на пару другого цвета. Напишем вот такой скетч.

const int relay1 = 2; // пин управления 1-ым реле
const int relay2 = 3; // пин управления 2-ым реле

const int led1 = 4; // коммутируемый вывод - питание 1-го светодиода 
const int led2 = 5; // коммутируемый вывод - питание 2-го светодиода 

void setup() {
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  // установим оба реле в исходное положение:
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  // подадим питание на светодиоды: 
  digitalWrite(led1, HIGH);  
  digitalWrite(led2, HIGH);
}

void loop() {
// переключим оба реле:
  digitalWrite(relay1, LOW);
  digitalWrite(relay2, LOW);
  delay(1000);
// переключим оба реле обратно:
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  delay(1000);
}

Если вы собирали не по приведённой схеме, а вместо D4 и D5 подключали центральную точку реле напрямую к питанию +5V, то от констант led1 и led2 и от всего связанного с ними кода в скетче можно совершенно безболезненно избавиться.

Теперь загрузим скетч в память Arduino. Вот как это всё выглядит у меня. Реле громко пощёлкивают раз в секунду, а светодиоды весело моргают.

Демонстрация работы Arduino с модулем реле SRD-05VDC-SL-C

Кстати, существуют другие типы коммутирующих устройств, например, оптроны. Эти устройства не имеют механических частей, что существенно повышает их износоустойчивость и скорость срабатывания. Кроме того, они имеют меньший размер и меньшее энергопотребление.