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

С чего начать работу с Ардуино

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

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

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

Критерии выбора хорошего биокамина и принцип его работы

Основы Arduino

В первую очередь – это специальный микроконтроллер с одноимённой системой управления и библиотеками, построенными на языке С++. Соответственно, если вы планируете создавать что-то уникальное, вам следует изучить все нюансы, которые имеет программирование Arduino.

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

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

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

Для упрощения работы пользователей в Ардуино созданы готовые библиотеки функций, вам достаточно лишь вводить команды из них, чтобы добиться какой-то цели. Естественно, таким образом вы многого не добьётесь, но для создания собственных библиотек потребуется знание языка С++ на котором и построена прошивка чипа.

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

Все функции строятся из простейших операнд, которые характерны для С++. Этими операндами являются переменные различных типов и способы их применения. Поэтому любая функция, используемая в микроконтроллере для получения сведений или отправки сигнала, – это набор простейших операций, который записан в главной библиотеке. И вы будете ограничены до тех пор, пока не получите достаточно опыта и практики, чтобы понимать, какую библиотеку и для какой цели вам стоит написать.

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

Также, учитывайте, что язык написания библиотек системы – низкоуровневый, а соответственно, состоит из простейших команд, в отличие от высокоуровневых python или pascal, удобных для пользователей. С другой стороны, он также является мультипарадигмальным, поэтому подходит для решения любой задачи с помощью удобной вам парадигмы программирования.

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

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

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

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

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

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

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

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

Некоторое железо

  • GyverStepper – высокопроизводительная библиотека для управления шаговым мотором
  • AccelStepper – более интересная и качественная замена стандартной библиотеке Stepper для контроля шаговых моторчиков. Скачать можно со страницы разработчика, или вот прямая ссылка на архив.
  • AccelMotor – моя библиотека для управления мотором с энкодером (превращает обычный мотор в “шаговый” или сервомотор)
  • ServoSmooth – моё дополнение к стандартной библиотеке Servo, позволяющее управлять сервоприводом с настройкой максимальной скорости движения и разгона/торможения (как в AccelStepper, только для серво). Must have любого любителя серво манипуляторов!
  • CapacitiveSensor – библиотека для создания сенсорных кнопок (из пары компонентов рассыпухи). Описание
  • ADCTouchSensor – ещё одна версия библиотеки для создания сенсорных кнопок. Есть ещё одна, так, на всякий случай
  • TouchWheel – библиотека для создания сенсорных слайдеров и колец
  • Buzz – детектор присутствия на основе всего лишь одного провода! (измеряет ЭМ волны)
  • Bounce – библиотека антидребезга для кнопок и всего такого. Сомнительная полезность, но почитайте описание
  • oneButton – библиотека для расширенной работы с кнопкой. На мой взгляд неудобная
  • GyverButton – моя библиотека для расширенной работы с кнопкой. Очень много возможностей!
  • AdaEncoder – библиотека для работы с энкодерами
  • GyverEncoder – моя библиотека для энкодеров с кучей возможностей, поддерживает разные типы энкодеров
  • RTCLib – лёгкая библиотека, поддерживающая большинство RTC модулей
  • OV7670 – библиотека для работы с камерой на OV7670
  • IRremote – базовая библиотека для работы с ИК пультами и излучателями
  • IRLib – более расширенная версия для работы с ИК устройствами
  • IRLremote – самая чёткая библиотека для ИК пультов, работает через прерывания. 100% отработка пульта
  • keySweeper – почти готовый проект для перехвата нажатий с беспроводных клавиатур
  • USB_Host_Shield – позволяет Ардуине работать с геймпадами (PS, XBOX) и другими USB устройствами
  • Brain – библиотека для работы с NeuroSky ЭЭГ модулями
  • TinyGPS – шустрая библиотека для работы с GPS модулями
  • GyverRGB – моя библиотека для работы с RGB светодиодами и лентами
  • FadeLED – библиотека для плавного (ШИМ) мигания светодиодами с разными периодами
  • CurrentTransformer – измерение силы тока при помощи трансформатора (катушки) на проводе. Читай: токовые клещи
  • LiquidCrystal-I2C – библиотека для LCD дисплеев с I2C контроллером. Разработчик – fdebrabander
  • LiquidCrystal-I2C – библиотека для LCD дисплеев с I2C контроллером. Разработчик – johnrickman. Предыдущая вроде бы лучше
  • LiquidTWI2 – быстрая библиотека для LCD дисплеев на контроллерах MCP23008 или MCP23017
  • LCD_1602_RUS – библиотека русского шрифта для LCD дисплеев
  • LCD_1602_RUS_ALL – новая версия предыдущей библиотеки с поддержкой украинского языка
  • u8glib – библиотека для работы с монохромными LCD и OLED дисплеями
  • ucglib – библиотека для работы с цветными LCD и OLED дисплеями
  • Adafruit_SSD1306 – ещё одна библиотека для OLED дисплеев
  • Adafruit-GFX-Library – дополнение для adafruit библиотек дисплеев, позволяет выводить графику
  • SSD1306Ascii – самодостаточная и очень лёгкая библиотека для вывода текста на OLEDы
  • NeoPixelBus – библиотека для работы с адресной светодиодной лентой, адаптированная под esp8266 (NodeMCU, Wemos и др.). 
  • microLED – лёгкая и простая библиотека для работы с адресной лентой
  • – лёгкая библиотека для отправки любых данных через радио модули 433 МГц
  • rc-switch – библиотека для работы с радио модулями 433 МГц и разными протоколами связи

