Arduino ide программирование. Arduino: примеры того, что можно сделать

Здравствуйте! Я Аликин Александр Сергеевич, педагог дополнительного образования, веду кружки «Робототехника» и «Радиотехника» в ЦДЮТТ г. Лабинска. Хотел бы немного рассказать об упрощенном способе программирования Arduino с помощью программы «ArduBloсk».

Эту программу я ввел в образовательный процесс и восхищен результатом, у детей она пользуется особым спросом, особенно при написании простейших программ или для создания какого-то начального этапа сложных программ. ArduBloсk является графической средой программирования, т. е. все действия выполняются с нарисованными картинками с подписанными действиями на русском языке, что в разы упрощает изучение платформы Arduino. Дети уже со 2-го класса с легкостью осваивают работу с Arduino благодаря этой программе.

Да, кто-то может сказать, что еще существует Scratch и он тоже очень простая графическая среда для программирования Arduino. Но Scratch не прошивает Arduino, а всего лишь управляет им по средством USB кабеля. Arduino зависим от компьютера и не может работать автономно. При создании собственных проектов автономность для Arduino - это главное, особенно при создании роботизированных устройств.

Даже всеми известные роботы LEGO, такие как NXT или EV3 нашим ученикам уже не так интересны с появлением в программировании Arduino программы ArduBloсk. Еще Arduino намного дешевле любых конструкторов LEGO и многие компоненты можно просто взять от старой бытовой электронной техники. Программа ArduBloсk поможет в работе не только начинающим, но и активным пользователям платформы Arduino.

Итак, что же такое ArduBloсk? Как я уже говорил, это графическая среда программирования. Практически полностью переведена на русский язык. Но в ArduBloсk изюминка не только это, но и то, что написанную нами программу ArduBloсk конвертирует в код Arduino IDE. Эта программа встраивается в среду программирования Arduino IDE, т. е. это плагин.

Ниже приведен пример мигающего светодиода и конвертированной программы в Arduino IDE. Вся работа с программой очень проста и разобраться в ней сможет любой школьник.

В результате работы на программе можно не только программировать Arduino, но и изучать непонятные нам команды в текстовом формате Arduino IDE, ну а если же «лень» писать стандартные команды - стоит быстрыми манипуляциями мышкой набросать простенькую программку в ArduBlok, а в Arduino IDE её отладить.

Чтобы установить ArduBlok, необходимо для начала загрузить и установить Arduino IDE с официального сайта Arduino и разобраться с настройками при работе с платой Arduino UNO. Как это сделать описано на том же сайте или же на Амперке , либо посмотреть на просторах YouTube. Ну, а когда со всем этим разобрались, необходимо скачать ArduBlok с официального сайта, вот . Последние версии скачивать не рекомендую, для начинающих они очень сложны, а вот версия от 2013-07-12 - самое то, этот файл там самый популярный.

Затем, скачанный файл переименовываем в ardublock-all и в папке «документы». Создаем следующие папки: Arduino > tools > ArduBlockTool > tool и в последнею кидаем скачанный и переименованный файл. ArduBlok работает на всех операционных системах, даже на Linux, проверял сам лично на XP, Win7, Win8, все примеры для Win7. Установка программы для всех систем одинакова.

Ну, а если проще, я приготовил на Mail-диске 7z архив , распаковав который найдете 2 папки. В одной уже рабочая программа Arduino IDE, а в другой папке содержимое необходимо отправить в папку документы.

Для того, чтобы работать в ArduBlok, необходимо запустить Arduino IDE. После чего заходим во вкладку Инструменты и там находим пункт ArduBlok, нажимаем на него - и вот она, цель наша.

Теперь давайте разберемся с интерфейсом программы. Как вы уже поняли, настроек в ней нет, а вот значков для программирования предостаточно и каждый из них несет за собой команду в текстовом формате Arduino IDE. В новых версиях значков еще больше, поэтому разобраться с ArduBlok последней версии сложно и некоторые из значков не переведены на русский.

