Математические операции на arduino

Из чего состоит Arduino?

На аппаратном уровне это серия смонтированных плат, мозгом которых являются микроконтроллеры семейства AVR.

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

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

Существует также s4a.cat — сервис, базирующийся на Scratch, позволяющий более наглядно вести разработку на Arduino. Он подойдёт для обучения детей, а также если вы разово хотите создать простое устройство без изучения языка программирования Arduino и различных документаций. Для остальных же случаев лучше придерживаться традиционного процесса разработки.

2

Ссылки

Какие бывают платы

По производителю

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

На примере самой популярной платы Arduino UNO:

  • Оригинальная плата. Поставляется только в фирменной коробке, имеет логотип компании, на портах платы — маркировка. Цена от производителя 20 €.

  • Плата от стороннего производителя. Качество хуже, однако цена начинается от 150 рублей. Качество платы может отразиться на её работоспособности в дальнейшем. Хоть это и редкость, но плата и вовсе может не работать «из коробки» — всё зависит от добросовестности изготовителя и продавца. Для работы с подобными платами требуется драйвер CH340, который находится в свободном доступе. Во всём остальном процесс разработки идентичен процессу разработки на оригинальных платах.

По назначению

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

Различные платы Arduino. Источник

Самые популярные из них:

  • Arduino Nano — различие с UNO только в конструктивном исполнении. Nano меньше.
  • Arduino Mega — плата на базе мощного микроконтроллера. Имеет большое количество портов.
  • Arduino Micro — имеет встроенную поддержку USB-соединения, а потому может использоваться как HID-устройство (клавиатура, мышь, MIDI-устройство).
  • Arduino Ethernet — имеет возможность подключения к сети через Ethernet-провод. На плате также расположен слот для microSD карточки.
  • Arduino Mini — по характеристикам немного уступает UNO. Преимуществом платы является её миниатюрное исполнение.
  • Arduino Due — плата на базе 32-разрядного ARM микроконтроллера. Имеет преимущество в производительности по сравнению с остальными.
  • Arduino LilyPad — форм-фактор позволяет использовать плату в предметах одежды и текстиля.
  • Arduino Yún — «нужно было ставить линукс…». Имеет поддержку дистрибутива Linux, встроенную поддержку Ethernet и Wi-Fi, слот для microSD. Как и Micro, имеет встроенную поддержку USB-соединения.

4

Возможности

Зачем учиться работать с ардуино и электроникой в целом?

  • Это невероятно интересное, техническое, развивающее мозги и относительно дешёвое “DIY” хобби с бесконечным количеством идей и их реализаций
  • Возможность создания узко-специальных электронных устройств и станков, аналогов которым нет в продаже или они слишком дорогие. В том числе для личных нужд или для работы (знакомый ювелир сделал себе контроллер для муфельной печи, который стоит очень дорого).
  • Возможность создания новых уникальных устройств с целью выхода на краудфандинг и старта продаж и своего бизнеса.
  • Отличная практика в программировании и электронике, особенно перед обучением на соответствующую специальность.
  • Возможности в целом: автоматизация процессов и “машин”, автоматическое регулирование процессов, дистанционное управление, мониторинг различных величин, носимые и стационарные электронные устройства различного назначения.

Питание “мощных” схем

Резюмируя и повторяя всё сказанное выше, рассмотрим варианты питания проектов с большим потреблением тока.

Питать мощный проект (светодиоды, двигатели, нагреватели) от 5V можно так: Arduino и потребитель питаются вместе от 5V источника питания:

Питать мощный потребитель от USB через плату нельзя, там стоит диод, да и дорожки питания тонкие:

Что делать, если всё-таки хочется питать проект от USB, например от powerbank’а? Это ведь удобно! Всё очень просто:

Если есть только блок питания на 12V, то у меня плохие новости: встроенный стабилизатор на плате не вытянет больше 500 мА:

Но если мы хотим питать именно 12V нагрузку, то проблем никаких нет: сама плата Arduino потребляет около 20 мА, и спокойно будет работать от бортового стабилизатора:

Передача массива в функцию (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;
}

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

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

7Загрузка скетчав память Ардуино

Теперь можно загрузить программу в память платы. Подключите плату к компьютеру, подождите несколько секунд, пока происходит инициализация платы. Нажмите кнопку Загрузить, и Ваш скетч запишется в память платы Arduino. Светодиод должен начать весело подмигивать вам с периодичностью 2 секунды (1 секунду горит, 1 выключен). Ниже приведён код нашей первой программы для Ардуино.

void setup() { // блок инициализации
    pinMode(13, OUTPUT); // задаём пин 13 в качестве выхода.
}

void loop() { // цикл, который повторяется бесконечно, пока включена плата:
    digitalWrite(13, HIGH);   // подаём на 13 вывод высокий уровень - зажигаем светодиод
    delay(1000);                  // на 1000 мсек = 1 сек.
    digitalWrite(13, LOW);    // подаём на 13 вывод низкий уровень - гасим светодиод
    delay(1000);                  // на 1 сек.
}   // далее цикл повторяется

Почитайте комментарии в тексте программы – их достаточно чтобы разобраться с нашим первым экспериментом. Сначала описываем блок инициализации setup(), в котором задаём начальные значения переменных и функции выводов Arduino. Далее следует бесконечный цикл loop(), который повторяется снова и снова, пока на плату подаётся питание. В этом цикле мы выполняем все необходимые действия. В данном случае – зажигаем и гасим светодиод. Оператор delay() задаёт длительность выполнения (в миллисекундах) предшествующего оператора. Оператор digitalWrite() указывает Ардуино, на какой вывод подать напряжение, и какой именно уровень напряжения.Ваш первый скетч готов!

Полезный совет

В сети есть множество сайтов, посвящённых работе с платами семейства Arduino. Читайте, осваивайте, не бойтесь экспериментировать и познавать новое! Это увлекательное и полезное занятие, которое принесёт вам много удовольствия.

Обратите внимание

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

AlexGyver

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

Есть также бесплатные видеоуроки. Цикл охватывает все стандартные операторы и функции Ардуино и построен таким образом, что от выпуска к выпуску у зрителя идёт плавное формирование “базы”, каждый последующий урок (видео урок) содержит в себе информацию из предыдущих, то есть уроки усложняются и становятся комплексными.

Что узнает ребенок:

  • Что такое Ардуино и зачем она нужна?
  • Что умеет Ардуино и что можно сделать на её основе?
  • Подключение датчиков к Ардуино
  • Питание Arduino от различных источников электричества
  • Математические операторы для работы с переменными
  • Особенности переменных и констант
  • Общение между компьютером и Arduino Через COM порт
  • Какие существуют типы реле? В чём достоинства и недостатки?
  • Как подключить реле и как им управлять?

И это еще не все. 16 видеоуроков расскажут все нюансы о программировании на Arduino.

Что такое 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 UNO — 1 шт.
  • Провода-переходники папа-папа — 104×4.
  • Клавиатура — 14 Ом.
  • Динамики — 1A.
  • ПК или ноутбук.

Рабочий код

arduino-keypad.rar
#include#include «pitches.h» #define GND 12 const byte ROWS = 4; //four rows const byte COLS = 4; //four columns const int SPEAKER=11;//define the symbols on the buttons of the keypads char hexaKeys = { {‘0′,’1′,’2′,’3’}, {‘4′,’5′,’6′,’7’}, {‘8′,’9′,’A’,’B’}, {‘C’,’D’,’E’,’F’} }; byte rowPins = {3, 2, 8, 0}; //connect to the row pinouts of the keypad byte colPins = {7, 6, 5, 4}; //connect to the column pinouts of the keypad//initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); pinMode(GND,OUTPUT); digitalWrite(GND,LOW); } void loop(){ char customKey = customKeypad.getKey(); if (customKey==’0′){ Serial.println(customKey); tone(SPEAKER,NOTE_C4,350); } if (customKey==’1′){ Serial.println(customKey); tone(SPEAKER,NOTE_D4,350); } if (customKey==’2′){ Serial.println(customKey); tone(SPEAKER,NOTE_E4,350); } if (customKey==’3′){ Serial.println(customKey); tone(SPEAKER,NOTE_F4,350); } if (customKey==’4′){ Serial.println(customKey); tone(SPEAKER,NOTE_G4,350); } if (customKey==’5′){ Serial.println(customKey); tone(SPEAKER,NOTE_A4,350); } if (customKey==’6′){ Serial.println(customKey); tone(SPEAKER,NOTE_B4,350); } if (customKey==’7′){ Serial.println(customKey); tone(SPEAKER,NOTE_C5,350); } if (customKey==’8′){ Serial.println(customKey); tone(SPEAKER,NOTE_D5,350); } if (customKey==’9′){ Serial.println(customKey); tone(SPEAKER,NOTE_E5,350); } if (customKey==’A’){ Serial.println(customKey); tone(SPEAKER,NOTE_F5,350); } if (customKey==’B’){ Serial.println(customKey); tone(SPEAKER,NOTE_G5,350); } if (customKey==’C’){ Serial.println(customKey); tone(SPEAKER,NOTE_A5,350); } if (customKey==’D’){ Serial.println(customKey); tone(SPEAKER,NOTE_B5,350); } if (customKey==’E’){ Serial.println(customKey); tone(SPEAKER,NOTE_C6,350); } if (customKey==’F ‘){ Serial.println(customKey); tone(SPEAKER,NOTE_D6,350); }}

Files — Example — Keypad — Custom Keypad

Играем песню «С Днем Рождения»

Как играть песню «С Днем Рождения» на клавиатуре:
4 4 5 4 B 6 4 4 5 4 7 B4 4 C 8 B 6 59 9 9 B 7 B
Видео:

Цикл for

Цикл , в простонародии счётчик, в различных видах этот цикл есть и в других языках программирования, но на C++ он имеет очень гибкую настройку. При создании цикл принимает три “значения” (настройки): инициализация, условие и изменение. Цикл for обычно содержит переменную, которая изменяется на протяжении работы цикла, мы можем пользоваться её меняющимся значением в своих целях. Переменная является локальной для цикла, если она создаётся при инициализации.

  • Инициализация – здесь обычно присваивают начальное значение переменной цикла. Например:
  • Условие – здесь задаётся условие, при котором выполняется цикл. Как только условие нарушается, цикл завершает работу. Например:
  • Изменение – здесь указывается изменение переменной цикла на каждой итерации. Например:

Объединим три предыдущих пункта в пример:

for (int i = 0; i < 100; i++) {
  // тело цикла
}

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

// создадим массив на 100 ячеек
byte myArray;

for (int i = 0; i < 100; i++) {
  // заполним все ячейки значением 25
  myArray = 25;
}

Именно при помощи цикла очень часто работают с массивами. Можно, например, сложить все элементы массива для поиска среднего арифметического:

// создадим массив данных
byte myVals[] = {5, 60, 214, 36, 98, 156};

// переменная для хранения суммы
// обязательно инициализируем в 0
int sum = 0;

for (int i = 0; i < 6; i++) {
  // суммируем весь массив в sum
  sum += myVals;
}

// разделим sum на количество элементов
// и получим среднее арифметическое!
sum /= 6;

// получилось 94!

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

// есть у нас какая-то переменная
int index = 0;

for (; index < 60; index += 10) {
  // переменная index принимает значения
  // 0, 10, 20, 30, 40, 50
}

В цикле for можно сделать несколько счётчиков, несколько условий и несколько инкрементов, разделяя их при помощи оператора запятая, , смотрите пример:

// объявить i и j
// прибавлять i+1 и j+2
for (byte i = 0, j = 0; i < 10; i++, j += 2) {
  // тут i меняется от 0 до 9
  // и j меняется от 0 до 18
}

Также в цикле может вообще не быть настроек, и такой цикл можно считать вечным, замкнутым:

for (;;) {
  // выполняется вечно...
}

Использование замкнутых циклов не очень приветствуется, но иногда является очень удобным способом поймать какое-то значение, или дать программе “зависнуть” при наступлении ошибки. Но, как мы знаем, нет ничего вечного, поэтому из цикла таки можно выйти при помощи оператора .

Центр при МГТУ им. Баумана

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

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

Во время занятий вы получите базовые представления о программировании микроконтроллеров, робототехнике и электронике. Вы увидите, что представляют собой простейшие программы для микроконтроллеров и соберете рабочие схемы ЖК-дисплеев, температурных датчиков, систем светодиодов и многого другого. Лабораторные работы занимают 70% занятий – у вас будет много времени на увлекательные эксперименты и открытия.

Курс будет полезен:

  • всем, кто хочет преподавать робототехнику в школе или вузе;
  • всем, кто интересуется робототехникой и электроникой;
  • всем, кто занимается автоматизацией в работе или быту;
  • всем, кому интересна идея «интернета вещей».
Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий