Изучаем Arduino. Инструменты и методы технического волшебства

Джереми Блум

Об авторе 15
О техническом редакторе 16
Благодарности 17
Введение 19
Для кого эта книга 19
О чем эта книга 20
Что вам понадобится 20
Электронные ресурсы к книге 20
Дополнительный материал и поддержка 21
Что такое Arduino? 21
О движении Open Source 22
Несколько советов читателю 22
к русскоязычному изданию книги 23

Часть I. Общие сведения о платформе Arduino 25
Глава 1. Начало работы, переключаем светодиод из Arduino
27
1.1. Знакомство с платформой Arduino 27
1.2. Аппаратная часть 28
1.3. Микроконтроллеры Atmel 28
1.4. Интерфейсы программирования 30
1.5. Цифровые и аналоговые контакты ввода-вывода 31
1.6. Источники питания 31
1.7. Платы Arduino 31
1.8. Запускаем первую программу 36
1.8.1. Загрузка и установка Arduino IDE 36
1.8.2. Запуск IDE и подключение к Arduino 37
1.8.3. Анализируем программу Blink 39
Резюме 41
Глава 2. Цифровые контакты ввода-вывода, широтно-импульсная модуляция
42
2.1. Цифровые контакты 43
2.2. Подключение внешнего светодиода 43
2.2.1. Работа с макетной платой 43
2.3. Подсоединение светодиодов 44
2.3.1. Закон Ома и формула для расчета мощности 45
2.4. Программирование цифровых выводов 47
2.5. Использование цикла 48
2.6. Широтно-импульсная модуляция с помощью analogWrite() 49
2.7. Считывание данных с цифровых контактов 52
2.7.1. Считывание цифровых входов со стягивающим резистором 52
2.8. Устранение "дребезга" кнопок 55
2.9. Создание управляемого ночника на RGB-светодиоде 58
Резюме 62
Глава 3. Опрос аналоговых датчиков
63
3.1. Понятие об аналоговых и цифровых сигналах 64
3.2. Сравнение аналоговых и цифровых сигналов 64
3.3. Преобразование аналогового сигнала в цифровой 65
3.4. Считывание аналоговых датчиков с помощью Arduino. Команда analogRead() 67
3.5. Чтение данных с потенциометра 67
3.6. Использование аналоговых датчиков 71
3.7. Работа с аналоговым датчиком температуры 73
аналоговых датчиков 75
3.9. Резистивный делитель напряжения 75
3.10. Управление аналоговыми выходами по сигналу от аналоговых входов 77
Резюме 79

Часть II. Управление окружающей средой 81
Глава 4. Использование транзисторов и управляемых двигателей
83
4.1. Двигатели постоянного тока 84
4.2. Борьба с выбросами напряжения 85
4.3. Использование транзистора в качестве переключателя 86
4.4. Назначение защитных диодов 86
4.5. Назначение отдельного источника питания 87
4.6. Подключение двигателя 87
4.7. Управление скоростью вращения двигателя с помощью ШИМ 88
с помощью Н-моста 91
4.9. Сборка схемы H-моста 92
4.10. Управление работой H-моста 94
4.11. Управление серводвигателем 98
4.11.1. Стандартные сервоприводы и сервоприводы вращения 98
4.11.2. Принцип работы серводвигателя 98
4.12. Контроллер серводвигателя 102
4.13. Создание радиального датчика расстояния 103
Резюме 107
Глава 5. Работаем со звуком
108
5.1. Свойства звука 109
5.2. Как динамик воспроизводит звук 110
5.3. Использование функции tone() для генерации звуков 110
5.4. Включение файла заголовка 111
5.5. Подключение динамика 112
5.6. Создание мелодии 114
5.6.1. Использование массивов 114
5.6.2. Создание массивов нот и определение их длительности звучания 115
5.6.3. Написание программы воспроизведения звука 116
Резюме 117
Глава 6. USB и последовательный интерфейс
118
6.1. Реализация последовательного интерфейса в Arduino 119
6.2. Платы Arduino с внутренним или внешним преобразователем FTDI 120
6.3. Платы Arduino c дополнительным микроконтроллером для преобразования USB в последовательный порт 122
6.4. Платы Arduino с микроконтроллером, снабженным встроенным интерфейсом USB 123
6.5. Платы Arduino с возможностями USB-хоста 124
6.6. Опрос Arduino с компьютера 124
6.6.1. Пример вывода данных 124
6.6.2. Использование специальных символов 126
6.6.3. Изменение представлений типа данных 127
6.6.4. Общение с Arduino 128
6.6.5. Чтение информации из компьютера или другого последовательного устройства 129
Плата Arduino в качестве транслятора данных 129
Различие между char и int 130
Отправка одиночных символов для управления светодиодом 131
Отправка последовательности цифр для управления RGB-светодиодом 133
6.7. Создаем компьютерное приложение 136
6.7.1. Интерфейс Processing 136
6.7.2. Установка Processing 136
6.7.3. Плата Arduino управляет приложением на Processing 136
6.7.4. Отправка данных из Processing-приложения в Arduino 140
6.8. Изучаем особенности работы с Arduino Leonardo (и другими платами на основе процессора 32U4) 143
6.8.1. Эмуляция клавиатуры 143
6.8.2. Отправка команд для управления компьютером 147
6.8.3. Эмуляция мыши 148
Резюме 151
Глава 7. Сдвиговые регистры
153
7.1. Что такое сдвиговый регистр 154
7.2. Последовательная и параллельная передача данных 155
7.3. Сдвиговый регистр 74HC595 155
7.3.1. Назначение контактов сдвигового регистра 155
7.3.2. Принцип действия сдвиговых регистров 156
7.3.3. Передача данных из Arduino в сдвиговый регистр 158
7.3.4. Преобразование между двоичным и десятичным форматами 160
7.4. Создание световых эффектов с помощью сдвигового регистра 161
7.4.1. Эффект "бегущий всадник" 161
7.4.2. Отображение данных в виде гистограммы 162
Резюме 165

