The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

Руководство содержит пошаговое описание выполнения экспериментов и проектов с помощью электронных компонентов, представленных в наборе «Умный дом. Набор для экспериментов с контроллером Arduino + КНИГА».

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by BHV.RU Publishing House, 2021-03-25 04:55:02

Умный дом. Набор для экспериментов с контроллером Arduino (Руководство пользователя).

Руководство содержит пошаговое описание выполнения экспериментов и проектов с помощью электронных компонентов, представленных в наборе «Умный дом. Набор для экспериментов с контроллером Arduino + КНИГА».

Keywords: Arduino,Умный дом

УМНЫЙ ДОМ

НАБОР ДЛЯ ЭКСПЕРИМЕНТОВ С КОНТРОЛЛЕРОМ

ARDUINO

УДК 004.4
ББК 32.973.26-018.2
У54

У54 Умный дом. Набор для экспериментов с контроллером Arduino (Руководство пользова-
теля). — СПб.: БХВ-Петербург, 2021. — 44 с.: ил.
ISBN 978-5-9775-6741-1
Руководство содержит пошаговое описание выполнения экспериментов и проектов с по-
мощью электронных компонентов, представленных в наборе «Умный дом. Набор для экспе-
риментов с контроллером Arduino + КНИГА».

Для начинающих радиолюбителей

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

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

ОСТОРОЖНО, СВЕТОДИОДЫ!
Информируйте ваших детей о мерах предосторожности при обращении с яркими свето-

диодами! Никогда не смотрите в упор на светодиод — это может вызвать повреждение
сетчатки!

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

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

© ООО «БХВ», 2021
© Оформление. ООО «БХВ-Петербург», 2021

дерзай!

Электронный архив
Все файлы скетчей, которые используются в приведенных здесь проектах,
можно скачать по ссылке ftp://ftp.bhv.ru/9785977567411.zip или со страницы
набора на сайте издательства «БХВ-Петербург» по адресу https://bhv.ru.

Содержание

1. Введение.....................................................................................4

Что вам понадобится ....................................................................................... 4
Состав набора .................................................................................................. 5

2. Обучение на экспериментах ....................................................... 6

2.1. Эксперименты из книги.............................................................................. 6
2.1.1. Некоторые особенности выполнения экспериментов.................................. 8

2.2. Подключение датчиков и модулей ...........................................................10
2.2.1. Датчик звука .............................................................................................10
2.2.2. ИК-датчик движения HC-SR501.................................................................12
2.2.3. Датчик газа MQ-135................................................................................... 14
2.2.4. Модуль реле ............................................................................................. 17

2.3. Уроки разработчика Arduino.....................................................................19

3. Проекты ....................................................................................20

Проект 1. Световой терменвокс...................................................................... 20
Проект 2. Универсальная сигнализация..........................................................21
Проект 3. Освещение домашнего сада ........................................................... 25
Проект 4. «Умный» свет ................................................................................ 28
Проект 5. Секретный код ............................................................................... 30
Проект 6. «Умный» дом................................................................................. 32

4. Справочная информация ...........................................................36

4.1. Назначение контактов на плате Arduino Uno............................................ 36
4.2. Краткая справка по программированию Arduino ..................................... 38
4.3. Решение проблем.....................................................................................41

Полезные ссылки..........................................................................43

1. Введение

Поздравляем вас с приобретением учебного набора «Умный дом. Набор для экспери-
ментов с контроллером Arduino + КНИГА»!
В состав набора входят популярная во всем мире книга Дж. Блума «Изучаем Arduino:
инструменты и методы технического волшебства» (2-е изд.) и электронные компонен-
ты для выполнения экспериментов, описанных в книге: плата Arduino Uno, датчики, мо-
дули, светодиоды, макетная плата и другие (см. табл. 1.1). В процессе чтения книги вы
сможете собирать электрические схемы и проводить эксперименты, чтобы облегчить
освоение изучаемого материала.
Вы сможете выполнить:
• более 22 базовых экспериментов, приведенных в табл. 1.2;
• 10 экспериментов и проектов, описанных в руководстве;
• более 30 экспериментов, представленных на сайте разработчика Arduino http://ar-

duino.cc/en/Tutorial/HomePage.
Набор предназначен для тех, у кого нет опыта разработки проектов Arduino, а также
написания программного кода для электронных устройств.
Надеемся, что набор поможет вам быстро адаптироваться в мире Arduino, и вы полу-
чите удовольствие, видя, как «оживают» ваши творения!

Что вам понадобится

Во-первых, необходимо иметь доступ к сети Интернет, чтобы скачать среду разработ-
ки Arduino IDE (Integrated Development Environment)1, а также загрузить примеры про-
граммного кода (если вы не хотите вводить его вручную) и специальные библиотеки.
Во-вторых, понадобится хорошо освещенный стол, на котором вы будет проводить
эксперименты, а также расположенный вблизи рабочего места настольный ПК или
ноутбук для загруки кода в Arduino.

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

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

1 Ссылка для закачки: http://arduino.ru/Arduino_environment.

4

Состав набора

В состав набора входят компоненты, указанные в табл. 1.1.

Таблица 1.1. Компоненты, входящие в набор

№ Компоненты набора Кол-во, шт.
КОНТРОЛЛЕР
1
1 Плата, совместимая с Arduino Uno R3 1
2 Кабель USB (A–B)
1
МАКЕТНЫЕ ПЛАТЫ
3 Плата макетная беспаечная, 400 контактов, 8,5х5,5 см 1
20
КАБЕЛИ, ПРОВОДА 20
4 Набор проводов 65 шт. с штекерами на обоих концах («папа-папа»)
5 Провода длиной 20 см с разъемами «папа-мама» 10
6 Провода длиной 20 см с разъемами «папа-папа» 10

РЕЗИСТОРЫ 1
7 Резистор 220 Ом 1/4 Вт
8 Резистор 10 кОм 1/4 Вт 5

ПОТЕНЦИОМЕТРЫ 8
9 Потенциометр 10 кОм (WH148 B10K) 1

КНОПКИ, ТУМБЛЕРЫ 1
10 Кнопка без фиксации 6×6×5 мм
1
СВЕТОДИОДЫ, ЖК-ДИСПЛЕИ 1
11 Светодиоды разных цветов, диаметром 5 мм 1
12 Трехцветный RGB-светодиод с общим катодом диаметром 5 мм 1
1
ТРАНЗИСТОРЫ, МИКРОСХЕМЫ, ДИОДЫ
13 Микросхема 8-разрядного сдвигового регистра 74HC595 1

ДАТЧИКИ 1
14 Аналоговый датчик температуры TMP36 1
15 Фоторезистор
16 Датчик звука KY-038
17 Датчик движения HC-SR501
18 Датчик углекислого газа MQ-135

МОДУЛИ
19 Модуль реле

ЗВУКОВЫЕ УСТРОЙСТВА
20 Динамик с сопротивлением катушки 8 Ом
21 Пьезоэлектрический зуммер 5 В

5

Таблица 1.1 (окончание)

№ Компоненты набора Кол-во, шт.

ПИТАНИЕ

22 Батарея напряжением 9 В 1

23 Клипса для батарейки 9 В 1

ИНСТРУМЕНТЫ, ВСПОМОГАТЕЛЬНЫЕ УСТРОЙСТВА

24 Монтажная диэлектрическая площадка для Arduino 1

25 Отвертка 1

КНИГА, РУКОВОДСТВО

26 Блум Дж. Изучаем Arduino: инструменты и методы технического вол- 1
шебства. 2-е изд. — СПб.: БХВ-Петербург. — 544 с.

27 Руководство пользователя 1

2. Обучение на экспериментах

С помощью электронных компонентов данного набора вы сможете:

1. Получить на практике базовые знания и навыки по разработке электронных
устройств на базе микроконтроллера Arduino. Для этого следует выполнить экспе-
рименты из книги, перечисленные в табл. 2.1.

2. Используя полученные знания, а также дополнительные модули и датчики, входя-
щие в данный набор, вы научитесь подключать новые устройства к контроллеру
Arduino Uno (см. раздел 2.2), а также сможете собрать полезные устройства, опи-
санные в данном руководстве (см. раздел 3).

2.1. Эксперименты из книги

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

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

Глава из книги Эксперимент Стр. Листинг
49
Глава 1. Начало Эксперимент 1.1. Анализируем программу Blink
работы и основ-
ные сведения
о платформе
Arduino

6

Таблица 2.1 (окончание)

Глава из книги Эксперимент Стр. Листинг

Глава 2. Цифро- Эксперимент 2.1. Включение светодиода 57 2.1
вые входы и вы- 62 2.2
ходы и широтно- Эксперимент 2.2. Мигание светодиодом с разной
импульсная частотой 64 2.3
модуляция Эксперимент 2.3. Изменение яркости светодиода

Эксперимент 2.4. Подключение кнопки к плате 69 2.4
Arduino

Эксперимент 2.5. Переключение светодиода с 74 2.5

функцией устранения дребезга контактов кнопки

Эксперимент 2.6. Управление трехцветным свето- 76 2.6
диодом

Глава 3. Считы- Эксперимент 3.1. Считывание выходного аналого- 88 3.1
вание сигналов вого сигнала потенциометра 92 3.2
аналоговых дат-
чиков Эксперимент 3.2. Подключение датчика темпера-
туры к плате Arduino

Эксперимент 3.3. Использование переменных ре- 97 3.3
зисторов в качестве аналоговых датчиков

Глава 6. Работа- Эксперимент 6.1. Воспроизведение простой мело- 177 6.2

ем со звуком дии с помощью платы Arduino

Эксперимент 6.2. Микропианино на Arduino 181 6.3

Глава 7. Последо- Эксперимент 7.1. Тестирование функций print 192 7.1
вательный интер- 194 7.2
фейс USB Эксперимент 7.2. Отображение данных в таблич-
ном виде

Эксперимент 7.3. Возвращение платой Arduino 198 7.3
получаемых данных

Эксперимент 7.4. Отправка одиночных символов 200 7.4
для управления светодиодом

Эксперимент 7.5. Управление разноцветным све- 202 7.5
тодиодом с помощью списка значений

Эксперимент 7.6. Передача данных на компьютер 208 7.6

Эксперимент 7.7. Прием данных по последова- 209 7.7
тельному каналу и изменение цвета окна

Эксперимент 7.8. Управление разноцветным све- 211 7.8
тодиодом на Arduino с помощью мыши, подключен-
ной к ПК

Глава 9. Сдвиго- Эксперимент 9.1. Подключение к плате Arduino 236 9.1

вые регистры сдвигового регистра и восьми светодиодов

Эксперимент 9.2. Эффект бегущего светодиода 240 9.2

Эксперимент 9.3. Гистограмма, реагирующая 241 9.3
на изменение входных условий

7

Некоторые особенности выполнения экспериментов
Подключение RGB-светодиодов

Существуют два типа светодиодов: с общим анодом и общим катодом. Светодиоды
обоих типов выполняют одинаковые функции, но принцип их работы и схема подклю-
чения отличается (рис. 2.1). В набор входит только светодиод с общим катодом, поэто-
му в некоторые схемы следует внести незначительные изменения.
В эксперименте 2.6 («Управление трехцветным светодиодом») используется RGB-
светодиод с общим анодом, а на рис. 2.2 показано применение в этой схеме свето-
диода с общим катодом. Как видно, длинный вывод RGB-светодиода (общий катод)
подключен к земле (GND), а не к шине +5 В.

Рис 2.1. Трехцветный RGB-светодиод с общим катодом (слева) и общим анодом (справа)

Рис. 2.2. Монтажная схема ночника на трехцветном светодиоде с общим катодом

8

Обратите внимание на подключение общего катода RGB-светодиода при выполнении
других экспериментов (Эксперимент 7.5. «Управление разноцветным светодиодом с
помощью списка значений»).

Гистограмма, реагирующая на изменение аналогового сигнала

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

Рис 2.3. Монтажная схема гистограммы, реагирующей на изменение сопротивления потенциометра

В листинге 9.3 скетча bargraph.ino следует исправить только одно значение maxVal.
Вместо строки
// Максимальное значение, предоставляемое ИК-датчиком
int maxVal = 500;
следует установить
// Максимальное значение, предоставляемое потенциометром
int maxVal = 1023;

9

2.2. Подключение датчиков и модулей

2.2.1. Датчик звука

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

Рис. 2.4. Внешний вид датчиков звука

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

Вы можете использовать или цифровой, или аналоговый выход датчика. На аналого-
вом выходе присутствует сигнал, поступающий с микрофона, а на цифровом — «1»,
если аналоговый сигнал превысит пороговое значение и «0» — в противном случае.
Пороговое значение можно настроить с помощью потенциометра, расположенного на
плате. Можно подключить одновременно и два выхода (например, для настройки по-
рогового значения). Схема подключения датчика звука приведена на рис. 2.5, а код
программы — в листинге 2.1.

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

10

Программный код
Листинг 2.1. Измерение громкости с помощью датчика звука

#define soundAnalogPin A0 // Контакт, к которому подключен аналоговый выход
#define soundDigitalPin 4 // Контакт, к которому подключен цифровой выход
int analogVal=0; // Объявляем переменные для хранения значений
int digitalVal=0; // с датчика и задаем начальное значение 0
void setup()
{

Serial.begin(9600); // Открываем монитор порта
pinMode(soundAnalogPin, INPUT); // Настройка аналогового контакта на вход
pinMode(soundDigitalPin, INPUT); // Настройка цифрового контакта на вход
}
void loop()
{
// Присваиваем переменной аналоговое значение
analogVal =analogRead(soundAnalogPin);
// Присваиваем переменной цифровое значение
digitalVal=digitalRead(soundDigitalPin);
// Выводим значения, полученные с датчика
Serial.print("Sound value A0: "); //
Serial.print(analogVal,DEC);
Serial.print(" D0: ");
Serial.println(digitalVal,DEC);
delay(100); // Задаем паузу
}

Действие датчика иллюстрирует рис. 2.6.

Рис. 2.6. Момент хлопка в ладоши можно зафиксировать на мониторе последовательного порта

11

2.2.2. ИК-датчик движения HC-SR501

Пассивный инфракрасный датчик движения HC-SR501 (PIR — Passive Infrared) фик-
сирует факт перемещения объекта. Матрица из 15 небольших линз фокусирует ИК-
излучение из разных участков окружающего пространства на пироэлектрический де-
тектор, основу которого составляет пластина из танталата лития, вырабатывающая
небольшое напряжение в ответ на поступающее тепловое излучение. При перемеще-
нии объекта из одной зоны в другую генерируется выходной сигнал (рис. 2.7). Основ-
ные параметры датчика HC-SR501 приведены в табл. 2.2.

Таблица 2.2. Основные параметры датчика HC-SR501

Наименование Значение
Постоянное напряжение, В 4,5–20
Ток потребления в режиме ожидания, мкА менее 50
Наибольший потребляемый ток во время работы, мА 65
Напряжение логических уровней, В 3,3
Расстояние обнаружения, м 3–7 (по умолчанию 7)
Максимальный угол обнаружения на расстоянии 7 м 110°
Температура окружающего воздуха при работе, °C –15…70
Размеры, мм 32×24×28

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

Внешний вид датчика и назначение контактов приведен на рис. 2.7, зона обнаружения
датчика — на рис. 2.8, схема подключения датчика движения к плате Arduino Uno — на
рис. 2.9, код программы — в листинге 2.2.

Рис. 2.7. Датчик HC-SR501

12

Рис. 2.8. Зона обнаружения датчика PIR с линзой Френеля

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

13

Листинг 2.2. Обнаружение перемещения датчиком движения HC-SR501

#define IKPin 2 // Номер контакта ИК-датчика движения HC-SR501

#define ledPin 13 // Номер контакта встроенного светодиода

void setup(){

Serial.begin(9600);

pinMode(IKPin, INPUT); // Объявляем контакт,

// к которому подключен датчик движения, как вход

pinMode(ledPin,OUTPUT); // Объявляем контакт, к которому подключен светодиод, как выход

}

void loop(){

int pirVal = digitalRead(IKPin); // Считываем значения с датчика движения

// Если обнаружили движение, то транслируем сигнал

// тревоги в монитор порта и включаем светодиод

if(pirVal == HIGH) {

digitalWrite(ledPin, HIGH);

Serial.print("ALARM");

delay(2000);

}

else {

Serial.print("Scaning");

digitalWrite(ledPin,LOW);

}

}

Действие датчика иллюстрирует рис. 2.10.

Рис. 2.10. Фиксация движения на Мониторе порта

2.2.3. Датчик газа MQ-135

Датчик газа MQ-135 предназначен для обнаружения вредных примесей газа. В качестве
чувствительного элемента применяют диоксид олова (SnО2), который имеет низкую про-
водимость при отсутствии примесей в воздухе. Когда датчик находится в среде с парами
токсичных газов, его проводимость возрастает. Датчик MQ-135 очень чувствителен к
аммиаку, сульфидам и парам бензола, СО2, парам алкоголя и идеально подходит для
мониторинга дыма и других вредных примесей в воздухе. Слева на рис. 2.11 изображен
внешний вид датчика, а справа — график изменения сопротивления датчика в зависи-
мости от концентрации различных газов в окружающем воздухе в миллионных долях (от
общего объема газа). Основные характеристики датчика приведены в табл. 2.3, схема
подключения датчика к плате Arduino Uno — на рис. 2.12, код программы — в листин-
ге 2.3, результаты работы, отображаемые в Мониторе порта — на рис. 2.13.

14

Рис. 2.11. Датчик газа MQ-135

Таблица 2.3. Основные характеристики датчика MQ-135

Наименование Значение
Напряжение питания, В 5
Потребляемый ток, мА 160
Рабочая температура, °С 10–45
Относительная влажность, % Менее 95
Концентрация кислорода в воздухе (стандартная), % 21
Стандартная температура измерения, °С 20
Влажность, % 65
Диапазон измерений, ppm
10–300
аммиак и этиловый спирт 10–1000
бензин

Рис. 2.12. Подключение датчика газа к плате

15

Листинг 2.3. Измерение концентрации газов с помощью датчика MQ-135
#define MQPin A0 // Контакт, к которому подключен датчик газа
#define ledPin 13 // Контакт встроенного светодиода
int sensorValue = 0; // Переменная для хранения значений

void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
Serial.println("MQ135 Test" ); // Посылаем текст в монитор порта

}
void loop() {

// Считываем значения с датчика
sensorValue = analogRead(MQPin);
if (sensorValue >= 400)

// и, если превышен заданный порог,
{

digitalWrite(ledPin, HIGH); // то включаем светодиод,
}
else // а если нет…
{
digitalWrite(ledPin, LOW); // то выключаем
}
Serial.print("MQ135 value= " );

// Для отслеживания данных с датчиков
// транслируем их в монитор порта
Serial.println(sensorValue);
delay(1000);
}

Рис. 2.13. Результаты работы датчика можно отследить с помощью Монитора порта

16

2.2.4. Модуль реле

Реле предназначено для включения и выключения мощной нагрузки путем подачи
маломощного управляющего электрического сигнала. Для управления реле использу-
ется низкое напряжение или небольшой ток, чтобы с его помощью управлять высоким
напряжением и/или большим током.
В электромеханическом реле ток протекает через катушку, которая действует как
электромагнит, замыкающий (или размыкающий) контакты силовой части реле. Кро-
ме электромеханических существуют и твердотельные реле, использующие полупро-
водниковую электронику (без катушки и механических движущихся частей).
Для удобства управления и подключения к Arduino реле устанавливаются на платы, на
которых кроме самого реле расположены контакты для подключения и другие элемен-
ты (рис. 2.14). На плате может размещаться различное количество реле. Основные ха-
рактеристики модуля реле приведены в табл. 2.4, схема подключения — на рис. 2.15,
тестовая программа для включения и выключения лампочки через каждые 2 секун-
ды — в листинге 2.4.

Рис. 2.14. Внешний вид и назначение контактов одноканальных модулей реле

17

Таблица 2.4. Основные характеристики модуля реле

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

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

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

#define relayPin 2 // Номер контакта для управления реле

void setup() {

pinMode(relayPin, OUTPUT); // Настройка контакта реле как выходного

}

void loop() {

digitalWrite(relayPin, HIGH); // Замыкаем реле

delay(3000); // Ждем 3 секунды

digitalWrite(relayPin, LOW); // Размыкаем реле

delay(3000); // Ждем 3 секунды

}

18

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

2.3. Уроки разработчика Arduino

На сайте разработчика Arduino http://arduino.cc/en/Tutorial/HomePage собрано боль-
шое количество простых уроков по разработке различных типов устройств. Скетчи
уроков интегрированы в среду разработки Arduino IDE (рис. 2.16). Это облегчает за-
дачу начинающим, так как на первом этапе обучения не потребуется ввод программы
вручную.

Рис. 2.16. Примеры, интегрированные в среду разработки Arduino IDE

19

3. Проекты

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

Проект 1. Световой терменвокс

Соберем простейший имитатор музыкального инструмента — терменвокса. Только
при игре на нашем терменвоксе «музыкант» будет подносить руки не к антенне, а
к фоторезистору и тон звука будет меняться в зависимости от освещенности. Схема
подключения приведена на рис. 3.1, программа — в листинге 3.1.

Необходимые компоненты

• Контроллер Arduino Uno. • Пьезоизлучатель.
• Макетная плата для прототипирования. • Резистор 1 кОм.
• Фоторезистор.

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

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

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

20

Листинг 3.1. Световой терменвокс (m_listing_03_1.ino)

#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);
}
}

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

Проект 2. Универсальная сигнализация

Проект «Универсальная сигнализация» призван помочь вам защитить свой дом от
разных напастей: несанкционированного проникновения в квартиру и высокой кон-
центрации углекислого газа. Схема подключения приведена на рис. 3.2, программа —
в листинге 3.2.

21

Необходимые компоненты • Датчик движения.
• Пьезоизлучатель.
• Контроллер Arduino Uno. • Модуль реле.
• Макетная плата.
• Датчик звука.
• Датчик газа.

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

Рис. 3.2. Схема подключения универсальной сигнализации

22

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

Листинг 3.2. Универсальная сигнализация (m_listing_03_2.ino)

#define pirPin 9 // Объявляем переменную для датчика движения, указываем контакт

int SoundPin = A4;

int Count=0;

int val; // Объявляем переменную для датчика звука

int relay1 = 3; // Объявляем переменную для реле 1, указываем контакт

int relay2 = 4; // Объявляем переменную для реле 2, указываем контакт

int relay3 = 5; // Объявляем переменную для реле 3, указываем контакт

int relay4 = 6; // Объявляем переменную для реле 4, указываем контакт

const int gassensorpin = A5; // Объявляем переменную для датчика газа, указываем контакт

int gassensorvalue = 0; // Объявляем переменную для хранения значения с датчика
// газа, приравниваем ее к 0

int buzzer = 8; // Объявляем переменную для пьезоизлучателя, указываем контакт

void setup()
{

pinMode(SoundPin, INPUT); // Назначаем контакт датчика звука как вход
pinMode(buzzer, OUTPUT); // Назначаем контакт пьезоизлучателя как выход
pinMode(pirPin, INPUT); // Назначаем контакт датчика движения как вход
pinMode(relay1, OUTPUT); // Назначаем контакт реле как выход
pinMode(relay2, OUTPUT); // Назначаем контакт реле как выход
pinMode(relay3, OUTPUT); // Назначаем контакт реле как выход
pinMode(relay4, OUTPUT); // Назначаем контакт реле как выход
}
void loop()
{
gassensorvalue = analogRead(gassensorpin); // Считываем значение с датчика газа
if (gassensorvalue >= 600) // Задаем порог уровня загазованности
{

digitalWrite(relay1, LOW); // Включаем реле, к которому подключен вентилятор
digitalWrite(buzzer, HIGH); // Подаем звуковой сигнал
delay(50000);
}
else
{
digitalWrite(relay1, HIGH); // Выключаем реле с вентилятором
digitalWrite(buzzer, LOW); // Выключаем сигнал
}
int pirVal = digitalRead(pirPin);
if(pirVal == HIGH)

23

{

digitalWrite(relay2, LOW); // Включаем реле, к которому подключено освещение

digitalWrite(relay3, LOW); // Включаем реле, к которому подключено освещение

digitalWrite(buzzer, HIGH); // Подаем сигнал пьезоизлучателем

delay(10000);

}

else

{

digitalWrite(relay2,HIGH);

digitalWrite(relay3,HIGH);

}

val=analogRead(0);

if(val > 400)

{

digitalWrite(relay2, LOW); // Включаем реле, к которому подключено освещение

digitalWrite(relay3, LOW); // Включаем реле, к которому подключено освещение

digitalWrite(buzzer, HIGH); // Подаем сигнал пьезоизлучателем

delay(1000);

}

else

{

digitalWrite(relay2,HIGH); // Выключаем реле

digitalWrite(relay3,HIGH); // Выключаем реле

digitalWrite(buzzer, LOW); // Выключаем сигнал

}

Count=analogRead(A4);

If (cont>400);

{

digitalWrite(relay2, LOW); // Включаем реле,
// к которому подключено освещение

digitalWrite(relay3, LOW); // Включаем реле, к которому подключено освещение

digitalWrite(buzzer, HIGH); // Подаем сигнал пьезоизлучателем

delay(1000);

}

else

{

digitalWrite(relay2,HIGH); // Выключаем реле

digitalWrite(relay3,HIGH); // Выключаем реле

digitalWrite(buzzer, LOW); // Выключаем сигнал

}
}

24

Порядок подключения

1. Подключите выводы GND и 5V контроллера Arduino к контактным дорожкам макет-
ной платы (рис. 3.2).

2. Подключите выводы датчика звука VCC и GND к соответствующим контактным до-
рожкам макетной платы, вывод Out подключите к А4.

3. Подключите выводы датчика газа 5V и GND к соответствующим контактным до-
рожкам макетной платы, вывод AOUT подключите к А5.

4. Подключите выводы пьезоизлучателя VCC и GND к соответствующим контактным
дорожкам макетной платы, вывод S подключите к контакту 8.

5. Подключите выводы датчика движения VCC и GND к соответствующим контактным
дорожкам макетной платы, вывод Signal подключите к контакту 9.

6. Подключите выводы модуля реле VCC и GND к соответствующим контактным до-
рожкам макетной платы, выводы INT1, INT2, INT3, INT4 подключите к контактам 3,
4, 5, 6 контроллера Arduino соответственно.

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

Проект 3. Освещение домашнего сада

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

Необходимые компоненты

• Контроллер Arduino Uno. • Фоторезистор.
• Макетная плата. • Резистор 10 кОм.
• Модуль реле. • Провода.

25

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

Рис. 3.3. Схема подключения освещения домашнего сада

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

Листинг 3.3. Освещение домашнего сада (m_listing_03_3.ino)
int PhotosensorPin = A5;
unsigned int sensorValue = 0;

26

int Relay1=3;
int Relay2=4;
int Relay3=5;
int Relay4=6;
void setup()
{
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
pinMode(Relay3, OUTPUT);
pinMode(Relay4, OUTPUT);
}
void loop()
{

sensorValue = analogRead(PhotosensorPin);
// Считываем значение с фоторезистора

if(sensorValue<500) // Задаем пороговое значение
// включения\выключения

{
digitalWrite(Relay1, HIGH); // Включаем реле 1
digitalWrite(Relay2, HIGH); // Включаем реле 2
digitalWrite(Relay3, HIGH); // Включаем реле 3
digitalWrite(Relay4, HIGH); // Включаем реле 4
}

else
{
digitalWrite(Relay1, LOW); // Выключаем реле 1
digitalWrite(Relay2, LOW); // Выключаем реле 2
digitalWrite(Relay3, LOW); // Выключаем реле 3
digitalWrite(Relay4, LOW); // Выключаем реле 4
}

delay(500);
}

Порядок подключения

1. Подключите выводы GND и 5V контроллера Arduino к контактным дорожкам макет-
ной платы (рис. 3.3).

2. Подключите один вывод фоторезистора к шине 5V на макетной плате, а другой —
к контакту А5 контроллера Arduino и, через подтягивающий резистор 10 кОм, —
к общей шине GND на макетной плате.

3. Подключите выводы модуля реле VCC и GND к соответствующим контактным до-
рожкам макетной платы, а выводы INT1, INT2, INT3, INT4 — к контактам 3, 4, 5, 6
контроллера Arduino соответственно.

27

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

И отныне вам не придется беспокоиться о своих растениях — о них позаботится ваше
устройство.

Проект 4. «Умный» свет

В проекте «Умный свет» мы реализуем последовательное включение осветитель-
ных приборов в соответствии с вашим ежедневным маршрутом по квартире. Схе-
ма подключения приведена на рис. 3.4, программа — в листинге 3.4.

Необходимые компоненты • Модуль реле.
• Провода.
• Контроллер Arduino Uno.
• Макетная плата.
• Датчик движения.

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

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

28

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

Листинг 3.4. «Умный» свет (m_listing_03_4.ino)

#define SensorPin 8

int Relay1=3;

int Relay2=4;

int Relay3=5;

int Relay4=6;

void setup()

{

pinMode(SensorPin, INPUT);

pinMode(Relay1, OUTPUT);

pinMode(Relay2, OUTPUT);

pinMode(Relay3, OUTPUT);

pinMode(Relay4, OUTPUT);

}

void loop()

{

int SensorVal = digitalRead(SensorPin);

// Если обнаружили движение, включаем последовательно реле

if(pirVal == HIGH)

{

digitalWrite(Relay1, HIGH); // Включаем реле 1

delay(4000); // Задаем паузу 4 секунды

// Между включением первого реле и второго

digitalWrite(Relay2, HIGH); // Включаем реле 2

delay(4000); // Задаем паузу 4 секунды между включением второго реле и третьего

digitalWrite(Relay3, HIGH); // Включаем реле 3

delay(4000); // Задаем паузу 4 секунды между включением третьего реле и четвертого

digitalWrite(Relay4, HIGH); // Включаем реле 4

delay(4000); // Задаем паузу 4 секунды после включения всех реле

digitalWrite(Relay1, LOW); // Выключаем реле 1

delay(4000); // задаем паузу 4 секунды между выключением первого реле и второго

digitalWrite(Relay2, LOW); // Выключаем реле 2

delay(4000); // Задаем паузу 4 секунды между выключением второго реле и третьего

digitalWrite(Relay3, LOW); // Выключаем реле 3

delay(4000); // Задаем паузу 4 секунды между выключением третьего реле и четвертого

digitalWrite(Relay4, LOW); // Выключаем реле 4

}

}

Порядок подключения

1. Подключите выводы GND и 5V контроллера Arduino к контактным дорожкам макет-
ной платы (рис. 3.4).

2. Подключите выводы модуля реле VCC и GND к соответствующим контактным до-
рожкам макетной платы, а выводы INT1, INT2, INT3, INT4 — к контактам 3, 4, 5, 6
контроллера Arduino соответственно.

29

3. Подключите выводы датчика движения GND и VCC к соответствующим контактным
дорожкам макетной платы, а контакт OUT — к контакту 8 контроллера Arduino.

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

Проект 5. Секретный код

В этом проекте мы реализуем включение реле по двум хлопкам в ладоши. Схема под-
ключения приведена на рис. 3.5, программа — в листинге 3.5.

Необходимые компоненты

• Контроллер Arduino Uno. • Датчик звука.
• Макетная плата. • Провода.
• Модуль реле.

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

Листинг 3.5. Секретный код (m_listing_03_5.ino)

int Count=0; // Переменная для хранения значений с датчика звука

int Relay=0; // Переменная для хранения состояния реле

void setup()

{

pinMode (3,OUTPUT);

}

void loop() {

Count=analogRead(4); // Читаем значение

if(Count > 200 && Count< 600)

{

delay(250); // Ожидаем 250 миллисекунд для повторного хлопка

for(int t=0;t<=500;t++)

{

delay(1);

Count=analogRead(4); // Считываем значение

if(Count > 200 && Count< 600)

{

Relay=!Relay; // Меняем состояние реле

break; // Выходим из цикла после второго хлопка

delay(200); // Пауза

}

}

}

digitalWrite(3,Relay);

}

30

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

Рис. 3.5. Схема подключения проекта «Секретный код»

31

Порядок подключения

1. Подключите выводы GND и 5V контроллера Arduino к контактным дорожкам макет-
ной платы (рис. 3.5).

2. Подключите выводы GND и VCC датчика звука к шинам GND и 5V на макетной
плате, а вывод OUT — к контакту A4 контроллера Arduino.

3. Подключите выводы модуля реле VCC и GND к соответствующим контактным до-
рожкам макетной платы, а вывод INT1 — к контакту 3 контроллера Arduino.

Теперь вы можете по двойному хлопку в ладоши включать и выключать устройство,
подключенное к реле.

Проект 6. «Умный» дом

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

Необходимые компоненты • Датчик движения.
• Фоторезистор.
• Контроллер Arduino Uno. • Пьезоизлучатель.
• Макетная плата. • Резистор 10 кОм.
• Модуль реле 4×. • Провода.
• Датчик звука.
• Датчик газа.

32

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

Рис. 3.6. Схема подключения «умного» дома

33

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

Листинг 3.6. Программа «умный» дом

int Count=0; // Переменная для хранения значений с датчика звука
int Relay=0; // Переменная для хранения состояния реле
int photosensorpin = A3;
unsigned int photosensorValue = 0;
int pirpin = 9;
int SoundPin = 8;
const int analogGasPin = A5;
int GasSensorValue = 0;
void setup()
{
pinMode(3,OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);

pinMode(pirpin, INPUT);
Serial.begin(9600);
}
void loop()
{

GasSensorValue = analogRead(analogGasPin);

if (GasSensorValue >= 600) // Необходимо откалибровать датчик

// под ваши ощущения

{

digitalWrite(6, LOW); // Включаем вентилятор

}

else

{

digitalWrite(6, HIGH); // Выключаем вентилятор

}

int pirVal = digitalRead(pirpin);
if(pirVal == HIGH)
{
digitalWrite(5,LOW);
tone(SoundPin, 1700);
delay(100);
tone(SoundPin, 600);

34

}
else
{

digitalWrite(5,HIGH);
noTone(10);
}

photosensorValue = analogRead(photosensorpin);
Serial.println(photosensorValue, DEC); // Вывод данных с фоторезистора (0-1024)
if(photosensorValue<300) digitalWrite(4, LOW);

// Включаем
else digitalWrite(4, HIGH); // Выключаем

Count=analogRead(A4); // Считываем значение с датчика звука

if(Count > 200 && Count< 600)

{

delay(250); // Ожидаем 250 миллисекунд

for(int t=0;t<=500;t++)

{

delay(1);

Count=analogRead(A4); // Считываем значение

if(Count > 200 && Count< 600)

{

Relay=!Relay; // Меняем состояние реле

break; // Выходим из цикла после второго хлопка

delay(200); // Пауза

}

}

}

digitalWrite(3,Relay);

}

Порядок подключения

1. Подключите выводы GND и 5V контроллера Arduino к контактным дорожкам макет-
ной платы (рис. 3.6).

2. Подключите выводы GND и VCC датчика звука к шинам GND и 5V на макетной
плате, а вывод OUT — к контакту A4 контроллера Arduino.

3. Подключите выводы модуля реле VCC и GND к шинам GND и 5V на макетной плате,
а выводы INT1, INT2, INT3, INT4 — к контактам 3, 4, 5, 6 контроллера Arduino соот-
ветственно.

4. Подключите выводы VCC и GND датчика движения к шинам 5V и GND на макетной
плате, а вывод OUT — к контакту 9 контроллера Arduino.

35

5. Установите фоторезистор на макетной плате, один его вывод подключите к 5V,
а другой — к GND и, через резистор 10 кОм, к контакту А3 контроллера Arduino.

6. Подключите выводы 5V и G датчика газа к шинам 5V и GND на макетной плате,
а вывод А — к контакту А5 контроллера Arduino.

7. Подключите выводы G и V пьезоизлучателя к шинам GND и 5V на макетной плате,
а вывод S — к контакту 8 контроллера Arduino.

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

4. Справочная информация

4.1. Назначение контактов на плате Arduino Uno

Основной компонент набора — плата Arduino Uno R3 под управлением микроконтрол-
лера ATmega 328. Для начала работы с устройством достаточно просто подать пита-
ние от блока питания или батарейки 9 В либо подключить плату к компьютеру посред-
ством USB-кабеля. Назначение контактов платы Arduino Uno R3 приведено на рис. 4.1
и в табл. 4.1.

Рис. 4.1. Плата Arduino Uno и назначение ее контактов

36

Таблица 4.1. Назначение контактов платы Arduino Uno

Питание (Power)

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

5V На контакт поступает напряжение 5 В от стабилизатора напряжения
на плате, независимо от того, как запитано устройство: от адаптера
(7–12 В), от USB (5 В) или через вывод VIN (7–12 В). Запитывать устрой-
ство через выводы 5V или 3V3 не рекомендуется, поскольку в этом слу-
чае не используется стабилизатор напряжения, что может привести к
выходу платы из строя

3V3 Напряжение 3,3 В, поступающее от стабилизатора напряжения на плате.
Максимальный ток, потребляемый от этого вывода, составляет 50 мА

Питание (Power)

GND Земля

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

Reset Подача низкого уровня (LOW) на этот контакт приведет к перезагрузке
микроконтроллера. Обычно этот вывод служит для функционирования
кнопки сброса на платах расширения

Цифровые входы/выходы (Digital PWM~)

0 (RX), 1 (TX), Каждый из 14 цифровых контактов может работать в качестве вхо-
2, ~3, 4, ~5, да или выхода (с использованием функций pinMode(), digitalWrite()
~6, 7, 8, 9, ~10, и digitalRead()). Уровень напряжения на выводах ограничен 5 В. Макси-
~11, 12, 13 мальный ток, который может отдавать или потреблять один вывод, со-
ставляет 40 мА. Все выводы сопряжены с внутренними подтягивающи-
ми резисторами (по умолчанию отключенными) номиналом 20×50 кОм

0 (RX) и 1 (TX) Используются для получения (RX) и передачи (TX) данных по последова-
тельному интерфейсу. Эти контакты соединены с соответствующими вы-
водами микросхемы ATmega 8U2, выполняющей роль преобразователя
USB-UART. Могут использоваться для осуществления связи с компьюте-
ром, еще одной платой Arduino или другими микроконтроллерами

2и3 Могут служить источниками прерываний, возникающих при фронте,
спаде или при низком уровне сигнала на этих выводах. Для получения
дополнительной информации см. функцию attachInterrupt()

