Перейти к содержанию

О различии техники#

Презентация Лекция 7

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.

Arduino IDE 1
Arduino IDE 2

Системные требования
Для работы рекомендуется компьютер с:
- Windows 7 или выше
- Linux / MacOS

Если у вас Windows XP, придётся установить версию 1.6.13, так как более свежие версии:
- Будут тормозить или не запустятся.
- Не поддерживают некоторые библиотеки.
- Не работают с платами ESP8266.

Рекомендуется обновить систему до Windows 7 или выше!

Драйвер#

Во время установки Arduino IDE программа попросит разрешения установить драйвера от неизвестного производителя, нужно согласиться на установку всего предложенного.

Arduino IDE 2

Первое подключение#

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

Что можно встретить (в порядке фотографий):
- Замкнутые пины (часто встречается на дешёвых платах, паяются вручную).
- Неприпаянная нога компонента – возможен плохой контакт.
- "Торчащие" компоненты (резисторы, конденсаторы), припаянные только с одной стороны.
- Смещение компонентов – могут быть проблемы с работой схемы.
- "Сопля" между ногами компонента – может вызвать короткое замыкание.

Arduino IDE 2
Arduino IDE 2

Важно! Плату с обнаруженным дефектом не рекомендуется подключать к компьютеру!
Всё можно исправить паяльником, если не умеете сами — попросите того, кто умеет.

Реакция на подключение питания#

Как понять, что плата работает корректно? Рассмотрим на примере Arduino Nano/Uno:

Нормальное поведение платы при подключении USB:#

  1. Загорится светодиод PWR – это означает, что питание подано.
  2. Если плата новая и на ней прошит загрузчик (он обязан быть прошит), однократно мигает светодиод 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).

Arduino IDE 2

Загрузка прошивки#

Процесс загрузки прошивки состоит из двух этапов:
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#

  1. Цифровые (Digital Pins)
  2. Обозначены как D0, D1, D2 … D13.
  3. Могут находиться в двух состояниях:
    • HIGH (1) – подаётся напряжение 5V (или 3.3V для некоторых моделей).
    • LOW (0) – напряжение 0V.
  4. Используются для работы с кнопками, реле, светодиодами и другими устройствами.

  5. Аналоговые (Analog Pins)

  6. Обозначены как A0, A1, A2 … A5.
  7. Считывают аналоговые значения (напряжение от 0V до 5V).
  8. Используются для работы с датчиками, потенциометрами и другими аналоговыми устройствами.

  9. Пины питания (Power Pins)

  10. GND (Ground) – общий провод, ноль.
  11. 5V, 3.3V – питание для подключаемых модулей.
  12. VIN – питание платы при использовании внешнего источника.

  13. Специальные пины

  14. PWM (ШИМ) – ~ – работают как цифровые, но могут генерировать аналогоподобный сигнал.
  15. TX/RX – используются для обмена данными через Serial (UART).
  16. 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 из-за данного явления на вход поступает целая кучка импульсов. Это может создать ложные сигналы. И именно поэтому мы делаем небольшую задержку в нашей программе. На скорость это особо не повлияет, но обеспечит нас от ошибки.

Arduino IDE 2

Настройка зловещего глаза#

Рерурс для настройки глаза

Источники#

  1. Начало работы с Iskra Nano
  2. Arduino для начинающих. Часть 2
  3. Гайд для новичков Arduino