Arduino для начинающих – стартовый набор или как начать ардуинить? Много фото и видео!

Добавлено 12 февраля 2016 в 18:00

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

Arduino – это одноплатный контроллер с открытыми исходными кодами, который можно использовать в множестве различных приложений. Это возможно самый простой и самый дешевый вариант из микроконтроллеров для любителей, студентов и профессионалов для разработки проектов на основе микроконтроллеров. Платы Arduino используют либо микроконтроллер Atmel AVR, либо микроконтроллер Atmel ARM, и в некоторых версия имеет интерфейс USB. Они также имеют шесть или более выводов аналоговых входов и четырнадцать или более выводов цифровых входов/выходов (I/O), которые используются для подключения к микроконтроллеру датчиков, приводов и других периферийных схем. Цена на платы Arduino в зависимости от набора функций составляет от шести до сорока долларов.

image

Типы плат Arduino

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

  • Arduino Uno
  • Arduino Leonardo
  • Arduino Due
  • Arduino Yún
  • Arduino Tre
  • Arduino Micro
  • Arduino Robot
  • Arduino Esplora
  • Arduino Mega
  • Arduino Mini
  • LilyPad Arduino
  • Arduino Nano
  • Arduino Fio
  • Arduino Pro
  • Arduino Ethernet

На разнообразие плат Arduino и их технические описания можно посмотреть в подразделе «Arduino» раздела «Купить» данного сайта.

Программное обеспечение (IDE)

Программное обеспечение, используемое для программирования Arduino, представляет собой интегрированную среду разработки Arduino IDE. IDE представляет собой Java приложение, которое работает на множестве различных платформ, включая системы PC, Mac и Linux. Она разработана для начинающих, которые не знакомы с программированием. Она включает в себя редактор, компилятор и загрузчик. Также в IDE включены библиотеки кода для использования периферии, например, последовательных портов и различных типов дисплеев. Программы для Arduino называются «скетчами», и они написаны на языке, очень похожем на C или C++.

USB кабель

Большинство плат Arduino подключаются к компьютеру с помощью USB кабеля. Это соединение позволяет загружать скетчи на вашу плату Arduino, а также обеспечивает плату питанием.

image
USB кабель для Arduino

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

Программирование Arduino легко: сначала вы используете редактор кода IDE для написания программы, а затем компилируете и загружаете её одним кликом.

Программа для Arduino включает в себя две основные функции:

  • setup()
  • loop()

Вы можете использовать функцию setup() для инициализации настроек платы. Эта функция выполняется только один раз, при включении платы.

Функция loop() выполняется после завершения функции setup(), и в отличие от функции setup() она работает постоянно.

Функции программ

Ниже приведен список наиболее часто используемых функции при программировании Arduino:

  • pinMode – устанавливает вывод в режим входа или выхода;
  • analogRead – считывает аналоговое напряжение на аналоговом входном выводе;
  • analogWrite – записывает аналоговое напряжение в аналоговый выходной вывод;
  • digitalRead – считывает значение цифрового входного вывода;
  • digitalWrite – задает значение цифрового выходного вывода в высокий или низкий уровень;
  • Serial.print – пишет данные в последовательный порт в виде удобочитаемого текста ASCII.

Библиотеки Arduino

Библиотеки Arduino представляют собой коллекции функций, которые позволят вам управлять устройствами. Вот некоторые из наиболее широко используемых библиотек:

  • EEPROM – чтение и запись в «постоянно» хранилище;
  • Ethernet – для подключения к интернету, используя плату Arduino Ethernet Shield;
  • Firmata – для связи с приложениями на компьютере, используя стандартный последовательный протокол;
  • GSM – для подключения к сети GSM/GRPS с помощью платы GSM;
  • LiquidCrystal – для управления жидкокристаллическими дисплеями (LCD);
  • SD – для чтения и записи SD карт;
  • Servo – для управления сервоприводами;
  • SPI – для связи с устройствами, используя шину SPI;
  • SoftwareSerial – для последовательной связи через любые цифровые выводы;
  • Stepper – для управления шаговыми двигателями;
  • TFT – для отрисовки текста, изображений и фигур Arduino TFT экранах;
  • WiFi – для подключения к интернету, используя плату Arduino WiFi shield;
  • Wire – двухпроводный интерфейс (TWI/I2C) для передачи и приема данных через сеть устройств или датчиков.

