Знакомство со средой Arduino IDE
Микроконтроллер — это небольшая микросхема, расположенная на плате контроллера. Именно в микроконтроллер мы будем загружать программы, а он будет их выполнять, управляя различными устройствами: светодиодами, двигателями, и т.д. Зачастую микроконтроллер также получает информацию об окружающем мире от датчиков: освещённости, температуры, наличия линии на трассе. Но всё это подключить к микроконтроллеру напрямую сложно, поэтому его устанавливают на специальную плату, которая обеспечивает удобность работы с ним.
Контроллер Arduino Nano работает со всеми платами расширения, датчиками и другими модулями, поддерживающими работу с Arduino. После выполнения всех заданий из данного пособия Вы можете использовать данный контроллер в своих следующих проектах.
Рассмотрим плату подробнее.
- Микроконтроллер. Микроконтроллер является «сердцем» платы. В него прошиваются (загружаются) программы (скетчи).
- Mini USB. Разъём USB используется для связи контроллера с ПК и его прошивки. Также разъём можно использовать для подключения питания.
- Выводы питания:
- Vin— напряжение от внешнего источника питания (6.5 В — 12 В);
- GND — минус напряжения питания / общий вывод / земля;
- 5V — напряжение 5 В;
- 3.3V — напряжение 3.3 В (на выход);
- RST — разъём для плат расширения. Используется для перезагрузки микроконтроллера.
- Колодка аналоговых выводов:
- А0-А7 — 8 выводов, поддерживающих работу с аналоговыми датчиками. Выводы A0-A5 можно использовать и как цифровые (14-19);
- Выводы А4и А5также являются выводами SDAи SCL. Они необходимы для подключения
оборудования по шине I2C (подробнее о ней мы поговорим в следующих уроках).
- Светодиод питания. Индикация наличия питания на плате.
- Колодки цифровых выводов:
- Цифровые выводы 0-13 — 14 выводов, используемых для подключения / управления различных устройств. Значения сигнала ближе к 5 В представляются как логическая 1, значения ближе к 0 В — как логический 0.
- Выводы с поддержкой ШИМ (широтно-импульсная модуляция) — выводы 3, 5, 6, 9, 10, 11 — позволяют выдавать значения в виде ШИМ-сигнала (этот сигнал используется для управления яркостью и скоростью вращения). Подробнее о ШИМ-сигнале мы также поговорим немного позже.
- Светодиод, подключенный к 13 выводу. При наличии логической 1 на 13 выводе светодиод горит, при логическом 0 — гаснет.
- Светодиоды RX и TX — индикация приёма / передачи данных по USB.
- Кнопка RESET используется для принудительной перезагрузки микроконтроллера.
Отлично, теперь Вы знаете, как устроен контроллер. Следующий шаг — научиться загружать в него программы для того, чтобы он выполнял действия, на которые Вы его запрограммируете.
Как вывести данные с ардуино на компьютер
В проектах, нередко, требуется выведение особых символов на экран. Но так как стандартный набор LCD ограничен, а иногда и вовсе только английскими буквами, то приходится создавать их в ручную.
В этом уроке мы разберем пошаговое создание своих символов, на примере загрузочной строки, которую можно использовать в большом количестве проектов и устройств.
Компоненты, схема устройства и сам дисплей, будут такими же, как и в предыдущем уроке. Изменится только сам код программы. Давайте начнем.
Для начала берем основу кода, для работы с LCD дисплеем:
Описывать данный скетч мы не будем, так как подробно каждая строка рассматривается в предыдущем уроке.
Теперь давайте научимся создавать свои символы и выводить их на экран.
Добавление символов происходит с помощью создания массива, размерностью 5 на 7 (что соответствует размеру одного прямоугольника, входящего в дисплей), состоящего из бинарных чисел (0 и 1):
Как видите, сейчас массив заполнен одними нулями. То есть ни один из пикселей прямоугольника сейчас не задействован. Чтобы сформировать символ, нужно в массив добавить единицы. Получается, что там где в массиве 0 — пиксель не включен, а где 1 — пиксель включен.
Например вот так выглядит символ «П»:
Теперь нужно данный символ инициализировать, для этого в функции setup() пишем следующее:
, где 1 — это порядковый номер, а line_1 — это имя массива байтов.
Вот так выглядит полный код программы:
Если залить скетч в Arduino, то мы увидим букву «П», стоящую в первом столбце, первой строки.
Теперь давайте немного усложним задачу, и создадим линию загрузки. Для этого нужно создать пять дополнительных символов, отвечающие за каждый из столбцов дисплея. И также их инициализировать:
Теперь нужно выводить строку. Для этого создаем двойной цикл. Внешний цикл, по i, будет отвечать за номер столбца в строке. А внутренний цикл, по j, будет отвечать за вывод соответствующего столбца на экран. Таким образом, функция loop() будет иметь вид:
Первым делом мы переводим курсор на вторую строку и очищаем ее:
Теперь выводим эту строку на экран. Сначала мы берем первый прямоугольник (i = 0). И этот прямоугольник начинаем заполнять линиями. От line_1, до line_5. Таким образом, последним нашим действием, в данном прямоугольнике, будет вывод на экран line_5. Потом мы берем второй прямоугольник, и проделываем с ним тоже самое. И так все 16 областей:
Когда вся наша строка заполнена, цикл прерывается. Мы очищаем всю строку, и снова начинаем ее заполнение с нуля.
Полный код программы:
Видео работы устройства:
Задания для самостоятельного выполнения:
-
Сделайте так, чтобы поведении линии, было такое же, как и на видео ниже:
Двенадцатый урок проекта «Arduino с нуля» подошел к концу. Надеюсь тема была для вас полезной, и вы узнали что-нибудь новое. Также надеюсь, что при выполнении заданий у вас не возникнет вопросов и вы справитесь самостоятельно.
Если же что-нибудь не будет получаться, или у вас появятся какие-либо вопросы, не стесняйтесь, и оставляйте их в комментариях или же на форуме.
Скетч для Arduino отправки значений температуры в монитор порта.
Измерять температуру будем датчиком DS18B20 выполненного в виде модуля KY-001. По работе с данным модулем у меня есть отдельный урок. Скетч возьмем из урока и немного подправим для нашего проекта.
Схема подключения модуля KY-001 (DS18B20) к Arduino.
В связи с тем, что будим использовать модуль KY-001 (DS18B20) подключение к Arduino будет достаточно простым и понадобиться всего 3 соединительных провода.
Подведем итог.
Как видим сделать в Visual Studio приложение Windows Forms достаточно просто. А при сочетании с C# возможности взаимодействия Arduino с компьютером становятся достаточно большими. Можно реализовать не только получение данных с Arduino, но и реализовать управление, получая данные с ПК, Интернета и т.д.
Если вам интересны уроки по данной теме, пишите в комментарии. При заинтересованности сделаю блок уроков Visual Studio Arduino.
Понравился проект Пульт для презентаций своими руками на Arduino? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
OUTPUT
Выводы, сконфигурированные функцией pinMode() как выходы ( OUTPUT ), находятся в низкоимпедансном состоянии. Это означает, что они могут обеспечить внешние цепи относительно большим током. Микроконтроллер ATmega может отдавать (положительный ток) или принимать (отрицательный) ток до 40 мА (миллиампер) от внешних устройств/цепей. Такой режим удобен для питания светодиодов, но бесполезен при считывании сигналов с датчиков. Выводы, сконфигурированные как выход, также могут быть выведены из строя при коротком замыкании на землю либо на цепь питания 5В. Кроме того, выходного тока микроконтроллера ATmega недостаточно для питания большинства реле и двигателей, что требует дополнительных интерфейсных цепей.
Прошивка hex-файлов в Arduino
Некоторые проекты для Arduino распространяются не в виде файлов скетчей (*.ino), а в виде hex-файлов (*.hex). Я расскажу, как прошить такой файл в Arduino.
Получение hex-файла
Как получить hex-файл для своего проекта или скачанного скетча? Для получения hex-файла, соответствующего требуемому скетчу, необходимо открыть этот скетч (например, bike.ino) в Arduino IDE (я использую версию 1.6.6) и выбрать в меню Скетч (Sketch) команду Экспорт бинарного файла (Export Compiled Binary):
После этого происходит компиляция и в папке скетча появляются два hex-файла (для скетча bike.ino — bike.ino.eightanaloginputs.hex и bike.ino.with_bootloader.eightanaloginputs.hex):
Hex-файл имеет текстовый формат и состоит из строк вида
:100020000C94DF030C94DF030C94DF030C94DF03C8
Отличие этих двух файлов заключается в наличии в файле *.ino.with_bootloader.eightanaloginputs.hex загрузчика Arduino:
Прошивка hex-файла
Как же прошить имеющийся hex-файл? Сначала необходимо подключить прошиваемую плату (я использую Arduino Nano 3.0) к USB-порту компьютера и узнать COM-порт подключения. Номер порта можно посмотреть в Arduino IDE в меню Инструменты (Tools):
Для прошивки hex-файла *.ino.eightanaloginputs.hex (для рассматриваемого скетча — bike.ino.eightanaloginputs.hex) в микроконтроллер платы Arduino используется программа AVRDude — AVR Downloader-Uploader, предназначенная для прошивки микроконтроллеров AVR.
Для упрощения процедуры прошивки можно создать папку avrdude. Затем в эту папку следует скопировать файлы avrdude из папок Arduino IDE:
avrdude.exe и libusb0.dll (библиотека из проекта libusb-win32 https://github.com/libusb/libusb) — из папки Arduinohardwaretoolsavrbin
avrdude.conf (конфигурационный файл) — из папки Arduinohardwaretoolsavretc
В результате в папке avrdude содержатся три файла:
В эту же папку следует скопировать прошиваемый hex-файл (в рассматриваемом примере — файл bike.ino.eightanaloginputs.hex).
В Arduino IDE версии 1.6.6 представлена программа avrdude версии 6.0.1
Затем в консоли требуется ввести команду:
-v : вывод подробной информации
-patmega328p : указание типа микроконтроллера
-c arduino : указание программатора — программатор, используемый Arduino IDE
-P com11 : указание номера COM-порта (COM11)
-b 57600 : указание скорости COM-порта (57600 бод)
-D : не выполнять очистку FLASH-памяти микроконтроллера.
-U flash:w:»bike.ino.eightanaloginputs.hex»:i : w — запись flash — во FLASH-память i — файла в формате Intel Hex
После ввода команды выполняется прошивка hex-файла в Arduino:
Готово!
Как перенести проект с Arduino в отдельный AVR микроконтроллер
Предлагаемый метод переноса программы, разработанной и отлаженной в среде Arduino IDE, на микроконтроллер, установленный не на плате Arduino, а в другом устройстве, даёт возможность создать законченное устройство меньших габаритов и стоимости. В настоящее время платы Arduino весьма популярны, поскольку обеспечивают простой вход в мир программирования. Выпускают много вариантов плат этого семейства, различающихся размерами, функциями и ценами.
Но все они относятся к числу отладочных. Используя их, можно быстро собрать макет устройства, разработать и отладить его программу. Однако использовать плату Arduino в готовом устройстве бывает неудобно.
Кроме того, встроив такую плату в законченное устройство, приходится для дальнейшей разработки и отладки программ разбирать его либо приобретать ещё одну плату Arduino.
Рис. 1. Arduino UNO R3.
В некоторых вариантах плат этого семейства, например, в оригинальной Arduino UNO R3 (рис. 1), микроконтроллер установлен в панель. Завершив отработку программы, его можно извлечь из панели и прочитать с помощью программатора содержимое его памяти.
Копию этого содержимого можно загрузить в память другого аналогичного микроконтроллера, который и использовать в своей разработке. Но даже если установленный на плате Arduino микроконтроллер снять с нее без пайки невозможно (рис. 2), доступ к его памяти можно получить, подключив программатор к выводам платы D11 (MOSI), D12 (MISO), D13 (SCK), а также RST, +5V и GND.
Эти цепи выведены не только на главные разъёмы платы, но и на шестиконтактный разъём ICSP, который на рис. 1 и рис. 2 виден справа.
Однако существует и более простой способ загрузки программы, разработанной в среде программирования Arduino IDE, в отдельный, не установленный на плате Arduino, микроконтроллер.
Для этого достаточно найти в памяти компьютера, на котором производилась трансляция исходного текста (скетча) программы, созданный в ходе этого процесса НЕХ-файл программы и загрузить его в память своего микроконтроллера с помощью программатора.
Послужить программатором может сама плата Arduino. Чтобы узнать, как это сделать, достаточно набрать в любой поисковой системе запрос «Arduino как программатор».
Рис. 2. Arduino с запаянным микроконтроллером.
Но найти этот НЕХ-файл до недавнего времени было довольно трудно. Arduino IDE помещала его вместе с прочими генерируемыми в процессе компиляции служебными файлами в специальную папку со всякий раз другим длинным цифровым именем. Имя этой папки нужно было искать в сообщениях, выводимых во время компиляции. Однако задачу можно упростить.
Для этого нужно открыть любым текстовым редактором файл preferences.txt, путь к которому указан в окне «Файл->Настройки» системы разработки.
В этот файл нужно добавить строку «build.path Скетч» появился пункт «Экспорт бинарного файла». Если после успешного завершения компиляции выбрать этот пункт, готовый к загрузке НЕХ-файл программы появится под именем *.standard, hex в папке с её скетчем. Место звёздочки займёт имя скетча.
Ещё один файл по имени *.with_bootloader.standard.hex появится там же, но в рассматриваемом случае он не потребуется.
Вместо слова standard в имени файла может стоять другое, отражающее особенности платы, для которой выполняется компиляция. Например, для платы Arduino Nano, имеющей дополнительные аналоговые входы А6 и А7, это будет «eightanaloginputs» — даже в том случае, если эти входы программа не использует.
Для примера рассмотрим принципиальную схему макета простого велоспидометра с платой Arduino UNO, изображённую на рис.3. Программа для него приложена к статье. Как собрать такое устройство, заменив в нём плату Arduino одиночным микроконтроллером?
Лучше всего, если это будет микроконтроллер того же типа, что установлен на плате. В данном случае — ATmega328P (возможно, в другом корпусе). Вполне возможна и замена, например, на АТтеда168 или АТтеда8.
В других случаях следует убедиться, что выбранный микроконтроллер совместим с заменяемым по системе команд, числу, назначению и адресам регистров и их разрядов.
Немаловажны объём памяти и число выводов микроконтроллера. Если памяти мало, программа может просто в ней не поместиться. А недостаточное число выводов не позволит подключить к микроконтроллеру все нужные внешние устройства.
Чтобы избежать проблем, рекомендуется для окончательной компиляции отлаженного скетча выбрать в пункте меню «Инструменты->Плата:» плату именно с тем микроконтроллером, который предполагается применить, и использовать полученный НЕХ-файл.
Рис. 3. Принципиальная схема макета простого велоспидометра с платой Arduino UNO.
Например, платы Arduino Nano бывают как с микроконтроллерами ATmega328, так и ATmega168, а платы Arduino NT — с ATmega168 или ATmega8. Причём для компиляции скетча подключать к компьютеру выбранную плату вовсе не обязательно.
Анализ приведённой на рис. 3 схемы показывает, что в велоспидометре использованы дискретные выходы D2-D7 и дискретный вход D10 платы Arduino.
Такой же вывод можно сделать, изучив текст программы. Номера используемых выводов Arduino указаны в её строках Liquidcrystal lcd(2, 3, 4, 5, 6, 7); int pin = 10;
Осталось найти соответствие между именами выводов Arduino и номерами выводов микроконтроллера, с которыми они соединены. Это можно сделать, воспользовавшись таблицей. Она составлена для микроконтроллеров ATmega328P в корпусе TQFP32 (индекс -AU), в корпусе VQFN28 (индекс -ММ) и в корпусе PDIP28 (индекс -PU).
Аналогичную таблицу для микроконтроллеров других типов или в других корпусах можно составить, ориентируясь на их описания и названия выводов согласно справочным данным.
ATmega328P | Вывод Arduino | |||
Назв. вывода | Номер вывода | |||
-AU | -MM | -PU | ||
РВ6, XTAL1 | 7 | 5 | 9 | — |
РВ7, XTAL2 | 8 | 6 | 10 | — |
VСС | 4 | 3 | 7 | +5V |
VСС | 6 | — | — | +5V |
VСС | 18 | 16 | 20 | +5V |
РС0, ADC0 | 23 | 19 | 23 | A0 |
PCI, ADC1 | 24 | 20 | 24 | A1 |
PC2, ADC2 | 25 | 21 | 25 | A2 |
PC3, ADC3 | 26 | 22 | 26 | A3 |
PC4, ADC4 | 27 | 23 | 27 | A4, SDA |
PC5, ADC5 | 28 | 24 | 28 | A5, SCL |
ADC6 | 19 | — | — | A6 |
ADC7 | 22 | — | — | A7 |
AREF | 20 | 17 | 21 | AREF |
PDO, RXD | 30 | 26 | 2 | D0, RXD |
PD1, TXD | 31 | 27 | 3 | D1,TXD |
PD2, INTO | 32 | 28 | 4 | D2 |
PD3, INTI | 1 | 1 | 5 | D3 |
PD4, TO | 2 | 2 | 6 | D4 |
PD5, T1 | 9 | 7 | 11 | D5 |
PD6, AIN0 | 10 | 8 | 12 | D6 |
PD7, AIN1 | 11 | 9 | 13 | D7 |
PBO, CLKO | 12 | 10 | 14 | D8 |
PB1, OC1A | 13 | 11 | 15 | D9 |
PB2, SS | 14 | 12 | 16 | D10 |
PB3, MOSI | 15 | 13 | 17 | D11, MOSI |
PB4, MISO | 16 | 14 | 18 | D12, MISO |
PB5, SCK | 17 | 15 | 19 | D13, SCK |
GND | 3 | — | — | GND |
GND | 5 | 4 | 8 | GND |
GND | 21 | 18 | 22 | GND |
RSJ, PC6 | 29 | 26 | 1 | RST |
Fla рис. 4 показана схема велоспидометра после замены платы Arduino на микроконтроллер ATmega328P-PU (DD1). Позиционные обозначения элементов, имевшихся на схеме рис. 3, здесь сохранены.
Добавлены необходимый для работы микроконтроллера кварцевый резонатор ZQ1 на 16 МГц с конденсаторами С4 и С6, а также цепь установки микроконтроллера в исходное состояние R3C2 с кнопкой SB1 «Reset».
Рис. 4. Схема велоспидометра после замены платы Arduino на микроконтроллер ATmega328P-PU.
Предусмотрен также интегральный стабилизатор DA1, формирующий, как и в Arduino, из напряжения 7. 12 В стабилизированное напряжение 5 В для питания микроконтроллера и ЖКИ.
Рис. 5. Конфигурация микроконтроллера.
Если загрузить в память микроконтроллера DD1 коды из полученного, как было описано выше, с помощью Arduino IDE НЕХ-файла, а конфигурацию микроконтроллера установить в соответствии с рис. 5, то велоспидометр, собранный по схеме рис. 4, будет вести себя точно так же, как собранный по схеме рис. 3.