Опубликовано

Охладитель напитков на элементе Пельтье

Глава из книги “Мейкерство. Arduino и Raspberry Pi” (автор Саймон Монк)

Элементы Пельтье

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

Чтобы это произошло, пропускаемый ток должен иметь солидную величину (обычно от 2 до 6 А при 12 В), т. е. для использования элемента Пельтье вам понадобится достаточно мощный блок питания. Такие элементы можно часто обнаружить в переносных холодильниках и в охладителях напитков. Элементы Пельтье в ряде случаев предпочтительнее обычных холодильников, поскольку у них нет движущихся частей, которые могут сломаться.

mkac_1105

Рис. 11.5. Элемент Пельтье

Как работают элементы Пельтье?

Когда электрический ток протекает через переход между двумя различными проводящими материалами, то материал с одной стороны перехода становится несколько горячее, а с другой — несколько холоднее. Это явление назвали эффектом Пельтье в честь французского физика Жана Пельтье, открывшего его в 1894 году. Явление это известно также как термоэлектрический эффект.

Термоэлектрический эффект относительно мал, и чтобы сделать его нам полезным, — например, для охлаждения напитков, его нужно многократно усилить. Это достигается за счет размещения групп переходов друг за другом — тогда при прохождении тока каждый переход вносит свой вклад в общий эффект. Обычные недорогие элементы Пельтье имеют, как правило, около 12 переходов (рис. 11.6). По обеим сторонам элемента Пельтье расположен базовый материал, образующий основу для блока групп переходов.

Устройство элемента Пельтье

Рис. 11.6. Устройство элемента Пельтье

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

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

Особенности практического применения

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

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

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

mkac_1107

Рис. 11.7. Элемент Пельтье на теплоотводящем радиаторе

mkac_1108

Рис. 11.8. Охлаждение элемента Пельтье двумя вентиляторами

Проект: охладитель напитков

В этом проекте не используется ни Raspberry Pi, ни Arduino. Проект просто демонстрирует, как нужно подключать элемент Пельтье, и как можно самому собрать простой охладитель напитков (рис. 11.9). Этот базовый проект мы дополним в главе 12, добавив в него контроль за температурой и термостабилизацию. Затем, в главе 14, в него будет добавлен OLED-дисплей для отображения температуры.

mkac_1109

Рис. 11.9. Охладитель напитков в сборе

Комплектующие

В этом проекте нам понадобятся следующие комплектующие (табл. 11.3).

Таблица 11.3. Комплектующие для работы с проектом охладителя напитков

Компонент схемы Источники
Элемент Пельтье с двумя охлаждающими вентиляторами (ток 4 А или меньше) eBay
Переходник с круглым гнездом и винтовыми зажимами Adafruit: 368
Источник питания (12 В 5 A) Adafruit: 352
Большая емкость из-под молока или сока Б/у
Освежающий напиток

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

Конструкция

Рассмотрев провода, идущие к блоку охлаждения, можно выделить три пары проводов: одна пара идет к элементу Пельтье, и по паре проводов — к каждому из вентиляторов. Им всем требуется 12 В от источника питания, и самый простой способ подключения состоит в использовании винтового зажима на разъеме, идущем к блоку питания. Проще говоря, все три красных провода от охлаждающего устройства нужно зафиксировать в винтовой клемме с маркировкой (+), а все три черных провода — в винтовой клемме с маркировкой (–), как показано на рис. 11.10.

mkac_1110

Рис. 11.10. Подключение проводов в проекте охладителя напитков

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

mkac_1111

Рис. 11.11. Подготовка пластикового контейнера

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

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

Использование охладителя

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

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

Этот проект также несколько неэкономичен, на сохранять прохладным небольшого количества напитка расходует 50 Вт электрической энергии. В главе 12 мы сделаем наш проект несколько эффективней, добавив в него режим термостатирования.

Заключение

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

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

Опубликовано

Модуль реле в системе автополива

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

Реле позволяет электрическому сигналу или импульсу включать (или выключать) электрический ток. Для управления реле используется низкое напряжение или слабый ток, чтобы с его помощью управлять высоким напряжением и/или сильным током.

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

Внешний вид, назначение контактов

Для удобства управления и подключения к Arduino реле устанавливаются на платы, где, кроме самого реле, расположены контакты для подключения нагрузки и другие элементы (рис. M3.1). На одной плате могут размещаться несколько реле.

3-03-1-relay

Рис. M3.1. Назначение контактов одноканальных модулей реле

Основные характеристики

Наименование Значение
Рабочее напряжение, В 5
Потребляемый ток при переключении контактов, мА 5
Потребляемый ток в состоянии ожидания, мА 10 ÷ 13
Рабочая частота, МГц 13,56
Размеры (L×W×H), мм 50×26×18,5
Максимальная нагрузка AC 250 В/10 A
DC 30 В/10 A

 


Предупреждение

Модуль реле, входящий в набор, рассчитан на коммутирование небольших нагрузок. Вы можете подключать к нему бытовые приборы с рабочим напряжением 220 В, но нагрузка не должна превышать 3-х ампер (мощность до 660 Вт).
Имейте в виду, что мощность утюга составляет 1000÷1500 Вт, и поэтому такое реле не годится для создания устройства для включения/выключения утюга. Cуществуют специальные модули реле, рассчитанные на большие мощности.


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

3-03-2-relay

Рис. M3.2. Схема подключения реле

Программный код

Тестовая программа для включения и выключения лампочки через каждые 2 секунды приведена в листинге M3.1.

Листинг M3.1. Включение лампочки с помощью реле

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define relayPin 2 //номер пина для управления реле
 
void setup() {
 
pinMode(relayPin, OUTPUT); //настройка пина реле на выход
 
}
 
void loop() {
 
digitalWrite(relayPin, HIGH);// замыкаем реле
 
delay(3000); // ждем 3 секунды
 
digitalWrite(relayPin, LOW); // размыкаем реле
 
delay(3000); // ждем 3 секунды
 
}

«Умный горшок»

С помощь модуля реле можно создать систему автоматического полива растений в цветочном горшке. Для этого, кроме модуля реле, мы задействуем микронасос, помещенный в банку с водой, и датчик влажности почвы (рис. M3.3). Как только влажность почвы опускается ниже заданных значений, Arduino включает микронасос и выключает его, когда почва становится снова достаточно влажной.

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

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

3-03-3-relay

Рис. M3.3. Система автоматического полива цветочного горшка

Программный код

Листинг M3.2. Система автоматического полива цветочного горшка

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//определения
 
// пин аналогового выхода датчика уровня воды
 
#define pinWaterLevel A0
 
//пин аналогового выхода датчик влажности почвы
 
#define pinSoilMoisture A1
 