Часть III. Интерфейсы передачи данных 167
Глава 8. Интерфейсная шина I2C
169
8.1. История создания протокола I2C 170
8.2. Схема подключения устройств I2C 170
8.2.1. Взаимодействие и идентификация устройств 171
8.2.2. Требования к оборудованию и подтягивающие резисторы 173
8.3. Связь с датчиком температуры I2C 173
8.3.1. Сборка схемы устройства 173
8.3.2. Анализ технического описания датчика 174
8.3.3. Написание программы 177
8.4. Проект, объединяющий регистр сдвига, последовательный порт и шину I2C 179
8.4.1. Создание системы мониторинга температуры 179
8.4.2. Модификация кода программы 180
8.4.3. Написание программы на Processing 182
Резюме 185

9.1. Общие сведения о протоколе SPI 187
9.2. Подключение устройств SPI 188
9.2.1. Конфигурация интерфейса SPI 189
9.2.2. Протокол передачи данных SPI 189
9.3. Сравнение SPI и I2C 190
9.4. Подключение цифрового потенциометра SPI 190
9.4.1. Техническое описание MCP4231 190
9.4.2. Описание схемы устройства 193
9.4.3. Написание программы 195
потенциометров SPI 197
9.5.1. Описание схемы устройства 197
9.5.2. Модификация программы 198
Резюме 201
Глава 10. Взаимодействие с жидкокристаллическими дисплеями
202
10.1. Настройка жидкокристаллического дисплея 203
10.2. Библиотека LiquidCrystal 206
10.3. Вывод текста на дисплей 206
10.4. Создание специальных символов и анимации 208
10.5. Создание регулятора температуры 211
10.5.1. Монтаж схемы устройства 212
10.5.2. Отображение данных на ЖК-дисплее 213
10.5.3. Установка порогового значения температуры с помощью кнопок 215
10.5.4. Добавляем вентилятор и звуковое оповещение 216
10.5.5. Итог всего: полная программа 217
10.6. Как усовершенствовать проект 221
Резюме 221
Глава 11. Беспроводная связь с помощью радиомодулей XBee
222
11.1. Общие сведения о беспроводной связи XBee 223
11.1.1. Радиомодули XBee 224
11.1.2. Платы расширения для XBee 226
Стабилизатор 3,3 В 226
Согласование логических уровней 226
Светодиодные индикаторы 226
Перемычка или переключатель выбора UART 227
Программная или аппаратная реализация UART 227
11.2. Настройка модулей XBee 228
11.2.1. Настройка с помощью USB-адаптера 228
Первый вариант программирования (не рекомендуется) 229
Второй вариант программирования (рекомендуется) 229
11.2.2. Настройка модуля XBee и его подключение к компьютеру 229
11.2.3. Настройка XBee с помощью Windows-приложения X-CTU 230
11.2.4. Настройка модулей XBee из последовательного терминала 234
11.3. Соединяемся с компьютером по беспроводной сети 235
11.3.1. Автономное питание платы Arduino 235
Питание от USB с компьютера или сетевого адаптера 235
Питание от батареи 236
Сетевые источники питания 237
11.3.2. Пример 1: беспроводное управление цветом окна на компьютере 237
11.3.3. Пример 2: управление RGB-светодиодом 240
11.4. Беспроводной дверной звонок 243
11.4.1. Разработка системы 243
11.4.2. Оборудование для передатчика 244
11.4.3. Оборудование для приемника 245
11.4.4. Программа для передатчика 246
11.4.5. Программа для приемника 247
Резюме 249

