ARDUINO-КНИГА

Содержимое страницы

  1. ЭЛЕМЕНТЫ БАЗОВОГО КОМПЛЕКТА ARDUINO KIT
  2. Микроконтроллер ARDUINO UNO R3
  3. Программирование Ардуино
  4. Макетная плата для ARDUINO
  5. Монтажные провода

ARDUINO технология уже давно применяется любителями цифровых устройств. Знатоков привлекает простота реализации различных устройств бытовых и промышленных на ARDUINO. ОсновныArduino-Kit.pngм элементом в ARDUINO технологии является микроконтроллер. Освоить программирование ARDUINO микроконтроллера позволяет продвинутый IDE-интерфейс, множество разработанных примеров (скетчей). По ARDUINO тематике в Интернет можно найти десятки книг, а также тысячи примеров реализации различных умных устройств. Для начинающих пользователей удобно заказать на AliExpress комплект ARDUINO KIT. 

В данной книге будут рассмотрены сотни элементов, используемых ARDUINO технологиях.  Это и популярные микроконтроллеры и исполнительные устройства (сервоприводы и шаговые двигатели) и, конечно, датчики (температуры, влажности, света, магнитные, давления, акселерометры и микрогироскопы).  Базовый набор элеметов конструктора ARDUINO KIT представлен в таблице. Стоимость комплекта не высока - составляет 1680 рублей.

ЭЛЕМЕНТЫ БАЗОВОГО КОМПЛЕКТА ARDUINO KIT

Состав Arduino Kit Микроконтроллер ARDUINO UNO R3

Arduino UNOОсновным элементом комплекта является микроконтроллер ARDUINO UNO R3 (см. фото) Он имеет 14 цифровых вход/выходов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых входов, кварцевый генератор 16 МГц, разъем USB, силовой разъем, разъем ICSP и кнопку перезагрузки. Для работы необходимо подключить платформу к компьютеру посредством прилагаемого кабеля USB, либо подать питание при помощи адаптера AC/DC или батареи.

Основные характеристики: Микрокропроцессор ATmega328; Рабочее напряжение 5 В; Входное напряжение (рекомендуемое) 7-12 В; Входное напряжение (предельное) 6-20 В; Цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ); Аналоговые входы 6; Постоянный ток через вход/выход 40 мА; Постоянный ток для вывода 3.3 В 50 мА; Флеш-память 32 Кб (ATmega328) из которых 0.5 Кб используются для загрузчика ОЗУ; 2 Кб (ATmega328); EEPROM 1 Кб (ATmega328); Тактовая частота 16 МГц. Все пины ARDUINO UNO R3 представлены на рисунке.

Atmega328.png

Программирование Ардуино. В платах Ардуино используются микроконтроллеры Atmel  AVR с прошитым в них загрузчиком. С помощью загрузчика записывается программа в микроконтроллер из персонального компьютера без применения аппаратных программаторов. Для программироования можно воспользоваться самим Arduino Uno, используя, например, интерфейс Arduino IDE. Подсоединяем Arduino к микроконтроллеру и используем технологию программировани Arduino IDE (заливку скетча непосредственно с Arduino IDE - см. в дальнейших главах книги). Прежде всего, необходимо загрузить последнюю версию программы. Загрузить ZIP архив можно с официального сайта поддержки систем Ардуино по этой ссылке. Необходимо выбрать строку с нужной операционной системой. Создать папку, например Arduino, и распаковать в нее zip файл. С помощью USB кабеля подключите плату к компьютеру. Должен загореться светодиод (с маркировкой ON), показывающий, что на плату поступает питание. В среде Arduino IDE связь компьютера с контроллером обернута в графическую оболочку - Монитор порта. Для открытия которого щелкаем Сервис => Монитор порта, либо же комбинация клавиш Ctrl+Shift+MКонфигурация выводов как вход либо выход задается в void setup.

Pin

При использовании микросхемы преобразователя интерфейсов CH340G, надо в Интернет найти и скачать драйвер CH340G. После подключения платы к компьютеру, Windows сама начнет процесс установки драйвера. для запуска срелы Arduino IDE pапускаем файл arduino.exe.

Выбираем тип платы Ардуино:  Инструменты -> Плата -> Arduino UNO. В среде Arduino IDE необходимо указать номер COM порта. Для проверки работы системы можно запустить первый скетч – мигающий светодиод. Для этого: Файл -> Примеры -> 01.Basics -> Blink. Нажимаем кнопку Загрузкаждем пока программа загрузится и светодиод  на плате, обозначенный букой L, начинает мигать примерно раз в секунду. Значит все сделали правильно.

Структура программы Ардуино  достаточно проста и в минимальном варианте состоит из двух частей setup() и loop(). Функция setup() выполняется один раз, при включении питания или сбросе контроллера. Обычно в ней происходят начальные установки переменных, регистров. Функция должна присутствовать в программе, даже если в ней ничего нет. После завершения setup() управление переходит к функции loop().  Она в бесконечном цикле выполняет команды, записанные в ее теле (между фигурными скобками). Собственно эти команды и совершают все алгоритмические действия контроллера. Все переменные должны быть объявлены до того как будут использоваться.

На макетке можно обойтись без кварцевого резонатора и двух конденсаторов, используя внутренние часы микроконтроллера. Для этого нам понадобится программатор (который фактически у нас уже есть), понимание, что такое fuse bits и как использовать микроконтроллер без бутлоадера, а также умение пользоваться avrdude напрямую из консоли. Использование в Arduino Uno оригинальных интерфейсных схем FT232RL устарело, что привело к разработке драйвера  c USB конвертером на микросхеме CH340G.  Контроллер в плате Arduino имеет замечательный интерфейс UART, который в сочетании со встроенным в UNO USB-to-UART конвертером, позволит установить двунаправленую связь с компьютером.

  pinMode(3, OUTPUT); // Инициализируем цифровой pin 3 как выход   pinMode(3, INPUT); // Инициализируем цифровой pin 3 как вход

Основным применением аналоговых входов в тематике Arduino является чтение значений аналоговых датчиков. В тоже время стоит не забыть упомянуть, что аналоговые входы могут использоваться как цифровые порты входов/выходов. Благодаря встроенному АЦП (аналого-цифровой преобразователь), данные входы могут считывать напряжение подаваемое на них. Микроконтроллеры Atmega 328, используемые в Arduino UNO, содержат шестиканальный АЦП, разрешение которого составляет 10 бит. Это позволяет на выходе получать значения от 0 до 1023 (всего 1024 градации). Для того чтобы считать показание на аналоговом входе следует вызвать функцию

   analogRead(0); // Производим чтение с аналогового входа A0

 Для перевода получившегося значения в вольты достаточно вычислить шаг и умножить его на получаемое значение. Для вычисления шага поделим опорное напряжение на 1024 градации 5В / 1024 =  0.0049 Вольт, Т.е. При получаемом аналоговом значении в 500, на порт контроллера приходит ( 500 * 0.0049) 2.45В.

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

Пошаговая инструкция по сборке Arduino на макетной плате для мигания светодиодом:

  1. Подключаем конденсатор на 100 мкФ в качестве сглаживающего фильтра. Если вы можете использовать от 7.5 до 9 В, вместо него лучше использовать стабилизатор напряжения LM7805. Как он подключается ранее рассказывалось в посте Интегральные схемы: чипы стандартной логики 74xx. Также можно добавить светодиод для индикации, что напряжение подано. В общем, обычная подготовка.
  2. Пин 1 — это Reset. Его подключаем через резистор на 10 кОм к плюсу, а через кнопку — к минусу. Если же кнопка Reset вам не нужна, можно подключить напрямую к плюсу.
  3. Пин 7 (VCC) подключаем к плюсу, пины 8 и 22 (GND) — к земле. Пины 20 (AVCC) и 21 (AREF) подключаем к плюсу.
  4. Между пинами 9 и 10 ставится кварцевый резонатор на 16 МГц. Подобно резистору, его все равно, как подключать. Затем сами пины подключаются к земле через конденсаторы на 22 пФ.
  5. Опционально: так как в микроконтроллер сейчас залита программа Blink, к пину 19 (в Arduino это цифровой пин 13) можно подключить светодиод, который через резистор на 220 Ом идет к земле.

Если все было сделано правильно, после включения цепи увидим, как микроконтроллер мигает светодиодом. Но это только пол дела. Сейчас, чтобы запрограммировать чип, нам придется вставлять его обратно в Arduino, запрограммировать, затем извлечь и вставить обратно в макетку. Можно программироовать ATmega328P удобнее.

Интерфейсы SPI, I2C, Serial. Сначала мы открываем порт на скорости 9600 бод (бит в секунду). Этой скорости достаточно для выполнения большинства задач. Вы можете использовать и другую скорость, но не забудьте поставить такую же скорость на компьютере в мониторе порта.

В интерфейсе I2C http://easyelectronics.ru/interface-bus-iic-i2c.html данные передаются по двум проводам — провод данных и провод тактов. Есть ведущий (master) и ведомый (slave), такты генерирует master, ведомый лишь поддакивает при приеме байта. Всего на одной двупроводной шине может быть до 127 устройств. Передача/Прием сигналов осуществляется прижиманием линии в 0, в единичку устанавливается сама, за счет подтягивающих резисторов. Их ставить обязательно всегда!  Резисторы на 10к оптимальны. Чем больше резистор, тем дольше линия восстанавливается в единицу (идет перезаряд паразитной емкости между проводами) и тем сильней заваливаются фронты импульсов, а значит скорость передачи падает. Именно поэтому у I2C скорость передачи намного ниже чем у SPI. Обычно IIC работает либо на скорости 10кбит/с — в медленном режиме, либо на 100кбит/с в быстром. Но в реальности можно плавно менять скорость вплоть до нуля. Ни в коем случае нельзя переключать вывод микроконтроллера в OUT и дергать ногу на +5. 

SPI (Serial Peripheral Interface), или последовательный периферийный интерфейс, был разработан компанией Motorola для организации быстрого и простого в реализации обмена данными между компонентами системы — микроконтроллерами и периферийными устройствами. На шине может быть одно ведущее устройство (master) и несколько ведомых (slave). Интерфейс использует 4 линии для обмена данными:

  1. SCLK — Serial Clock: тактовый сигнал (от ведущего). Другие обозначения: SCK, CLK. Arduino: пин 13;
  2. MOSI — Master Output, Slave Input: данные от ведущего к ведомому. Другие обозначения: SDI, DI, SI. Arduino: пин 11;
  3. MISO — Master Input, Slave Output: данные от ведомого к ведущему. Другие обозначения: SDO, DO, SO. Arduino: пин 12;
  4. SS — Slave Select: выбор ведомого; устанавливается ведущим. Другие обозначения: nCS, CS, CSB, CSN, nSS, STE. Arduino: по умолчанию пин 10
  5. Линия SS обычно для каждого ведомого своя, но некоторых ведомых возможно подключить к одной SS — такой способ используется для каскадного подключения устройств.

Стандартный алгоритм работы SPI таков:

  1. Ведущий устанавливает низкий уровень на той линии SS, к которой подключен нужный ведомый.
  2. Ведущий задаёт такт, «дрыгая» уровнем на SCLK, и одновременно с каждым дёрганьем SCLK выставляет нужный уровень на MOSI, передавая ведомому по биту за такт.
  3. Ведомый на каждый «дрыг» SCLK выставляет нужный уровень на MISO, передавая ведущему по биту за такт.
  4. Для завершения передачи ведущий устанавливает высокий уровень на SS.

SPI является полнодуплексной шиной — данные передаются одновременно в обе стороны. Типичная скорость работы шины лежит в пределах 1-50 МГц. Благодаря исключительной простоте алгоритма передачи SPI получил широчайшее распространение в самых различных электронных устройствах — например, в датчиках, чипах памяти, радиомодулях, и т.д. У SPI есть четыре режима передачи, которые основаны на комбинации «полярности» тактового сигнала (clock polarity, CPOL) и фазы синхронизации (clock phase, CPHA). Проще говоря, CPOL — это уровень на тактовой линии до начала и после окончания передачи: низкий (0) или высокий (1). А фаза определяет, на фронте или спаде тактового сигнала передавать биты:

  1. Режим 0: CPOL=0, CPHA=0 - Чтение бита происходит на фронте тактового сигнала (переход 0 ⇨ 1), а запись — на спаде (1 ⇨ 0).
  2. Режим 1: CPOL=0, CPHA=1 - Чтение — на спаде, запись — на фронте.
  3. Режим 2: CPOL=1, CPHA=0 - Чтение — на спаде, запись — на фронте.
  4. Режим 3: CPOL=1, CPHA=1 - Чтение — на фронте, запись — на спаде.Вся передача данных состоит из Стартовой посылки, битов и стоповой посылки. Порядок изменения уровня на шинах задает тип посылки. Данные по SPI можно передавать либо старшим битом вперёд (по умолчанию для Arduino), либо младшим. Обычно используется первый вариант. SPI обычно реализован в микроконтроллере аппаратно, тогда задача по управлению интерфейсом решается для каждого микроконтроллера отдельно, т.к. реализации могут быть разными. Например, для ATmega328Р (микроконтроллер компании Atmel) при работе с SPI нужно сначала программным путем установить на SS логический ноль при начале приема/передачи и установить в логическую единицу обратно при окончание передачи.

Arduino IDE имеет монитор последовательного порта (Serial Interface), позволяющий получать и посылать данные обмена с платой. Можно передать на компьютер любую информацию о состоянии программы и вывести ее на дисплей. Меня такой способ отладки вполне устраивает. Только вместо монитора Arduino IDE я иногда использую свои программы, которые выводят данные в удобном мне виде. UART в переводе это универсальный асинхронный приемопередатчик.  Данные UART передаются последовательным кодом. Каждый бит передается за равные промежутки времени. Время передачи одного бита определяется скоростью передачи. Скорость передачи указывается в бодах (бит в секунду). Кроме битов данных интерфейс UART вставляет в поток биты синхронизации: стартовый и стоповый.  Таким образом, для передачи байта информации требуется 10 битов, а не 8. Погрешность временных интервалов передачи битов должна быть не более 5% (рекомендуется не более 1,5%). 

  1. в неактивном режиме выход UART находится в высоком состоянии;
  2. передача байта начинается со стартового бита (низкого уровня);
  3. передача байта заканчивается стоповым битом (высокого уровня);
  4. данные передаются младшим битом вперед;
  5. для передачи байта требуется 10 битов;
  6. время передачи одного байта рассчитывается исходя из скорости передачи и количества битов (10). 

Обмен информацией через UART происходит в дуплексном режиме, т.е. передача данных может происходить одновременно с приемом. Для этого в интерфейсе UART есть два сигнала: TX – выход  для передачи данных; RX – вход для приема данных.

При соединении двух UART устройств выход TX одного устройства соединяется со входом RX другого. А сигнал TX второго UART подключается к входу RX первого.  Плата Arduino UNO имеет один порт UART, сигналы которого  подключены к выводам 0 (сигнал RX) и 1 (сигнал TX). Сигналы имеют логические уровни TTL (0…5 В). Через эти выводы (0 и 1) можно подключить к плате другое устройство имеющее интерфейс UART. Кроме функции связи с другими контроллерами порт UART платы Arduino UNO используется для загрузки в контроллер программы из компьютера. Для этого к этим же сигналам (RX и TX) подключены соответствующие выводы микросхемы ATmega16U2 - преобразователя интерфейса USB/UART. Микросхема преобразователя подключена через резисторы сопротивлением 1 кОм.

Макетная плата для ARDUINO

kit-board0.pngМакетная плата без пайки (830 точек) для Ардуино (см.рисунок). Breadboard (макетная (монтажная) беспаечная плата) – один из основных инструментов как для познающих основы схемотехники, так и для профессионалов. Это отличная платформа для разработки прототипов или временных электросхем, с использованием которой не понадобится паяльник и все связанные с этим проблемы и затраты времени на распайку.

Прототипирование (prototyping) - это процесс разработки и тестирования модели будущего устройства. Если не известно как будет себя вести ваше устройство при определенных заданных условиях, лучше сначала создать прототип и проверить его работоспособность. Еще одна сфера применения breadbord'ов - проверка новых деталей и компонентов - например, микросхем (ICs).

Созданная электросхема вполне может меняться и в этом основное преимущество использования беспаечных монтажных плат. Например, в любой момент вы можете включить в схему дополнительный светодиод, который будет реагировать на те или иные условия в вашей цепи. Большинство микросхем (ICs), изготавливаются в стандартных размерах. Для того, чтобы они занимали минимум места на монтажной плате, используется специальный форм-фактор под названием Dual in-line Package, или сокращенно - DIP.

У DIP-микросхем контакты расположены по двум сторонам и отлично садятся на две рельсы по центру breadboard'а. Именно в этом случае изоляция контактов - отличный вариант, который позволяет сделать разводку каждого контакта микросхемы на отдельную рельсу с пятью контактами.

Когда разрабатывается электрическая схема, не обязательно ограничиваться одним breadboard 'ом. На многих монтажных платах предусмотрены специальные пазы и выступы по бокам. С помощью этих слотов, можно соединить несколько макеток и сформировать необходимое рабочее пространство.

Можно использовать и специальные модули-стабилизаторы питания, которые выпускаются под беспаечные монтажные платы. Некоторые модули дают возможность запитывать макетку от USB порта, некоторые изготавливаются со стандартными джеками под блоки питания. На большинстве подобных модулей стабилизаторов питания предусмотрена регулировка напряжения. Например, можно выбрать напряжение, которое пойдет на рельсу: 3.3 В или 5 В.

Монтажные провода.

Проводапапа-папаРазъемК макетной плате, как правило, прилагаются монтажные провода со специальными концевиками (см. следующие рисунки). Сложно представить схему на breadboard’е без использования проводов «папа-папа». Но длины стандартных проводов не всегда хватает. Удобно использовать штырьковые соединители, припаяв их и добавив два сантиметровых куска термоусадки, надетые на провод с двух сторон. Соединители Мама-Мама, хотя и реже применяются, но без них тоже не обойтись и они тоже есть в комплекте ARDUINO KIT. На 3-м рисунке представлен шнур питания с разъемом на одной стороне типа "Крона", а на другой стороне со штырьковым разъемом.