Что можно сделать на Ардуино: самые необычные проекты

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

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

Что такое Arduino и для чего оно нужно?

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

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


проекты на Arduino

Стартовый набор Arduino

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

Базовый набор ардуино для начинающих:Купить
Большой набор для обучения и первых проектов:Купить
Набор дополнительных датчиков и модулей:Купить
Ардуино Уно самая базовая и удобная модель из линейки:Купить
Беспаечная макетная плата для удобного обучения и прототипирования:Купить
Набор проводов с удобными коннекторами:Купить
Комплект светодиодов:Купить
Комплект резисторов:Купить
Кнопки:Купить
Потенциометры:Купить

Среда разработки Arduino IDE

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

ВерсияWindowsMac OS XLinux
1.8.2 Zip

Installer

Installer 32 bits

64 bits

ARM

Язык программирования Ардуино

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

Для программирования 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 раз в секунду (если не используются задержки и сложные вычисления). Благодаря этому у нас есть большие возможности.

Прототипирование/макетирование

Для сборки макета нам необходимы следующие элементы: светодиод, резистор, проводки (перемычки), макетная плата(Breadboard). Для того, чтоб ничего не спалить, и для того, чтоб всё успешно работало, надо разобраться со светодиодом. У него есть две «лапки». Короткая – минус, длинная – плюс. На короткую мы будем подключать «землю» (GND) и резистор (для того, чтоб уменьшить силу тока, которая поступает на светодиод, чтоб не спалить его), а на длинную мы будем подавать питание (подключим к 13 пину). После подключения, загрузите на плату скетч, если вы ранее этого не сделали. Код остаётся тот же самый.

На этом у нас конец первой части. Спасибо за внимание.

Макетная плата 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 будет подаваться земля.

Светодиод подсоединен к контакту 3 через резистор 1 кОм. То есть катод светодиода подсоединен к земле, а анод – к контакту 3 Arduino через резистор.

ШИМ 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 при помощи программной среды Arduino IDE, которую мы только недавно установили. Установленная Arduino IDE содержит несколько примеров программ, которые будут весьма полезны для начинающих. Давайте откроем один из этих примеров программ используя следующий путь File -> Examples -> Basics -> Blink (как показано на рисунке).

При этом откроется программа Blink – ее цель состоит в том чтобы заставить мигать встроенный светодиод на плате Arduino. После открытия программы нам необходимо выбрать правильную плату Arduino – чтобы сделать это выберите пункт меню Tool -> Boards -> Arduino UNO/Genuino как показано на рисунке ниже.

Далее мы должны выбрать правильный порт для нашей платы. Ранее мы увидели, что для нашей платы был определен порт COM13. В вашем случае это может быть другой порт. Но для нашего рассматриваемого случая мы должны выбрать пункт меню Tools -> Port -> COM13.

Если все сделано правильно, то вы должны заметить что номер порта (в нашем случае COM 13) появится внизу экрана. После этого вам необходимо нажать кнопку загрузки программы (подсвечена синим цветом) на плату Arduino как показано на рисунке ниже.

После нажатия этой кнопки вы увидите надпись “Compiling sketch” и затем, если загрузка программы прошла успешно, вы увидите сообщение “Done Uploading” как показано на рисунке ниже.

Если у вас на данном этапе возникают какие либо ошибки, не рассмотренные в данной статье, то вы их можете попробовать найти в статье про 10 самых распространенных ошибок при работе с Arduino.

Теперь попробуем написать программу, которая будет зажигать светодиод при нажатии кнопки.

Аналоговые входы 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. Теперь вы можете сделать простейшие проекты. Что бы продолжить обучение и освоить все тонкости, я советую прочитать книги по ардуино и пройти бесплатный обучающий курс. После этого вы сможете делать самые сложные проекты, которые только сможете придумать.

Технические характеристики

Ну, а если говорить конкретнее, то технические характеристики данного контроллера таковы:

  1. Тактовая частота ядер достигает 16 мГц.
  2. Воспринимаемое напряжение равно 5 Вольтам.
  3. Максимальное допустимое напряжение на цепи – 20 В.
  4. Соответственно, среднее рекомендуемое для работы – 9 В +-2 В
  5. С одного вывода максимальная сила тока может достигать 40 мА.
  6. Ну, а главное, что присутствуют 54 цифровых пина, из которых 15 – с поддержкой ШИМ.
  7. Аналоговых же всего 16, но для большинства проектов этого будет достаточно.
  8. Доступная постоянная память составляет 256 КБ, но учитывайте, что компилятором занято 8.
  9. Оперативная же составляет всего 8 КБ.

Все эти характеристики необходимо запомнить, чтобы подобрать под Аrduino mega 2560 проекты, подходящие по параметрам. Ведь далеко не в каждой ситуации такой длинный чип будет куда уместить, да и вообще возникнет в нём потребность.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]