Этапы настройки Arduino

  1. Во-первых, установите IDE. Вы можете скачать IDE с сайта Arduino.
  2. Установите программное обеспечение на свой компьютер.
  3. Теперь запустите .exe файл Arduino IDE. IDE выглядит так:
  4. Напишите в редакторе кода свою программу и загрузите её в Arduino. Чтобы сделать это, необходимо подключить Arduino к компьютеру, используя USB кабель.
  5. В IDE выберите тип Arduino, который вы используете, через меню Tools (Инструменты) → Boards (Платы).
  6. Теперь проверьте свой код, нажав на значок «галки» вверху окна IDE, затем нажмите на соседний значок «стрелка вправо», чтобы скомпилировать и загрузить код в Arduino.

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

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

Платы расширения Arduino (Arduino Shields) – это платы, которые подключаются к Arduino, чтобы предоставить вам возможность подключать к Arduino периферийные устройства, датчики и приводы. Ниже приведен список некоторых популярных плат расширения:

  • GSM Shield;
  • Ethernet Shield;
  • WiFi Shield;
  • Motor Shield;
  • Proto Shield;
  • Joystick Shield;
  • Bluetooth Shield;
  • Xbee shield.

Комплектующие и принадлежности

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

  • Макетная плата
  • USB кабель
  • Батарея 9В
  • светодиоды
  • кнопки
  • конденсаторы
  • регуляторы напряжения
  • датчики (IR, температуры и т.д.)
  • Перемычки
  • Резисторы
  • Потенциометр
  • Двигатели (двигатели постоянного тока, сервоприводы, BLDC)
  • LCD
  • Матричная клавиатура 4×4
  • Платы расширения Arduino

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

Теги

ArduinoОтладочная плата

На 5 уроке про Умную теплицу на Ардуино, мы создадим свое собственное мобильное приложение для устройств на Андроиде. Для этого мы используем редактор  визуального программирования Android App Invertor 2

Напомним: в предыдущих статьях по Умной теплице (проект «Домашний цветок») «Умная теплица на Arduino- делаем первые шаги» и «Индикация показаний при проектировании Умной теплицы на Ардуино»  и Организация полива, обдува и освещения в Умной теплице на Ардуиномы реализовали функции мониторинга и вывода данных на дисплей и светодиоды, а также функции управления — полив цветка, обдув, освещение нажатием соответствующих кнопок.

В следующей статье про  перенос «функции мониторинга и управления теплицей на телефон или планшет с ОС Android» мы установили связь нашей системы с телефоном (или планшетом) с операционной системой Android по Bluetooth, что позволило нам отправлять данные мониторига данных нашей теплицы на телефон и получать команды управления с телефона. Но для связи теплицы с телефоном мы использовали на телефоне приложение Bluetooth Terminal, что совсем неудобно. Нам нужно полноценное приложение. В этом уроке мы и займемся его созданием. Глубоко внимать в вопросы программирования для операционной системы Android не входит в наши планы, поэтому нам нужна простая и понятная система создания кода для Android, наподобие системы Sctratch для Arduino, которую мы рассматривали на этом уроке – Программируем с Arduino… К счастью подобный визуальный редактор есть. Это онлайн визуальный редактор для визуального программирования для Android App Invertor 2. Страница проекта – http://ai2.appinventor.mit.edu.

Рисунок 1. Страница онлайн-редактора App Invertor 2.

После авторизации (можно использовать профиль google) или регистрации попадаем в свой профиль программы, где можем создать новый проект.

Рисунок 2. Ваш профиль программы. Создание проекта.

Сначала в панети Design создаем интерфейс нашего приложения, перетаскивая на экран необходимые компоненнты. Кроме визуальных компонентов необходимо добавить 3 невизуальных: Bluetooth client из раздела Connectivity; Clock из раздела Sensors (для получения данных из Bluetooth c периодичностью, установленной в Clock); Notifer из UserInterface.

Рисунок 3. Создание интерфейса в Design.

Теперь создаем код. Переходим в раздел Block. Сначала создаем код для инициализации Bluetooth соединения и создания Bluetooth клиента (рисунок 4).

Рисунок 4. Код для инициализации Bluetooth соединения и создания Bluetooth клиента.

Затем код для отправки сообщений при изменениии состояний chexckbox-ов для насоса, вентилятора и лампы (рисунок 5).

Рисунок 5. Код для отправки сообщений при изменениии состояний chexckbox-ов.

И код получения по таймеру сообщений, поступающих по Bluetooth из Arduino (рисунок 6).

Рисунок 6. Код получения по таймеру сообщений, поступающих из Arduino

Создаем app приложение (рисунок 7) и загружаем его на телефон.

Рисунок 7. Генерация app приложения

Листинг 1.

 // подключение библиотеки SoftwareSerial   #include   // подключение библиотеки DHT   #include "DHT.h"   // тип датчика DHT   #define DHTTYPE DHT11    // контакты подключения bluetooth-модуля HC-05   int pinBlRx=17;   int pinBlTx=18;   // контакт подключения входа данных модуля DHT11   int pinDHT11=9;   // контакт подключения аналогового выхода модуля влажности почвы   int pinSoilMoisture=A0;   // контакт подключения аналогового выхода датчика температуры TMP36   int pinTMP36=A1;   // контакт подключения аналогового выхода фоторезистора   int pinPhotoresistor=A2;    // пины светодиодов индикации   #define LED_TEMP 5   #define LED_MOISTURE 6   #define LED_LIGHT 7    // значения для условий   #define TEMP_DETECT 30   #define MOISTURE_DETECT 500   #define LIGHT_DETECT 250    // реле   int pinRelays[]={2,3,4};   // статусы полива, освещения, вентилятора   boolean statusRelays[]={false,false,false};    // создание экземпляра объекта SoftwareSerial   SoftwareSerial HC05Serial(pinBlRx,pinBlTx);   // создание экземпляра объекта DHT   DHT dht(pinDHT11, DHTTYPE);    unsigned long millisupdate=0;   // для получения данных из SoftwareSerial   String inputString0 = "";   // признак конца полученной строки   boolean stringComplete0 = false;    void setup()   {   // запуск последовательного порта   Serial.begin(9600);   //   pinMode(LED_TEMP,OUTPUT);digitalWrite(LED_TEMP,LOW);   pinMode(LED_MOISTURE,OUTPUT);digitalWrite(LED_MOISTURE,LOW);   pinMode(LED_LIGHT,OUTPUT);digitalWrite(LED_LIGHT,LOW);   // инициализация dht   dht.begin();   // запуск SoftwareSerial   HC05Serial.begin(9600);   // резервирование 50 bytes для the inputString:   inputString0.reserve(50);    }    void loop()   {   // ожидание конца строки для анализа поступившего запроса:   serialEvent0();   if (stringComplete0)   {   Serial.println(inputString0);   parse_string0(inputString0);   // очистить :   inputString0 = "";   stringComplete0 = false;   }   // каждые 5 сек - получение показаний датчиков   // и вывод на дисплей   if(millis()-millisupdate>5000)   {   millisupdate=millis();   // получение данных с DHT11   float h = dht.readHumidity();   if (isnan(h))   {   Serial.println("Failed to read from DHT");   HC05Serial.println("H1=101");   delay(10);   }   else   {   Serial.print("HumidityDHT11= "); Serial.print(h);Serial.println(" %");   HC05Serial.print("aH=");HC05Serial.print(h);HC05Serial.print("*");   delay(10);   }   // получение значения с аналогового вывода модуля влажности почвы   int val0=analogRead(pinSoilMoisture);   Serial.print("SoilMoisture= "); Serial.println(val0);   HC05Serial.print("SM=");HC05Serial.print(h);HC05Serial.print("*");   delay(10);   // получение значения с аналогового вывода датчика температуры TMP36   int val1=analogRead(pinTMP36);   // перевод в мВ   int mV= val1*1000/1024;   // перевод в градусы цельсия   int t=(mV-500)/10+75;//t=23;   Serial.print("TempTMP36= "); Serial.print(t);Serial.println(" C");   HC05Serial.print("aT=");HC05Serial.print(t);HC05Serial.print("*");   delay(10);   // получение значения с аналогового вывода фоторезистора   int val2=analogRead(pinPhotoresistor);   Serial.print("Light= "); Serial.println(val2);   HC05Serial.print("Ph=");HC05Serial.print(val2);HC05Serial.print("*");   delay(10);   // обновить   // вывод состояние полива, лампы, вентилятора   Serial.print("pump - "); Serial.println(statusRelays[2]);   Serial.print("fun - "); Serial.println(statusRelays[1]);   Serial.print("lamp - "); Serial.println(statusRelays[0]);   HC05Serial.print("PM=");HC05Serial.print(statusRelays[2]);HC05Serial.print("*");   delay(10);   HC05Serial.print("FN=");HC05Serial.print(statusRelays[1]);HC05Serial.print("*");   delay(10);   HC05Serial.print("LM=");HC05Serial.print(statusRelays[0]);   delay(10);   //// проверка условий   // увлажненность почвы   if(val0 > MOISTURE_DETECT)   digitalWrite(LED_MOISTURE,HIGH);   else   digitalWrite(LED_MOISTURE,LOW);   // температура воздуха   if(t > TEMP_DETECT)   digitalWrite(LED_TEMP,HIGH);   else   digitalWrite(LED_TEMP,LOW);   // освещенность   if(val2 < LIGHT_DETECT)   digitalWrite(LED_LIGHT,HIGH);   else   digitalWrite(LED_LIGHT,LOW);   // пауза 5 секунд   Serial.println();   }   }   // SerialEvent для HC05   void serialEvent0() {   while (HC05Serial.available()) {   // получить очередной байт:   char inChar = (char)HC05Serial.read();   // добавить в строку   inputString0 += inChar;   // /n - конец передачи   if (inChar == '#') {   stringComplete0 = true;   }   }   }   // парсинг строки из android   void parse_string0(String inputString)   {   // длина строки   int length1=inputString.length();   if(length1!=5)   {Serial.println("ERROR1"); return;}   if(inputString.charAt(2)!='=')   {Serial.println("ERROR2"); return;}   if(inputString.charAt(4)!='#')   {Serial.println("ERROR3"); return;}   String param1=inputString.substring(0,2);   int param2=inputString.substring(3,4).toInt();   Serial.print("param1=");Serial.println(param1);   Serial.print("param2=");Serial.println(param2);   if(param1=="PM")   doCommand(2,min(param2,1));   else if(param1=="FN")   doCommand(1,min(param2,1));   else if(param1=="LM")   doCommand(0,min(param2,1));   }    // исполнение команды от смартфона   void doCommand(int relay, int status1)   {   // изменить статус   statusRelays[relay]=status1;   // изменить состояние реле   digitalWrite(pinRelays[relay],statusRelays[relay]);   }