//пин реле для управление насосом
 
#define pinRelayPump 12
 
 
 
//константы
 
const int delayPumpBefore=2; //время полива (в секундах)
 
const int delayPumpAfter=30; //время после полива, чтобы
 
//земля пропиталась (в секундах)
 
const int minMoisture=600; //минимальный порог влажности почвы
 
 
 
// переменные
 
int aLevel = 0; // значение датчика уровня воды
 
int aMoisture = 0; // состояние датчика влажности почвы
 
int levels[3]={600,500,400}; //массив значений уровней воды
 
 
 
//установки
 
void setup() {
 
//объявляем пин реле для включения насоса как выход:
 
pinMode(pinRelayPump, OUTPUT);
 
//объявляем пины датчиков глубины и влажности почвы как входы:
 
pinMode(pinWaterLevel, INPUT);
 
pinMode(pinSoilMoisture, INPUT);
 
Serial.begin(9600);
 
}
 
 
 
void loop() {
 
// считываем значение датчика уровня воды
 
aLevel=analogRead(pinWaterLevel);
 
// считываем состояния датчика влажности почвы
 
aMoisture = analogRead (pinSoilMoisture);
 
Serial.println(aMoisture); //выводим для тестирования
 
delay(100);
 
// если почва сухая, и вода в банке есть, то включаем полив
 
if ((aMoisture >minMoisture)&&(aLevel>levels[2])) {
 
digitalWrite(pinRelayPump, HIGH); //включаем насос
 
delay(delayPumpBefore*1000); //задержка на полив
 
digitalWrite(pinRelayPump, LOW); //выключаем насос
 
delay(delayPumpAfter*1000); //задержка на слив воды из
 
//шланга после выключения насоса
 
}
 
else {
 
digitalWrite(pinRelayPump, LOW);
 
}
 
}

Для адаптации программы к конкретному цветочному горшку надо произвести небольшую «тонкую настройку» системы:

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

Модуль BLE Bluetooth HM-10/11

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

Модули Bluetooth оснащены последовательным портом, способным взаимодействовать с платой Arduino через контакты RX (прием) и TX (передача), и приемопередатчиком, использующим протокол беспроводной связи Bluetooth для взаимодействия «по воздуху» с другими устройствами, который понимают этот протокол (например, со смартфонами). Такой приемопередатчик функционирует как модем, преобразовывая сигналы протокола Bluetooth в обычный асинхронный последовательный протокол и обратно.

Существуют различные протоколы Bluetooth. Модули HM-10 и HM-11 поддерживают протокол Bluetooth 4.0, что дает возможность их подключения к смартфонам и на ОС Android, и на iOS (iPhone) — в отличие от популярных модулей HC-05 и HC-06, которые могут взаимодействовать только с ОС Android. HM-10/11 нельзя соединить с модулями HC-06 и HC-05, т. к. последние поддерживают протокол Bluetooth 2/2.1.

Наиболее существенным достоинством модулей Bluetooth BLE (Bluetooth Low Energy, Bluetooth LE) является их сверхмалое пиковое энергопотребление, среднее энергопотребление и энергопотребление в режиме простоя, что весьма важно для устройств с автономным питанием.


Примечание

Модуль HM-11, по своим эксплуатационным характеристикам аналогичен HM-10, но занимает меньшую площадь и имеет меньшее количество контактов.


Внешний вид, назначение контактов

bluetooth-hm-10

Рис. M5.1. Внещний вид и назначение контактов Bluetooth HM-10

Технические характеристики

Наименование Значение
Чип Bluetooth CC2540 или CC2541
Протокол связи Bluetooth 4.0 BLE
Радиус действия до 100 метров
Объем flash-памяти (для хранения прошивки и настроек), Мбит 8
Частота радиосигнала, ГГц 2,40 ÷ 2,48
Ток
  • в режиме установки связи — до 50 мА
  • после установки связи 9 мА
  • в режиме сна — 50 ÷ 200 µA
Напряжение питания, В + 2,5 В до + 3,3 В
Пароль по умолчанию 000000
Имя Bluetooth устройства по умолчанию HMSoft, BT05-A

До тех пор, пока модуль HM-10 не сопряжен ни с одним устройством, он находится в режиме команд и об этом сообщает мигающим светодиодом. При сопряжении с устройством светодиод начинает гореть постоянно, а модуль переходит в режим передачи данных.

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

3-05-2-bluetooth

Рис. M5.2. Подключение Bluetooth HM-10

Тестируем подключение Bluetooth

  1. Установим терминальное приложение для смартфона. Их достаточно много, и функциональные возможности их примерно одинаковы. Предлагаем для смартфонов с OC Android популярное бесплатное приложение Serial Bluetooth Terminal, ориентированное на работу как с «классическими» модулями Bluetooth, так и с модулями, которые поддерживают протокол Bluetooth 4.0 BLE (рис. M5., а). Для iPhone и iPad можно использовать приложение HM10 Bluetooth Serial Lite (рис. M5.3, б).
3-05-3-bluetootch
а б

Рис. M5.3. а — окно установки Serial Bluetooth Terminal на Google Play; б — установка приложение HM10 Bluetooth Serial Lite для iOS

  1. Установив приложение на смартфон, откройте его. При этом Bluetooth на смартфоне должен быть включен.
  2. Подключите Bluetooth, как показано на рис. M5.2, а. Индикатор, расположенный на модуле Bluetooth, начнет мигать в ожидании соединения.
  3. Выберите в меню команду Device, а затем нажмите кнопку SCAN в правом верхнем углу окна (рис. M5.2, б).
а б

Рис. M5.4. Поиск устройств Bluetooth BLE в радиусе действия вашего телефона

  1. После недолгого поиска на экране появится список обнаруженых модулей Bluetooth (рис. M5.5, а). Ваш модуль может быть обозначен в списке на вкладке BLUETOOTH LE как HM-10 или BT05-A (в зависимости от производителя).
  2. Щелкните двойным щелчком на имени вашего модуля Bluetooth, и произойдет соединение модуля с платой Arduino через последовательный порт. При этом светодиодный индикатор на модуле перестанет мигать, а на экране смартфона появится надпись Connected (рис. M5.5, б).
а б

Рис. M5.5. Подключение к Bluetooth BLE

Совет

В зависимость от производителя конкретного устройства Android и версии операционной системы (для Android она должна быть выше 4.3) вы можете увидеть или не увидеть HM-10 среди устройств, обнаруженных Bluetooth (Bluetooth devices). Если ваш Android не находит HM-10 в своих настройках Bluetooth, попробуйте использовать приложение BLE Scanner app.

Взаимодействие смартфона и Arduino через Bluetooth BLE

