Программирование Ардуино
Язык программирования устройств Ардуино основан на C/C++ и скомпонован с библиотекой AVR Libc и позволяет использовать любые ее функции. Вместе с тем он прост в освоении, и на данный момент Arduino — это, пожалуй, самый удобный способ программирования устройств на микроконтроллерах.
Справочник языка Ардуино
Операторы
Управляющие операторы
Синтаксис
- ; (точка с запятой)
- <> (фигурные скобки)
- // (одностроковый коментарий)
- /* */ (многостроковый коментарий)
- #define
- #include
Арифметические операторы
- = (оператор присваивания)
- + (сложение)
- — (вычитание)
- * (умножение)
- / (деление)
- % (остаток от деления)
Операторы сравнения
- == (равно)
- != (не равно)
- <(меньше чем)
- > (больше чем)
- <=(меньше или равно)
- >= (больше или равно)
Логические операторы
Указатели доступа
Битовые операторы
- & (побитовое И)
- | (побитовое ИЛИ)
- ^ (побитовое XOR или исключающее ИЛИ)
- ~ (побитовое НЕ)
- <<(побитовый сдвиг влево)
- >> (побитовый сдвиг вправо)
Составные операторы
- ++ (инкремент)
- — (декремент)
- += (составное сложение)
- -= (составное вычитание)
- *= (составное умножение)
- /= (составное деление)
- &= (составное побитовое И)
- |= (составное побитовое ИЛИ)
Данные
Константы
- HIGH | LOW
- INPUT | OUTPUT| INPUT_PULLUP
- true | false
- целочисленные константы
- константы с плавающей точкой
Аrduino для начинающих
В этой статье я решал собрать полное пошаговое руководство для начинающих Arduino. Мы разберем что такое ардуино, что нужно для начала изучения, где скачать и как установить и настроить среду программирования, как устроен и как пользоваться языком программирования и многое другое, что необходимо для создания полноценных сложных устройств на базе семейства этих микроконтроллеров.
Тут я постараюсь дать сжатый минимум для того, что бы вы понимали принципы работы с Arduino. Для более полного погружения в мир программируемых микроконтроллеров обратите внимание на другие разделы и статьи этого сайта. Я буду оставлять ссылки на другие материалы этого сайта для более подробного изучения некоторых аспектов.
Что такое Arduino и для чего оно нужно?
Arduino — это электронный конструктор, который позволяет любому человеку создавать разнообразные электро-механические устройства. Ардуино состоит из программной и аппаратной части. Программная часть включает в себя среду разработки (программа для написания и отладки прошивок), множество готовых и удобных библиотек, упрощенный язык программирования. Аппаратная часть включает в себя большую линейку микроконтроллеров и готовых модулей для них. Благодаря этому, работать с Arduino очень просто!
С помощью ардуино можно обучаться программированию, электротехнике и механике. Но это не просто обучающий конструктор. На его основе вы сможете сделать действительно полезные устройства.
Начиная с простых мигалок, метеостанций, систем автоматизации и заканчивая системой умного дома, ЧПУ станками и беспилотными летательными аппаратами. Возможности не ограничиваются даже вашей фантазией, потому что есть огромное количество инструкций и идей для реализации.
Стартовый набор Arduino
Для того что бы начать изучать Arduino необходимо обзавестись самой платой микроконтроллера и дополнительными деталями. Лучше всего приобрести стартовый набор Ардуино, но можно и самостоятельно подобрать все необходимое. Я советую выбрать набор, потому что это проще и зачастую дешевле. Вот ссылки на лучшие наборы и на отдельные детали, которые обязательно пригодятся вам для изучения:
| Базовый набор ардуино для начинающих: | Купить |
| Большой набор для обучения и первых проектов: | Купить |
| Набор дополнительных датчиков и модулей: | Купить |
| Ардуино Уно самая базовая и удобная модель из линейки: | Купить |
| Беспаечная макетная плата для удобного обучения и прототипирования: | Купить |
| Набор проводов с удобными коннекторами: | Купить |
| Комплект светодиодов: | Купить |
| Комплект резисторов: | Купить |
| Кнопки: | Купить |
| Потенциометры: | Купить |
Среда разработки Arduino IDE
Для написания, отладки и загрузки прошивок необходимо скачать и установить Arduino IDE. Это очень простая и удобная программа. На моем сайте я уже описывал процесс загрузки, установки и настройки среды разработки. Поэтому здесь я просто оставлю ссылки на последнюю версию программы и на статью с подробной инструкцией.
Язык программирования Ардуино
Когда у вас есть на руках плата микроконтроллера и на компьютере установлена среда разработки, вы можете приступать к написанию своих первых скетчей (прошивок). Для этого необходимо ознакомиться с языком программирования.
Для программирования Arduino используется упрощенная версия языка C++ с предопределенными функциями. Как и в других Cи-подобных языках программирования есть ряд правил написания кода. Вот самые базовые из них:
- После каждой инструкции необходимо ставить знак точки с запятой (;)
- Перед объявлением функции необходимо указать тип данных, возвращаемый функцией или void если функция не возвращает значение.
- Так же необходимо указывать тип данных перед объявлением переменной.
- Комментарии обозначаются: // Строчный и /* блочный */
Подробнее о типах данных, функциях, переменных, операторах и языковых конструкциях вы можете узнать на странице по программированию Arduino. Вам не нужно заучивать и запоминать всю эту информацию. Вы всегда можете зайти в справочник и посмотреть синтаксис той или иной функции.
Все прошивки для Arduino должны содержать минимум 2 функции. Это setup() и loop().
Функция setup
Функция setup() выполняется в самом начале и только 1 раз сразу после включения или перезагрузки вашего устройства. Обычно в этой функции декларируют режимы пинов, открывают необходимые протоколы связи, устанавливают соединения с дополнительными модулями и настраивают подключенные библиотеки. Если для вашей прошивки ничего подобного делать не нужно, то функция все равно должна быть объявлена. Вот стандартный пример функции setup():
void setup() < Serial.begin(9600); // Открываем serial соединение pinMode(9, INPUT); // Назначаем 9 пин входом pinMode(13, OUTPUT); // Назначаем 13 пин выходом >
В этом примере просто открывается последовательный порт для связи с компьютером и пины 9 и 13 назначаются входом и выходом. Ничего сложного. Но если вам что-либо не понятно, вы всегда можете задать вопрос в комментариях ниже.
Функция loop
Функция loop() выполняется после функции setup(). Loop в переводе с английского значит «петля». Это говорит о том что функция зациклена, то есть будет выполняться снова и снова. Например микроконтроллер ATmega328, который установлен в большинстве плат Arduino, будет выполнять функцию loop около 10 000 раз в секунду (если не используются задержки и сложные вычисления). Благодаря этому у нас есть большие возможности.
Макетная плата Breadbord
Вы можете создавать простые и сложные устройства. Для удобства я советую приобрести макетную плату (Breadbord) и соединительные провода. С их помощью вам не придется паять и перепаивать провода, модули, кнопки и датчики для разных проектов и отладки. С беспаечной макетной платой разработка становится более простой, удобной и быстрой. Как работать с макетной платой я рассказывал в этом уроке. Вот список беспаечных макетных плат:
| Макетная плата на 800 точек с 2 шинами питания, платой подачи питания и проводами: | Купить |
| Большая макетная плата на 1600 точек с 4 шинами питания: | Купить |
| Макетная плата на 800 точек с 2 шинами питания: | Купить |
| Макетная плата на 400 точек с 2 шинами питания: | Купить |
| Макетная плата на 170 точек: | Купить |
| Соединительные провода 120 штук: | Купить |
Первый проект на Arduino
Давайте соберем первое устройство на базе Ардуино. Мы просто подключим тактовую кнопку и светодиод к ардуинке. Схема проекта выглядит так:

Обратите внимание на дополнительные резисторы в схеме. Один из них ограничивает ток для светодиода, а второй притягивает контакт кнопки к земле. Как это работает и зачем это нужно я объяснял в этом уроке.
Для того что бы все работало, нам надо написать скетч. Давайте сделаем так, что бы светодиод загорался после нажатия на кнопку, а после следующего нажатия гас. Вот наш первый скетч:
// переменные с пинами подключенных устройств int switchPin = 8; int ledPin = 11; // переменные для хранения состояния кнопки и светодиода boolean lastButton = LOW; boolean currentButton = LOW; boolean ledOn = false; void setup() < pinMode(switchPin, INPUT); pinMode(ledPin, OUTPUT); >// функция для подавления дребезга boolean debounse(boolean last) < boolean current = digitalRead(switchPin); if(last != current) < delay(5); current = digitalRead(switchPin); >return current; > void loop() < currentButton = debounse(lastButton); if(lastButton == LOW && currentButton == HIGH) < ledOn = !ledOn; >lastButton = currentButton; digitalWrite(ledPin, ledOn); >
В этом скетче я создал дополнительную функцию debounse для подавления дребезга контактов. О дребезге контактов есть целый урок на моем сайте. Обязательно ознакомьтесь с этим материалом.
ШИМ Arduino
Широтно-импульсная модуляция (ШИМ) — это процесс управления напряжением за счет скважности сигнала. То есть используя ШИМ мы можем плавно управлять нагрузкой. Например можно плавно изменять яркость светодиода, но это изменение яркости получается не за счет уменьшения напряжения, а за счет увеличения интервалов низкого сигнала. Принцип действия ШИМ показан на этой схеме:

Когда мы подаем ШИМ на светодиод, то он начинает быстро зажигаться и гаснуть. Человеческий глаз не способен увидеть это, так как частота слишком высока. Но при съемке на видео вы скорее всего увидите моменты когда светодиод не горит. Это случится при условии что частота кадров камеры не будет кратна частоте ШИМ.
В Arduino есть встроенный широтно-импульсный модулятор. Использовать ШИМ можно только на тех пинах, которые поддерживаются микроконтроллером. Например Arduino Uno и Nano имеют по 6 ШИМ выводов: это пины D3, D5, D6, D9, D10 и D11. В других платах пины могут отличаться. Вы можете найти описание интересующей вас платы в этом разделе.
Для использования ШИМ в Arduino есть функция analogWrite(). Она принимает в качестве аргументов номер пина и значение ШИМ от 0 до 255. 0 — это 0% заполнения высоким сигналом, а 255 это 100%. Давайте для примера напишем простой скетч. Сделаем так, что бы светодиод плавно загорался, ждал одну секунду и так же плавно угасал и так до бесконечности. Вот пример использования этой функции:
// Светодиод подключен к 11 пину int ledPin = 11; void setup() < pinMode(ledPin, OUTPUT); >void loop() < for (int i = 0; i < 255; i++) < analogWrite(ledPin, i); delay(5); >delay(1000); for (int i = 255; i > 0; i--) < analogWrite(ledPin, i); delay(5); >>
Аналоговые входы Arduino
Как мы уже знаем, цифровые пины могут быть как входом так и выходом и принимать/отдавать только 2 значения: HIGH и LOW. Аналоговые пины могут только принимать сигнал. И в отличии от цифровых входов аналоговые измеряют напряжение поступающего сигнала. В большинстве плат ардуино стоит 10 битный аналогово-цифровой преобразователь. Это значит что 0 считывается как 0 а 5 В считываются как значение 1023. То есть аналоговые входы измеряют, подаваемое на них напряжение, с точностью до 0,005 вольт. Благодаря этому мы можем подключать разнообразные датчики и резисторы (терморезисторы, фоторезисторы) и считывать аналоговый сигнал с них.
Для этих целей в Ардуино есть функция analogRead(). Для примера подключим фоторезистор к ардуино и напишем простейший скетч, в котором мы будем считывать показания и отправлять их в монитор порта. Вот так выглядит наше устройство:

В схеме присутствует стягивающий резистор на 10 КОм. Он нужен для того что бы избежать наводок и помех. Теперь посмотрим на скетч:
int sensePin = 0; // Пин к которому подключен фоторезистор void setup() < analogReferense(DEFAULT); // Задаем опорное значение напряжения. Эта строка не обязательна. Serial.begin(9600); // Открываем порт на скорости 9600 бод. >void loop() < Serial.println(analogRead(sensePin)); // Считываем значение и выводим в порт delay(500); // задержка для того что бы значений было не слишком много >
Вот так из двух простейших элементов и четырех строк кода мы сделали датчик освещенности. На базе этого устройства мы можем сделать умный светильник или ночник. Очень простое и полезное устройство.
Вот мы и рассмотрели основы работы с Arduino. Теперь вы можете сделать простейшие проекты. Что бы продолжить обучение и освоить все тонкости, я советую прочитать книги по ардуино и пройти бесплатный обучающий курс. После этого вы сможете делать самые сложные проекты, которые только сможете придумать.
19 комментариев
- Владимир 2019-01-29 16:31:50
Добрый день, господа!
Очень интересный сайт. Много полезной информации и подача материала спокойная.
Мне нравиться.
Вопрос у меня. Чую попал на грамотных спецов.
Приобрел я на Али китайскую чудо технику — лазерный гравировщик-выжигатель (2 Ватт.).
Плата управления Arduino Nano, драйвера на двигатели на красных платках.
Как водится описание слабое, информация. да все по-китайски. Начал разбираться.
Собрал, заработала машина, задымила. Поправил конфигурацию, на одной оси сделал инверсию.
Самое отвратительное — это ПО. Только зайчиков выжигать. Решил сменить.
Залил GRBL v1.1, программу взял LaserGRBL (версия из последних).
Программа увидела девайс, подключилась на СОМ, ожила, тут бы обрадоваться, да нет.
G-код готовится правильно, но команды включения М3 и выключения М5 лазера, которые прописаны в коде, не выполняются.
Лазер включается при включении девайса, и находится включенным все время, даже в остановленном состоянии (G-код еще не запущен, передвижения нет). При быстром передвижении лазера по рисунку он не выключается и все время жгет, рисуя за собой прожженную черту.
Подскажите, пожалуйста, как заставить лазер отключаться согласно G-коду? Как заставить девайс выполнять команды G-кода М3 и М5? Пробовал в конфигурации ставить и $32=1, и $32=0 — никак не реагирует. Жгет без остановки. Перепрошивал v1.1 — бесполезно.
Мне уже 65 отроду. Некогда досконально изучать Arduino. Говорят, что не поступают команды на лазер.
Да тут и ежику понятно. Как это можно исправить? В настройках галочку с ШИМ снял.
Подскажите, пожалуйста.
С уважением Владимир
- Евгений 2019-12-02 09:02:15
дело в том, что легче написать новую прошивку, чем разбираться в прошивке, а для этого надо понимать, как работает ваше устройство! т.е. надо работать вместе программист, и пользователь!
иначе никак!
илли 2 способ- изучите программирование, и пишите сами что вам надо!
поверьте- это не так сложно!
Урок 3. Библиотеки в Arduino: что это такое и как использовать?
Всем привет! В этом уроке мы познакомимся с назначением библиотек в среде разработки Arduino IDE , о том какие функции они выполняют и как их устанавливать и применять. Начнем!
Сперва, покажу следующий код:
#include
Servo myservo;
void setup()
<
myservo.attach(9);
myservo.write(90);
>
void loop() <>
В данном скетче мы управляем сервоприводом и поворачиваем вал на ней на 90 градусов. В начале кода с помощью директивы #include (нужна для подключения и внесения в работу кода различных файлов) мы подключаем специальную библиотеку под названием Servo.h
Кстати, если кому интересно, скачать ее вы можете вот здесь:
Дак вот, если убрать строчку кода с подключением этой библиотеки, то программа не заработает. Более того, компилятор выдаст вам ошибку, что не знает таких функций, как myservo.attach и Servo.h
Все эти функции мы можем использовать только с помощью библиотеки Servo.h (в таких случаях говорят, что это ее собственный синтаксис).
В библиотеке содержится определенный код, поддерживающий функции для управления сервоприводом и занимающий немало места, и поэтому для упрощения скетча мы просто подключим библиотеку и используем необходимые функции.
Если этого не сделаем, то размер кода, время на его написание и занимаемое им место в памяти намного увеличатся.
Мы выяснили, что библиотеки экономят наше время и упрощают скетч, делая его более практичным, удобным, а самое главное – более понятным!
А все потому, что в ней уже содержится большая часть кода, которую вам не нужно будет писать.
Библиотек для одной только Arduino существует несколько тысяч. Они делятся на встроенные в среду разработки Arduino IDE и не встроенные, то есть, которые необходимо самому скачивать и устанавливать.
Узнать, какие библиотеки уже встроены или подключены в Arduino IDE можно, нажав на раздел Файл – Примеры, как на фото ниже:

Далее перейдем к тем, что нужно самим искать и устанавливать. Чаще всего таковыми являются библиотеки для подключения различных датчиков или модулей. Например:
LiquidCrystal.h — для подключения LCD дисплея
UTFT.h — для подключения TFT экрана
RTClib.h — для работы с модулем часов реального времени
Скачать их можно на сайте https://github.com/
Просто введите в поиске нужное название и скачайте.
Библиотеки при скачивании хранятся, как правило, в ZIP файлах. Их нужно распаковать (например, с помощью программы WinRAR) в папку libraries.


Вот и все. Вы самостоятельно установили библиотеку. Чтобы она фигурировала в вашем коде, подключайте ее с помощью функции #include
Пример: #include
Также для каждой библиотеки вы можете прочитать своеобразную инструкцию, если погуглить. Там будут описаны команды и функции, которая она содержит и в каких случаях их применять.
Поздравляю! Теперь вы научились подключать и использовать библиотеки. Надеюсь, данный урок был для вас полезен и вы продолжите также резво изучать мир Arduino.
Данная статья — является собственностью интернет-магазина РОБОТОТЕХНИКА
Что такое Arduino и зачем оно нужно?
Arduino — это компактное электронная плата, способная управлять различными датчиками, электродвигателями, индикацией,освещением, передавать и принимать данные. Arduino — это большое семейство устройств разных размеров и возможностей.
«Голова» Arduino
«Голова» Arduino — это микроконтроллер серии Atmega. Микроконтроллер представляет собой микропроцессор с памятью и различными периферийными устройствами, выполненой на одной микросхеме. По факту это однокристальный микрокомпьютер, который способен выполнять различные задачи. Разные модели из семейства Arduino оснащены разными микроконтроллерами, более и менее мощными и функицональными.

Как взаимодействует Arduino с внешним миром
Чтобы Ардуино взаимодействовать с внешним миром у него есть входные/выходные пины (контакты, выводы, палочки, дырочки), размещённые по периметру платы. Существуют платы Ардуино с большим количеством выводов, есть с меньшим. Например, самая большая плата в линейке Ардуино — Arduino Mega 2560 — имеет 70 независимых выводов, а самая маленькая — Arduino Pro Mini — всего 23 вывода.

На фотографии показаны Arduino Mega 2560 и Arduino Pro Mini, в них используются микроконтроллеры в другом (SMD) корпусе.
У каждого вывода Ардуино свое назначение. Есть выводы цифровые, а есть аналоговые. Основное отличие между ними в том, что на цифровых выводах возможно только 2 значения: либо логическая «1» (от 3 до 5 вольт), либо логический «0» (от 0 до 1,5 вольт), на аналоговых же выводах — существует диапазон от 0 до 5 В, который Ардуино измеряет с определенной точностью.
Зачем это необходимо? Давайте рассмотрим некий пример. Если подключить к цифровому выводу Arduino светодиод и подать на вывод логическую «1», то светодиод загорится; если подать «0» — светодиод погаснет. Никаких промежуточных вариантов не надо. Если светодиод подключить к аналоговому выводу, то яркость светодиода можно будет регулировать. На практике к аналоговым выводам чаще всего подключаются какие-либо аналоговые датчики.
Чем может управлять Ардуино
Ответить на этот вопрос однозначно не возможно. Тут на что хватит фантазии. Но вот перечеь самых популярных вариантов:
- датчики температуры, влажности, осещенности, движения и др.
- ЖК дисплеи, индикаторы, светодиоды
- реле, кнопки, элементы коммутации
- Bluetooth,WiFi и Ethernet устройства
- Дальномеры
- Считыватели SD-карт
- GPS и GSM модули
- и многое другое
Как программировать Ардуино
Для программирования Arduino существует специальное программное обеспечение Arduino IDE. В этой простой программке с помощью несложных команд вы сможете «говорить» Ардуино, что нужно делать. Разобраться может даже человек без опыта программирования. Благо в интернете информации сейчас достаточно.

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