В разделе «Управление» мы найдем разнообразные циклы.

В разделе «Порты» мы можем с вами управлять значениями портов, а также подключенными к ним звукоизлучателя, сервомашинки или ультразвукового датчика приближения.

В разделе «Числа/Константы» мы можем с вами выбрать цифровые значения или создать переменную, а вот то что ниже вряд ли будите использовать.

В разделе «Операторы» мы с вами найдем все необходимые операторы сравнения и вычисления.

В разделе «Утилиты» в основном используются значки со временем.

«TinkerKit Bloks»- это раздел для приобретенных датчиков комплекта TinkerKit. Такого комплекта у нас, конечно же, нет, но это не значит, что для других наборов значки не подойдут, даже наоборот - ребятам очень удобно использовать такие значки, как включения светодиода или кнопка. Эти знаки используются практически во всех программах. Но у них есть особенность - при их выборе стоят неверные значки обозначающие порты, поэтому их необходимо удалить и подставить значок из раздела «числа/константы» самый верхний в списке.

«DF Robot» - этот раздел используется при наличии указанных в нем датчиков, они иногда встречаются. И наш сегодняшний пример - не исключение, мы имеем «Регулируемый ИК выключатель» и «Датчик линии». «Датчик линии» отличается от того, что на картинке, так как он от фирмы Амперка. Действия их идентичны, но датчик от Амперки намного лучше, так как в нем имеется регулятор чувствительности.

«Seeedstudio Grove» - датчики этого раздела мной ни разу не использовались, хотя тут только джойстики. В новых версиях этот раздел расширен.

И последний раздел это «Linker Kit». Датчики, представленные в нем, мне не попадались.

Хочется показать пример программы на роботе, двигающемся по полосе. Робот очень прост, как в сборке, так и в приобретении, но обо всем по порядку. Начнем с его приобретения и сборки.

Вот сам набор деталей все было приобретено на сайте Амперка .

  1. AMP-B001 Motor Shield (2 канала, 2 А) 1 890 руб
  2. AMP-B017 Troyka Shield 1 690 руб
  3. AMP-X053 Батарейный отсек 3×2 AA 1 60 руб
  4. AMP-B018 Датчик линии цифровой 2 580 руб
  5. ROB0049 Двухколёсная платформа miniQ 1 1890 руб
  6. SEN0019 Инфракрасный датчик препятствий 1 390 руб
  7. FIT0032 Крепление для инфракрасного датчика препятствий 1 90 руб
  8. A000066 Arduino Uno 1 1150 руб

Для начала соберем колесную платформу и припаяем к двигателям провода.

Затем установим стойки, для крепления платы Arduino UNO, которые были взяты от старой материнской платы ну или иные подобные крепления.

Затем крепим на эти стойки плату Arduino UNO, но один болтик прикрутить не получиться - разъемы мешают. Можно, конечно, их выпаять, но это уже на ваше усмотрение.

Следующим крепим инфракрасный датчик препятствий на его специальное крепление. Обратите внимание, что регулятор чувствительности находиться сверху, это для удобства регулировки.

Теперь устанавливаем цифровые датчики линии, тут придется поискать пару болтиков и 4 гайки к ним Две гайки устанавливаем между самой платформой и датчиком линии, а остальными фиксируем датчики.

Следующим устанавливаем Motor Shield или по другому можно назвать драйвер двигателей. В нашем случае обратите внимание на джампер. Мы не будем использовать отдельное питание для двигателей, поэтому он установлен в этом положение. Нижняя часть заклеивается изолентой, это чтобы не было случайных замыканий от USB разъема Arduino UNO, это на всякий случай.

