Что такое Arduino и для чего оно нужно?
Arduino — это электронный набор, который позволяет любому создавать различные электромеханические устройства. Arduino состоит из программного и аппаратного обеспечения. Программная часть включает в себя среду разработки (программу для написания и отладки прошивки), множество готовых и практичных библиотек и упрощенный язык программирования. Раздел оборудования включает в себя большой ассортимент микроконтроллеров и готовых модулей для них. Благодаря этому работать с Arduino очень просто!
С помощью ардуино можно изучать программирование, электротехнику и механику. Но это не просто учебный конструктор. На его основе можно создавать действительно полезные устройства.
Начиная от простых мигалок, метеостанций, систем автоматизации и заканчивая системами умного дома, станками с ЧПУ и беспилотными летательными аппаратами. Возможности не ограничены даже вашей фантазией, ведь существует большое количество инструкций и идей для реализации.
Язык программирования Ардуино
Как только у вас под рукой будет плата микроконтроллера и на компьютере установлена среда разработки, можно приступать к написанию своих первых скетчей (прошивок). Для этого необходимо ознакомиться с языком программирования.
Программирование Arduino использует упрощенную версию языка C++ с предопределенными функциями. Как и в других C-подобных языках программирования, существует ряд правил написания кода. Вот самые основные:
- Каждое предложение должно сопровождаться точкой с запятой (;)
- Перед объявлением функции необходимо указать тип данных, возвращаемый функцией, или void, если функция не возвращает значение.
- Также необходимо указать тип данных перед объявлением переменной.
- Комментарии обозначаются: // Inline и /* block */
Вы можете узнать больше о типах данных, функциях, переменных, операторах и языковых конструкциях на странице программирования Arduino. Вам не нужно запоминать и запоминать всю эту информацию. Вы всегда можете зайти в справочник и посмотреть синтаксис той или иной функции.
Функция setup
Функция setup() выполняется в самом начале и только 1 раз сразу после включения или перезагрузки устройства. Обычно эта функция объявляет режимы выводов, открывает необходимые протоколы связи, устанавливает соединения с дополнительными модулями и настраивает подключенные библиотеки. Если ваша прошивка не требует этого, функцию все равно нужно объявить. Вот стандартный пример функции setup():
В этом примере последовательный порт просто открывается для связи с компьютером, а контакты 9 и 13 назначаются как вход и выход. Ничего сложного. Но если вам что-то непонятно, вы всегда можете задать вопрос в комментариях ниже.
Функция loop
Функция loop() выполняется после функции setup(). Loop в переводе с английского означает «петля». Это указывает на то, что функция зациклена, то есть она будет выполняться снова и снова. Например, микроконтроллер ATmega328, установленный на большинстве плат Arduino, будет выполнять около 10 000 циклов в секунду (если не используются задержки и сложные вычисления). Благодаря этому у нас есть большие возможности.
Макетная плата Breadbord
Вы можете создавать простые и сложные устройства. Для удобства рекомендую купить макетную плату (Breadboard) и соединительные провода. С их помощью вам не придется паять и перепаивать провода, модули, кнопки и датчики для различных проектов и устранения неполадок. С макетной платой без пайки разработка становится проще, практичнее и быстрее. Как работать с лотком для хлеба я рассказала в этом уроке. Вот список макетных плат без пайки:
Первый проект на Arduino
Соберем первое устройство на базе Arduino. Мы просто подключаем кнопку ударов и светодиод к ардуино. Обзор проекта выглядит так:
Обратите внимание на дополнительные резисторы в схеме. Один из них ограничивает ток для светодиода, а другой подтягивает штырь к земле. Как это работает и зачем это нужно, я объяснил в этом уроке.
Чтобы все заработало, нам нужно написать скетч. Сделаем так, чтобы светодиод загорался после нажатия на кнопку, а после следующего нажатия выключался. Вот наш первый набросок:
// переменные с пинами для подключенных устройств int switchPin = 8; инт светодиодный контакт = 11; // переменные для хранения состояния кнопки и светодиода boolean lastButton = LOW; логическое значение powerButton = НИЗКИЙ; логическое значение ledOn = ложь; void setup () { pinMode (switchPin, INPUT); pinMode(ledPin, ВЫХОД); } // функция устранения дребезга boolean debounce(boolean last) { boolean current = digitalRead(switchPin); если (последний! = текущий) { задержка (5); текущий = цифровое чтение (переключатель); } обратный поток; } void loop() { currentButton = debounce(lastButton); if(lastButton == LOW && currentButton == HIGH) { ledOn = !ledOn; } последняя кнопка = текущая кнопка; цифровая запись (светодиодный контакт, светодиодный индикатор); }
В этом скетче я создал дополнительную функцию подавления дребезга контактов. На моем сайте есть целый урок о возврате контактов. Обязательно ознакомьтесь с этим материалом.
ШИМ 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); задержка (5); } задержка(1000); for (int i = 255; i > 0; i—) { AnalogWrite (ledPin, i); задержка (5); } }
Читайте также: Как настроить Xiaomi Mijia Bedside Lamp 2, управление прикроватной лампой Сяоми
Аналоговые входы Arduino
Как мы уже знаем, цифровые пины могут быть как входными, так и выходными и принимать/отдавать только 2 значения: HIGH и LOW. Аналоговые выводы могут только принимать сигнал. И в отличие от цифровых входов аналоговые измеряют напряжение входящего сигнала. Большинство плат Arduino имеют 10-битный аналого-цифровой преобразователь. Это означает, что 0 читается как 0, а 5В читается как 1023. То есть аналоговые входы измеряют подаваемое на них напряжение с точностью до 0,005 вольта. Благодаря этому мы можем подключать различные датчики и резисторы (термисторы, фоторезисторы) и считывать с них аналоговый сигнал.
Для этого в Arduino есть функция AnalogRead(). Для примера подключим фоторезистор к ардуино и напишем простенький скетч, где будем считывать показания и отправлять их на монитор порта. Вот так выглядит наше устройство:
В схеме есть подтягивающий резистор на 10 кОм. Необходимо избегать волнений и волнений. Теперь давайте посмотрим на эскиз:
инт смыслПин = 0; // Пин, к которому подключен фоторезистор void setup() { AnalogReference(DEFAULT); // Установите опорное значение напряжения. Эта строка не является обязательной. Серийный.начать(9600); // Открываем порт на скорости 9600 бод. } void loop() { Serial.println(analogRead(sensePin)); // Чтение значения и вывод в порт delay(500); // задержка, чтобы не было слишком много значений }
Вот так мы сделали датчик освещенности из двух простых элементов и четырех строчек кода. На основе этого устройства мы можем создать умную лампу или ночник. Очень простое и полезное устройство.
Вот мы и рассмотрели основы работы с Arduino. Теперь вы можете создавать простые проекты. Для продолжения обучения и освоения всех тонкостей рекомендую прочитать книги об ардуино и пройти бесплатный курс. После этого вы сможете делать самые сложные проекты, которые только можете себе представить.