Загружаем скетч на Arduino, на телефоне запускаем приложение.

Дата: 6 Марта 2015. Автор: Алексей

Итак, на чем мы остановились. В прошлой статье мы с вами прошлись по азам установки и наладки программного обеспечения для работы с платами Arduino. Так же их собственноручно установили и настроили. Теперь давайте попробуем написать первую программу. Для этого запустите программу arduino. Для того чтобы постоянно не лазить в папку с программой, я рекомендую вынести ярлык на рабочий стол. И так, программа запущена. Далее в окне редактора сотрите все что там написано. Должно получится так: Теперь давайте немного поговорим о теории. Сколько я языков программирования не видел, но во всех языках обязательно присутствует такая штука как переменная. Что такое переменная? Любой компьютер, а микроконтроллер это практически компьютер, имеет в своем распоряжении оперативную память. Данная память предназначена для запоминания текущих данных. Оперативная она называется из-за того что она зависит от наличия питания компьютера. То есть данные в ней могут хрониться лишь пока есть питание. Во время работы компьютера, процессор оперирует данными, постоянно их кладет в память, а потом забирает и снова кладет и так далее. Но вот вопрос, а откуда процессор узнает, где именно лежат те данные которые ему нужно обработать? А узнает он по адресу ячейки памяти. То есть наткнувшись на команду сложения двух чисел, он спрашивает: “А где мол лежат данные?” А ему говорят: “В ячейке 0x56FE и 0xD34A”. Он: “Понял”. Вроде все ясно. Программист написал в программе что данные лежат по этим адресам, если код написан на ассемблере, и все встает на свои места. Но нам-то такое счастье-то не надо. Нам не пристало ковырятся в дедовском коде. Вот для нас и придумали такое понятие как переменная. То есть например переменная с именем val говорит нам о том что мы выделяли ячейку памяти по какому-то адресу в памяти под именем val. Мудрено, да. А сделано это еще не только для нашего удобства. Если код писать на ассемблере, то тут с адресами собственно проблем возникнуть не должно. Это связано с тем, что ассемблер это практически машинный код, но интерпретирован человегопонятными мнемониками. И когда компилятор создает файл для загрузки, он просто берет адрес ячейки и кладет в него данные. А когда код пишется на языках высокго уровня, то тут возникают некоторые проблемы. Представим что мы написали код и в нем написали переменную. Программа компилятор при подготовке файла для загрузки возьмет имя нашей переменной и даст ей наиболее оптимальный адрес в памяти. И нам не нужно теперь забивать голову адресами. Мы просто знаем что есть некая переменная с конкретным именем, а вот где она болтается в памяти нам уже все равно. Но имя переменной это только пол дела. Далее нам нужно объяснить программе компилятору, что за данные мы храним в этой переменной и какой длинны. Это нужно для того, чтобы компилятор выделил в памяти места ровно столько сколько нам нужно и не больше и не меньше. За это отвечает тип переменной. Я приведу несколько типов, которые считаются самые необходимые и часто использующие. Если вам захочется узнать все типы, то можно зайти на сайт учебника arduino и там изучить все варианты.(Правда на английском). И так, типы переменных.

boolean Переменная с таким типом является логической. Она может принимать всего два значения, либо true(истина), либо false(лож)
char Переменная с таким типом является знаковой и длинной в один байт. Может принимать значение от -127 до +127, либо принимать значение символа из таблицы ASCII. Например символ '1' примет значение 48. Более подробное описание символов мы затронем когда будем работать со строками.
unsigned char То же самое что и char за одним исключением. Слово unsigned говорит о том, что значение данной переменной может принимать только в положительном диапазоне. То есть от до 255 и никаких отрицательных.
int Переменные с таким типом являются знаковыми, но в отличии от char имеют длину в два байта. Значения, которые можно хранить в данной переменной, лежат в диапазоне от -32768 до +32767.
unsigned int Этот тип переменной указывает тоже на двубайтовое значение, но как и unsigned char имеет строго положительное значение и лежит в диапазоне от до 65535.
byte Данный тип переменной похож на unsigned char и принимает значения в пределах от до 255.
float Данный тип переменной дает возможность храить значения с плавающей точкой. Под эту переменную будет выделено 4 байта. Диапазон значений может лежать в пределах от -3.4028235E+38 до 3.4028235E+38.

Вот мы и разобрались с типами переменных. Далее давайте взглянем на имена самих переменных. Имена можно задавать разнообразными способами. Например R84Hhj7I тоже может быть именем переменной. Но заметьте, такое название просто ужас. Поэтому рекомендую задавать человекопонятные имена, например LEDdiod. Сразу понятно, что в данной переменной лежит значения состояния светодиода, либо ноль, либо единица. Но есть одно ограничение, нельзя начинать имя переменной с цифры. 5LEDdiod будет являться ошибкой. Это правило тянется из языка С, я не пробовал проверять на arduino, но надеюсь что оно и здесь работает. Так же необходимо запомнить что имя LED и led это не одно и тоже. Регистр тоже учитывается. Так, с именами разобрались. Давайте, опираясь на полученные знания, попробуем написать первую программу. Что она будет делать? А ничего, просто микать светодиодом установленным на плате. На чистом поле текстового редактора пишем следующий код. Что мы собственно здесь написали. А написали мы следующее, сначала мы объявили функцию setup(), а за ней функцию loop(). Объяснять что такое функция, пока очень рановато, поэтому просто копируем написанное, но на одном моменте я все же подробно остановлюсь. Дело в том что язык программирования для arduino это не С. И даже я больше скажу, что его даже нельзя назвать языком. Больше подходит конфигуратор-разработчик. Сейчас сами все поймете. Дело в том, что для программирования микроконтроллера необходима знание его архитектуры и умение обращаться с регистрами разной периферии, а в arduino это не нужно. Для работы той или иной периферии вам нужно лишь вызвать ту или иную функцию и передать по надобности какие-либо параметры, а уже в зависимости от периферии функция может вернуть какое-то значение. То есть если бы был графический интерфейс, то все программирование свелось бы к выбору разных галочек и подпунктов меню. Отсюда на первых парах вам нужно просто запомнить, что любая программа для arduino должна начинаться именно с объявления этих двух функций. А теперь давайте разберемся для чего эти функции нужны. Первая с названием setup() нужна для начальной конфигурации программы. Данная функция вызывается один раз при первом старте программы и на протяжении всего периода работы основной программы больше не вызывается. Зачем так сделано? Дело в том что чаще всего при первом старте программы, необходимо проинициализировать периферию. Если это делать в основном цикле, то процессор будет выполнять не нужную работу. Поэтому нужно пока запомнить, что код написанный в теле функции setup() выполнится один раз. А вот основная программа, которая будет выполнятся на протяжении всей работы микроконтроллера, записывается в тело функции loop(). Давайте подведем итоги. Для начальной настройки и выполнении разово некого кода заполняем тело функции setup(). Для работы основной программы заполняем тело функции loop(). От слов к делу. Для того чтобы помигать светодиодом, нам необходимо посмотреть где он подключен. На плате arduino UNO что у меня, он подключен к 13 ножке выводов DIGITAL. А теперь смотрите. Сначала в функции setup() мы настроим ножку, а затем в функции loop() будем включат и выключать светодиод. Как это делать. Цифровая ножка микроконтроллера может выполнять всего два действия, либо выводить значение 1 или , либо читать значение переданное на ножку тоже 1 или . В данный момент, так как нам нужно зажигать светодиод, то вывод должен быть настроен как выход. Пишем в теле функции setup (тело любой функции обременяется фигурными скобками) следующую строку. Что собственно делает эта строчка. Задача функции pinMode() является настройка пина на вход или на выход. Для того чтобы данная функция поняла что ей делать, она принимает два аргумента. Первый аргумент отвечает за номер пина. В нашем случае это 13, а второй аргумент (все аргументы передаваемые функциям пишутся через запятую) это направление. В нашем случае это выход OUTPUT. в конце функции как можно заметить стоит точка с запятой. Данная точка с запятой говорит о том что текущая коменда закончилась. Следует запомнить как таблицу умножения, что каждая команда ОБЯЗТЕЛЬНО должна заканчиваться точкой с запятой. Вот таким образом мы настроили вывод. Теперь переходим к телу функции loop() и напишем четыре строки. Что эти строчки делают. Первая digitalWrite(13, HIGH); это функция которая выводит в пин некое значение. Для того чтобы она понимала какое значение и куда ей выводить мы снова передаем два аргумента. Первый это номер пина, а второй HIGH то есть 1. Как только эта функция отработает, на ножке 13 появится логическая единица (логическая единица всегда равна напряжению питания МК. Чаще всего это 5 вольт или 3,3 вольта). Следующая строка delay(1000); это пауза. Данной функции в качестве аргумента передается значение времени в миллисекундах. В нашем случае это 1000 мс или 1 секунда. Теперь смотрите что происходит. Сначала функция digitalWrite(13, HIGH); выводит на ножку логическую единицу. Затем функция delay(1000); останавливает работу программы на 1 секунду (она не останавливает в прямом смысле, а просто заставляет процессор таптаться на одном месте ничего не делая 1 секунду), а затем выполняется функция digitalWrite(13, LOW);. Как не трудно догадаться она выводит на ножку логический ноль. А затем снова останавливается на 1 секунду. Так как функция loop() является циклической, то после паузы программа возвращается к началу тела функции loop() и все начинается с начала. Вот и все, наша первая программа написана. Давайте ее загрузим в нашу arduino. Для этого нажмите на кнопку “Вгрузить”. Если программа не сохранена, то перед загрузкой вам будет предложено ее сохранить. С учетом того что это первая пробная программа, то ее можно не сохранять и отказаться. Если все же захочется оставить на память, то сохраняйте в любом удобном для вас месте. После сохранения или отказа, программа загрузится в arduino и вы увидите как замигает светодиод. Ниже я для наглядности прикрепил видео работы программы.

Читать предыдущий урокЧитать следущий урок

JW Player goes here

Вадим    07.03.15 22:34

А как правильно записать если у нас несколько пинов настроено на выход, пробовал через запятую pinMode(1,2,3 OUTPUT) ардуино ругается.

Алексей    07.03.15 23:52

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

Вадим    08.03.15 00:20

Покажите пример.

Алексей    08.03.15 08:16

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

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

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

Visuino

Visuino — это бесплатная графическая среда, работающая на базе совместимых с Arduino промышленных контроллеров (ПЛК) Controllino. Она дает возможность создания сложных систем автоматизации и решений IoT (Internet of Things, интернета вещей), причем сделать это можно, просто перемещая и соединяя визуальные блоки. Программная среда автоматически генерирует код для промышленных контроллеров.

Итак, что надо сделать. Выбираем компоненты (модули) с панели компонентов и перемещаем их в область проектирования. Затем их необходимо соединить и настроить свойства. Это делается с помощью инспектора объектов.

К плюсам Visuino относится большой набор компонентов для математических и логических функций, сервоприводов, дисплеев, интернета и пр.

Когда ПЛК запрограммирован, графическая среда подсказывает доступный способ подключения к контроллеру. Это может быть последовательный порт, Ethernet, Wi-Fi или GSM.

Наконец ваш проект готов: все контроллеры прописаны, все работает. Теперь, нажав на логотип Arduino, расположенный на верхней панели, вы заставите Visuino создать коды для Arduino и открыть среду его разработки (Arduino IDE), через которую уже можно скомпилировать код и загрузить его в ПЛК.

Совет. Если установленная плата не соответствует вашему Arduino, вы можете изменить ее с помощью команды «Select Board» (Выбрать панель).

Scratch

Эта графическая среда программирования была создана в 2003 году, когда группа сотрудников MIT Media Lab решила разработать язык программирования, доступный абсолютно для всех. В итоге через некоторое время публике был представлен Scratch.

Больше всего, пожалуй, он похож на Lego. По крайней мере, принцип тот же: это объектно ориентированная среда, в которой программы собираются из деталей, разноцветных и ярких. Эти детали можно перемещать, видоизменять, заставлять взаимодействовать различным образом. Основа Scratch — блоки команд, таких как сенсоры, переменные, движение, звук, операторы, внешность, перо, контроль и пр. Встроенный графический редактор дает возможность нарисовать любой объект. Не прошло и пяти лет с момента создания Scratch, как возник проект Scratch для Arduino (сокращённо — S4A), позволяющая программировать ПЛК Arduino.

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

Совет. Для новичков в Scratch существует специальный ресурс: https://scratch-ru.info.

ArduBloсk

Когда человек уже полностью освоил Scratch, но еще не дорос до Wiring, на котором программируются Arduino-совместимые платы, самое время посоветовать ему написанный на Java инструмент ArduBloсk. Особенно хорош он для тех, кто увлекается робототехникой.

В чем же разница? Дело в том, что Scratch не умеет прошивать Arduino, он лишь управляет его ПЛК через USB. Таким образом, Arduino не может работать сам по себе, ведь он зависит от компьютера.

По сути, ArduBloсk — это промежуточный этап между детской Scratch и вполне профессиональной, хоть и доступной Visuino, поскольку так же, как последняя, обладает возможностью перепрошивки Arduino-совместимых контроллеров.

Совет. Не забудьте установить на свой ПК Java-машину. Это не займет много времени.

Итак, больше графических сред — хороших и разных. Да пребудет с вами Arduino.

Фото: компании-производители, pixabay.com

Читайте также:

Поделиться ссылкой

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

1

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

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

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

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

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

2

Нужно ли уметь паять?

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

Макетная плата на 400 отверстий (имеются шины питания по бокам). Источник

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

Набор для изучения Arduino. Источник

3

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

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

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

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

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

    Оригинальная плата Arduino UNO. Источник

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

    Плата Arduino UNO от стороннего производителя. Источник

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

У платы 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

Установка ПО

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

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

В Arduino Create имеется доступ к обучающим материалам, проектам. Вы сможете общаться с профессионалами и помогать новичкам.

Среда разработки Arduino IDE

5

Особенности программирования на платформе Arduino

Термины

Программный код для Arduino принято называть скетчами (англ. sketches). У скетчей есть два основных метода: setup() и loop(). Первый метод автоматически вызывается после включения/сброса микроконтроллера. В нём происходит инициализация портов и различных модулей, систем. Метод loop() вызывается в бесконечном цикле на протяжении всей работы микроконтроллера.

Порты — неотъемлемая часть любого микроконтроллера. Через них происходит взаимодействие микроконтроллера с внешними устройствами. С программной стороны порты называются пинами. Любой пин может работать в режиме входа (для дальнейшего считывания напряжения с него) или в режиме выхода (для дальнейшей установки напряжения на нём).

Любой пин работает с двумя логическими состояниями: LOW и HIGH, что эквивалентно логическому нулю и единице соответственно. У некоторых портов есть встроенный АЦП, что позволяет считывать аналоговый сигнал со входа (например, значение переменного резистора). Также некоторые пины могут работать в режиме ШИМ (англ. PWM), что позволяет устанавливать аналоговое напряжение на выходе. Обычно функциональные возможности пина указываются на маркировке самой платы.

Основные функции

Для базовой работы с платой в библиотеке Arduino есть следующие функции:

  • pinMode(PIN, type) — указывает назначение конкретного пина PIN (значение typeINPUT — вход, OUTPUT — выход);
  • digitalWrite(PIN, state) — устанавливает логическое состояние на выходе PIN (stateLOW — 0, HIGH — 1);
  • digitalRead(PIN) — возвращает логическое состояние со входа PIN (LOW — 0, HIGH — 1);
  • analogWrite(PIN, state) — устанавливает аналоговое напряжение на выходе PIN (state в пределах от 0 до 255);
  • analogRead(PIN) — возвращает значение аналогового уровня сигнала со входа PIN (пределы зависят от разрядности встроенного АЦП. Обычно разрядность составляет 10 бит, следовательно, возвращаемое значение лежит в пределах от 0 до 1023);
  • delay(ms) — приостанавливает исполнение скетча на заданное количество миллисекунд;
  • millis() — возвращает количество миллисекунд после момента запуска микроконтроллера.

В остальном процесс программирования на Arduino такой же, как на стандартном C++.

6

Пишем первую программу

Вместо всем привычных Hello World’ов в Arduino принято запускать скетч Blink, который можно найти в ФайлПримеры01.BasicsBlink. Там же можно найти множество других учебных скетчей на разные темы.

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

Рассмотрим скетч Blink:

// Эта функция запускается при старте микроконтроллера  void setup() {    // Назначаем пин выходом. На пине LED_BUILTIN находится встроенный светодиод, размещённый на плате    pinMode(LED_BUILTIN, OUTPUT);  }    // Эта функция вызывается циклически  void loop() {    digitalWrite(LED_BUILTIN, HIGH);   // Включаем светодиод (подаём на него логическую 1 — напряжение питания микроконтроллера)    delay(1000);                       // Ждём секунду    digitalWrite(LED_BUILTIN, LOW);    // Выключаем светодиод (подаём на него логический 0 — напряжение земли)    delay(1000);                       // Ждём секунду  }  

Прошивка

После написания необходимо «залить» скетч на микроконтроллер. Как уже говорилось, платформа Arduino берёт весь процесс прошивки микроконтроллера на себя — вам лишь необходимо подключить плату к компьютеру.

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

После этого нужно подключить плату Arduino к любому USB-порту вашего компьютера и выбрать соответствующий порт во вкладке ИнструментыПорт.

Теперь можно приступать к прошивке микроконтроллера. Для этого достаточно нажать кнопку Загрузка, либо зайти на вкладку СкетчЗагрузка. После нажатия начнётся компиляция кода, и в случае отсутствия ошибок компиляции начнётся прошивка микроконтроллера. Если все этапы выполнены правильно, на плате замигает светодиод с периодом и интервалом в 1 сек.

7

Обмен данными с компьютером

У всех плат Arduino есть возможность обмена информацией с компьютером. Обмен происходит по USB-кабелю — никаких дополнительных «плюшек» не требуется. Нам нужен класс Serial, который содержит все необходимые функции. Перед работой с классом необходимо инициализировать последовательный порт, указав при этом скорость передачи данных (по умолчанию она равна 9600). Для отправки текстовых данных в классе Serial существуют небезызвестные методы print() и println(). Рассмотрим следующий скетч:

void setup() {    Serial.begin(9600); // Инициализируем последовательный порт на скорости 9600 бод  }    void loop() {    Serial.println("T for Tproger"); // Отправляем сообщение по последовательному порту и переводим на новую строку    delay(1000); // Ждём секунду  }

В Arduino IDE есть Монитор порта. Запустить его можно через ИнструментыМонитор порта. После его открытия убедитесь, что Монитор работает на той же скорости, которую вы указали при инициализации последовательного порта в скетче. Это можно сделать в нижней панели Монитора. Если всё правильно настроено, то ежесекундно в Мониторе должна появляться новая строка «T for Tproger». Обмен данными с компьютером можно использовать для отладки вашего устройства.

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

void setup() {    Serial.begin(9600); // Инициализируем последовательный порт на скорости 9600    pinMode(LED_BUILTIN, OUTPUT); // Инициализируем порт со светодиодом как выход  }    void loop() {    if (Serial.available() > 0) // Если в буфере есть байт для чтения, то...      switch (Serial.read()) { // Считываем байт с буфера        case '1': digitalWrite(LED_BUILTIN, HIGH); // Если байт равен '1' — включаем светодиод          break;        case '0': digitalWrite(LED_BUILTIN, LOW); // Если байт равен '0' — выключаем светодиод          break;        case 'T': Serial.println("proger"); // Если байт равен 'T' — отправляем по серийному порту текст "proger"      }    }  

Прошиваем микроконтроллер и возвращаемся в Монитор порта. Вводим в верхнее поле 1 и нажимаем Отправить. После этого на плате должен загореться светодиод. Выключаем светодиод, отправив с Монитора . Если же отправить символ T, в ответ мы должны получить строку «proger».

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

8

А как подключать модули?

Для работы с датчиками и модулями их изготовители создают специальные библиотеки. Они служат для простой интеграции модулей в вашу систему. Подключение библиотеки возможно с zip файла или с помощью Менеджера Библиотек.

Однако большое количество датчиков являются бинарными, т. е. считывать информацию с них можно простой функцией digitalRead().

9

Что изучить дальше?

  • Синтаксис библиотеки Arduino.
  • Для более сложных архитектур может пригодиться ООП.
  • Примеры проектов.
  • Работа на макетной плате.
  • Основные модули и датчики.

Александр Ланский

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