Проекты с использованием контроллера Arduino

Виктор Петин

Обложка:


Предисловие 15
Для кого и о чем эта книга? 15
Структура книги 15
Благодарности 16

Часть I. Arduino — общий обзор
17
Глава 1. Введение в Arduino
19
1.1. Arduino — что это? 19
1.2. В чем преимущество Arduino? 20
1.3. История создания Arduino 20
Глава 2. Обзор контроллеров семейства Arduino
22
2.1. Arduino Pro Mini 23
2.2. Arduino Duemilanove 23
2.3. Arduino Nano 25
2.4. Arduino LilyPad 26
2.5. Arduino Uno 27
2.6. Arduino Mega2560 28
2.7. Arduino Leonardo 29
2.8. Arduino Due 30
Глава 3. Платы расширения Arduino
31
Часть II. Среда разработки и язык программирования контроллеров Arduino
37
Глава 4. Среда программирования Arduino IDE
39
4.1. Установка Arduino IDE в Windows 39
4.2. Установка Arduino IDE в Linux 41
4.3. Настройка среды Arduino IDE 41
Глава 5. Программирование в Arduino
45
5.1. Базовые знания 45
5.1.1. Цифровые выводы 45
5.1.2. Аналоговые входы 46
5.1.3. Широтно-импульсная модуляция 46
5.1.4. Память в Arduino 46
5.2. Структура программы 48
5.2.1. Функции setup() и loop() 48
5.3. Синтаксис и операторы 49
5.3.1. Управляющие операторы 49
5.3.1.1. Оператор if (условие) и операторы сравнения ==, !=, < , > 49
5.3.1.2. Оператор if..else 49
5.3.1.3. Оператор for 50
5.3.1.4. Оператор switch 51
5.3.1.5. Оператор while 51
5.3.1.6. Оператор do ... while 52
5.3.1.7. Оператор break 52
5.3.1.8. Оператор continue 52
5.3.1.9. Оператор return 53
5.3.2. Синтаксис 53
5.3.2.1. ; (точка с запятой) ; (semicolon) 53
5.3.2.2. {} (фигурные скобки) {} (curly braces) 53
5.3.2.3. Комментарии // (single line comment), /* */ (multi-line comment) 54
5.3.3. Арифметические операторы 54
5.3.3.1. = (assignment) = оператор присваивания 54
5.3.3.2. + (cложение), - (вычитание), * (умножение) , / (деление) 55
5.3.3.3. % (modulo) 55
5.3.4. Операторы сравнения 55
5.3.5. Логические операторы 55
5.3.5.1. && (логическое И) 55
5.3.5.2. || (логическое ИЛИ) 55
5.3.5.3. ! (логическое отрицание) 56
5.3.6. Унарные операторы 56
5.3.6.1. ++ (увеличение значения) / -- (уменьшение значения) 56
5.3.6.2. += , -= , *= , /= 56
5.4. Данные 56
5.4.1. Типы данных 56
5.4.1.1. boolean 57
5.4.1.2. char 57
5.4.1.3. byte 57
5.4.1.4. int 57
5.4.1.5. unsigned int 58
5.4.1.6. long 58
5.4.1.7. unsigned long 58
5.4.1.8. float 59
5.4.1.9. double 59
5.4.1.10. string — текстовые строки 59
5.4.1.11. Массивы 60
5.4.1.12. void 61
5.4.2. Константы 61
5.4.3. Переменные 62
5.4.3.1. Объявление переменных 62
5.4.3.2. Границы переменных 62
5.4.4. Преобразование типов данных 63
5.4.4.1. char() 63
5.4.4.2. byte() 63
5.4.4.3. int() 63
5.4.4.4. long() 63
5.4.4.5. float() 64
5.5. Функции 64
5.5.1. Цифровой ввод/вывод 64
5.5.1.1. Функция pinMode 64
5.5.1.2. Функция digitalWrite() 64
5.5.1.3. Функция digitalRead() 65
5.5.2. Аналоговый ввод/вывод 66
5.5.2.1. Функция analogRead() 66
5.5.2.2. Функция analogReference() 67
5.5.2.3. Функция analogWrite() 67
5.5.3. Дополнительные фунции ввода/вывода 69
5.5.3.1. Функция tone() 69
5.5.3.2. Функция noTone() 69
5.5.3.3. Функция shiftOut() 69
5.5.3.4. Функция pulseIn() 71
5.5.4. Работа со временем 72
5.5.4.1. Функция millis() 72
5.5.4.2. Функция micros() 72
5.5.4.3. Функция delay() 73
5.5.4.4. Функция delayMicroseconds() 74
5.5.5. Математические функции 75
5.5.5.1. Функция min(x,yx) 75
5.5.5.2. Функция max(x, y) 75
5.5.5.3. Функция abs() 75
5.5.5.4. Функция constrain(x, a, b) 76
5.5.5.5. Функция map(value, fromLow, fromHigh, toLow, toHigh) 76
5.5.5.6. Функция pow(base, exponent) 77
5.5.5.7. Функция sq(x) 77
5.5.5.8. Функция sqrt(x) 77
5.5.6. Тригонометрические функции 78
5.5.6.1. Функция sin(rad) 78
5.5.6.2. Функция cos(rad) 78
5.5.6.3. Функция tan(rad) 78
5.5.7. Генераторы случайных значений 78
5.5.7.1. Функция randomSeed(seed) 78
5.5.7.2. Функция random() 79
5.5.8. Операции с битами и байтами 79
5.5.8.1. Функция lowByte() 80
5.5.8.2. Функция highByte() 80
5.5.8.3. Функция bitRead() 80
5.5.8.4. Функция bitWrite() 80
5.5.8.5. Функция bitSet() 81
5.5.8.6. Функция bitClear() 81
5.5.8.7. Функция bit() 81
5.5.9. Внешние прерывания 81
5.5.9.1. Функция attachInterrupt 82
5.5.9.2. Функция detachInterrupt 82
5.6. Управление портами через регистры ATmega 83
Часть III. Практическое применение Arduino
87
Глава 6. Arduino и набор функций Serial
89
6.1. Функции библиотеки Serial 90
6.1.1. Функция Serial.begin() 90
6.1.2. Функция Serial.end() 90
6.1.3. Функция Serial.available() 90
6.1.4. Функция Serial.read() 91
6.1.5. Функция Serial.flush() 92
6.1.6. Функция Serial.print() 92
6.1.7. Функция Serial.println() 93
6.1.8. Функция Serial.write() 93
6.1.9. Функция Serial.peek() 93
6.2. Библиотека SoftwareSerial 94
6.2.1. Функция SoftwareSerial() 94
6.2.2. Функция SoftwareSerial.listen() 94
6.2.3. Функция SoftwareSerial.isListening() 95
6.2.4. Функция SoftwareSerial.overflow() 96
Глава 7. Arduino и знакосинтезирующие жидкокристаллические индикаторы
97
7.1. Принцип работы модулей ЖКИ WINSTAR WH1604 98
7.2. Библиотека LiquidCrystal 103
7.2.1. Функция LiquidCrystal() 104
7.2.2. Функция begin() 105
7.2.3. Функция clear() 105
7.2.4. Функция home() 105
7.2.5. Функция setCursor() 105
7.2.6. Функция write() 106
7.2.7. Функция print() 106
7.2.8. Функция cursor() 107
7.2.9. Функция noCursor() 107
7.2.10. Функция blink() 107
7.2.11. Функция noBlink() 107
7.2.12. Функция display() 107
7.2.13. Функция noDisplay() 108
7.2.14. Функция scrollDisplayLeft() 108
7.2.15. Функция scrollDisplayRight() 108
7.2.16. Функция autoscroll() 108
7.2.17. Функция noAutoscroll() 108
7.2.18. Функция leftToRight() 109
7.2.19. Функция rightToLeft() 109
7.2.20. Функция createChar() 109
7.3. Библиотека LiquidCrystalRus 111
Глава 8. Библиотека EEPROM
116
8.1. Функции библиотек EEPROM 116
8.1.1. Функция чтения EEPROM.read 116
8.1.2. Функция записи EEPROM.write 117
8.2. Примеры использования памяти EEPROM 118
8.2.1. Воспроизведение звука 118
8.2.2. Звонок с мелодиями 121
Глава 9. Использование Arduino Leonardo в качестве USB-устройства
126
9.1. Имитация клавиатуры на Arduino Leonardo 127
9.2. Имитация компьютерной мыши на Arduino Leonardo 129
Глава 10. Arduino и 1-Wire
133
10.1. Что такое 1-Wire? 133
10.2. Применение 1-Wire 136
10.3. Протокол 1-Wire 137
10.3.1. Описание интерфейса 1-Wire 137
10.3.2. Обмен информацией по 1-Wire 138
10.3.3. Протокол обмена информацией 1-Wire 141
10.4. Библиотека OneWire 143
10.4.1. Функция begin() 144
10.4.2. Функция requestFrom() 144
10.4.3. Функция beginTransmission() 144
10.4.4. Функция endTransmission() 145
10.4.5. Функция write() 145
10.4.6. Функция available() 145
10.4.7. Функция read() 146
10.4.8. Функция onReceive() 146
10.4.9. Функция onRequest() 146
10.5. Устройство iButton и программирование электронного замка 146
10.5.1. Поиск устройств 1-Wire и получение уникального кода 148
10.5.2. Режимы работы 150
10.5.3. Режим пользователя 151
10.5.4. Первоначальный ввод ключа в пустую базу 151
10.5.5. Просмотр, запись и удаление кодов ключей в режиме администратора 153
10.5.6. Блок-реле. Открывание замка 156
10.5.7. Проигрывание мелодий 157
Глава 11. Arduino и цифровой датчик температуры DS18B20
159
11.1. Описание датчика DS18B20 159
11.2. Использование библиотеки OneWire 162
11.3. Библиотека DallasTemperature 163
Глава 12. Arduino и датчики температуры и влажности DHT
165
12.1. Характеристики датчиков DH11, DH22 165
12.2. Подключение к Arduino 166
12.3. Библиотека DHT 167
Глава 13. Сетевой обмен с помощью Arduino
169
13.1. Устройство Arduino Ethernet shield 169
13.2. Библиотека Ethernet library 171
13.2.1. Класс Ethernet (Ethernet class) 171
Функция Ethernet.begin() 172
Функция Ethernet.localIP() 172
13.2.2. Класс IPAddress (IPAddress class) 172
Функция IPAddress() 172
13.2.3. Класс Server (Server class) 173
Функция ethernetServer() 173
Функция begin() 173
Функция available() 173
Функция write() 174
Функция print() 175
Функция println() 175
13.2.4. Класс Client (Client class) 175
Функция client() 176
Функция EthernetClient() 176
Функция connected() 176
Функция connect() 177
Функция write() 177
Функция print() 177
Функция println() 177
Функция available() 178
Функция read() 178
Функция flush() 178
Функция stop() 179
13.2.5. Класс EthernetUDP (EthernetUDP class) 179
Функция begin() 179
Функция read() 179
Функция write() 180
Функция beginPacket() 180
Функция endPacket() 181
Функция parsePacket() 181
Функция available() 182
Функция remoteIP() 182
Функция remotePort() 182
13.3. Домашняя метеостанция с доступом через Интернет 182
13.3.1. Устройство, настройка и отладка метеостанции 182
13.3.2. Создание виджета для планшетов с ОС Android 187
13.3.3. Размещение данных метеостанции на сайте 188
Глава 14. Arduino и карта памяти SD
190
14.1. Arduino-библиотека SD 190
14.1.1. Класс SD 190
Функция begin() 191
Функция exists() 191
Функция mkdir() 191
Функция rmdir() 191
Функция open() 191
Функция remove() 192
14.1.2. Класс File 192
Функция available() 192
Функция close() 193
Функция flush() 193
Функция peek() 193
Функция position() 194
Функция print() 194
Функция println() 194
Функция seek() 195
Функция size() 195
Функция read() 195
Функция write() 195
Функция isDirectory() 196
Функция openNextFile() 196
Функция rewindDirectory() 196
14.2. Запись показаний датчиков на SD-карту 196
Глава 15. Arduino и светодиодные матрицы
202
15.1. Светодиоды и светодиодные матрицы 202
15.2. Светодиодная матрица FYM-23881BUG-11 203
15.3. SPI-расширитель выходов 74HC595 204
15.4. Игра "Тетрис" на светодиодных матрицах FYM-23881BUG-11 206
15.4.1. Управление изображением на светодиодных матрицах 208
15.4.2. Фигуры игры "Тетрис" 209
15.4.3. Управление фигурами игры "Тетрис" 211
15.4.4. Проверка столкновения фигур 213
15.5. Светодиодная матрица RGB 215
15.6. RGB-ночник, управляемый с помощью движения рук 216
Глава 16. Arduino и управляемые светодиодные ленты RGB
221
16.1. RGB-светодиодная лента WS2812 221
16.2. Arduino-библиотека Adafruit_Neopixel 223
16.3. Создание табло результатов ЧМ-2018 по футболу на RGB-ленте WS2812 224
Глава 17. Работа Arduino с вендинговыми аппаратами
230
17.1. Купюроприемник ICT серий A7 и V7 230
17.2. Подключение купюроприемника ICT V7 к Arduino 234
17.3. Скетч для получения номинала принимаемой купюры 236
17.4. Монетоприемник CH-926 237
Настройка монетоприемника 238
Калибровка монетоприемника 239
17.5. Подключение монетоприемника к Arduino 239
17.6. Написание скетча 240
Глава 18. Arduino и радиочастотная идентификация (RFID)
242
18.1. Радиочастотная идентификация 242
18.2. Датчик считывания RFID-карт 245
18.3. Скетч для считывания RFID-карт 247
Глава 19. Arduino и датчики расстояния
250
19.1. Ультразвуковые дальномеры HC-SR04 250
19.2. Принцип работы ультразвукового дальномера HC-SR04 251
19.3. Библиотека Ultrasonic 251
19.4. Инфракрасные датчики расстояния Sharp 252
19.5. Подключение датчиков Sharp к Arduino 255
Глава 20. Arduino и передача данных в инфракрасном диапазоне
256
20.1. Обмен данными в инфракрасном диапазоне 256
20.2. Протоколы для ИК-пультов 258
20.2.1. Протокол RC5 258
20.2.2. Протокол NEC 259
20.2.3. Протокол JVC 261
20.2.4. Протокол Sony 262
20.3. Подключение ИК-приемника 263
20.4. Библиотека IRremote 263
20.5. Скетч для получения кодов ИК-пульта 265
Глава 21. Создаем робота
271
21.1. Ходовая часть 271
21.2. Драйвер двигателей L293D 274
21.3. Массив возможных состояний моторов 277
21.4. Разработка скетча движений робота 279
21.5. Движение робота по линии в автономном режиме 282
Глава 22. Arduino и шаговые двигатели
291
22.1. Управление шаговым двигателем 292
22.2. Arduino-библиотека Stepper 293
22.2.1. Функция Stepper() 293
22.2.2. Функция setSpeed(rpm) 293
22.2.3. Функция step(steps) 294
22.3. Пример использования библиотеки Stepper 294
22.4. Arduino-библиотека AccelStepper 296
Глава 23. Arduino и сервоприводы
297
23.1. Сервоприводы 297
23.2. Arduino-библиотека Servo для управления сервоприводом 300
23.2.1. Функция attach() 301
23.2.2. Функция detach() 301
23.2.3. Функция write(int) 302
23.2.4. Функция writeMicrosconds(int) 302
23.2.5. Функция read() 302
23.2.6. Функция attached() 302
23.3. Робот-паук на сервоприводах 303
23.4. Скетч для управления роботом-пауком 307
Глава 24. Arduino и Bluetooth
312
24.1. "Голубой зуб" 312
24.2. Модуль Bluetooth HC-05 312
24.3. Управление роботом с Android-устройства по Bluetooth 318
Глава 25. TV-выход на Arduino
327
25.1. Схема подключения 327
25.2. Arduino-библиотека TVOut 327
25.2.1. Функция установки режима begin() 328
25.2.2. Функции задержки 328
Функция delay() 328
Функция delay_frame() 328
25.2.3. Функции получения параметров 329
Функция hres() 329
Функция vres() 329
Функция char_line() 329
25.2.4. Основные графические функции 329
Функция set_pixel() 329
Функция get_pixel() 330
Функция fill() 330
Функция clear_screen() 330
Функция invert() 331
Функция shift_direction() 331
Функция draw_line() 331
Функция draw_row() 331
Функция draw_column() 332
Функция draw_rect() 332
Функция draw_circle() 333
Функция bitmap() 333
25.2.5. Функции вывода текстовой информации 333
Функция select_font() 334
Функция print_char() 334
Функция set_cursor() 334
Функция print() 334
Функция println() 335
25.2.6. Функции вывода аудио 335
Функция tone() 335
Функция noTone() 335
25.3. Создание пользовательских шрифтов 336
25.4. Создание графических примитивов 337
25.5. Создание простейшей игровой консоли 340
25.6. Разработка игры для игровой консоли 342
25.6.1. Создание переменных игры 342
25.6.2. Управление положением "игрока" с помощью джойстика 343
25.6.3. Генерация и перемещение объектов-цифр 345
25.6.4. Проверка столкновения "игрока" и объектов-цифр 346
25.6.5. Счетчик баллов "игрока" 347
25.6.6. Переход на новый уровень 348
25.6.7. Отображение данных игры на табло 348
25.6.8. Звуковое сопровождение игры 349
25.6.9. Основной цикл игры 349
25.6.10. Добавляем меню для выбора игр 350
Глава 26. Arduino и радиоуправление
352
26.1. Принципы формирования радиосигнала 353
26.2. Установка связи приемника с передатчиком 355
26.3. Разработка скетча приема команд для Arduino 356
Глава 27. Arduino и беспроводной радиомодуль NRF24L01
359
27.1. Радиомодуль NRF24L01 359
27.2. Библиотека для работы с модулем NRF24L01 360
27.2.1. Параметры библиотеки Mirf 361
27.2.2. Функции библиотеки Mirf 361
Функция init() 361
Функция setRADDR() 361
Функция setTADDR() 361
Функция config() 361
Функция dataReady() 362
Функция getData() 362
Функция send() 362
Функция isSending() 362
27.3. Пример соединения двух плат Arduino с помощью модуля NRF24L01 363
Глава 28. Работа Arduino с USB-устройствами
366
28.1. Интерфейс USB 366
28.2. USB Host Shield 367
28.3. HID-устройства USB 368
28.4. Подключение HID-мыши USB 371
28.5. Использование HID-устройства (руль Defender) для управления роботом 371
28.6. Управление iRobot Create с помощью беспроводного геймпада через Arduino 381
Глава 29. Arduino и ROS
388
29.1. Что такое ROS? 388
29.2. Дистрибутивы ROS 389
29.3. Установка ROS 389
29.4. Узлы и темы в ROS 390
29.5. Пакет rosserial 391
29.6. Подготовка сообщения (publisher) на Arduino 392
29.7. Создание подписки (subscriber) на Arduino 395
29.8. Связь через ROS двух плат Arduino 397
Глава 30. Голосовое управление
400
30.1. Управление электроприборами с помощью радиорозеток UNIEL 400
30.2. Радиомодули FS1000A 402
30.3. Модуль распознавания голоса Voice Recognition Module V2 405
30.3.1. Обучение модуля 405
30.4. Система голосового управления 408

Приложения 415
Приложение 1. Список использованных источников 417
Приложение 2. Начальная школа 418

Плавное регулирование яркости 418
Урок 2. Подключение кнопки 421
Урок 3. Работа с монитором порта 425
Урок 4. Подключение датчика температуры и влажности, работа с монитором порта 428
Урок 5. Подключение модуля часов 431
Урок 6. Работа с жидкокристаллическим экраном 433
модуляции 435
Урок 8. Подключение фоторезистора 438
Урок 9. Подключение фоторезистора и 8-ми светодиодов 440

Проект 1. Бегущий огонек 443
Проект 2. Секундомер 444
Проект 3. Тренер 448
Проект 4. Цветная температура 453
Проект 5. Метеостанция 455

Приложение 3. Описание электронного архива 462