13 Встроенный светодиод, подсоединенный к контакту 13. При отправке
значения HIGH светодиод включается, при отправке LOW — выключа-
ется

Цифровые входы/выходы (Digital PWM~)

3, 5, 6, 9, 10 С помощью функции analogWrite() на этих контактах можно сформиро-
и1 вать аналоговые значения в виде ШИМ-сигнала

37

Таблица 4.1 (окончание)

10 (SS), С применением библиотеки SPI через данные контакты можно осуще-
11 (MOSI), ствить связь по интерфейсу SPI
12 (MISO),
13 (SCK)

Аналоговые входы (Analog IN)

A0–A5 6 аналоговых входов (A0–A5), на каждый из которых можно подать
аналоговое напряжение в диапазоне, соответствующем 10-разряд-
ному числу (1024 различных значения). По умолчанию измерение на-
пряжения осуществляется относительно диапазона от 0 до 5 В. Тем не
менее верхнюю границу этого диапазона можно изменить, используя
контакт AREF и функцию analogReference()

Аналоговые входы (Analog IN)

A4 (SDA), С использованием библиотеки Wire через контакты A4 и A5 можно осу-
A5 (SCL) ществлять связь по интерфейсу I2C (TWI)

AREF Опорное напряжение для аналоговых входов. Может задействоваться
функцией analogReference()

4.2. Краткая справка по программированию Arduino

Этот раздел ориентирован на тех, кто уже имеет некоторый опыт программирования и
нуждается только в пояснении особенностей языка С для программирования Arduino.
Для более подробного изучения вопроса рекомендуем посетить сайты http://arduino.
cc/en/Reference/HomePage (англ.) или http://arduino.ru/Reference (рус.).

Основные команды для программирования Arduino приведены в табл. 4.2.

Таблица 4.2. Описание основных команд для программирования Arduino

Команда Описание

Основные операторы

Основные подпрограммы void setup() {}
void loop() {}
Объявление переменных (тип Integer,
значение = 0) int led = 0;

Объявление констант (тип Integer, const int analogInPin = A0;
значение = A0)

Объявление массивов (тип Integer, int Arrayname[6] = {2, 4,-8, 3, 2};
6 значений)

Устанавливает режим работы заданного pinMode(led, OUTPUT);
входа/выхода (pin)

Инициализация последовательного Serial.begin(9600);
интерфейса

Подключение библиотеки #include <libX.h>

38

Таблица 4.2 (продолжение)

Команда Описание

Ввод-вывод

Подает HIGH (или LOW) значение на циф- digitalWrite(led,HIGH);
ровой вход/выход (pin)

Выдает аналоговую величину (волну ШИМ) analogWrite(led, 255);
на порт вход/выхода

Функция — считывает значение с заданно- digitalRead(schalter)
го входа: HIGH или LOW

Функция — считывает значение с указан- analogRead(A0)
ного аналогового входа

Передает данные через последовательный Serial.print("Hello!");
порт как текст ASCII.

Ввод-вывод

Передает текст через последовательный Serial.println("Hello!");
порт + перенос строки

Функция — считывает очередной доступ- Serial.read();
ный байт из буфера последовательного
соединения

Генерирует сигнал [Pin 8, частота X (Гц), tone(8,x)
длительность Y (мc)] tone(8, x, y)

Останавливает сигнал на порту (8) noTone(8)

Управляющие операторы

Конструкция If … Else if (button == HIGH){ }
else{ }

Переключатель switch (x) {
case 1:
case 2:
default:

Период ожидания (500 ms) delay(500);

Цикл For for (x = 2; x < 7; x++) {

Цикл While while (myswitch == HIGH) {
}
или: do{
} while (myswitch ==HIGH);

Преждевременный выход из цикла break;

Пропускает оставшиеся операторы в теку- continue;
щем шаге цикла

Математические функции

Синус, косинус, тангенс sin(),cos(),tan()

39

Таблица 4.2 (продолжение)

Команда Описание
Корень из X sqrt(x)
X в степени Y pow(x, y)
Абсолютное значение (значение X) abs(x)
Случайное число random()
Сравнение
Равно ==
Неравно !=
Больше, меньше >, <
Больше или равно, меньше или равно >=, <=
Функция — наименьшее число из двух min(x, y)
(X или Y)
Функция — наибольшее число из двух max(x, y)
(X или Y)
Логические операторы &&
И
Или ||
Не
Типы данных !

Boolean; char; unsigned char; byte; int; unsigned
int; word; long; unsigned long; short; float;
double; string (array); String (Object);

Преобразование типов данных char(); byte(); int(); word(); long(); float()

Прерывания

Запрет прерываний noInterrupts()

Разрешение прерываний Interrupts()

Включает обработку внешнего прерывания attachInterrupt(interrupt, function, mode)

Выключает обработку внешнего прерывания detachInterrupt(interrupt)

Другие

Комментарии, одна строка //

Комментарии, несколько строк /*Комментарий*/

Функция — диапазон преобразований, на- map(значения датчика, 0, 1024, 0, 255);
пример: 10-разрядный датчик на 8-битовый

ШИМ-сигнал

(8-Bit-PWM)

40

Таблица 4.2 (окончание)

Команда Описание

Функция — проверяет (и, если надо, зада- constrain(значения датчика, 0, 255);
ет) новое значение (нижняя граница значе- return x;
ний/верхняя граница)

Для функции — возвращаемое значение

Переход к метке (label1) goto label1;

Процедура void Имя процедуры() { }

Функция, которая возвращает значения int Имя функции (byte параметры передавае-
Integer и имеет входные параметры Byte мые в функцию) {
return 13;
}

4.3. Решение проблем

В табл. 4.3 приведены перечень наиболее распространенных ошибок и способы их
устранения. Также для поиска возможных ошибок используйте сайт разработчика
Arduino http://arduino.cc/en/guide/troubleshooting#toc18.

Таблица 4.3. Наиболее распространенные ошибки и способы их устранения*1

Ошибка Причина

Загрузка

Программа не загружа- Неправильно выбран COM-порт Установите правильный порт
ется на плату в меню Сервис > Последо-
вательный порт. Если вы не
знаете, какой порт правиль-
ный, посмотрите его значе-
ние в Диспетчере устройств

Сообщение Неправильно выбран тип Выберите правильно тип
платы Сервис > Плата
„avrdude: stk500_getsync (): платы

not in sync: resp=0x00“

Невозможно выбрать Возможно, плата не была под- Перезапустите Arduino IDE
правильный порт COM ключена к ПК во время запуска
среды разработки Arduino IDE

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

1 F. Kainka, Das Franzis Starterpaket Arduino Uno: TURN ON YOUR CREATIVITY, 65 s., Franzis-Verlag.

41

Таблица 4.3 (продолжение)

Ошибка Причина

После кратковременно- Изменился COM-порт Проверьте установку
го отключения плата COM-порта
Arduino перестала про-
граммироваться

Меню Сервис открыва- Устройства Bluetooth могут Деактивируйте устройство
ется очень медленно, блокировать последователь- Bluetooth (хотя бы на время)
работа Arduino IDE за- ный порт, который сканирует-
вершается аварийно ся программным обеспечени-
ем Arduino

Меню Сервис открыва- Какое-то приложение на ПК бло- Проверьте установки
ется очень медленно, кирует порты COM в фоновом в брандмауэре
работа Arduino IDE за- режиме. Этим приложением
вершается аварийно могут быть сканеры и бранд-
мауэры

Загрузка программ пре- Высокое потребление электро- Подключите дополнительно
рывается энергии платой внешнее электропитание
или удалите подключенные
к плате периферийные
устройства

Ошибка при загрузке Соединены контакты 0 и 1, Удалите шилд или кабели
которые блокируют процесс во время процесса загрузки
загрузки

Среда разработки Возможны проблемы с про- Завершите процесс
Arduino IDE «зависает»
при загрузке граммой LVPrcSrv.exe (утилитой LVPrcSev в Диспетчере

Logitech для Windows) задач

Ошибки при компиляции

error: expected ';' before Пропущена точка с запятой Исправьте программный код
'}' token

error: expected '}' at of Пропущена фигурная скобка Исправьте программный код
input

error: 'Имя_переменной' Переменная не декларирована Исправьте программный код
was not declared in this
scope

error: integer constant is Целое число выходит за грани- Исправьте программный код
too large for 'long' type цы диапазона целых чисел

java.lang. Ошибка переполнения стека. Ищите ошибки в тексте про-
StackOverflowError […] Часто возникает при пробле- граммы, связанные с непра-
мах с описанием строк вильным использованием
двойных (" ") или одинарных
(') кавычек, косой черты (\),
комментариев и т.д. (напри-
мер, вместо '\"', вы использо-
вали '"' и т.п.)

42

Таблица 4.3 (окончание)

Ошибка Причина

Неожиданное поведение программы

Программа не запуска- Вы постоянно посылаете дан- Убедитесь, что приложение
ется снова после сброса
кнопкой Reset на плате ные на последовательный порт не отправляет непрерывно

платы, и «новая» программа последовательные данные

ожидает окончания этого плате. При необходимости

процесса исправьте программный код

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

ционирует средств

Программа успешно Выбран ошибочный тип платы Проверьте установку платы

загрузилась, но не функ- (Сервис > Плата)

ционирует

Скетч слишком большой Программа слишком большая Оптимизируйте программ-
для выбранной платы ный код или используйте
внешние модули для хра-
нения данных (например,
SD-Card)

ШИМ (PWM) не функ- На данном контакте ШИМ Проверьте, имеется ли обо-
ционирует не используется значение «~» на контакте

Ошибки инсталляции

Java Virtual Machine Возможно, неправильно распа- Распакуйте повторно архив
Launcher: Could not find
the main class. Program ковался архив Arduino.zip и проверьте наличие файла
will exit
pde.jar

Неправильно указан Возможно, что неправильно Проверьте установку драй-
COM-порт установлен драйвер вера в Диспетчере устройств
и при необходимости пере-
установите его

Windows не определяет Плата подключена к разъему Подключите плату к разъему
подключенную к USB USB со спецификацией 3.0 USB 2.0
плату Arduino

Драйвер не находится Плата подключена к разъему Подключите плату к разъему

USB со спецификацией 3.0 USB 2.0

Полезные ссылки

http://arduino.cc/forum/ — официальный форум разработчиков Arduino (англ.).
http://arduino.ru/forum — популярные форумы разработчиков Arduino (рус.).
http://arduino.cc/en/Reference/HomePage — официальное руководство от разра-
ботчика Arduino (англ.).

43

http://arduino.ru/Reference — руководство пользователя Arduino (рус.).

http://fritzing.org/ — домашняя страница программы Frizing (англ.).

http://processing.org — домашняя страница программы Processing (англ.).

http://playground.arduino.cc/interfacing/processing — помощь по теме Arduino
и Processing (англ.).

http://edurobots.ru/kurs-arduino-dlya-nachinayushhix/ — уроки и проекты
по работе с Arduino (рус.).

http://wiki.amperka.ru/видеоуроки:джереми-блюм; http://www.youtube.com/
user/d36073 — популярные видеоуроки по работе с Arduino (рус.).

ARDUINO UNO R3 Интернет-магазин: BHV.RU BHV.RU

ICSP2

GND GND RESET2 A
VIN MOSI2 SCK2
MISO2 D
! RESET INT
PWM
ICSP2
28 A5 SCL (I2C) Serial Clock

27 A4 SDA (I2C) Serial Data

L AREF 21 AREF I²C (IIC, Inter-Integrated Circuit)
GND SPI (Serial Peripheral Interface)
TX 13 GND Serial Port
RX 12
~11 ATMega328:
IOREF I0REF ~10 19 D13 DSC1K3 (SPI) Serial Clock
RESET 1 RESET ~9
- + UDIGITALNO(PWM=~) 8 18 D12 MISO (SPI) Master-Out, Slave-In
3V3
5V ARDUINOTM 7 17 D11 PWM MOSI (SPI) Master-In, Slave-Out
GND
GND ~6 16 D10 PWM SS (SPI) Slave Select
VIN ~5
GND 15 D9 PWM
GND A0 4
VIN A1 POWER ~3 14 D8 ICP1 OSC
A2
A0 23 A3 2 13 D7
A1 24 A4 TX0 1
A2 25 A5 RX0 0 12 D6 PWM
A3 26
A4 27 11 D5 PWM 1 28 A5
A5 28 2 27
ANALOG IN 6 D4 D0 3 26 A4
D1 4 25 A3
5 D3 PWM INT1 D2 5 24 A2
D3 6 23
4 D2 INT0 D4 7 A1
VCC 8
(I2C) Serial Clock SDA ISCP 1 ON 3 D1 TX GND 9
(I2C) Serial Data SCL OSC1 10
2 D0 RX OSC2 11 ATMEGA328 22 A0
12
D5 13 21 GND
D6 14 20 AREF
D7 19 VCC
ICSP (In Circuit Serial Programming) D8 18
17 D13
! SCK D13 16 D12
! 15 D11
RESET MISO D12 D10

GND D9

MOSI D11 PWM


Click to View FlipBook Version