Теперь, когда соединение Arduino и модуля Bluetooth установлено, осуществим обмен информацией между устройствами. Для этого:

  1. Временно отсоедините провода, подключенные к контактам D0 (RX) и D1(TX) платы Arduino, и загрузите код, приведенный в листинге M5.1.

Листинг M5.1. Обмен информацией между Arduino и модулем Bluetooth

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void setup() {
 
Serial.begin(9600);
 
Serial.println("poexali!");
 
}
 
void loop() {
 
if (Serial.available()) {
 
char c = Serial.read(); // читаем из software-порта
 
Serial.print(c); // пишем в hardware-порт
 
}
 
}

Если при загрузке скетча на Arduino не отключать эти провода, то компилятор выдаст ошибку, показанную на рис. M5.6. Конфликт связан с тем, что пины D0 и D1 также используются для связи с компьютером посредством USB.

Рис. M5.6. Ошибки загрузки скетча в Arduino

  1. Снова подключите провода к контактам D0 (RX) и D1(TX) и выполните сопряжение смартфона с модулем Bluetooth, как было показано на рис. M5.5.
  2. Выполнив сопряжение, можно поздороваться с хостом на другом конце Bluetooth-канала (рис. M5.7). Как можно видеть, приветствие прошло успешно!
3-05-7a-bluetootch 3-05-7b-bluetootch
а б

Рис. M5.7. Привет Arduino! — вводим на смартфоне (а) и получаем в Мониторе порта (б)

При отладке скетча вам придется многократно отключать провода от контактов D0 и D1 во время загрузки скетча в Arduino. Кроме того, одного порта вам может быть недостаточно. В этом случае целесообразно использовать библиотеку SoftwareSerial, которая предустановлена в Arduino IDE. Библиотека SoftwareSerial позволяет реализовать последовательный интерфейс не только на D0 и D1, но и на любых других цифровых выводах Arduino с помощью программных средств, дублирующих функциональность UART (отсюда и название «SoftwareSerial»). Кроме того, она дает возможность программно создавать несколько последовательных портов, работающих на скорости до 115200 бод.

  1. Подключите контакты TX и RX модуля Bluetooth к выводам D2 и D3 (RXD3, TXD2) платы Arduino (а не к D0 и D1, как вы делали ранее!).
  2. Загрузите код, приведенный в листинге M5.2.

Листинг M5.2. Сопряжение платы Arduino и модуля Bluetooth

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
#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(2,3);//указываем пины RX и TX соответственно
 
void setup() {
 
pinMode(2,INPUT);
 
pinMode(3,OUTPUT);
 
Serial.begin(9600);
 
mySerial.begin(9600);
 
Serial.println("poexali!");
 
}
 
void loop() {
 
if (mySerial.available()) {
 
char c = mySerial.read(); // читаем из software-порта
 
Serial.print(c); // пишем в hardware-порт
 
}
 
if (Serial.available()) {
 
char c = Serial.read(); // читаем из hardware-порта
 
mySerial.write(c); // пишем в software-порт
 
}
 
}
  1. Введите в Мониторе порта любой текст (рис. M5.8, а) и нажмите кнопку Отправить — текст появится в окне терминала смартфона (рис. M5.8, б).
3-05-8a-bluetootch 3-05-8b-bluetootch
а б

Рис. M5.8. Привет Android! вводим в Мониторе порта (а) и получаем на смартфоне (б)

Управление светодиодом RGB по Bluetooth

Теперь осуществим на практике управление электронным прибором со смартфона по каналу Bluetooth.

1. Соберите схему, представленную на рис. M5.9.

3-05-9

Рис. M5.9. Управление RGB-светодиодом через Bluetooth

2. Загрузите скетч, приведенный в листинге M5.3.

Листинг M5.3. Управление светодиодом RGB через Bluetooth

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <SoftwareSerial.h>
 
// Константы для хранения номеров контактов вывода:
 
const int greenPin = 9; //"зеленый" контакт LED RGB
 
const int bluePin = 10; //"синий" контакт LED RGB
 
const int redPin = 11; //"красный" контакт LED RGB
 
const int pinRX = 2; //RX – вход для приема данных -> к TX bluetooth
 
const int pinTX = 3; //TX – выход для передачи данных -> к RX bluetooth
 
int currentPin = 0; // текущий контакт для задания яркости
 
SoftwareSerial mySerial(pinRX,pinTX); // указываем пины rx и tx
 
void setup() {
 
pinMode(pinRX,INPUT);
 
pinMode(pinTX,OUTPUT);
 
pinMode(redPin, OUTPUT);
 
pinMode(greenPin, OUTPUT);
 
pinMode(bluePin, OUTPUT);
 
 
 
Serial.begin(9600);
 
mySerial.begin(9600);
 
Serial.println("poexali!");
 
}
 
void loop() {
 
if (mySerial.available()) {
 
char inByte = mySerial.read(); // читаем из software-порта
 
Serial.print(inByte); // пишем в hardware-порт
 
rgb(inByte); //включаем светодиод «цветом» inByte
 
}
 
 
 
if (Serial.available()) {
 
char c = Serial.read(); // читаем из hardware-порта
 
mySerial.write(c); // пишем в software-порт
 
rgb(c); //включаем светодиод «цветом» с
 
}
 
}
 
//функция для включения светодиода RGB
 
void rgb(byte cByte){
 
digitalWrite(currentPin,LOW);
 
// игнорируем любые другие значения:
 
if (cByte == 'r') {
 
currentPin = redPin;
 
}
 
if (cByte == 'g') {
 
currentPin = greenPin;
 
}
 
if (cByte == 'b') {
 
currentPin = bluePin;
 
}
 
digitalWrite(currentPin,HIGH);
 
}

3. Теперь, вводя символы r, g и b в Мониторе порта или на смартфоне, подключенном через модуль Bluetooth с помощью терминальной программы, мы можем изменять цвет светодиода RGB.

Опубликовано

Пассивный пьезоэлектрический зуммер 5 В

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

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

Существуют активные и пассивные зуммеры. Главное различие их состоит в том, что активный можно только включить и выключить, подав напряжение на его контакты. Для пассивного зуммера (рис. M1.1) кроме питания требуется источник, который задаст параметры звукового сигнала. В качестве такого источника может выступать плата Ардуино. Для генерации мелодий следует подключать цифровой пин зуммера к пину Arduino, который поддерживает ШИМ (~D5, ~D6, ~D9, ~D10, ~D11).

Внешний вид, назначение контактов

3-01-1-зуммер

Рис. M1.1. Пассивный зуммер

Основные характеристики

Наименование Значение
Напряжение, В 5
Максимальный ток, мА 32
Минимальный уровень звука на расстоянии 10 см, дБ 85
Диапазон частот, Гц 2300 ± 300

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

3-01-2-зуммер

Рис. M1.2. Подключение зуммера

Программный код

Листинг M1.1. Подключение зуммера

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
#define SoundPin 5 // пин пьезоизлучателя
 
int DelaySound = 1000; //Пауза. 1000 миллисекунд=1 секунда
 
void setup(){
 
}
 
void loop(){
 
tone(SoundPin, 1915); //Воспроизводим сигнал с частотой тона
 
//1/(2*1915)=261 Гц (нота До)
 
delay(DelaySound); //Длительность воспроизведения сигнала 1 с
 
tone(SoundPin, 1700);
 
delay(DelaySound);
 
tone(SoundPin, 1519);
 
delay(DelaySound);
 
tone(SoundPin, 1432);
 
delay(DelaySound);
 
tone(SoundPin, 1275);
 
delay(DelaySound);
 
tone(SoundPin, 1136);
 
delay(DelaySound);
 
tone(SoundPin, 1014);
 
delay(DelaySound);
 
noTone(7); // Выключаем звук
 
}

Пояснение

Функция tone() генерирует на порту входа/выхода сигнал — прямоугольную «волну» заданной частоты и с 50%-ным рабочим циклом. Длительность может быть задана параметром delay, в противном случае сигнал генерируется, пока не будет вызвана функция noTone().

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


Примечание

Подробную информацию о соответствии частоты сигнала воспроизводимым музыкальным нотам, а также примеры программ, можно найти на сайте разработчика Arduino: http://www.arduino.cc/en/Tutorial/Melody.


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

Световой терменвокс

Соберем простейший имитатор музыкального инструмента терменвокса (рис. M1.3). Только играя на нашем терменвоксе, исполнитель будет подносить руки не к антенне (как при игре на классическом терменвоксе), а к фоторезистору.


Примечание

Cопротивление фоторезисторов уменьшается под воздействием света и увеличивается в темноте. Фоторезисторы просты в использовании, но слишком медленно реагируют на изменение уровня освещенности и имеют весьма низкую точность. Как правило, сопротивление фоторезисторов может варьироваться от 50 Ом при дневном освещении до более чем 10 МОм в темноте.


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

3-01-3-терменвокс

Рис. M1.3. Световой терменвокс

Программный код

Листинг M1.2. Световой терменвокс

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#define buzzerPin 5 //номер пина зуммера
 
#define photoPin A3 //номер пина фоторезистора
 
int aVal; //Значение на фоторезисторе
 
int sMax=1023; //максимальное значение фоторезистора
 
int buzzerFreq; //частота звука
 
const long BUZZ_FREQ_MAX = 2500; //задаем макс. частоту излучения
 
 
 
void setup(){
 
// Объявляем пин, к которому подключен зуммер как выход
 
pinMode(buzzerPin,OUTPUT);
 
Serial.begin(9600);
 
}
 
 
 
void loop(){
 
aVal=analogRead(photoPin); //считываем значение с фоторезистора
 
Serial.print("aVal:");
 
Serial.println(aVal);
 
// задаем частоту излучения // пьезоизлучателя
 
buzzerFreq = (aVal * BUZZ_FREQ_MAX)/sMax;
 
buzz(buzzerPin, buzzerFreq, 10);
 
}
 
//подпрограмма генерации звука buzz
 
void buzz(int targetPin, long frequency, long length) {
 
long delayValue = 1000000/frequency/2;
 
long numCycles = frequency * length/ 1000;
 
for (long i=0; i < numCycles; i++){
 
digitalWrite(targetPin,HIGH);
 
delayMicroseconds(delayValue);
 
digitalWrite(targetPin,LOW);
 
delayMicroseconds(delayValue);
 
}
 
}

Все — простейший терменвокс готов! Теперь попробуйте, изменяя освещенность фоторезистора, создать звуковую композицию.

Опубликовано

RFID-модуль RC522

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

Радиочастотная идентификация RFID (от англ. Radio Frequency IDentification) представляет собой бесконтактную технологию, которая широко используется в системах контроля доступа, аутентификации персонала, в логистике, в розничной торговле и др. Для идентификации людей наиболее популярным является формат бесконтактной пластиковой карточки, по размеру совпадающей с банковской. Такую карточку для запроса доступа как правило нужно осознанно подносить к считывающему устройству на расстояние порядка 10 см.

Внешний вид, назначение контактов

Система RFID состоит из двух основных компонентов: RFID-метки (тега), которая находится у объекта, который мы хотим идентифицировать, и RFID-считывателя (рис. M2.1).

RFID

Рис. M2.1. RFID-модуль RC522

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

В проектах мы воспользуемся RFID-считывателем RC522 на базе популярной микросхемы MFRC522 производства фирмы NXP Semiconductors. В комплект поставки считывателя RC522 входят две RFID-метки типа Mifare Classic с памятью объемом 1 Кбайт: карточка и брелок. Каждая метка имеет уникальный идентификационный ключ (UID).

Основные характеристики

Наименование Значение
Напряжение, В 3,3
Потребляемый ток в активном состоянии, мА 13 ÷ 26
Потребляемый ток в состоянии ожидания мА 10 ÷ 13
Рабочая частота, МГц 13,56
Поддерживаемые типы карт MIFARE S50, MIFARE S70, MIFARE UltraLight, MIFARE Pro, MIFARE DESfire
Размеры, мм 40×60

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

M2-2-RFID

Рис. M2.2. Схема подключения RFID-модуля RC522 к Arduino Uno


Примечание

Для подключения модуля RFID вы также можете использовать контактную группу ISCP на плате Arduino Uno, подключив туда контакты MISO (ICSP-1), SCK (ICSP-3) и MOSI (ICSP-4).


