О различии техники#
Arduino представляет собой линейку электронных блоков-плат, которые можно подключать к компьютеру по USB, а в качестве периферии — любые устройства: от светодиодов до механизмов радиоуправляемых моделей и роботов.
Программы для него пишутся на простом и интуитивно понятном C-подобном языке Wiring (с возможностью подключения сторонних библиотек на C/C++, например, для управления LCD-дисплеями или двигателями), компилируются и загружаются в устройство одной кнопкой, после чего вы тут же получаете работающий автономный гаджет.
Никакого ассемблера, никаких лишних проводов и дорогих деталей и программаторов — чистое творчество, включай и работай!
Применение#
После короткого рассказа друзьям и знакомым про Arduino («это типа электронного конструктора, микро-ЭВМ, в который можно загрузить любую программу и получить любое другое устройство») самый часто задаваемый вопрос:
«А зачем это всё?» или «Какая мне от этого выгода?»
Скучные люди, не правда ли? Неужели среди ваших знакомых нет ни одного радиолюбителя, а может, вы и сами радиолюбитель?
Применение Arduino очень простое — не забавы ради, а развития мозга для.
Интересно же линуксоидам ковыряться в коде ядра? Какая от этого польза?
Почему бы вам не заняться «железным» (в противовес «софтовому») творчеством?
Вот прямо сейчас рядом со мной сидит коллега-дизайнер и разбирается… с нейронными сетями.
В общем, что говорить, забыт дух технического творчества, забыты радиокружки и авиамодельные клубы.
Все только сидят у своих компьютеров и сделать ничего путного в железе, кроме как воткнуть вилку в розетку, не могут :)
Соберите свой веб-сервер, цветомузыкальную установку или прикольного робота!
Сообщество любителей Arduino уже знает об успешных примерах:
- GPS-трекер с записью на SD-карту,
- простой аудиоплеер,
- Twitter-дисплей,
- электронные игры с дисплеем и тачскрином...
Попробуйте купить радиодеталей и сделать что-то своё!
Есть даже готовый набор для создания четырёхъядерного Arduino-кластера...
Какие бывают платы Arduino?#
Существует несколько моделей плат Arduino, среди них:
-
Arduino Uno
Является прародителем всех Arduino, поддерживает множество дополнительных плат (шилдов), которые расширяют возможности устройства. -
Arduino Nano
Популярная модель с большим количеством цифровых и аналоговых портов (14 цифровых, 6 из которых имеют поддержку ШИМ, и 8 аналоговых). -
Arduino Mega
Одна из самых мощных моделей семейства, базируется на микроконтроллере Atmega2560.
Поддерживает до 54 цифровых пинов (12 из которых имеют поддержку ШИМ) и 12 аналоговых. -
Arduino Due
Самая мощная модель семейства, базируется на микроконтроллере Atmel SAM3X8E ARM Cortex-M3.
Обладает большим количеством постоянной и оперативной памяти (512 и 96 Кб соответственно). -
Arduino Pro Mini
Устройство с 14 цифровыми портами (6 из которых могут работать ШИМ-выходами) и 8 аналоговыми. -
Arduino Leonardo
Идентична по размерам с Arduino Uno, но использует другой микроконтроллер (Atmega32u4).
Имеет больше цифровых и аналоговых портов (20 (7 из которых ШИМ) и 12). -
Arduino LilyPad
Самая миниатюрная модель семейства, используется там, где нужна компактность и нет необходимости в большом количестве входов/выходов.
Микроконтроллер vs Компьютер#
1. Основные отличия
| Характеристика | Микроконтроллер (Arduino) | Компьютер (PC, Raspberry Pi) |
|---------------------|----------------------------|----------------------------------|
| Операционная система | Нет | Есть (Windows, Linux, macOS) |
| Процессор | Одноядерный, маломощный | Многоядерный, высокопроизводительный |
| ОЗУ (RAM) | Килобайты | Гигабайты |
| Хранение данных | Встроенная флеш-память (очень мала) | HDD, SSD, SD-карта (гигабайты и больше) |
| Запуск программ | Только одна загруженная программа | Любые приложения (браузеры, игры, редакторы) |
| Порты ввода-вывода | GPIO, I2C, UART, SPI, PWM, аналоговые входы | HDMI, USB, Ethernet, Wi-Fi, Bluetooth, GPIO |
| Интерфейс пользователя | Нет (управляется кодом) | Графический интерфейс, консоль |
| Многозадачность | Нет | Есть |
| Энергопотребление | Очень низкое | Выше, зависит от нагрузки |
2. Как выбрать?
- Микроконтроллер (Arduino, ESP32, STM32) подходит для:
- Управления датчиками, моторами, светодиодами.
- Автоматизации процессов (умный дом, системы контроля).
- Проектов с низким энергопотреблением.
- Робототехники и встраиваемых систем.
- Компьютер (PC, Raspberry Pi) подходит для:
- Запуска полноценных программ и многозадачности.
- Работы с сетью, мультимедиа, интернетом.
- Использования в качестве сервера или рабочей станции.
- Разработки и тестирования сложных алгоритмов.
Если нужно управлять электроникой, лучше выбрать микроконтроллер.
Если требуется запускать программы и работать в ОС, нужен компьютер.
Программирование в Ардуино#
Arduino – это платформа для создания электронных устройств, основанных на микроконтроллерах.
Она позволяет быстро и легко разрабатывать проекты в области автоматизации, робототехники, интернета вещей и других сфер.
Для программирования плат Arduino используется Arduino IDE – удобная среда разработки, которая поддерживает язык Wiring (основанный на C/C++).
Arduino IDE#
Arduino IDE – программа для написания и загрузки прошивки в плату, скачать можно с официального сайта.
Внимание! Перевод языка страницы в браузере ломает кнопки!
На данный момент классическая версия называется Legacy IDE (1.8.X), так как вышла новая IDE v2.
Новичкам рекомендуется начать с версии 1.8.X.
Как скачать?
Перед загрузкой вам предложат пожертвовать на развитие проекта.
Можно отказаться и нажать JUST DOWNLOAD (только скачать).
Либо сразу перейти по прямой ссылке и скачать версию 1.8.19.
Системные требования
Для работы рекомендуется компьютер с:
- Windows 7 или выше
- Linux / MacOS
Если у вас Windows XP, придётся установить версию 1.6.13, так как более свежие версии:
- Будут тормозить или не запустятся.
- Не поддерживают некоторые библиотеки.
- Не работают с платами ESP8266.
Рекомендуется обновить систему до Windows 7 или выше!
Драйвер#
Во время установки Arduino IDE программа попросит разрешения установить драйвера от неизвестного производителя, нужно согласиться на установку всего предложенного.
Первое подключение#
Перед подключением к компьютеру рекомендуется провести визуальный осмотр платы на предмет дефектов пайки компонентов.
Что можно встретить (в порядке фотографий):
- Замкнутые пины (часто встречается на дешёвых платах, паяются вручную).
- Неприпаянная нога компонента – возможен плохой контакт.
- "Торчащие" компоненты (резисторы, конденсаторы), припаянные только с одной стороны.
- Смещение компонентов – могут быть проблемы с работой схемы.
- "Сопля" между ногами компонента – может вызвать короткое замыкание.
Важно! Плату с обнаруженным дефектом не рекомендуется подключать к компьютеру!
Всё можно исправить паяльником, если не умеете сами — попросите того, кто умеет.
Реакция на подключение питания#
Как понять, что плата работает корректно? Рассмотрим на примере Arduino Nano/Uno:
Нормальное поведение платы при подключении USB:#
- Загорится светодиод PWR – это означает, что питание подано.
- Если плата новая и на ней прошит загрузчик (он обязан быть прошит), однократно мигает светодиод L.
Примечание: Светодиоды могут быть разных цветов, это зависит от производителя.
Прошитая плата (новая) обычно ведёт себя так:#
- Светодиод L продолжает мигать раз в секунду (или дважды в секунду) – это стандартная прошивка "Blink".
- При нажатии кнопки RESET (единственная кнопка на плате) светодиод L мигает однократно, сигнализируя о завершении работы загрузчика.
Если плата ведёт себя иначе:
- Для новой платы это может быть заводской брак.
- Если плата уже использовалась и паялась – возможна ошибка подключения или проблемы с прошивкой.
Драйвер USB контроллера#
В своих проектах я использую «Ардуино-совместимые» китайские платы, у которой для подключения по USB используется контроллер CH340/CH341
. Чтобы он распознавался компьютером, нужно установить драйвер.
Настройка и прошивка#
Плата подключается к компьютеру по USB, после чего должны замигать светодиоды.
Если этого не произошло, возможны следующие причины:
- Неисправен USB-кабель – попробуйте другой.
- Неисправен USB-порт компьютера – подключите к другому порту.
- Неисправен USB-порт Arduino – попробуйте другую плату.
- Попробуйте другой компьютер, чтобы исключить часть проблем.
- Попробуйте другую плату (желательно новую).
- Сгорел входной диод по линии USB (из-за короткого замыкания при сборке).
- Плата полностью вышла из строя (из-за неправильного подключения питания или замыкания).
После подключения компьютер издаст характерный сигнал обнаружения нового устройства.
Если это первое подключение, появится окно “Установка нового оборудования”.
Если этого не произошло:
- Проверьте предыдущий список неисправностей.
- Кабель должен быть data-кабелем, а не “зарядным”.
- Кабель лучше подключать напрямую в компьютер, а не через USB-хаб.
- Не установлены драйверы Arduino – установите их через Arduino IDE или вручную.
В списке портов (Arduino IDE → Инструменты → Порт) должен появиться новый COM-порт (обычно COM3).
Если его нет, возможны следующие причины:
- См. предыдущий список неисправностей.
- Некорректно установлен драйвер USB-контроллера Arduino.
- Проверка модели чипа USB-контроллера:
- Переверните плату и найдите «узкую» микросхему.
- Если на ней написано CH341 – установите драйвер по инструкции.
- Если FT232R – также установите соответствующий драйвер.
- Если надпись отсутствует – откройте Диспетчер устройств, найдите “Другие устройства”.
- Если при подключении платы появляется FT232R USB UART, установите драйвер.
Если список портов вообще неактивен:
- Драйвер Arduino установлен некорректно – повторите установку.
- Возникла системная ошибка – обратитесь к знакомому компьютерщику (или экзорцисту 😄).
Выбор и настройка платы (Arduino NANO)#
Выбираем соответствующую плату в Инструменты → Плата.
Большинство проектов выполняются на Arduino Nano.
Если у вас Nano:
- Китайские платы используют "старый" загрузчик, поэтому выбираем:
Инструменты → Процессор → ATmega328p (Old Bootloader).
- Если пришла плата с новым загрузчиком, прошивка не загрузится (будет минутная загрузка и ошибка).
- В этом случае попробуйте сменить пункт Процессор → ATmega328p.
Теперь выбираем порт, к которому подключена плата.
COM1 – системный порт, его не выбираем.
Должен появиться ещё один порт (обычно COM3).
Загрузка прошивки#
Процесс загрузки прошивки состоит из двух этапов:
1. Компиляция – проверка кода на ошибки.
- Запускается нажатием кнопки с галочкой в верхнем меню.
- Можно компилировать код даже без подключения платы.
2. Загрузка в микроконтроллер.
- Запускается кнопкой со стрелочкой.
- Происходит компиляция, затем загрузка кода в плату.
Проверка работы платы#
Вставьте следующий код в Arduino IDE, полностью заменив содержимое файла:
constexpr int LED_PIN = 5;
void setup() {
// Настраиваем пин со светодиодом в режим выхода
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Зажигаем светодиод
digitalWrite(LED_PIN, HIGH);
// Ждём 500 мс
delay(500);
// Гасим светодиод
digitalWrite(LED_PIN, LOW);
// Ждём 500 мс
delay(500);
}
Об особеностях программ#
В языке C++ программы обычно начинаются с main(). Однако в Arduino компилятор автоматически создаёт эту функцию.
Программист работает с двумя обязательными функциями:
main(){
void setup(){
}
void loop(){
}
}
Важно заметить, что обязательную в С++ функцию main() процессор Arduino создаёт сам. И результатом того, что видит программист есть:
void setup(){
}
void loop(){
}
setup()#
- Выполняется один раз при старте микроконтроллера.
- Используется для начальных настроек:
- Инициализация портов.
- Подключение модулей.
- Настройка параметров работы.
loop()#
- Выполняется постоянно в бесконечном цикле.
- Здесь прописываются основные действия программы, которые микроконтроллер должен выполнять на протяжении всей работы.
Что такое пин?#
Пин (Pin) – это физический контакт (вывод) на плате Arduino, к которому можно подключать различные устройства:
- Светодиоды
- Датчики
- Кнопки
- Двигатели и т. д.
Типы пинов в Arduino#
- Цифровые (Digital Pins)
- Обозначены как D0, D1, D2 … D13.
- Могут находиться в двух состояниях:
- HIGH (1) – подаётся напряжение 5V (или 3.3V для некоторых моделей).
- LOW (0) – напряжение 0V.
-
Используются для работы с кнопками, реле, светодиодами и другими устройствами.
-
Аналоговые (Analog Pins)
- Обозначены как A0, A1, A2 … A5.
- Считывают аналоговые значения (напряжение от 0V до 5V).
-
Используются для работы с датчиками, потенциометрами и другими аналоговыми устройствами.
-
Пины питания (Power Pins)
- GND (Ground) – общий провод, ноль.
- 5V, 3.3V – питание для подключаемых модулей.
-
VIN – питание платы при использовании внешнего источника.
-
Специальные пины
- PWM (ШИМ) – ~ – работают как цифровые, но могут генерировать аналогоподобный сигнал.
- TX/RX – используются для обмена данными через Serial (UART).
- SCL/SDA – предназначены для подключения I²C-устройств.
Пример с кнопочкой#
После подключения схемы, давайте разберёмся с самой программой. После подключения схемы, давайте разберёмся с самой программой. В этом примере мы будем управлять светодиодом на 5 пине.
int Led = 5;
int Button = 2; // номер пина, подключенного к кнопке
void setup(){
pinMode(Led, OUTPUT);
pinMode(Button, INPUT);
}
void loop(){
if(digitalRead(Button) == HIGH){ // если кнопка нажата
digitalWrite(Led, HIGH); // светодиод горит
}
else{ // если не нажата (иначе)
digitalWrite(Led, LOW); // светодиод не горит
}
}
Этот пример достаточно хороший. Но, а если нам надо выполнять действие не по удержанию, а по нажатию. Тогда мы немного изменим наш код. Мы добавим ещё две переменных, некие флаги, которые будут следить за некоторыми процессами. И код выглядит уже так:
bool But = true; // проверка на кнопку
bool Light = false; // проверка на свет
int Led = 5;
int Button = 2; // номер пина, подключенного к кнопке
void setup(){
pinMode(Led, OUTPUT);
pinMode(Button, INPUT);
}
void loop(){
bool Now = digitalRead(Button); // состояние кнопки прямо сейчас
if(But && !Now)
{
delay(10); // небольшая задержка
Now = digitalRead(Button);
if(!Now)
{
Light = !Light;
digitalWrite(Led, Light);
}
}
But = Now;
}
В этом коде Вы могли заметить Light = !Light
. Сейчас объясню. Мы считываем была ли кнопка опущена. Далее небольшой задержкой определяем не было ли это ошибкой и если кнопка действительно была нажата инвертируем сигнал светодиода. То есть если светодиод горел – он перестанет гореть. И наоборот.
Дребезг контактов#
Очень хорошо, когда всё идеально. Но к сожалению всё на так и идеально. И с кнопками та же проблема. Механические контакты кнопки не могут замыкаться/размыкаться мгновенно. Это называется «дребезг контактов». Как это понять. На вход микроконтроллера поступают импульсы. Но вместо того чтоб просто получить 1 или 0 из-за данного явления на вход поступает целая кучка импульсов. Это может создать ложные сигналы. И именно поэтому мы делаем небольшую задержку в нашей программе. На скорость это особо не повлияет, но обеспечит нас от ошибки.