Сверху Motor Shield устанавливаем Troyka Shield. Он необходим для удобства соединения датчиков. Все используемые нами сенсоры цифровые, поэтому датчики линии подключены к 8 и 9 порту, как их еще называют пины, а инфракрасный датчик препятствий подключен к 12 порту. Обязательно обратите внимание, что нельзя использовать порты 4, 5, 6, 7 так как оны используются Motor Shield для управлением двигателями. Я эти порты даже специально закрасил красным маркером, чтобы ученики разобрались.

Если вы уже обратили внимание, мной была добавлена черная втулка, это на всякий случай, чтобы установленный нами батарейный отсек не вылетел. И наконец, всю конструкцию мы фиксируем обычной резинкой.

Подключения батарейного отсека может быть 2-х видов. Первый подключение проводов к Troyka Shield. Также возможно подпаять штекер питания и подключать уже к самой плате Arduino UNO.

Вот наш робот готов. Перед тем как начать программировать, надо будет изучить, как все работает, а именно:
- Моторы:
Порт 4 и 5 используются для управления одним мотором, а 6 и 7 другим;
Скоростью вращения двигателей мы регулируя ШИМом на портах 5 и 6;
Вперед или назад, подавая сигналы на порты 4 и 7.
- Датчики:
У нас все цифровые, поэтому дают логические сигналы в виде 1 либо 0;
А что бы их отрегулировать, в них предусмотрены специальные регуляторы а при помощи подходящей отвертки их можно откалибровать.

Подробности можно узнать на Амперке . Почему тут? Потому что там очень много информации по работе с Arduino.

Ну что ж, мы, пожалуй, все просмотрели поверхностно, изучили и конечно же собрали робота. Теперь его необходимо запрограммировать, вот она - долгожданная программа!

И программа конвертированная в Arduino IDE:

Void setup() { pinMode(8 , INPUT); pinMode(12 , INPUT); pinMode(9 , INPUT); pinMode(4 , OUTPUT); pinMode(7 , OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); } void loop() { if (digitalRead(12)) { if (digitalRead(8)) { if (digitalRead(9)) { digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite(6, 255); digitalWrite(7 , HIGH); } else { digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite(6, 50); digitalWrite(7 , LOW); } } else { if (digitalRead(9)) { digitalWrite(4 , LOW); analogWrite(5, 50); analogWrite(6, 255); digitalWrite(7 , HIGH); } else { digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite(6, 255); digitalWrite(7 , HIGH); } } } else { digitalWrite(4 , HIGH); analogWrite(5, 0); analogWrite(6, 0); digitalWrite(7 , HIGH); } }

В заключении хочу сказать, эта программа просто находка для образования, даже для самообучения она поможет изучить команды Arduino IDE. Самая главная изюминка - это то, что более 50 значков установки, она начинает «глючить». Да, действительно, это изюминка, так как постоянное программирование только на ArduBlok не обучит вас программированию в Arduino IDE. Так называемый «глюк» дает возможность задумываться и стараться запоминать команды для точной отладки программ.

Желаю успехов.

Arduino является очень популярным среди всех любителей конструировать. Следует ознакомить с ними и тех, кто ни разу про него не слышал.

Что собой представляет Arduino?

Как вкратце можно охарактеризовать Arduino? Оптимальными словами будут такие: Arduino представляет собой инструмент, с помощью которого можно создавать различные электронные устройства. По сути, это настоящая аппаратная вычислительная платформа универсального предназначения. Она может использоваться как для построения простых схем, так и для реализации довольно сложных проектов.

Базируется конструктор на своей аппаратной части, которая представляет собой плату ввода-вывода. Для программирования платы используются языки, которые основаны на C/C++. Они получили название, соответственно, Processing/Wiring. От группы С они унаследовали предельную простоту, благодаря чему осваиваются они весьма быстро любым человеком, и применять знания на практике не является довольно значительной проблемой. Чтобы вы понимали легкость работы, часто говорят, что Arduino - для начинающих волшебников-конструкторов. Разобраться с платами "Ардуино" могут даже дети.

