Предисловие 11
Введение 13
Подготовка к экспериментам 13
Лицензия GPL 14
Требования к системе 14
Обновления и поддержка 14
Дополнительные материалы, сопровождающие книгу 14
Глава 1. Общие сведения о микроконтроллерах
15
1.1. Структура и принцип работы контроллера 16
1.1.1. Центральный процессор 16
1.1.2. Оперативная память и память программ 16
1.2. Внешние устройства 18
1.3. Сравнение технологий CISC и RISC 18
1.3.1. Технология CISC 18
1.3.2. Технология RISC 20
1.3.3. Выводы 20
Глава 2. Программирование микроконтроллеров
21
2.1. Что такое программа? 21
2.2. Программирование на языке C 21
Глава 3. Краткий обзор семейства микроконтроллеров Arduino
23
Глава 4. Платы расширения Arduino
31
4.1. Плата расширения Arduino ProtoShield 31
4.2. Плата расширения Ardumoto 32
4.3. Плата расширения TellyMate 33
4.4. Плата расширения ArduPilot 34
4.5. Модули XBeeZNet 34
4.6. Плата расширения Ethernet 35
Глава 5. Комплектующие изделия
37
5.1. Список основных комплектующих 37
5.2. Список деталей для дополнительных экспериментов 38
5.3. Экспериментальная плата Freeduino 38
5.3.1. Подключение платы Freeduino 38
5.3.2. Электропитание 39
5.3.3. Кнопка Reset 41
5.3.4. ISP-подключение 41
5.4. Замечания по технике безопасности 41
Глава 6. Электронные компоненты и их свойства
43
6.1. Светодиоды 43
6.2. Резисторы 44
6.3. Конденсаторы 45
6.4. Транзисторы 46
6.5. Диоды 46
6.6. Акустический пьезопреобразователь («пищалка») 46
6.7. Монтажный провод 47
6.8. Кнопка 47
6.9. Потенциометр 47
6.10. Фоторезистор 48
6.11. Макетная плата с контактными гнездами 48
Глава 7. Предварительная подготовка
51
7.1. Установка программного обеспечения Arduino в ОС Windows 52
7.2. Установка программного обеспечения Arduino в ОС Linux 53
7.3. Установка программного обеспечения Arduino в Mac OS X 54
Глава 8. Среда разработки Arduino
57
8.1. Исходные установки Arduino IDE 59
8.2. Наша первая программа: ES_Blinkt 61
8.3. Что мы сделали? 63
Глава 9. Основы программирования Arduino и первые эксперименты
65
9.1. Биты и байты 65
9.2. Базовая структура программы 66
9.2.1. Последовательное выполнение программы 66
9.2.2. Прерывание выполнения программы 66
9.3. Структура программы Arduino 67
9.4. Первая программа для Arduino 68
9.5. Команды Arduino и их применение 69
9.5.1. Комментарии в исходном тексте 69
9.5.2. Фигурные скобки { } 70
9.5.3. Точка с запятой ; 70
9.5.4. Типы данных и переменные 70
9.5.5. Имя переменной 70
9.5.6. Локальные и глобальные переменные 71
9.5.7. Различные типы данных 71
Переменная типа Boolean 71
Переменная типа Byte 71
Переменная типа Char 72
Переменная типа Unsigned Char 72
Переменная типа Int (Integer) 72
Переменная типа Unsigned int 72
Переменная типа Long 72
Переменная типа Unsigned Long 72
Переменная типа Float 72
Переменная типа String 73
Массив Arrays 73
9.5.8. Операторы 75
Арифметические операторы 75
Операторы сравнения 75
Побитовая арифметика 75
Булева арифметика 75
Увеличение и уменьшение значения 75
Константы 76
9.5.9. Директива #define 76
9.5.10. Управляющие конструкции 76
Оператор if 76
Оператор if else 77
Конструкция switch case 80
9.5.11. Циклы 81
Цикл for 82
Циклы while и do while 83
9.5.12. Функции и процедуры 85
Подпрограмма 85
Функция 86
Команда continue 87
9.5.13. Функции преобразования типа 88
9.5.14. Математические функции 88
Функция min(x, y) 88
Функция max(x, y) 89
Функция abs(x) 89
Функция constrain(x, a, b) 90
Функция map(x, fromLow, fromHigh, toLow, toHigh) 91
Функция pow(base, exponent) 91
Функция sq(x) 92
Функция sqrt(x) 93
Функция sin(rad) 93
Функция cos(rad) 94
Функция tan(rad) 94
9.5.15. Последовательный ввод/вывод 95
Функция Serial.begin(Baudrate) 96
Функция Serial.end() 97
Функция Serial.read() 97
Функция Serial.available() 97
Функция Serial.flush() 98
Функция Serial.print() 98
Функция Serial.println() 100
Функция Serial.write() 101
Проблемы с выводом кириллицы в последовательный порт Arduino IDE 102
9.5.16. Функционирование последовательного интерфейса 102
Считывание строки символов через последовательный интерфейс 103
Последовательный вывод данных с вычислением 104
9.5.17. Программная эмуляция UART 105
9.5.18. Конфигурация входа/выхода и установка порта 107
Функция pinMode(pin, mode) 107
Функция digitalRead(pin) 107
Функция digitalWrite(pin,value) 107
Считывание состояния кнопки 108
Кнопка с согласующим резистором 110
Кнопка с внешним подтягивающим резистором 111
9.5.19. Аналоговый ввод данных и АЦП 112
Функция analogRead(pin) 113
9.5.20. Аналоговые выходы ШИМ 115
Команда analogWrite(pin, value) 116
9.6. Некоторые специальные функции 119
9.6.1. Установка паузы 119
С помощью команды delay() 119
С помощью команды micros() 119
9.6.2. Функции случайных чисел 120
Функция randomSeed(seed) 120
Функция random(min, max) 120
9.6.3. Сколько времени прошло? 122
Функция millis() 123
Функция micros() 123
Глава 10. Продолжаем эксперименты с Arduino
125
10.1. Регулятор уровня яркости светодиода с транзистором 125
10.2. Плавное мигание 127
10.3. Подавление дребезга контактов кнопок 130
10.4. Задержка включения 135
10.5. Задержка выключения 136
10.6. Arduino и светодиоды 137
10.7. Подключение больших нагрузок 140
10.8. ЦАП на основе ШИМ-порта 142
10.9. С музыкой веселей… 146
10.10. Романтический вечер с микроконтроллером при свечах 148
10.11. Контроль персонала на проходной 150
10.12. Часы реального времени 152
10.13. Программа школьных часов 154
10.14. Управление вентилятором 157
10.15. Автомат уличного освещения 160
10.16. Сигнализация 162
10.17. Кодовый замок 164
10.18. Измеритель емкости с автоматическим выбором диапазона 168
10.19. Профессиональное считывание сопротивления потенциометра 171
10.20. Сенсорный датчик 172
10.21. Конечный автомат 174
10.22. Шестиканальный вольтметр на основе Arduino 177
10.23. Программирование самописца напряжения 180
10.24. Осциллограф с памятью на основе Arduino 182
10.25. Программа StampPlot — бесплатный профессиональный регистратор данных 184
10.26. Управление микроконтроллером из VB.NET-программы Ports 188
10.27. Реле температуры 190
Глава 11. Шина I2C
193
11.1. Передача бита 194
11.2. Состояние СТАРТ 194
11.3. Состояние СТОП 194
11.4. Передача байта 194
11.5. Подтверждение 195
11.6. Адресация 195
11.7. 7-битовая адресация 195
Глава 12. Arduino и температурный датчик LM75 на шине I2C
197
Глава 13. Микросхема PCF8574 — расширитель порта I2C
201
Глава 14. Определение дальности с помощью ультразвукового датчика
205
14.1. Ультразвуковой датчик SRF02 205
14.2. Считывание данных 206
Глава 15. Сопряжение платы Arduino с устройством GPS
209
15.1. Сколько требуется спутников? 210
15.2. Как подключить приемник GPS к Arduino? 210
15.3. GPS-протокол 212
Глава 16. Подключение сервопривода к плате Arduino
217
16.1. Как функционирует сервопривод? 217
16.2. Подключение привода к Arduino 218
Глава 17. Жидкокристаллические дисплеи
221
17.1. Поляризация дисплеев 222
17.2. Статическое управление и мультиплексный режим 222
17.3. Угол обзора 223
17.4. Отражающие, пропускающие и полупрозрачные ЖКИ 223
17.5. Установка контрастности дисплея 223
17.6. Набор отображаемых символов 225
17.7. Расположение выводов распространенных ЖКИ 227
17.8. Управление дисплеем от микроконтроллера 228
17.9. Инициализация дисплеев 228
17.10. Подключение дисплея к Arduino 230
17.11. Первый эксперимент с ЖКИ 232
17.12. Как же все это работает? 234

ПРИЛОЖЕНИЯ 237
Приложение 1. Соответствие выводов платы Arduino и контроллера ATmega 239
Приложение 2. Escape-последовательности 241
Приложение 3. Таблица ASCII 243
Приложение 4. Описание электронного архива 249
Предметный указатель 251