Часть IV. Дополнительные темы и проекты 251
Глава 12. Аппаратные прерывания и прерывания по таймеру
253
12.1. Использование аппаратных прерываний 254
12.2. Что выбрать: опрос состояния в цикле или прерывания? 255
12.2.1. Программная реализация 255
12.2.2. Аппаратная реализация 255
12.2.3. Многозадачность 255
12.2.4. Точность сбора данных 256
12.2.5. Реализация аппаратного прерывания в Arduino 256
12.3. Разработка и тестирование системы противодребезговой защиты для кнопки 257
12.3.1. Создание схемы аппаратного устранения дребезга 257
12.3.2. Монтаж схемы 260
12.3.3. Программа обработки аппаратного прерывания 262
12.4. Прерывания по таймеру 264
12.4.1. Общие сведения о прерываниях по таймеру 264
12.4.2. Установка библиотеки 264
12.4.3. Одновременное выполнение двух задач 265
12.5. Музыкальный инструмент на прерываниях 266
12.5.1. Схема музыкального инструмента 266
12.5.2. Программа для музыкального инструмента 266
Резюме 269
Глава 13. Обмен данными с картами памяти SD
270
13.1. Подготовка к регистрации данных 271
13.1.1. Форматирование данных с помощью CSV-файлов 271
13.1.2. Подготовка SD-карты для регистрации данных 272
13.2. Взаимодействие Arduino с SD-картой 276
13.2.1. Платы расширения для SD-карт 276
13.2.2. SPI-интерфейс SD-карты 280
13.2.3. Запись на SD-карту 280
13.2.4. Чтение с SD-карты 285
13.3. Использование часов реального времени 288
13.3.1. Общие сведения о часах реального времени 289
Микросхема часов реального времени DS1307 289
Сторонняя библиотека Arduino RTClib 290
13.3.2. Использование часов реального времени 290
Подключение модулей SD card shield и RTC 291
Модификация программы для работы с RTC 291
13.4. Регистратор прохода через дверь 295
13.4.1. Схема регистратора 296
13.4.2. Программа для регистратора 296
13.4.3. Анализ зарегистрированных данных 300
Резюме 301
Глава 14. Подключение Arduino к Интернету
302
14.1. Всемирная паутина, Arduino и Вы 303
14.1.1. Сетевые термины 303
IP-адрес 303
MAC-адрес 304
HTML 304
HTTP 304
GET/POST 304
DHCP 304
DNS 305
Клиенты и серверы 305
Подключение к сети платы Arduino 305
14.2. Управление платой Arduino из Интернета 306
14.2.1. Настройка оборудования для управления вводом-выводом 306
14.2.2. Создание простой веб-страницы 306
14.2.3. Написание программы для Arduino-сервера 308
Подключение к сети и получение IP-адреса через DHCP 308
Ответ на клиентский запрос 309
Итоговая программа веб-сервера 309
14.3. Управление платой Arduino по сети 313
14.3.1. Управление платой Arduino по локальной сети 313
14.3.2. Организация доступа к плате Arduino из внешней сети 314
Вход в панель администрирования маршрутизатора 315
Резервирование IP-адреса для Arduino в DHCP 315
Перенаправление порта 80 на плату Arduino 316
Обновление динамического DNS 316
14.4. Отправка данных в реальном времени в графические сервисы 317
14.4.1. Создание потока данных на Xively 317
Создание учетной записи Xively 317
Создание потока данных 317
Установка библиотек Xively и HTTPClient 318
Подключение к плате Arduino 319
Настройка Xively и выполнение программы 320
Отображение данных на веб-странице 322
14.4.2. Добавление компонентов в поток 322
Добавление аналогового датчика температуры 323
Добавление показаний датчика в поток 323
Резюме 326

Приложение. Документация на микроконтроллер ATmega и схема платы Arduino 327
Знакомство с технической документацией 327
Анализ технического описания 327
Цоколевка микросхемы ATmega 328P 329
Принципиальная схема Arduino 331
Предметный указатель 33