Получаем UID метки RFID

  1. Загрузите специализированную библиотеку MFRC522 (https://github.com/miguelbalboa/rfid/archive/master.zip).
  2. Подключите библиотеку в среду разработки Arduino IDE: Скетч | Подключить библиотеку | Добавить .ZIP библиотеку…
  3. Загрузите скетч DumpInfo из папки примеров библиотеки MFRC522: Файл | Примеры | MFRC522 | DumpInfo.
  4. Запустите монитор порта.

Программа считывает информацию с поднесенной RFID-метки и выводит ее в терминал. Для RFID-меток из комплекта RC522 она будет иметь примерно следующий вид:

Card UID: 7E 56 37 D5

Card SAK: 08

PICC type: MIFARE 1KB

  • первая строка — уникальный идентификатор RFID-метки (UID) для этого типа меток (4 байта);
  • вторая строка — поле SAK (Select Acknowledge), содержащее информацию о типе метки и производителе. Значение 08 означает, что это метка типа Mifare Classic 1K производства NXP;
  • третья строка — расшифровка типа метки, извлеченная из поля SAK: Mifare 1KB.

Внимание!

Запишите уникальный идентификатор (UID) вашей RFID-метки! Он понадобится вам в следующем примере.


Программный код

Загрузите скетч из листинга M2.1. При поднесении метки к считывателю на мониторе порта будет появляться надпись Access granted, а на плате загораться встроенный светодиод.

Листинг M2.1. Подключение модуля RFID

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <SPI.h>
 
#include <MFRC522.h>
 
// Настраиваем пины SS и RST для нашей платы - Arduino Uno
 
#define SS_PIN 10
 
#define RST_PIN 9
 
#define LED13 13 //Встроенный светодиод.
 
//Зажигается когда доступ разрешен
 
MFRC522 mfrc522(SS_PIN, RST_PIN); // Создаем объект MFRC522
 
void setup() {
 
pinMode(LED13, OUTPUT);
 
Serial.begin(9600);
 
SPI.begin(); // Инициализируем интерфейс SPI
 
mfrc522.PCD_Init(); // Инициализируем MFRC522
 
Serial.println("Approximate your card to the reader...");
 
Serial.println();
 
}
 
void loop(){
 
if (!mfrc522.PICC_IsNewCardPresent()) // Ожидаем RFID-метку
 
return;
 
// При обнаружении RFID-метки пытаемся считать ее данные
 
if (!mfrc522.PICC_ReadCardSerial())
 
return;
 
// Извлекаем уникальный идентификатор RFID-метки (UID)
 
String content = "";
 
// Преобразуем поле UID в строку типа "XX XX XX XX"
 
for (byte i = 0; i < mfrc522.uid.size; i++)
 
{
 
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
 
content.concat(String(mfrc522.uid.uidByte[i], HEX));
 
}
 
content.toUpperCase();
 
// Выводим UID в терминал
 
Serial.print("Tag UID:");
 
Serial.println(content);
 
// Сравниваем UID с заданным
 
if (content.substring(1) == "<strong>7E 56 37 D5</strong>") // Укажите <strong>здесь</strong> UID
 
//RFID-метки, которой
 
//разрешен доступ
 
{
 
// Если UID совпал с заданным - доступ разрешен
 
Serial.println("Access granted");
 
Serial.println();
 
// Включаем встроенный на плате светодиод на 3 секунды
 
digitalWrite(LED13, HIGH);
 
delay(3000);
 
digitalWrite(LED13, LOW);
 
}
 
else // Если UID не совпал с заданным - доступ запрещен
 
{
 
Serial.println("Access denied");
 
Serial.println();
 
}
 
}
Опубликовано

8-разрядный расширитель портов PCF8574

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

Если вы исчерпали для подключения внешних устройств (датчиков, модулей, светодиодов и др.) все выводы Arduino (для Arduino UNO это 6 аналоговых и 14 цифровых), то модуль расширителя портов (рис. M4.1) поможет вам добавить дополнительно 8 контактов (P0 … P7). Эти контакты можно использовать как в качестве входов (например, для чтения сигнала с датчика), так и для выходов (например, для включения светодиодов). Модули расширителя портов работают на шине I2C, и, если подключить в проекте последовательно 8 таких устройств, вы соответственно получите дополнительно 8 × 8 = 64 контакта для ввода и вывода.

Внешний вид, назначение контактов

M4-1-PCF8574

Рис. M4.1. 8-разрядный расширитель портов PCF8574

Основные характеристики

Наименование Значение
Рабочий режим питания, В от 2,5 до 6 В
Низкий ток покоя, мА максимум 10 мА
Адресация на 3 вывода аппаратных адресов для использования до 8 устройств (до 16 устройств при использовании PCF8574A)

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

M4-2-PCF8574

Рис. M4.2. Схема подключения кнопки и светодиода

Программный код

  1. Скачайте по ссылке https://github.com/skywodd/pcf8574_arduino_library библиотеку PCF8574/PCF8575 Arduino library для работы Arduino с расширителем PCF8574.
  2. Скачав библиотеку, выберите ее и установить с помощью команды Скетч | Подключить библиотеку | Добавить ZIP библиотеку…
  3. Загрузите скетч из листинга M4.1.

Листинг M4.1. Подключение расширителя портов PCF8574

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
#include &lt;Wire.h&gt;
 
#include "PCF8574.h" //Библиотека для расширителя портов.
 
 
 
PCF8574 expander; //создадим объект класса PCF8574 с расширителем
 
#define pinLed 0 //Номер пина светодиода на расширителе (P0)
 
#define pinButton 1 //Номер пина кнопки на расширителе (P1)
 
 
 
void setup(){
 
expander.begin(0x20); / Инициализация расширителя по адресу 0x20
 
 
 
expander.pinMode(pinLed,OUTPUT); //Настройка пина светодиода
 
//(на расширителе) на выход
 
expander.pinMode(pinButton,INPUT_PULLUP); // Настройка пина кнопки
 
//(на расширителе) на вход
 
}
 
 
 
void loop(){
 
if (expander.digitalRead(pinButton)==HIGH)
 
expander.digitalWrite(pinLed, HIGH);
 
else
 
expander.digitalWrite(pinLed,LOW);
 
}

Примечание

Если вы используете для управления проектом со смартфона платформу RemoteXY, закомментируйте в файле PCF8574.h библиотеки PCF8574 строку:

1
#define PCF8574_INTERRUPT_SUPPORT

Это строка номер 36. Тем самым вы отключите у расширителя поддержку прерываний, но зато предотвратите конфликт приложения RemoteXY и расширителя PCF8574, которые используют одинаковый вектор прерываний.


Опубликовано

УЗ-датчик расстояния HC-SR04

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

УЗ-датчик HC-SR04 определяет расстояние до объекта, измеряя время прихода отраженной волны (рис. S3.1). Такой же принцип ультразвуковой эхолокации используют летучие мыши.

Основные характеристики

Наименование Значение
Напряжение питания, В 5
Ток покоя, мA <2
Эффективный угол менее 15°
Диапазон измерения расстояния, см 2 ÷ 400
Разрешение, см 0,3
Рабочий ток, мA 15
Рабочая частота, кГц 40
Размеры, мм 45×20×15

Внешний вид, назначение контактов

03-01-HC-SR-04

Рис. S3.1. Принцип действия УЗ-датчика

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

2-03-2-HC-SR-04

Рис.S3.2. Схема подключения УЗ-датчика

Программный код

Листинг S3.1. Определение дальности с помощью УЗ-датчика HC-SR04

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#define TrigPin 4 //Номер пина Trig Датчика расстояния(HC-SR04)
 
#define EchoPin 5 //Номер пина Echo Датчика расстояния(HC-SR04)
 
long duration, cm, inches; //переменные
 
void setup() {
 
//Инциализация последовательного порта
 
Serial.begin (9600);
 
//Установка режима работы для пинов
 
pinMode(TrigPin, OUTPUT);
 
pinMode(EchoPin, INPUT);
 
}
 
void loop(){
 
// Датчик срабатывает при высоком импульсе 10 или более микросекунд.
 
// Для большей точности установим значение LOW на пине Trig:
 
digitalWrite(TrigPin, LOW);
 
delayMicroseconds(5);
 
// Теперь установим высокий уровень на пине Trig
 
digitalWrite(TrigPin, HIGH);
 
delayMicroseconds(10);
 
digitalWrite(TrigPin, LOW);
 
//Считываем сигнал с датчика: высокий импульс,
 
//длительность которого равна времени (в микросекундах)
 
//от отправки пинга до получения его эхо-сигнала от объекта.
 
duration = pulseIn(EchoPin, HIGH);
 
cm = (duration/2)/29.1; //преобразуем время в расстояние в см
 
inches = (duration/2)/74; //преобразуем время в расстояние в дюймах
 
Serial.print(inches);
 
Serial.print("in, ");
 
Serial.print(cm);
 
Serial.print("cm");
 
Serial.println();
 
delay(250);
 
}

Результат

2-03-3-HC-SR-04

Рис. S3.3. Результаты измерений

Опубликовано

Управляемый ночник на трехцветном светодиоде

По материалам 2 главы книги Дж. Блума «Изучаем Arduino: инструменты и методы технического волшебства»

https://bhv.ru/product/izuchaem-arduino-instrumenty-i-metody-tehnicheskogo-volshebstva-2-e-izd-per-s-angl/

На данном этапе мы знаем, как подавать сигналы на цифровые контакты платы Arduino, как считывать с цифровых контактов платы сигналы, подаваемые на них внешними устройствами, а также как использовать ШИМ для изменения яркости свечения светодиода. Этих знаний будет достаточно, чтобы создать на основе платы Arduino своеобразный ночник. Для этого к ней нужно подключить трехцветный светодиод (красный, зеленый, синий) и кнопку для управления светодиодом. Цветом трехцветного светодиода можно управлять, меняя яркость составляющих его светодиодов.

Для этого проекта мы возьмем трехцветный светодиод с общим анодом. Это означает, что наш светодиод имеет в целом четыре вывода. Три вывода подключены к катодам светодиодов разных цветов, а четвертый подключен к анодам всех трех светодиодов. Подключите выводы катодов трехцветного светодиода к трем контактам ШИМ платы Arduino через последовательные токоограничивающие резисторы, как показано в монтажной схеме на рис. 2.8. Как и в случае с одноцветным красным светодиодом, используйте резисторы номиналом 220 Ом.

Рис. 2.8. Монтажная схема ночника на трехцветном светодиоде (Рисунок создан в программе Fritzing)

Поскольку все три составляющих светодиода имеют общий анод, для индивидуального управления ими к плате Arduino нужно подключать их катоды, а не анод, как было в случае с одноцветным красным светодиодом в предыдущих проектах. Контакт платы Arduino, работающий в режиме вывода, поставляет ток двумя способами:

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

Поэтому, когда анод светодиода подключен к положительному напряжению 5 В, а его катод — к контакту платы Arduino, работающему в режиме вывода, логика управления этим светодиодом инвертируется. Чтобы обеспечить протекание тока из шины питания напряжением 5 В через резистор и светодиод и далее через контакт платы Arduino на внутреннюю землю платы, на этот контакт нужно подавать низкий управляющий уровень. Когда же на этот контакт подается высокий уровень, на нем будет такой же потенциал (5 В), как и на аноде светодиода. В результате ток не будет протекать, и светодиод выключится.

Можно разработать такую программу, чтобы при каждом нажатии кнопки с противодребезговой защитой циклически переключать цвета трехцветного светодиода. Для этого будет полезной дополнительная функция для задания следующего состояния цветового цикла трехцветного светодиода. В программе, код которой приведен в листинге 2.6, определено в общем семь цветовых состояний трехцветного светодиода, плюс одно выключенное состояние. Посредством функции analogWrite() можно создавать любые комбинации основных цветов, чтобы получить соответствующий общий цвет. Основной цикл loop() этой программы отличается от цикла в предыдущем примере только тем, что вместо переключения между двумя состояниями светодиода, в нем при каждом нажатии кнопки инкрементируется счетчик состояния светодиода, значение которого сбрасывается на ноль после прохождения через все доступные опции. Загрузите этот код в плату Arduino с подключенной к ней схемой ночника и любуйтесь его работой. Состояния цветов можно модифицировать, изменив значения аргумента цвета функции analogWrite().

Листинг 2.6. Программа rgb_nightlight.ino для управления трехцветным светодиодом

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
const int BLED=9; // Подключаем катод синего светодиода к контакту 9
 
const int GLED=10; // Подключаем катод зеленого светодиода к контакту 10
 
const int RLED=11; // Подключаем катод красного светодиода к контакту 11
 
const int BUTTON=2; // Кнопку подключаем к контакту 2
 
boolean lastButton = LOW; // Предыдущее состояние кнопки.
 
boolean currentButton = LOW; // Текущее состояние кнопки
 
int ledMode = 0; // Переключаемся в цикле между состояниями
 
// светодиода
 
void setup()
 
{
 
pinMode (BLED, OUTPUT); // Задаем режим вывода для контакта
 
// синего светодиода
 
pinMode (gLED, OUTPUT); // Задаем режим вывода для контакта
 
// зеленого светодиода
 
pinMode (RLED, OUTPUT); // Задаем режим вывода для контакта
 
// красного светодиода
 
pinMode (BUTTON, INPUT); // Задаем режим ввода для контакта кнопки
 
// (не обязательно)
 
}
 
/*
 
* Функция устранения дребезга контактов
 
* Передаем ей значение предыдущего состояния кнопки,
 
* и получаем от нее текущее значение состояния кнопки
 
* с устраненным дребезгом.
 
*/
 
boolean debounce(boolean last)
 
{
 
boolean current = digitalRead(BUTTON); // Считываем текущее
 
// состояние кнопки.
 
if (last != current) // если оно иное, чем предыдущее...
 
{
 
delay(5); // Ждем 5 мс
 
current = digitalRead(BUTTON); // Считываем состояние снова
 
}
 
return current; // Возвращаем текущее
 
// состояние кнопки
 
}
 
/*
 
* Выбор состояния светодиода
 
* Передаем функции номер состояния светодиода и устанавливаем
 
* его соответственно
 
* Обратите внимание на то, что поскольку наш трехцветный светодиод
 
* имеет общий анод, чтобы включать составляющие его светодиоды,
 
* на их катоды нужно подавать низкий (LOW) уровень.
 
*/
 
void setMode(int mode)
 
{
 
// КРАСНЫЙ
 
if (mode == 1)
 
{
 
digitalWrite(RLED, LOW);
 
digitalWrite(GLED, HIGH);
 
digitalWrite(BLED, HIGH);
 
}
 
// ЗЕЛЕНЫЙ
 
else if (mode == 2)
 
{
 
digitalWrite(RLED, HIGH);
 
digitalWrite(GLED, LOW);
 
digitalWrite(BLED, HIGH);
 
}
 
// СИНИЙ
 
else if (mode == 3)
 
{
 
digitalWrite(RLED, HIGH);
 
digitalWrite(GLED, HIGH);
 
digitalWrite(BLED, LOW);
 
}
 
// ФИЛОЛЕТОВЫЙ (КРАСНЫЙ+СИНИЙ)
 
else if (mode == 4)
 
{
 
analogWrite(RLED, 127);
 
analogWrite(GLED, 255);
 
analogWrite(BLED, 127);
 
}
 
// ЗЕЛЕНОВАТО-ГОЛУБОЙ (СИНИЙ+ЗЕЛЕНЫЙ)
 
else if (mode == 5)
 
{
 
analogWrite(RLED, 255);
 
analogWrite(GLED, 127);
 
analogWrite(BLED, 127);
 
}
 
// ОРАНЖЕВЫЙ (ЗЕЛЕНЫЙ+КРАСНЫЙ)
 
else if (mode == 6)
 
{
 
analogWrite(RLED, 127);
 
analogWrite(GLED, 127);
 
analogWrite(BLED, 255);
 
}
 
// БЕЛЫЙ (ЗЕЛЕНЫЙ+КРАСНЫЙ+СИНИЙ)
 
else if (mode == 7)
 
{
 
analogWrite(RLED, 170);
 
analogWrite(GLED, 170);
 
analogWrite(BLED, 170);
 
}
 
// ОТКЛЮЧЕН (mode = 0)
 
else
 
{
 
digitalWrite(RLED, LOW);
 
digitalWrite(GLED, LOW);
 
digitalWrite(BLED, LOW);
 
}
 
}
 
void loop()
 
{
 
currentButton = debounce(lastButton); // Считываем состояние
 
// кнопки с устраненным дребезгом
 
if (lastButton == LOW &amp;&amp; currentButton == HIGH) // если кнопка
 
// была нажата...
 
{
 
ledMode++; // Инкрементируем значение LED
 
}
 
lastButton = currentButton; // Сбрасываем значение кнопки
 
// Если прошли по всему циклу цветовых состояний,
 
// обнуляем счетчик
 
if (ledMode == 8) ledMode = 0;
 
setMode(ledMode); // Изменяем значение состояния светодиода
 
}

На первый взгляд может показаться, что это значительный объем кода, но это не больше, чем просто набор фрагментов, которые мы уже рассмотрели ранее в этой главе.

Каким образом можно еще модифицировать этот код? Можно, например, добавить считывание состояния дополнительных кнопок, чтобы управлять каждым из цветовых светодиодов отдельно. Можно также добавить режим мигания, используя код из программы для мигания светодиодом из главы 1. В действительности, возможности здесь неограниченны.

Примечание

Светодиод RGB

Конструктивно трехцветный светодиод представляет собой три цветных светодиода: красный (R), зеленый (G) и синий (B), смонтированных в общем корпусе. Различные оттенки цвета получаются путем смешения 3-х базовых цветов (модель RGB). Поскольку светодиоды расположены очень близко друг к другу, наши глаза видят результат сочетания цветов, а не три цвета по отдельности. Для регулировки интенсивности каждого светодиода можно использовать сигнал ШИМ.

Внешний вид, назначение контактов

Имейте в виду, что существуют два вида светодиодов RGB: с общим анодом (рис. L1.1, справа) и с общим катодом (рис. L1.1, слева) , которые имеют разную схему подключения общего вывода: к минусу (–) или к плюсу (+).

04-01-1-rgb

Рис. L1.1. RGB-светодиод с общим катодом (слева) и с общим анодом (справа)

Опубликовано

ЖК-дисплей 1602 с модулем I2C

По материалам руководства для набора “Умный дом на базе Arduino. Большой набор + КНИГА

В 10-й главе книги Дж. Блума «Изучаем Arduino: инструменты и методы технического волшебства» подробно описано применение LCD-дисплея в проектах Arduino (стр. 202).

При разработке больших проектов на Arduino Uno очень часто для подключения различных устройств не хватает выводов. Например, для подключения одного LCD-дисплея в проекте из книги Дж. Блума (стр. 205, рис. 10.2) задействовано 6 цифровых выводов (D2 ÷ D7) и два вывода питания платы Arduino.

Чтобы сократить количество выводов для подключения LCD-дисплеев, можно использовать специальный интерфейсный модуль IIC/I2C (рис. L2.1), с помощью которого обмен данными между LCD-дисплеем (ЖКД) и Arduino осуществляется по последовательному протоколу I2C (Inter-Integrated Circuit), который подробно описан в 8-й главе книги Дж. Блума.

В этом случае будут задействованы только 4 вывода Arduino:

  • GND (Земля),
  • VCC (Питание +5V),
  • A4 (SDA, Serial Data — последовательные данные),
  • A5 (SCL, Serial Clock — cигнал последовательного тактирования).

Внешний вид, назначение контактов

Удобно приобрести модуль LCD-дисплея, на котором модуль IIC/I2C уже установлен (см. рис. L2.1). На модуле LCD-дисплея расположен потенциометр для управления контрастом дисплея.

L2-1-LCD

Рис. L2.1. Плата ЖКД 1602 с модулем I2C

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

04-02-2-lcd

Рис. L2.2. Схема подключения LCD-дисплея с модулем I2C

Основные характеристики

Наименование Значение
Напряжение, В От 4,5 до 5,5
Ток, мА 1,5
Ток подсветки дисплея, мА 120
Напряжение подсветки дисплея, В От 4,1 до 4,3

Программный код

  1. Загрузите библиотеку LiquidCrystal I2C by Frank de Brabander для работы Arduino с LCD-дисплеем по протоколу I2C. Для этого откройте Менеджер библиотек, выполнив команду Инструменты | Управлять библиотеками. Справа вверху в строке поиска введите LiquidCrystal I2C. В открывшемся списке выберите LiquidCrystal I2C by Frank de Brabander. Нажмите кнопку Установка.
  2. Загрузите скетч из листинга L2.1. Адрес шины I2C по умолчанию: 0x27.

Примечание

Библиотеку также можно скачать в виде ZIP-файла по ссылке https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library и подключить в среду разработки Arduino IDE с помощью команды Скетч | Подключить библиотеку | Добавить .ZIP библиотеку….

Листинг L2.1. Тест LCD-экрана

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
#include &lt;Wire.h&gt;
 
#include &lt;LiquidCrystal_I2C.h&gt;
 
//задаем адрес экрана 0x27, 16 символов, 2 строки
 
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
void setup() {
 
lcd.init(); // Инициализируем экран включаем подсветку
 
lcd.backlight();
 
//Устанавливаем положение курсора для первой строки.
 
lcd.home();
 
//выводим строку 1
 
lcd.print("String 1 Test");
 
//выводим строку 2
 
lcd.setCursor(0, 1);
 
lcd.print("String 2 Test");
 
}
 
void loop() {
 
}

Библиотека LiquidCrystal_I2C не поддерживает кириллические символы. Для их отображения по адресу https://github.com/ssilver2007/LCD_1602_RUS скачайте и установите библиотеку LCD_1602_RUS (автор Сергей Сироткин). При этом основная библиотека LiquidCrystal_I2C должна быть уже установлена. Имейте в виду, что максимально возможно отображение восьми уникальных по начертанию русских символов (например: Ж, Д, И, Ю и т. п.).

Загрузите скетч из листинга L2.2 — теперь символы кириллицы должны отображаться корректно.

Листинг L2.2. Тест кириллических шрифтов на LCD-экране

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
#include &lt;LCD_1602_RUS.h&gt;
 
LCD_1602_RUS lcd(0x27, 16, 2);
 
void setup()
 
{
 
lcd.init();
 
lcd.backlight();
 
lcd.setCursor(0, 0);
 
lcd.print("Первая строка");
 
lcd.setCursor(0, 1);
 
lcd.print("Вторая строка");
 
}
 
void loop()
 
{
 
}
Опубликовано

Светодиодная матрица 8×8 с драйвером MAX7219

По материалам руководства для набора “Умный дом на базе Arduino. Большой набор + КНИГА

Светодиодная матрица представляет собой набор светодиодов, сгруппированных в квадратную или прямоугольную матрицу. Каждый светодиод имеет отрицательный вывод (катод), который подключен к «земле», и положительный (анод), подключенный к источнику питания. Аноды и катоды соединены так, что образуют столбцы и строки. Таким образом, подавая питание от Arduino на определенные строки и столбцы, мы можем «зажигать» нужный светодиод.

Внешний вид, назначение контактов

Для управления матрицей 8×8 требуются 16 контактов (рис. L3.1, слева). Однако задействовать 16 контактов Arduino UNO для вывода символов на матрицу очень расточительно. Лучшим решением является использование специального расширителя выводов на базе микросхемы MAX7219. В этом случае для управления матрицей достаточно пяти контактов. Такие модули выпускаются в различном исполнении (рис. L3.1, справа).

04-03-1-8x8

Рис. L3.1. Светодиодная матрица 8×8 с модулем MAX7219

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

04-03-2-8x8

Рис. L3.2. Схема подключения cветодиодной матрицы 8×8 с модулем MAX7219

Программный код

  1. Загрузите библиотеку LedControl для работы Arduino с модулем MAX7219. Для этого откройте Менеджер библиотек, выполнив команду Инструменты | Управлять библиотеками. Справа вверху в строке поиска введите LedControl. В открывшемся списке выберите LedControl by Eberhard Fahle. Нажмите кнопку Установка.
  2. Загрузите скетч из листинга L3.1 — на матрице появится смайлик, изменяющий «мимику» через каждую секунду.

Листинг L3.1. Вывод динамического смайла на светодиодную матрицу

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "LedControl.h"
 
#include "binary.h"
 
/*
 
DIN подключен к пину 11
 
CLK подключен к пину 13
 
CS подключен к пину 8
 
*/
 
LedControl matr=LedControl(11,13,8,1);
 
// Счастливый смайл
 
byte hf[8]= {B00111100,B01000010,B10011001,B10100101,B10000001,B10100101,B01000010,B00111100};
 
// Нейтральный смайл
 
byte nf[8]= {B00111100,B01000010,B10000001,B10111101,B10000001,B10100101,B01000010,B00111100};
 
// Печальный смайл
 
byte sf[8]= {B00111100,B01000010,B10100101,B10011001,B10000001,B10100101,B01000010,B00111100};
 
void setup() {
 
matr.shutdown(0,false); //Включаем светодиодную матрицу
 
matr.setIntensity(0,8); // Установка яркости на среднее значение
 
matr.clearDisplay(0); // Очистка матрицы
 
Serial.begin(9600);
 
}
 
void loop(){
 
//Вывод счастливого смайла
 
matr.setRow(0,0,hf[0]);
 
matr.setRow(0,1,hf[1]);
 
matr.setRow(0,2,hf[2]);
 
matr.setRow(0,3,hf[3]);
 
matr.setRow(0,4,hf[4]);
 
matr.setRow(0,5,hf[5]);
 
matr.setRow(0,6,hf[6]);
 
matr.setRow(0,7,hf[7]);
 
delay(1000); //задержка 1 с
 
//Вывод нейтрального смайла
 
matr.setRow(0,0,nf[0]);
 
matr.setRow(0,1,nf[1]);
 
matr.setRow(0,2,nf[2]);
 
matr.setRow(0,3,nf[3]);
 
matr.setRow(0,4,nf[4]);
 
matr.setRow(0,5,nf[5]);
 
matr.setRow(0,6,nf[6]);
 
matr.setRow(0,7,nf[7]);
 
delay(1000); //задержка 1 с
 
//Вывод печального смайла
 
matr.setRow(0,0,sf[0]);
 
matr.setRow(0,1,sf[1]);
 
matr.setRow(0,2,sf[2]);
 
matr.setRow(0,3,sf[3]);
 
matr.setRow(0,4,sf[4]);
 
matr.setRow(0,5,sf[5]);
 
matr.setRow(0,6,sf[6]);
 
matr.setRow(0,7,sf[7]);
 
delay(1000); //задержка 1 с
 
}

Вы можете самостоятельно создавать собственные изображения для вывода на матрицу 8×8. Изображение можно смоделировать на обычном листке в клетку, в табличном редакторе MS Excel или онлайн. Например, на ресурсе http://arduino.on.kg/matrix-font можно создать и получить программный код собственного изображения или выбрать готовый символ (рис. L3.3).

04-03-3-8x8

Рис. L3.3. Моделирование изображения на матрице 8×8