Что на нём можно собрать?

Применение Arduino довольно разнообразно, его можно использовать, как и для простейших примеров, которые будут рекомендованы в конце статьи, так и для довольно сложных механизмов, среди которых манипуляторы, роботы или производственные станки. Некоторые умельцы умудряются на основе таких систем делать планшеты, телефоны, системы наблюдения и безопасности домов, системы «умный дом» или просто компьютеры. Arduino-проекты для начинающих, которыми может для начала заняться даже тот, кто не имеет опыта, находятся в конце статьи. Их даже можно использовать для создания примитивных систем виртуальной реальности. Всё благодаря довольной универсальной аппаратной составляющей и возможностям, которые предоставляет программирование Arduino.

Где приобрести составляющие?

Оригинальными считаются составляющие, произведённые в Италии. Но и цена таких комплектов не низкая. Поэтому целый ряд компаний или даже отдельные люди кустарным методом изготавливают Arduino-совместимые устройства и компоненты, которые в шутку прозывают производственными клонами. При покупке таких клонов нельзя с уверенностью сказать, что они будут работать, но желание сэкономить берёт свое.

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

Подробнее об аппаратуре

Плата Ардуино является простым микроконтроллером AVR , который был прошит бутлоадером и имеет минимально необходимый минимум USB-UART порт. Есть ещё важные составляющие, но в пределах статьи лучше будет остановиться только на этих двух составляющих.

Сначала о микроконтроллере, механизме, построенном на одной схеме, в которой и размещается разработанная программа. На программу могут влиять нажатия кнопок, получение сигналов от составляющих творения (резисторов, транзисторов, датчиков и т. д.) и т. д. Причем датчики могут быть самые различные по своему предназначению: освещения, ускорения, температуры, расстояния, давления, препятствия и т. д. В качестве устройств индикации может вестись использование простых деталей, от светодиодов и пищалок к сложным устройствам, вроде графических дисплеев. В качестве рассматриваются моторчики, клапаны, реле, сервомашинки, электромагниты и множество других, которых перечислять очень и очень долго. С чем-то из этих списков МК работает прямо, с помощью соединительных проводов. Для некоторых механизмов нужны переходные устройства. Но если вы уж начнёте конструировать, оторваться вам будет сложно. Теперь поговорим о программировании Arduino.

Подробнее о процессе программирования платы

Уже готовую к работе на микроконтроллере программу называют прошивкой. Может быть как один проект, так и проекты Arduino, поэтому каждую прошивку желательно было бы хранить в отдельной папке, чтобы ускорить процесс нахождения нужных файлов. Она прошивается на кристалл МК посредством специализированных устройств: программаторов. И тут "Ардуино" имеет одно преимущество - ему не нужен программатор. Всё сделано так, чтобы программирование Arduino для начинающих не составляло труда. Написанный код можно загрузить в МК посредством USB-шнура. Достигается это преимущество не каким-то встроенным уже заранее программатором, а спецпрошивкой - бутлоадером. Бутлоадер является специальной программкой, которая запускается сразу после подключения и слушает, будут ли какие-то команды, прошивать ли кристалл, есть ли проекты Arduino или нет. Из использования бутлоадера выплывает несколько очень привлекательных плюсов:

  1. Использование только одного канала связи, что не требует дополнительных затрат по времени. Так, проекты Arduino не требуют, чтобы вы подключали множество различных проводов, и возникала путаница при их использовании. Для успешной работы хватает одного USB-шнура.
  2. Защита от кривых рук. Довести микроконтроллер до состояния кирпича с помощью прямой прошивки довольно легко, сильно напрягаться не надо. При работе с бутлоадером до потенциально опасных настроек вам не добраться (с помощью программы разработки, конечно, а так сломать можно всё). Поэтому Arduino для начинающих предназначен не только с той точки зрения, что понятен и удобен, он ещё позволит избежать нежелательных денежных трат, связанных с неопытностью работающего с ними человека.

Проекты для начала

Когда вы обзавелись комплектом, паяльником, канифолью и припоем, не следует сразу лепить очень сложные конструкции. Их, конечно, слепить можно, но шанс успеха в Arduino для начинающих довольно низкий при сложных проектах. Для тренировки и «набивания» руки вы можете попробовать реализовать несколько более простых задумок, которые помогут разобраться с взаимодействием и работой "Ардуино". В качестве таких первых шагов в работе с Arduino для начинающих можно посоветовать рассмотреть:

  1. Создать который будет работать благодаря "Ардуино".
  2. Подключение отдельной кнопки к "Ардуино". При этом можно сделать так, чтобы кнопка могла регулировать свечение светодиода из пункта №1.
  3. Подключение потенциометра.
  4. Управление сервоприводом.
  5. Подключение и работа с трехцветным светодиодом.
  6. Подключение пьезоэлемента.
  7. Подключение фоторезистора.
  8. Подключение датчика движения и сигналы о его работе.
  9. Подключение датчика влажности или температуры.

Проекты для будущего

Вряд ли вы интересуетесь "Ардуино" для того, чтобы подключать отдельные светодиоды. Скорее всего, вас привлекает возможность создать свою машинку, или летающую вертушку. Такие проекты сложны в своей реализации, они потребует много времени и усидчивости, но, выполнив их, вы получите то, что желали: ценный опыт конструирования с Arduino для начинающих.

Arduino, на самом деле, - это разработка уникальных проектов на все случаи жизни. Как я уже писал, представляет собой Arduino своеобразную плату с размещенным на ней микроконтроллером, которую можно без проблем программировать.

Конечной целью данных манипуляций является обеспечение легкого управления многочисленными внешними устройствами . С внешним миром, данная плата взаимодействует посредством множества дополнений:

  • датчики,
  • светодиоды,
  • двигатели,
  • сеть Интернет
  • и т.п.

Это позволит сделать ее достаточно универсальной платформой для множества проектов само разного уровня. В настоящее время довольно много самых разных микроконтроллеров, среди которых Arduino пользуется особенной популярностью, что связано с активным размещением в сети самых невероятных проектов и разработок.

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

Как его сделать мы разберем на одном из следующих уроков.

В том случае, если нет даже незначительного опыта работы с микроконтроллерами (программирования и настройки), благодаря особенностям можно запросто научиться самостоятельно, проведя сравнительно непродолжительные эксперименты. Ниже как раз предлагаю проанализировать некоторые возможности Ардуино, примеры того, где лучше всего использовать это уникальный конструктор.

Скетчи Arduino

Собственно, программа для микроконтроллера данного типа называется sketch . Состоит любая такая программа непосредственно из двух главных функций.

Setup

Setup() – предусмотрено, что внутри данной функции, пользователь сможет задавать все ключевые настройки.

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

Запуск осуществляется строго один раз в течение всего скетча, когда отмечается сам старт выполнения данной программы.

Loop

Loop() – представляет собой основную функцию, которая осуществляется непосредственно после запуска (как раз в этом случае используется setup() ).

Фактически, это и есть сама программа, данная функция будет выполняться в бесконечном режиме, пока пользователь не выключит питание устройства.

Примеры скетчей

Можно рассмотреть некоторые примеры скетчей, которые станут ориентиром при последующей работе оборудования. Каждый из примеров я постараюсь реализовать в следующих материалах. Сегодня же мы просто поговорим о возможностях.

Пример 1

Одним из интересных скетчей можно отображать само время работы контроллера, в дальнейшем принятие команды «blink», она предусмотрена для инициализации процедуры мигания светодиодных элементов.

Фактически, ничего особенно полезного в скетче нет, но в нем организована и возможность случайного вывода некоторой фразы «Data Received», она может использоваться в дальнейшем непосредственно для тестирования и анализа установленных правил работы модульного элемента.

Пример 2

Подключение специального датчика текущего уровня воды , датчика дождя. Для реализации конкретного проекта необходимо наличие:

Самого датчика воды,
- контроллера Arduino,
- комплекта соединительных проводов,
- компьютера с кабелями и программой IDE, соответствующей макетной платы.

В результате, благодаря сравнительно простой настройке микроконтроллера, обеспечивается создание оптимальных условий для работы датчика.

Пример 3

Отдельного внимания заслуживает возможность осуществления вывода символов , последующая установка шрифтов на LCD5110, что позволит обеспечить максимально легкий и надежный контроль над состоянием самого оборудования.

Вывод и изменение шрифтов осуществляется посредством использования возможностей Arduino. Потребуется в этом случае использовать готовую библиотеку данных, а также исходный код.

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

Рассматривая многочисленные примеры Ардуино, можно только удивиться творческому подходу разработчиков проектов и неординарной фантазии. Фактически, можно создать самые невероятные вещи, к примеру, тот же самый музыкальный проигрыватель с набором светодиодов .

Подобная разработка будет высоко оценена любителями музыки, позволяя создать не просто оригинальное звуковое сопровождение, но и дать возможность насладиться ярким, неординарным цветовым сочетанием.

Оценить проекты смогут даже домашние питомцы, к примеру, кошки. Поводом послужит автоматическая кормушка для котов , которая может быть разработана на основе обычного CD-плеера, например, и не только.

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

Если говорить о совершенно необычных проектах, можно выделить автоматическое оснащение для цветка , который теперь сможет передавать информацию о своем текущем состоянии непосредственно в Твиттер. Делается все это посредством использования возможностей микроконтроллера Ардуино, который позволит передавать данные, непосредственно используя для этого подключение к сети Интернет. Как можно заметить, примеры могут быть самыми разными, на каждый из них я постараюсь обратить внимание в следующих статьях.

Ardublock - это графический язык программирования для Ардуино, предназначенный для начинающих. Эта среда достаточно проста в использовании, ее легко установить, она практически полностью переведена на русский язык. Визуально сконструированную программу,напоминающую блоки...

Прерывания - очень важный механизм Arduino, позволяющий внешним устройствам взаимодействовать с контроллером при возникновении разных событий. Установив обработчик аппаратных прерываний в скетче, мы сможем реагировать на включение или выключение кнопки, нажатие клавиатуры,...

Serial.print() и Serial.println() – это основные функции Arduino для передачи информации от платы ардуино к компьютеру через последовательный порт. На самых популярных платах Arduino Uno, Mega, Nano нет встроенного дисплея, поэтому...

Можно ли заниматься ардуино проектами без самой платы Arduino? Оказывается, вполне. Благодаря многочисленным онлайн сервисам и программам, которые имеют свое название: эмулятор или симулятор Arduino. Самыми популярными представителями таких программ являются...

Serial begin - крайне важная инструкция Arduino, она позволяет установить контроллеру соединение с внешними устройствами. Чаще всего таким «внешним устройством» оказывается компьютер, к которому мы подключаем Arduino. Поэтому Serial begin интенсивней...

Глобальная переменная в Arduino – это переменная, область видимости которой распространяется на всю программу, ее видно во всех модулях и функциях. В этой статье мы рассмотрим несколько примеров использования глобальных переменных,...

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

В жизни ардуинщика рано или поздно наступает момент, когда в штатной среде разработки становится тесно. Если скетчам перестает хватать памяти, требуется жесткий реалтайм и работа с прерываниями или просто хочется быть ближе к железу - значит пришло время переходить на C. Бывалые электронщики при упоминании Arduino презрительно поморщатся и отправят новичка в радиомагазин за паяльником. Возможно, это не самый плохой совет, но мы пока не будем ему следовать. Если отбросить Arduino IDE и язык wiring/processing, у нас в руках останется прекрасная отладочная плата, уже оснащенная всем необходимым для работы микроконтроллера. И, что немаловажно, в память контроллера уже зашит бутлоадер, позволяющий загружать прошивку без использования программатора.

Для программирования на языке C нам понадобится AVR GCC Toolchain.

Также нам потребуется установленная Arduino IDE, т.к. она содержит утилиту avrdude, которая нужна для загрузки прошивки в контроллер. CrossPack тоже содержит avrdude, но версия, идущая с ним, не умеет работать с Arduino.

После того, как все установлено, создадим наш первый проект. Для начала напишем Makefile . Он позволит нам избежать ввода длинных команд вручную при каждой компиляции и загрузке прошивки.

#Контроллер, установленный на плате. Может быть другим, например atmega328 DEVICE = atmega168 #Тактовая частота 16 МГц CLOCK = 16000000 #Команда запуска avrdude. Ее нужно скопировать из Arduino IDE. AVRDUDE = /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -carduino -P/dev/tty.usbserial-A600dAAQ -b19200 -D -p atmega168 OBJECTS = main.o COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) all: main.hex .c.o: $(COMPILE) -c $< -o $@ .S.o: $(COMPILE) -x assembler-with-cpp -c $< -o $@ .c.s: $(COMPILE) -S $< -o $@ flash: all $(AVRDUDE) -U flash:w:main.hex:i clean: rm -f main.hex main.elf $(OBJECTS) main.elf: $(OBJECTS) $(COMPILE) -o main.elf $(OBJECTS) main.hex: main.elf rm -f main.hex avr-objcopy -j .text -j .data -O ihex main.elf main.hex avr-size --format=avr --mcu=$(DEVICE) main.elf

В этом файле нам нужно вписать свою команду для запуска avrdude. На разных системах она будет выглядеть по разному. Чтобы узнать свой вариант, запускаем Arduino IDE и в настройках ставим галочку «Show verbose output during upload».

Теперь загружаем в Arduino любой скетч и смотрим сообщения, выводимые в нижней части окна. Находим там вызов avrdude, копируем все, кроме параметра -Uflash и вставляем в Makefile после «AVRDUDE = ».


Небольшое замечание: все отступы в Makefile делаются символами табуляции (клавишей Tab). Если ваш текстовый редактор заменяет эти символы пробелами, команда make откажется собирать проект.

Теперь создадим файл main.c - собственно текст нашей программы, в которой традиционно помигаем светодиодом.

#include #include #define LED_PIN 5 int main() { DDRB |= 1 << LED_PIN; while(1) { PORTB |= 1 << LED_PIN; _delay_ms(1000); PORTB &= ~(1 << LED_PIN); _delay_ms(1000); } return 0; }

Наш проект готов. Откроем консоль в директории нашего проекта и введем команду «make»:


Как видим, размер получившейся прошивки составляет всего 180 байт. Аналогичный ардуиновский скетч занимает 1116 байт в памяти контроллера.

Теперь вернемся к консоли и введем «make flash» чтобы загрузить скомпилированный файл в контроллер:


Если загрузка прошла без ошибок, то светодиод, подключенный к 13 контакту платы, радостно замигает. Иногда avrdude не может найти плату или отваливается по таймауту - в этом случае может помочь передегивание USB кабеля. Также, во избежание конфликтов доступа к плате, не забудьте закрыть Arduino IDE перед командой «make flash».

Возможно многие вещи, описанные в этой статье, покажутся очевидными матерым разработчикам. Я постарался описать процесс максимально понятным для начинающего ардуинщика языком и собрать в одном месте информацию, которую мне удалось добыть в различных источниках, и проверенную опытным путем. Может быть кому-то эта статья сэкономит пару часов времени.

Удачи в освоении микроконтроллеров!