Мигаем светодиодом с использованием mBlock

Давайте используя mBlock начнем с малого, сделав программу, которая заставит мигать светодиод.

Проверьте, насколько это просто:

В приведенной выше программе вы можете увидеть, что мы разместили блок Arduino и «вечный блок» (англ. — forever). Эти два блока являются обязательными для программирования Arduino.

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

Внутри блока forever установите, какой цифровой контакт будет использоваться. Этот может обеспечить высокое или низкое напряжение пина. Итак, если у меня есть светодиод, подключенный к контакту номер 13 Arduino (смотрите ниже), и я хочу включить его, я буду использовать «set digital pin 13 output HIGH», и мой светодиод загорится.

Эта программа использует задержки (delays) для приостановки программы в течение одной секунды между состояниями ON и OFF. Таким образом, мы можем видеть, как светодиод мигает.

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

Затем запустите код. Вы сможете увидеть, что светодиод мигает.

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

Статические члены класса

Очень интересную особенность имеют статические члены класса – переменные и объекты. Если сделать член класса статическим, то он будет существовать только в одном экземпляре для всех объектов класса.

Переменная – станет глобальной для всех созданных объектов! Также к этой переменной можно обращаться напрямую от имени класса, вообще без участия объектов. Статическая переменная класса должна быть объявлена отдельно от класса (то есть создана, как объект).

Функция (метод) – можно обращаться к нему напрямую от имени класса, вообще без участия объектов

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

Пример, показывающий всё вышесказанное:

class myClass {
  public:
    void setVal(byte val) { Sval = val; }
    byte getVal() { return Sval; }
    static byte getValStatic() { return Sval; }
    static byte Sval;
};

// обязательно создаём отдельно статическую переменную класса
byte myClass::Sval;

// создаём два объекта
myClass myObj1, myObj2;

void setup() {
  Serial.begin(9600);

  // можем работать со статическим членом без привязки к объекту
  // указываем принадлежность к классу через ::
  myClass::Sval = 10;

  // выведет 10 во всех случаях
  // через метод первого объекта
  Serial.println(myObj1.getVal());

  // через метод второго объекта
  Serial.println(myObj2.getVal());

  // через статический метод без привязки к объекту
  // указываем принадлежность к классу через ::
  Serial.println(myClass::getValStatic());

  // меняем Sval через метод любого объекта
  myObj2.setVal(50);

  // выведет 50 во всех случаях
  Serial.println(myObj1.getVal());
  Serial.println(myObj2.getVal());
  Serial.println(myClass::getValStatic());
}

void loop() {}

Видео: Терморегулятор для теплого пола, обзор и настройка

GPIO

Начнем с пинов, которых больше всего, это GPIO, с англ. General Purpose Input-Output, входы-выходы общего назначения, на плате они подписаны как D0–D13 и A0–A5. По картинке распиновки они называются PD*, PB* и PC*, (вместо звёздочки – цифра) отмечены тёмно-бежевым цветом. Почему “официально” они называются PD/PB/PC? Потому что пины объединены в пОрты по несколько штук (не более 8), на примере Нано есть три порта: D, B и C, соответственно пины так и подписаны: PD3 – Port D 3 – третий выход порта D. Это цифровые пины, способные выдавать логический сигнал (0 или VCC) и считывать такой же логический сигнал. VCC это напряжение питания микроконтроллера, при обычном использовании обычной платы Ардуино это 5 Вольт, соответственно это 5 вольтовая логика: 0V – сигнал низкого уровня (LOW), 5V – высокого уровня (HIGH). Напряжение питания микроконтроллера играет очень большую роль, об этом мы ещё поговорим. GPIO имеют несколько режимов работы: вход (INPUT), выход (OUTPUT) и вход с подтяжкой к питанию встроенным в МК резистором на 20 кОм (INPUT_PULLUP). Подробнее о режимах поговорим в отдельном уроке.

Все GPIO пины в режиме входа могут принять сигнал с напряжением от 0 до 5 вольт (на самом деле до 5.5 вольт, согласно даташиту на микроконтроллер). Отрицательное напряжение или напряжение, превышающее 5.5 Вольт приведёт к выходу пина или даже самого МК из строя. Напряжение 0-2.5 вольта считается низким уровнем (LOW), 2.5-5.5 – высоким уровнем (HIGH). Если GPIO никуда не подключен, т.е. “висит в воздухе”, он принимает случайное напряжение, возникающее из за наводок от сети (провода 220в в стенах) и электромагнитных волн на разных частотах, которыми пронизан современный мир.

GPIO в режиме выхода (OUTPUT) являются транзисторными выходами микроконтроллера и могут выдать напряжение 0 или VCC (напряжение питания МК). Стоит отметить, что микроконтроллер – логическое, а не силовое устройство, его выходы рассчитаны на подачу сигналов другим железкам, а не на прямое их питание. Максимальный ток, который можно снять с GPIO выхода ардуино – 40 мА. Если попытаться снять больше – пин выйдет из строя (выгорит выходной транзистор и всё). Что такое 40 мА? Обычный 5мм одноцветный светодиод потребляет 20 мА, и это практически единственное, что можно питать напрямую от Ардуино. Также не стоит забывать о максимальном токе со всех пинов, он ограничен 200 мА, то есть не более 10 светодиодов можно запитать от платы на полную яркость…

Библиотеки для работы с датой и временем ардуино

Библиотека RTClib

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

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

#include <RTClib.h>

RTC_DS1307 RTC; – выбор датчика (в данном случае DS1307).

rtc.adjust(DateTime( Date, Time)); – настройка времени и календаря.

dayOfTheWeek () – вывод дня недели. Аргумент от 0 до 6, 0 – воскресенье.

Библиотека Timelib

Позволяет Ардуино получать информацию о дате и времени в данный момент.

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

#include <TimeLib.h>

Time(); – создание экземпляра.

setTime (t); – установка времени. Аргумент t – час, минута, секунда, день, месяц и год.

timeStatus(); – показывает, установлено ли время.

adjustTime(adjustment); – настройка времени.

Библиотека Ds1307

Библиотека для удобного взаимодействия часов DS1307 с Ардуино c использованием библиотеки Wire.

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

#include <DS1307RTC.h>

class DS1307RTC – создание объекта DS1307.

SetTime() – установка времени.

get() – считывает RTC, возвращает полученную дату в формате POSIX.

Set(time_t t) – запись даты в RTC

Библиотека DS 3231

Предназначена для управления датой и временем в модуле ds3231.

#include “ds3231.h”

DS3231  Clock(SDA, SCL); – создание объекта DS3231, подключение к линии тактирования и линии данных.

getTime(); – считывание даты и времени с часов.

setDate(date, mon, year); – установка даты.

Важные страницы

  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макро, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)

Деструктор

Наряду с конструктором класса существует также деструктор (от англ. destruct – разрушать), который выполняет противоположное действие: уничтожает объект, убирает его из динамической памяти. Как и конструктор, деструктор создаётся автоматически, если не указывать его явно. Деструктор также можно объявить самостоятельно, для выполнения каких-то действий при уничтожении класса, например для освобождения динамической памяти. Деструктор объявляется точно так же, как конструктор, т.е. имя совпадает с именем класса, возвращаемого типа данных нет. Единственное отличие – тильда ~ перед именем. Рассмотрим наш класс из этого урока, у него деструктор будет 

Рассмотрим пример, заодно вспомним про область видимости переменных. Если создать объект вне функций – он будет создан глобальным, и будет существовать на протяжении всего времени работы программы. Если создать его внутри функции или блока кода – он будет существовать только в пределах этого блока, то есть переменные класса будут занимать память на протяжении выполнения этого блока кода. Рассмотрим вот такой класс:

class Color {   // класс Color
  public:
    Color() {}; // конструктор
    void printHello() {
      Serial.println("Hello");
    };
    ~Color() {    // деструктор
      Serial.println("destruct");
    };
    byte someVar;   // какая-то переменная
  private:
};

В нём есть пустой конструктор, печатающий hello метод и деструктор. Выполним вот такой код:

Color myColor3;
void setup() {
  Serial.begin(9600);  
  myColor3.printHello();
}

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

Внесём создание объекта в блок функции и посмотрим, что будет

void setup() {
  Serial.begin(9600);
  Color myColor3;
  myColor3.printHello();
}
// тут myColor3 уничтожается

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

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

String::~String()
{
 free(buffer);
}

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

Урок Ардуино для начинающих: управление устройствами со смартфона

Устройства:

  • Модуль — Bluetooth Module HC 05/06
  • Плата — Arduino
  • Светодиод (LED)
  • Резистор — 220 Ом
  • Android-устройство

Пошаговая сборка схемы проекта на Ардуино

Цепь в нашем Arduino проекте настолько проста и мала, что нам нужно сделать всего несколько соединений:

  • Arduino Pins — Bluetooth Module Pins
  • RX (Pin 0) — TX
  • TX (Pin 1) — RX
  • 5V — VCC
  • GND — GND

Не подключайте RX к RX и TX к TX выходы Bluetooth к выходам Arduino, вы не получите никаких данных, здесь TX означает «передача», RX означает «прием».

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

/* Bluetooh Basic: LED ON OFF* Coder — Mayoogh Girish* This program lets you to control a LED on pin 13 of arduino using a bluetooth module*/char data = 0; //Variable for storing received datavoid setup(){Serial.begin(9600); //Sets the baud for serial data transmissionpinMode(13, OUTPUT); //Sets digital pin 13 as output pin}void loop(){if(Serial.available() > 0) // Send data only when you receive dаta:{data = Serial.read(); //Read the incoming data and store it into variable dataSerial.print(data); //Print Value inside data in Serial monitorSerial.print(«\n»); //New lineif(data == ‘1’) // Checks whether value of data is equal to 1digitalWrite(13, HIGH); //If value is 1 then LED turns ONelse if(data == ‘0’) // Checks whether value of data is equal to 0digitalWrite(13, LOW); //If value is 0 then LED turns OFF}}

Приложение для Андроид-устройств

prilozhenie.zip
После того, как мы подключились через Bluetooth, нужно скачать и установить приложение, которое будет управлять нашим светодиодом на расстоянии. Подсоединяем смартфон к модулю Bluetooth HC 05/06:

  • Включаем модуль HC 05/0.
  • Ищем устройство
  • Соединяемся с HC 05/06 введя дефолтный пароль «1234» или «0000» (четыре нуля).

Видео с пошаговой сборкой устройства для управления со смартфона:

Arduino Bluetooth Basic [CONTROL LED]

Arduino Bluetooth Basic [CONTROL LED]

Программирование

Код. Ничего лишнего

Ардуино программируется на языке программирования C/C++ с соответствующим ему синтаксисом. Встроенный сборщик, препроцессор и компилятор (avr-gcc или Win-AVR) прощают большое количество ошибок и делает многое за пользователя автоматически, мы даже об этом не знаем и не задумываемся. Базовые функции для управления выводами и интерфейсами микроконтроллера, математика и некоторые другие функции/макросы взяты из открытого фреймворка для работы с микроконтроллерами под названием Wiring. Именно из него состоит базовый набор инструментов Ардуино. В связи с этим сами разработчики Ардуино называют язык “упрощённым c++”, и даже дали ему отдельное название – Arduino Wiring.

Тут следует отделить мух от котлет: “из коробки” в Arduino IDE нам доступна огромная куча различных функций и инструментов:

  • Все возможности языка C++, которые предоставляет компилятор: типы данных, операторы и вообще весь необъятный синтаксис. Мы программируем на том же C++, на котором можно программировать в любом другом месте.
  • “Ядро” Ардуино – библиотека Arduino.h, которая автоматически подключается в код. В ней содержатся функции для управления пинами, интерфейсами, а также имеется набор всяких полезных функций и инструментов. А ещё оно отвечает за инициализацию и настройку периферии микроконтроллера при запуске. В ядре кстати лежат стандартные библиотеки для Serial, Wire, SPI и EEPROM.
  • В папке с программой лежит набор стандартных библиотек: для LCD дисплея, шаговика, сервопривода и некоторых других железок.
  • С компилятором идёт набор низкоуровневых библиотек для AVR (сон, progmem, watchdog и многие другие).
  • Компилятор позволяет работать с микроконтроллером “напрямую” при помощи регистров и чтения даташита до утра.
  • Также мы можем писать на ассемблере, взяв под контроль каждый такт работы МК.

Если вы научитесь свободно прогать на Ардуино и вдруг перейдете к разработке программ на том же C++ в более взрослых средах разработки, вы будете неприятно удивлены большим количеством дополнительного кода, который придется писать руками. И наоборот, если умеющий в плюсы (си-плюс-плюсы) человек посмотрит на типичный ардуино-код, он скажет “да как это вообще работает то?”. Компилятор в Arduino IDE настроен на максимальную всеядность и прощение ошибок, потому что это обучающая платформа.

Сейчас вернёмся к такому понятию, как библиотека. Жизнь рядового ардуинщика неразрывно связана с библиотеками, потому что огромное комьюнити за годы своего существования сделало огромное количество этих самых библиотек на все случаи жизни и для всех продающихся датчиков и модулей. Библиотека это набор файлов, в которых содержится дополнительный код, которым мы можем пользоваться просто ознакомившись с документацией или посмотрев примеры. Такой подход называется “черным ящиком”, мы можем даже не догадываться, какой ужас и кошмар (в плане сложности кода) содержится в библиотеке, но с лёгкостью пользоваться возможностями, который этот код даёт. Купили модуль – нашли библиотеку – открыли пример – всё, результат достигнут…

3. Подключение платы Arduino к компьютеру

  1. Соедините Arduino с компьютером по USB-кабелю. На плате загорится светодиод «ON» и начнёт мигать светодиод «L». Это значит, что на плату подано питание и микроконтроллер начал выполнять прошитую на заводе программу «Blink».
  2. Для настройки Arduino IDE под конкретную модель узнайте, какой номер COM-порта присвоил компьютер вашей плате. Зайдите в «Диспетчер устройств» Windows и раскройте вкладку «Порты (COM и LPT)».

Операционная система распознала плату Arduino как COM-порт и назначила номер . Если вы подключите к компьютеру другую плату, операционная система назначит ей другой номер

Если у вас несколько платформ, очень важно не запутаться в номерах COM-портов.

Что-то пошло не так?

После подключения Arduino к компьютеру, в диспетчере устройств не появляются новые устройства? Это может быть следствием следующих причин:

  • Неисправный USB-кабель или порт
  • Блокировка со стороны операционной системы
  • Неисправная плата

Что такое Arduino

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

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

Вот из чего состоит конструктор Arduino.

Основа

«Мозг» любого конструктора Arduino — это собственно одноимённая плата. На ней есть процессор, модули памяти и порты ввода‑вывода, к которым подключаются другие компоненты.

Самая популярная плата для начинающих — Arduino Uno. На ней 14 цифровых и 6 аналоговых входов, 32 КБ постоянной и 2 КБ оперативной памяти, процессор частотой 16 МГц, порт USB. Не сравнить с современными смартфонами и компьютерами, но для знакомства с конструктором и создания простых систем этого вполне достаточно.

Arduino Nano и Mini — одни из самых компактных в линейке. Nano аналогична Uno по производительности, Mini немного слабее. В Arduino Leonardo установлен новый контроллер (процессор) и вместо USB‑порта используется microUSB.

Фото: AlexCorv/Shutterstock

Если же вы заранее знаете, что на простых экспериментах не остановитесь, можно сразу смотреть в сторону плат побольше, например Arduino Mega. Здесь будет уже 54 цифровых выхода и 16 аналоговых, 256 КБ постоянной и 8 КБ оперативной памяти, а также процессор частотой 16 МГц и порт USB.

Конструктор постоянно развивается, появляются новые версии платформы — с более производительными микроконтроллерами, большим объёмом памяти, расширенным набором портов, дополнительными компонентами вроде Bluetooth или Wi‑Fi.

Обратите внимание: блока питания на плате нет, к розетке вы её не подключите. Электроэнергию можно подавать либо через порт USB/microUSB от компьютера или внешнего аккумулятора, либо на разъём Vin или 5V (плюс на Gnd — «земля») на плате (они промаркированы) — например, от батареи или блока питания для ПК

Дополнительные элементы

Фото: Schlyx/Depositphotos

Чтобы платформа Arduino не просто выполняла вычисления, а давала какие‑то наглядные и полезные результаты работы, к ней нужно подключить «обвес». Это могут быть:

  • Датчики. Они принимают информацию и передают её плате, бывают цифровыми и аналоговыми. К примеру, для Arduino есть датчики света, цвета, температуры, давления, влажности, уровня воды и другие. Выпускаются и более сложные сенсоры. Например, датчики препятствия и расстояния часто используют для создания управляемых роботов и машинок.
  • Светодиоды — самые простые элементы, которые покажут результат работы Arduino. Загорелся светодиод — что‑то произошло, например получили определённый сигнал с датчика.
  • Моторы и другие приводы. Они нужны для того, чтобы привести в движение части вашей конструкции: заставить колёса машины крутиться, а робота — шагать.
  • Экраны. Используются для вывода информации. Обычно это небольшие чёрно‑белые LCD‑дисплеи для пары строк текста, но есть и компактные цветные TFT‑экраны разрешением до 240 × 320 точек и диагональю до 3 дюймов.
  • Кнопки и переключатели. Позволяют управлять работой устройства на базе Arduino: включать и выключать его, задавать определённые сценарии поведения.
  • Резисторы. Нужны, чтобы менять яркость свечения светодиодов или создавать особые электрические схемы.
  • Потенциометры — резисторы с переменным сопротивлением. Их обычно используют, чтобы управлять напряжением, яркостью светодиодов, громкостью звуков и так далее.
  • Провода, перемычки и макетная плата. Нужны для простой сборки вашего Arduino без пайки. Достаточно вставлять ножки резисторов, коннекторов, проводников и других деталей в отверстия на плате. Так быстрее, безопаснее и легче — разберётся даже ребёнок.

Платы расширения

Фото: Baladapat/Depositphotos

Такие платы, которые иногда называют шилдами (Shield), расширяют возможности Arduino. Они устанавливаются на платформу или друг на друга по принципу бутерброда.

Назначение плат обычно отражено в названии. Например, Ethernet Shield позволяет подключить систему к сети Ethernet, GPRS Shield — к мобильной сети. Для управления мощными моторами выпускается Motor Shield, для работы Arduino от бытовой электросети напряжением 220 вольт — AC/DC Shield.

Загружаем первый скетч в Arduino

  Загрузка первого скетча, это состояние восторга не покидает продолжительное время. Описать то что ты испытываешь в момент удачи очень сложно, особенно если ты не когда ранее не имел дела с программируемой радиоэлектроникой. В голове крутятся мысли, идеи, и хочется скорее узнать на что же ещё способен этот кусок текстолита и набор радиодеталей ! Если вы прошли этап Arduino uno R3 CH340G подключение и настройка.  к компьютеру, мы можем приступить к следующим действиям.

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

 

 Выбрав данный пример у нас открывается новое окно среды разработки Arduino с готовым для загрузки кодом прошивки контроллера. Выглядит это так.

   Давайте немного разберём что несёт в себе этот скетч. С 1 по 23 сточку мы видим текст серого цвета. Этот текст несёт информационный характер и описывает пользователю некоторые параметры работы данного скетча, также автор этого скетча может оставить контактную информацию о себе. Эти строчки закомментированы и при прошивке контроллера они не загружаются в него. Закомментировать текст можно двумя способами. Первый способ будет удобен если нужно скрыть от загрузчика несколько строк, в таком случае используется знак /* в начале комментариев, */ в конце комментариев, как в первой и двадцать третьей строке. Второй способ больше подходит для описания части кода или какой либо функции, для этого используется // текст или код попавший за двойной слеш // в пределах одной строки будет скрыт от загрузки в контроллер, что мы можем наблюдать в остальной части кода. Кстати, если вы в дальнейшем планируете писать скетчи сами то, считается хорошим тоном оставлять описание параметров работы скетча и комментариев к функциям. Из описания которое оставил нам автор понятно следующее, что этот скетч заставляет встроенный в плату контроллера светодиод и привязанный к 13 цифровому пину, моргать с частотой в 1000 миллисекунд. 

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

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

   И на контроллере мы можем наблюдать как светодиод промаркированный латинской буквой L начинает моргать с заданной частотой.

  Для большего понимания работы этого скетча, давайте немного отредактируем код и посмотрим что изменилось. Переходим на 34 строку кода и изменим время паузы,   delay(1000); изменим на  delay(10000); .

 В результате этих манипуляций программа работы нашего контроллера изменилась. И сейчас светодиод на контроллере загорается не на 1 секунду как это было при загрузке исходного кода, а на 10 секунд. Сейчас мы программно указали в 33 строчке включить светодиод и этот светодиод будет гореть до тех пор пока относительно него не поступит другой команды. Поэтому в 34 строчке мы ставим паузу в  10 секунд а в 35 строчке гасим светодиод. Должно получится что то вроде ниже представленного изображения.

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

Чтобы комментировать войдите или зарегистрируйтесь !

Работа с данными, фильтры

  • FFT – быстрое преобразование Фурье (раскладывание звука в спектр)
  • fix_FFT – говорят пофикшенная библиотека FFT
  • FHT – быстрое преобразование Хартли (как Фурье, только ещё быстрее)
  • GyverFilters – несколько очень эффективных фильтров данных (бегущее среднее, медиана, упрощённый одномерный Калман, AB фильтр
  • TinyEKF – быстрый облегчённый вариант фильтра Калмана
  • filtering-library – несколько фильтров данных
  • Gaussian – фильтр Гаусса
  • aJson – работа с данными в формате JSON. Есть ещё Arduino JSON библиотека, и парсер потока JSON данных
  • PID – самая известная библиотека ПИД регулятора. Для неё есть дополнение – автонастройка (автотюн) параметров регулятора
  • GyverPID – моя версия PID регулятора, на мой взгляд более компактная и удобная в использовании
  • GyverRelay – библиотека релейного регулятора с гистерезисом и обратной связью по производной
  • CryptoSuite – несколько примеров шифрования данных известными шифрами
  • AESlib – библиотека для работы с AES шифрованием
  • LinkedList – работа с типом данных “связанный список”, читайте на Хабре
  • FixedPointsArduino – работа с типом данных “с фиксированной точкой” (десятичные дроби, но быстрее вычисляются)
Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий