Arduino и другие железки

Общая информация об Arduino

Arduino обрели особенно сильную популярность среди людей, которые только начинают заниматься электроникой. На то есть несколько причин. В отличие от большинства предшественников, Arduino не требует дополнительного оборудования (программатора) для загрузки кода на плату — используется простой USB-кабель. Оболочка для программирования — Arduino IDE использует упрощенную версию C++, что облегчает процесс обучения для новичков. Кроме того, Arduino использует стандартизированный форм фактор для большинства своих плат, благодаря чему появился целый комплект дополнительных «шилдов».

Arduino Uno показана на рисунке ниже:

Arduino Uno — одна из самых популярных плат в линейке и является отличным выбором для начинающих. Технические характеристики этой модели будут рассмотрены ниже.

Оболочка Arduino IDE:

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

В этой статье мы остановимся на следующих основных моментах:

  • Какие проекты можно реализовать с Arduino
  • Основные узлы плат Arduino
  • Номенклатура самых удачных моделей Arduino
  • Дополнительные (периферийные) устройства для Arduino

Рекомендуем также дополнительно почитать

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

  • Что такое электричество?
  • Закон Ома
  • Электрическая цепь
  • Интегральная схема (микросхема)
  • Аналоговый сигнал
  • Цифровой сигнал

Датчик движения с Ардуино — проект для начинающих

Необходимые детали

Чтобы создать датчик движения с Arduino, HC-SR04 и светодиодом (LED) нам понадобятся следующие комплектующие:

  • Плата Arduino (мы использовали Arduino Uno).
  • Светодиод (LED, цвет не имеет значения).
  • Резистор/сопротивление 220 Ом.
  • Макетная плата.
  • USB-кабель Arduino.
  • Батарейка 9В с зажимом (опционально).
  • 6 проводов.

Подключение частей

Теперь нужно подключить несколько проводов на задней панели датчика. Есть четыре контакта — VCC, TRIG, ECHO и GND. После вставки проводов необходимо выполнить следующие подключения:

  1. Датчик — Arduino.
  2. VCC — 5V (питание).
  3. TRIG — 5 с пометкой.
  4. ECHO — 4 с пометкой.
  5. GND — GND (земля).
  6. Конец резистора на цифровой вывод по вашему выбору, просто не забудьте изменить его позже в коде.

Загрузка кода

const int ledPin = 6; // Цифровой выход светодиодаconst int trigPin = 5; // Цифровой выход для подключения TRIGconst int echoPin = 4; // Цифровой выход для подключения ECHOconst int ledOnTime = 1000; // Время, в течение которого светодиод остается включенным, после обнаружения движения (в миллисекундах, 1000 мс = 1 с)const int trigDistance = 20; // Расстояние (и меньшее значение) при котором срабатывает датчик (в сантиметрах)int duration;int distance;void setup() { pinMode(ledPin, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);}void loop() { digitalWrite(trigPin, LOW); digitalWrite(trigPin, HIGH); delay(1); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; if (distance <= trigDistance) { digitalWrite(ledPin, HIGH); delay(ledOnTime); digitalWrite(ledPin, LOW); } delay(100);}

Видео работы датчика движения на Ардуино:

Датчик движения с Arduino и HC-SR04Датчик движения с Arduino и HC-SR04

Простые проекты Ардуино

Давайте начнем наш обзор с традиционно самых простых, но очень важных проектов, включающих в себя минимальное количество элементов: светодиоды, резисторы и, конечно же, плату ардуино. Все примеры рассчитаны на использование Arduino Uno, но с минимальными изменениями будут работать на любой плате: от Nano и Mega до Pro, Leonardo и даже LilyPad.

Проект с мигающим светодиодом – маячок

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

Нам понадобится:

  • Плата Ардуино Uno, Nano или Mega со встроенным светодиодом, подключенным к 13 пину.
  • И все.

Что должно получиться в итоге:

Светодиод мигает – включается и выключается через равные промежутки времени (по умолчанию – 1 сек). Скорость включения и выключения можно настраивать.

Схема проекта

Схема проекта довольно проста:  нам нужен только контроллер ардуино со встроенным светодиодом, подсоединенным к пину 13. Именно этим светодиодом мы и будем мигать. Подойдут любые популярные платы: Uno, Nano, Mega и другие.

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

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

Программирование в проекте Ардуино

Если в вашей плате нет загруженного скетча маячка – не беда. Можно легко загрузить уже готовый пример, доступный в среде программирования Ардуино.

Открываем программу Arduino IDE, убеждаемся, что выбран нужный порт.

Проверка порта Ардуино – выбираем порт с максимальным номером

Затем открываем уже готовый скетч Blink – он находится в списке встроенных примеров. Откройте меню Файл, найдите подпункт с примерами, затем Basics и выберите файл Blink.

Открываем пример Blink в Ардуино IDE

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

Кнопки компиляции и загрузки скетча
Информация в Arduino IDE – Загрузка завершена

Ждем немного (внизу можно отследить процесс загрузки) – и все. Плата опять подмигнет несколькими светодиодами, а затем один из светодиодов начнет свой размеренный цикл включений и выключений. Можно вас поздравить с первым загруженным проектом!

Проект маячка со светодиодом и макетной платой

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

Графическое изображение схемы подключения доступно на следующем рисунке:

Другие идеи проектов со светодиодами:

  • Мигалка (мигаем двумя свтодиодами разных цветов)
  • Светофор
  • Светомузыка
  • Сонный маячок
  • Маячок – сигнализация
  • Азбука Морзе

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

Элементы платы

Микроконтроллер ATmega328P

Сердцем платформы Arduino Uno является 8-битный микроконтроллер фирмы Microchip — ATmega328P на архитектуре AVR с тактовой частотой 16 МГц.
Контроллер обладает тремя видами памяти:

  • 32 КБ Flash-памяти, из которых 0,5 КБ используются загрузчиком, который позволяет прошивать Arduino Uno с обычного компьютера через USB. Flash-память постоянна и её предназначение — хранение программ и сопутствующих статичных ресурсов.
  • 2 КБ RAM-памяти, которые предназначены для хранения временных данных, например переменных программы. По сути, это оперативная память платформы. RAM-память энергозависимая, при выключении питания все данные сотрутся.
  • 1 КБ энергонезависимой EEPROM-памяти для долговременного хранения данных, которые не стираются при выключении контроллера. По своему назначению — это аналог жёсткого диска для Arduino.

Микроконтроллер ATmega16U2

Микроконтроллер не содержит USB интерфейса, поэтому для прошивки и коммуникации с ПК на плате присутствует дополнительный микроконтроллер ATmega16U2 с прошивкой USB-UART преобразователя. При подключении к ПК Arduino Uno определяется как виртуальный COM-порт.

общается с ПК через по интерфейсу UART используя сигналы и , которые параллельно выведены на контакты и платы Arduino Uno. Во время прошивки и отладки программы, не используйте эти пины в своём проекте.

Светодиодная индикация

Имя светодиода Назначение
ON Индикатор питания платформы.
L Пользовательский светодиод на пине микроконтроллера. Используйте определение для работы со светодиодом. При задании значения высокого уровня светодиод включается, при низком – выключается.
RX и TX Мигают при прошивки и обмене данными между Arduino Uno и компьютером. А также при использовании пинов и .

Порт USB Type-B

Разъём USB Type-B предназначен для прошивки и питания платформы Arduino. Для подключения к ПК понадобиться кабель USB (A — B).

Понижающий регулятор 5V

Понижающий линейный преобразователь NCP1117ST50T3G обеспечивает питание микроконтроллера и другой логики платы при подключении питания через или пин Vin. Диапазон входного напряжения от 7 до 12 вольт. Выходное напряжение 5 В с максимальным выходным током 1 А.

Понижающий регулятор 3V3

Понижающий линейный преобразователь LP2985-33DBVR обеспечивает напряжение на пине . Регулятор принимает входное напряжение от линии 5 вольт и выдаёт напряжение 3,3 В с максимальным выходным током 150 мА.

ICSP-разъём ATmega328P

ICSP-разъём выполняет две полезные функции:

  1. Используется для передачи сигнальных пинов интерфейса SPI при подключении Arduino Shield’ов или других плат расширения. Линии ICSP-разъёма также продублированы на цифровых пинах , , и .
  2. Предназначен для загрузки прошивки в микроконтроллер через внешний программатор. Одна из таких прошивок — Bootloader для Arduino Uno, который позволяет .

А подробности распиновки .

Существуют ли еще программы, работающие с Ардуино?

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

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

Существует еще одна интересная версия исходной программы. Называется она B4R, и главным ее отличием является использование в качестве основы не языка си, а другой язык программирования – Basic. Данный программный продукт является бесплатным. Для работы с ним существуют хорошие самоучители, в том числе и написанные создателями данного продукта.

Есть и платные варианты Arduino IDE. Одним из таких является программа PROGROMINO. Главным ее достоинством считается возможность автодополнения кода. При составлении программы вам больше не нужно будет искать информацию в справочниках. Программа сама предложит вам возможные варианты использования той или иной процедуры. В ее набор входит еще множество интересных функций, отсутствующих в оригинальной программе и способных облегчить вам работу с платами.

37 датчиков за $37 для Arduino и Raspberry Pi

Какие бывают датчики для Arduino и Raspberry Pi? Сколько они стоят? Предлагаем обзор интересного дешевого набора из 37 датчиков за $37.

Разные датчики. Фото с DX.com

Изучая Arduino или Raspberry Pi, самое интересное, что можно сделать (после мигания светодиодами, подключения потенциометра, кнопки, двигателя и др.) — это, конечно, использование датчиков. Датчики позволяют определять, что происходит во внешней среде, и действовать на основе этой информации. Датчики, наверное, можно назвать органами чувств робота.

Какие бывают датчики для Arduino и Raspberry Pi?

Датчиков, называемых также сенсорами, существует огромное множество и в первую очередь они имеют разное назначение.

Обзор полезного набора датчиков для Arduino 16 в 1 sensor kit for arduino с AliexpressОбзор полезного набора датчиков для Arduino 16 в 1 sensor kit for arduino с Aliexpress

Разные датчики. Фото с DX.com

Основные датчики (по назначению):

  • Датчик давления — используется для обнаружения физического давления, например, при щипках, сжимании, толчках.
  • Фотоэлементы — используется для измерения уровня освещенности, обнаружения простого объекта по принципу светлый/темный
  • Датчик температуры — используется для определения температуры окружающей среды или, например, жидкости
  • Датчик вибрации — используется для обнаружения движения / вибрации и ориентации
  • Датчик движения — используется для обнаружения двигательной активности, таких как животных или людей
  • Термопары — используется для измерения температуры, как правило,  выше 150°C.
  • ИК-приемники — используется для обнаружения  инфракрасных-сигналов от пульта дистанционного управления.

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

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

Датчики отличаются по типу сигнала на выходе: аналоговый или цифровой.

Выбирая датчики, можно заметить, что чаще всего упоминается совместимость с Arduino и не упоминается совместимость с Raspberry Pi.

Если же датчик выдает аналоговый сигнал, то подключить напрямую такой датчик к Raspberry Pi можно только с помощью аналого-цифрового преобразователя (АЦП), который часто включают в платы расширения Raspberry Pi.

Набор из 37 датчиков для Arduino

Доставка в обоих магазинах бесплатная.

Набор из 37 датчиков. Фото с Aliexpress

Этот набор содержит датчики и другие модули, позволяющие реализовать  практически любую идею начинающего изучать Arduino, и является хорошим дополнением к наборам Arduino Starter Kit (о том, как выбрать Arduino начинающему и о наборах Arduino Starter Kit мы писали в статье).

Click To Tweet

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

  1. Пассивный зуммер KY-006
  2. Активный зуммер KY-012
  3. Двухцветный светодиод KY-029
  4. Трехцветный светодиод KY-011
  5. Трехцветный светодиод KY-009
  6. Трехцветный светодиод KY-016
  7. Семицветный светодиод KY-034
  8. Датчик удара KY-031
  9. Вибровыключатель KY-002
  10. Фоторезистор KY-018
  11. Фоторезистор-выключатель KY-010
  12. Кнопка KY-004
  13. Датчик наклона KY-020
  14. Датчик наклона KY-017
  15. Датчик инфракрасного излучения KY-005
  16. Инфракрасный датчик KY-022
  17. Датчик температуры KY-013
  18. Датчик температуры KY-028
  19. Датчик температуры KY-001
  20. Датчик температуры и влажности KY-015 (сенсор DHT11. Схема подключения здесь)
  21. Датчик звука KY-037
  22. Датчик металла KY-036
  23. Датчик сердцебиения KY-039
  24. Датчик пламени KY-026
  25. Геркон KY-021
  26. Магнитный датчик KY-003
  27. Магнитный датчик KY-035
  28. Датчик магнитного поля KY-025
  29. Датчик магнитного поля KY-024
  30. Датчик магнитного поля KY-033
  31. Модуль световых эффектов «магическая чашка» KY-027
  32. Датчик угла поворота (энкодер) KY-040
  33. Датчик для избегания препятствий KY-032
  34. Датчика звука KY-038
  35. Лазерный модуль KY-008
  36. Реле KY-019
  37. Джойстик KY-023

Все цены приведены по состоянию на день выхода статьи.

Особенность больших вычислений

Для сложения и вычитания по умолчанию используется ячейка long (4 байта), но при умножении и делении используется (2 байта), что может привести к непредсказуемым результатам! Если при умножении чисел результат превышает 32’768, он будет посчитан некорректно. Для исправления ситуации нужно писать (тип данных) перед умножением, что заставит МК выделить дополнительную память для вычисления (например ). Также существую модификаторы, делающие примерно то же самое.

  • u или U – перевод в формат (от 0 до 65’535). Пример:
  • l или L – перевод в формат (-2 147 483 648… 2 147 483 647). Пример:
  • ul или UL – перевод в формат (от 0 до 4 294 967 295). Пример:

Посмотрим, как это работает на практике:

long val;
val = 2000000000 + 6000000;         // посчитает корректно (т.к. сложение)
val = 25 * 1000;                    // посчитает корректно (умножение, меньше 32'768)
val = 35 * 1000;                    // посчитает НЕКОРРЕКТНО! (умножение, больше 32'768)
val = (long)35 * 1000;              // посчитает корректно (выделяем память (long) )
val = 35 * 1000L;                   // посчитает корректно (модификатор L)
val = 35 * 1000u;                   // посчитает корректно (модификатор u)
val = 70 * 1000u;                   // посчитает НЕКОРРЕКТНО (модификатор u, результат > 65535)
val = 1000 + 35 * 10 * 100;         // посчитает НЕКОРРЕКТНО! (в умножении больше 32'768)
val = 1000 + 35 * 10 * 100L;        // посчитает корректно! (модификатор L)
val = (long)35 * 1000 + 35 * 1000;  // посчитает НЕКОРРЕКТНО! Второе умножение всё портит
val = (long)35 * 1000 + (long)35 * 1000;  // посчитает корректно (выделяем память (long) )
val = 35 * 1000L + 35 * 1000L;      // посчитает корректно (модификатор L)

Ресурсы

Использование ацетилена

Справочник языка Ардуино

Операторы

  • setup()
  • loop()

Синтаксис

  • ; (точка с запятой)
  • {} (фигурные скобки)
  • // (одностроковый коментарий)
  • /* */ (многостроковый коментарий)
  • #define
  • #include

Битовые операторы

  • & (побитовое И)
  • | (побитовое ИЛИ)
  • ^ (побитовое XOR или исключающее ИЛИ)
  • ~ (побитовое НЕ)
  • << (побитовый сдвиг влево)
  • >> (побитовый сдвиг вправо)
  • ++ (инкремент)
  • — (декремент)
  • += (составное сложение)
  • -= (составное вычитание)
  • *= (составное умножение)
  • /= (составное деление)

  • &= (составное побитовое И)
  • |= (составное побитовое ИЛИ)

Данные

Типы данных

  • void
  • boolean
  • char
  • unsigned char
  • byte
  • int
  • unsigned int
  • word
  • long
  • unsigned long
  • short
  • float
  • double
  • string — массив символов
  • String — объект
  • массивы

sizeof()

Библиотеки

  • EEPROM
  • SD
  • SPI
  • SoftwareSerial
  • Wire

Функции

Цифровой ввод/вывод

  • pinMode()
  • digitalWrite()
  • digitalRead()

Аналоговый ввод/вывод

  • analogReference()
  • analogRead()
  • analogWrite() — PWM

Только для Due

  • analogReadResolution()
  • analogWriteResolution()

Расширенный ввод/вывод

  • tone()
  • noTone()
  • shiftOut()
  • shiftIn()
  • pulseIn()

Время

  • millis()
  • micros()
  • delay()
  • delayMicroseconds()

Математические вычисления

  • min()
  • max()
  • abs()
  • constrain()
  • map()
  • pow()
  • sqrt()
  • sq()

Тригонометрия

  • sin()
  • cos()
  • tan()

Случайные числа

  • randomSeed()
  • random()

Биты и байты

  • lowByte()
  • highByte()
  • bitRead()
  • bitWrite()
  • bitSet()
  • bitClear()
  • bit()

Внешние прерывания

  • attachInterrupt()
  • detachInterrupt()

Прерывания

  • interrupts()
  • noInterrupts()

Условный оператор if

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

if (лог. величина) {
  // выполняется, если лог. величина - true
}

Оператор (англ. “иначе”) работает в паре с оператором и позволяет предусмотреть действие на случай невыполнения :

if (лог. величина) {
  // выполняется, если лог. величина - true
} else {
  // выполняется, если лог. величина - false
}

Также есть третья конструкция, позволяющая ещё больше разветвить код, называется она :

if (лог. величина 1) {
  // выполняется, если лог. величина 1 - true
} else if (лог. величина 2) {
  // выполняется, если лог. величина 2 - true
} else {
  // выполняется иначе 
}

Посмотрим на все эти операторы в действии в большом примере:

// при выполнения одного действия 
// внутри условия, {} не обязательны
if (a > b) c = 10;  // если a больше b, то c = 10
else c = 20;        // если нет, то с = 20

// вместо сравнения можно использовать лог. переменную
boolean myFlag, myFlag2;
// если myFlag true, то c присвоить 10
if (myFlag) c = 10;

// сложные условия
// если оба флага true, то c присвоить 10
if (myflag && myFlag2) c = 10;

// при выполнении двух и более действий
// внутри условия, {} обязательны!
if (myFlag) {
  с = 10;
  b = c;
} else {
  с = 20;
  b = a;
}

byte buttonState;
if (buttonState == 1) a = 10;       // если buttonState 1
else if (buttonState == 2) a = 20;  // если нет, но если buttonState 2
else a = 30;                        // если и это не верно, то вот

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

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

О нём поговорим чуть ниже.

Особенность boolean

В уроке о типах данных я упоминал о том, что принимает значение , если присвоить ему отличное от нуля число, то есть оператору можно скормить любое число, и он вернёт true в любом случае, кроме нуля. Это бывает удобно , но также может и приводить к ошибкам, которые трудно отловить. – да, выполнится код по этому условию.

Порядок условий

Порядок условий играет очень большую роль при оптимизации кода и попытке сделать его более быстрым в некоторых случаях. Суть очень проста: логические выражения/величины проверяются слева направо, и если хоть одно значение делает всё выражение неверным (ложью), дальнейшая проверка условий прекращается. Например если в выражении

if (a && b && c) {
  // делать что то
}

хотя бы имеет значение , проверка остальных выражений ( и ) уже не выполняется

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

Например:

if (flag && analogRead(0) > 500) {
  // делать что то
}

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

Beaglebone Black

Не используйте мышку!

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

  • Автоформатирование – Arduino IDE умеет автоматически приводить ваш код в порядок (имеются в виду отступы, переносы строк и пробелы). Для автоматического форматирования используйте комбинацию CTRL+T на клавиатуре, либо Инструменты/АвтоФорматирование в окне IDE. Используйте чаще, чтобы сделать код красивым (каноничным, классическим) и более читаемым для других!

  • Скрытие частей кода – сворачивайте длинные функции и прочие куски кода для экономии места и времени на скроллинг. Включается здесь: Файл/Настройки/Включить сворачивание кода

  • Не используйте мышку! Чем выше становится ваш навык в программировании, тем меньше вы будете использовать мышку (да-да, как в фильмах про хакеров). Используйте обе руки для написания кода и перемещения по нему, вот вам несколько полезных комбинаций и хаков, которыми я пользуюсь ПОСТОЯННО:

    • Ctrl+← , Ctrl+→ – переместить курсор влево/вправо НА ОДНО СЛОВО
    • Home , End – переместить курсор в начало/конец строки
    • Shift+← , Shift+→ – выделить символ слева/справа от курсора
    • Shift+Ctrl+← , Shift+Ctrl+→ – выделить слово слева/справа от курсора
    • Shift+Home , Shift+End – выделить все символы от текущего положения курсора до начала/конца строки
    • Ctrl+Z – отменить последнее действие
    • Ctrl+Y – повторить отменённое действие
    • Ctrl+C – копировать выделенный текст
    • Ctrl+X – вырезать выделенный текст
    • Ctrl+V – вставить текст из буфера обмена

    Местные сочетания:

    • Ctrl+U – загрузить прошивку в Arduino
    • Ctrl+R – скомпилировать (проверить)
    • Ctrl+Shift+M – открыть монитор порта

    Также для отодвигания комментариев в правую часть кода используйте TAB, а не ПРОБЕЛ. Нажатие TAB перемещает курсор по некоторой таблице, из-за чего ваши комментарии будут установлены красиво на одном расстоянии за вдвое меньшее количество нажатий!

Чем может управлять Arduino

В итоге такое количество «рук» у Arduino позволяет подключать к нему огромное количество различных периферийных устройств. Среди них, например:

  • кнопки,
  • светодиоды,
  • микрофоны и динамики,
  • электродвигатели и сервоприводы,
  • ЖК дисплеи,
  • считыватели радиометок (RFID и NFC),
  • ультразвуковые и лазерные дальномеры,
  • bluetooth, WiFi и Ethernet модули,
  • считыватели SD карт,
  • GPS и GSM модули…

А также десятки различных датчиков:

  • освещённости,
  • магнитного поля,
  • гироскопы и акселерометры,
  • датчики дыма и состава воздуха,
  • температуры и влажности и многое, многое другое.

Всё это превращает Arduino в универсальное ядро системы, которое может быть сконфигурировано совершенно разнообразными способами. Хотите сделать радиоуправляемую кормушку для питомца? Пожалуйста! Хотите чтобы при начале дождя у вас на лоджии закрывалось окно? Пожалуйста! Хотите управлять яркостью освещения в комнате со смартфона? Запросто!

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

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

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

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

Одним из самых популярных является Arduino Ethernet Shield. Он нужен для связи с Ардуино по обычному сетевому кабелю, витой паре. На нём расположен разъём rj45.

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

Плюсы Ардуино

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

На платах Ардуино сделаны удобные контакты, которые можно соединять удобными перемычками с любыми сторонними модулями, дисплеями, сенсорами и многим другим.

Пример сборки устройства с помощью перемычек

Кроме того, чтобы плата заработала всего лишь достаточно подключить её к компьютеру через USB.

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

Плюсы Arduino:

  1. Плата обладает встроенным программатором, (не нужен компилятор);
  2. Использование языка программирования близкого к C/C++, что делает её простой в использовании и изучении;
  3. Наличие множества библиотек для модулей, сенсоров, дисплеев и т.п., доступных для свободного использования;
  4. Для сбора устройства не требуется пайка, компоненты соединяются при помощи специальной макетной платы, перемычек и проводов;
  5. Возможность автономной работы, т.е. использование батареек или аккумуляторов;
  6. Наличие версии для работы с популярной мобильной операционной системой Android;
  7. Огромное количество различных модулей, сенсоров, дисплеев, датчиков и т.п..
  8. Наличие большого количества плат расширения — shields или «шилды».

Есть еще один очень существенный плюс Arduino — просто невероятно огромное сообщество любителей этих плат и создания устройств на ее основе своими руками.

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

Передача массива в функцию (Pro)

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

int c;
int myArray[] = {100, 30, 890, 645, 251};

void setup() {
  c = sumFunction(myArray);   // результат 1916
}

void loop() {
}

int sumFunction(int *intArray) {
  int sum = 0;   // переменная для сложения
  for (byte i = 0; i < 5; i++) {
    sum += intArray;
  }
  return sum;
}

Что из этого нужно запомнить: при описании функции параметр массива указывается со звёздочкой, т.е. . При вызове массив передаётся как  . И в целом всё.

Давайте покажу как сделать универсальную функцию, которая суммирует массив любого размера. Для этого нам поможет оператор , возвращающий размер в байтах. Этот размер нам нужно будет передать как аргумент функции:

int c;
int myArray[] = {100, 30, 890, 645, 251, 645, 821, 325};

void setup() {
  // передаём сам массив и его размер в БАЙТАХ
  c = sumFunction(myArray, sizeof(myArray));
}

void loop() {
}

int sumFunction(int *intArray, int arrSize) {
  // переменная для суммирования
  int sum = 0;  

  // находим размер массива, разделив его вес
  // на вес одного элемента (тут у нас int)
  arrSize = arrSize / sizeof(int);  
  for (byte i = 0; i < arrSize; i++) {
    sum += intArray;
  }
  return sum;
}

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

Важно! Переданный в функцию массив не дублирует исходный массив! Любые действия, совершённые с переданным массивом, влияют на “оригинальный” массив!

Arduino Due

Arduino Due – одна из самых популярных плат.

Работает на 32-битном процессоре с частотой 84мГц.

На борту установлен AT91SAM3X8E контроллер, во многом превосходящий все вышеперечисленные платы. 512 кб постоянной памяти, 96 кб оперативной. Имеются 54 цифровых пина, 12 из которых могут использовать ШИМ. Также есть пара 12-битных цифро-аналоговых преобразователей: они позволяют микропроцессору выдавать звук без дополнительных расширений.

Кстати, распиновку всех плат Ардуино вы можете найти на нашем сайте в этом разделе.

Arduino Due и Arduino Mega 2560 очень похожи друг на друга, поэтому может показаться, что и шилды для этих плат взаимозаменяемые, но на самом деле это не так. Логические уровни на Mega 5-вольтовые, тогда как на Due – 3,3 вольта. Будьте осторожны с расширениями плат, в противном случае Due безвозвратно сгорит.

Платы разные, но с большей частью задач они справляются все. Лишь экзотические проекты требуют наличие определенной фичи. Тогда придется окунуться поподробнее в спецификацию контроллера и Datasheet. Разумеется, и о программировании придется немножко почитать.

Добавить ваш

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий