Книги arduino

Теперь поинтереснее

Давайте объединим потенциометр и диод. И у нас выйдет плавное управление яркостью светодиода. Подключаем всё по следующей схеме:

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

int pot = A0; // потенциометр подключён к А0 int val; // переменная для хранения значений int LED = 3; // светодиод подключён к 3 пину void setup() { Serial.begin(9600); // настраиваем скорость обмена данных на 9600 бит в секунду pinMode(pot, INPUT); pinMode(LED, OUTPUT); } void loop() { val = analogRead(pot); // считываем данные с потенциометра Serial.println(val); // с новой строки выводим значения val = val / 4; // делим значения с потенциометра на 4 analogWrite(LED, val); // выводим значение переменной, которое получаем после деления на 4 }

Короткие объяснения по коду. Деление на 4 необходимо для следующего. Потенциометр может принимать значения от 0 до 1023. А вот аналоговый вход/выход передаёт значения только в диапазоне от 0 до 255. Поэтому деление нам в данном случае просто необходимо.

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

Операторы

  • 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()

Массивы строк

При работе с большим количеством текста (например, для вывода на LCD-экран), как правило, удобно пользоваться массивом строк. Поскольку строки сами по себе являются массивами, это, по сути, будет примером двухмерного массива.

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

 1 /*
 2 Демонстрация работы со строками при помощи PROGMEM
 3 Как записывать таблицу строк в программную память (flash-память),  а затем доставать их оттуда.
 4 
 5 Это выжимка отсюда:
 6 http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
 7 
 8 Размещение таблицы (массива) строк в программную память — не самая простая задача,
 9 но данный скетч, будем надеться, поможет разобраться, как это сделать.
10 
11 Запись строк — это 2-этапный процесс. Для начала определяем строки.
12 */
13 
14 #include <avr/pgmspace.h>
15 const char string_0[] PROGMEM = "String 0";   // "String 0" и т.д. - это содержимое строк; если необходимо меняйте его
16 const char string_1[] PROGMEM = "String 1";
17 const char string_2[] PROGMEM = "String 2";
18 const char string_3[] PROGMEM = "String 3";
19 const char string_4[] PROGMEM = "String 4";
20 const char string_5[] PROGMEM = "String 5";
21 
22 
23 // Теперь создаем таблицу с отсылками к этим строкам:
24 const char* const string_table[] PROGMEM = {string_0, string_1, string_2, string_3, string_4, string_5};
25 
26 char buffer30];    // массив был достаточно велик, чтобы вместить даже самую большую строку
27 
28 void setup()
29 {
30   Serial.begin(9600);
31   while(!Serial);
32   Serial.println("OK");
33 }
34 
35 
36 void loop()
37 {
38   /* 
39 Теперь, если мы хотим достать данные их программной памяти, нам потребуется специальная функция. 
40 Это strcpy_P — она копирует строку из программной памяти в строку, находящуюся в RAM («буфер»).
41 Убедитесь, что принимающая строка (т.е. находящаяся в RAM) достаточно велика для того, 
42 чтобы вместить данные из программной памяти.
43  */
44 
45 
46   for (int i = ; i < 6; i++)
47   {
48     strcpy_P(buffer, (char*)pgm_read_word(&(string_tablei]))); // необходимые функции и расшифровки, просто скопируйте
49     Serial.println(buffer);
50     delay( 500 );
51   }
52 }

Circuit Lab

Перейти на сайт Circuit Lab Arduino Simulator

Circuit Lab Arduino Simulator — простой схематичный и мощный инструмент моделирования. Этот симулятор был разработан после PSpice, и он был построен преимущественно для использования электриками и инженерами электроники. Его функции позволяют пользователю изучить внутреннюю работу Arduino, реализовать отладку проектов и схем проектирования.

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

Язык программирования Ардуино

Как я уже написал выше все программы создаются на базе языков программирования C/C++.

Если вы знаете C++, то Arduino откроет вам двери в фантастический мир создания роботов и различных устройств.

Приведу пример программы одного из самых простых устройств — мигание светодиода, подключенного к плате:

void setup () { pinMode (13, OUTPUT); // Назначение порта 13 в качестве выходного порта } void loop () { digitalWrite (13, HIGH); // Установка порта 13 в состояние «1», светодиод загорается delay (1000); // Задержка на 1000 миллисекунд digitalWrite (13, LOW); // Установка порта 13 в состояние «0», светодиод гаснет delay (1000); // Задержка на 1000 миллисекунд }

Программы для плат Ардуино пишутся в специальной программе с которой мы познакомимся ниже, но никто не мешает вам использовать тот редактор кода который вам нравится или к которому вы привыкли.

Что такое Arduino

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

Arduino — это открытая электронная платформа, основанная на простых в использовании железе и программном обеспечении.

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

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

Программное обеспечение для Arduino

Для работы с платформой Arduino вам не обязательно будет ставить себе определённое программное обеспечение. Начать программировать можно с Arduino Web Editor, позволяющим сохранять скетчи в облачном хранилище. Инструмент постоянно обновляется онлайн, ничего скачивать и переустанавливать не приходится. Но для работы, конечно, потребуется постоянное интернет-соединение.

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

  • Windows;
  • Mac OS (Lion или более ранние версии);
  • Linux 32 bit;
  • Linux 64 bit;
  • Linux ARM.

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

Главное преимущество всей этой открытой платформы именно в её простоте.

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

Преимущества платформы Arduino

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

  • Низкая цена в сравнении с большинством подобных платформ.
  • Кроссплатформенность. С Arduino работать можно хоть на Windows, хоть на Mac OS, тогда как большинство платформ разрабатывается исключительно под Windows.
  • Простая программная обстановка. Платформа отлично подходит для новичков, а подробных уроков в сети великое множество.
  • Открытый ресурс и расширяемое программное обеспечение. Продвинутые программисты могут без проблем самостоятельно расширять под себя ПО (и даже железо).

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

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

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

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

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

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

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

String

String класс появился в версии Arduino 0019. Этот класс позволяет хранить и манипулировать текстовыми строками, по сравнению с string (массивом символов) класс String предоставляет удобные функции для работы со строками, такие как поиск вхождения в строку, объединение строк и др. Класс String занимает несколько больше места в памяти, чем массив символов string.

Tags:

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

Оператор goto

Условное «перемещение» выполнения программы к определенной метке-указателю в самой программе, при этом пропускается весь код до самой метки, а исполняется — после нее.

Tags:

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

Serial.write()

Функция передает данные как бинарный код через последовательное соединение. Данные послаются как один или серия байтов. Для того, чтобы передать данные как символы следует использовать другую функцию print().

Serial.write(val)
Serial.write(str)
Serial.write(buf, len)

Для Arduino Mega: Serial1, Serial2, Serial3

Tags:

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

Serial.println()

Передает данные через последовательное соединение как ASCII текст с следующим за ним символом переноса строки (ASCII символ 13 или ‘\r’) и символом новой строки (ASCII 10 или ‘\n’). Пераметры и типы данных для этой функции такие же, как и для Serial.print().

Serial.println(val)
Serial.println(val, format)

Tags:

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

Serial.print()

Передает данные через последовательный порт как ASCII текст. Эта функция может принимать различные типы данных. Так целые числа выводятся соответствующими им символами ASCII. Вещественные выводятся с помощью двух ASCII символов, для целой и дробной части. Байты передаются как символ с соответствующим номером. Симоволы и строки отсылаются как есть. Пример:

Tags:

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

Serial.flush()

Ожидает окончания передачи исходящих данных (до версии Arduino 1.0 функция очищала буфер последовательного соединения).

Serial.flush()

Для Arduino Mega:
Serial1.flush()
Serial2.flush()
Serial3.flush()

Tags:

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

Serial.read()

Cчитывает очередной доступный байт из буфера последовательного соединения.

Serial.read()

Для Arduino Mega:
Serial1.read()
Serial2.read()
Serial3.read()

Serial.peek()

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

Serial.peek()

Для Arduino Mega:
Serial1.peek()
Serial2.peek()
Serial3.peek()

Краткое описание

Функция  begin() является методом класса Serial. Для работы с этим классом не нужно подключать внешних библиотек, т.к.  он встроен в среду разработки ардуино. Использовать Serial.begin() целесообразно один раз, в самом начале работы скетча, в функции void setup(). В качестве аргументов нужно указать скорость обмена данными через последовательный порт. Самым распространенным значением является 9600 – именно такая скорость обмена данными в мониторе порта Arduino IDE стоит по умолчанию. После выполнения функции ардуино будет способна как отправлять данные на внешние устройства, так и получать их.

Пример использования функции:

void setup(){
 Serial.begin(9600);
}

Другие популярные методы класса Serial:

  • print()
  • println()
  • read()
  • available()
  • parseInt()

На платах с несколькими «железными» последовательными портами, например, Arduino Mega, для каждого из них создается свой объект Serial, поэтому вместе с Serial могут встречаться вызовы объектов Serial1, Serial2, Serial3.

Наборы и конструкторы Ларт

ЛАРТ Сармат Армага

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

ЛАРТ Печенег Батана

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

Выбрать и купить наборы ЛАРТ можно на официальном сайте: lartmaster.ru/

Конструктор Смарт Робо

Готовый конструктор для создания электронного робота на основе Ардуино, в комплект входит необходимое количество элементов, и руководство к сборке. Базовый элемент набора – плата от Keyestudio (100% аналог Ардуино). Полученный робот может быть запрограммирован на движение по линии, возможность объезда препятствий и управление от дистанционного пульта. Все элементы соединяются при помощи быстроразъемных соединителей и не требуют пайки. Доработать и усовершенствовать полученную конструкцию можно добавив на плату дополнительные элементы, совместимые с контроллером Ардуино.

Конструктор Смарт

Серия наборов, которые отличаются по комплектации. Основной компонент – плата Smart Uno – аналог контроллера Ардуино Уно, не уступающий ему по качественным характеристикам. В зависимости от комплектации (Смарт 10, Смарт 20 и Смарт 30) набор содержит элементы, как для начального уровня проектирования, так и для разработки более сложных проектов. При необходимости возможно подключение других электронных компонентов, совместимых с микроконтроллером.

Смарт Genuino

Серия наборов – Смарт 10 Genuino, Смарт 20 Genuino, Смарт 30 Genuino, которые отличны по количеству деталей в комплекте. Главный базовый компонент – плата Genuino Uno, кроме которой в составе имеются электронные детали, беспаечная макетная плата, провода и руководство по проектированию. Набор будет интересен как новичкам, так и профессиональным пользователям.

Выбрать и купить конструктор SmartElements можно на официальном сайте: https://smartelements.ru/

Робоплатформа Robbo (ScratchDuino)

Конструктор предназначен для обучения детей и взрослых основам робототехники и электроники. Управление роботизированным механизмом может осуществляться из различных сред программирования (Scratch, Lazarus, Кумир) или же пульта управления. Базовый компонент – картридж Ардуино. В зависимости от типа комплектации варьируется количество составных элементов.

Выбрать и купить конструктор Robbo можно на официальном сайте: https://robboclub.ru/

Аналоговые входы Arduino

Как мы уже знаем, цифровые пины могут быть как входом так и выходом и принимать/отдавать только 2 значения: HIGH и LOW. Аналоговые пины могут только принимать сигнал. И в отличии от цифровых входов аналоговые измеряют напряжение поступающего сигнала. В большинстве плат ардуино стоит 10 битный аналогово-цифровой преобразователь. Это значит что 0 считывается как 0 а 5 В считываются как значение 1023. То есть аналоговые входы измеряют, подаваемое на них напряжение, с точностью до 0,005 вольт. Благодаря этому мы можем подключать разнообразные датчики и резисторы (терморезисторы, фоторезисторы) и считывать аналоговый сигнал с них.

Для этих целей в Ардуино есть функция analogRead(). Для примера подключим фоторезистор к ардуино и напишем простейший скетч, в котором мы будем считывать показания и отправлять их в монитор порта. Вот так выглядит наше устройство:

Подключение фоторезистора к Ардуино

В схеме присутствует стягивающий резистор на 10 КОм. Он нужен для того что бы избежать наводок и помех. Теперь посмотрим на скетч:

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

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

Платы и модули для функционала

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

К популярным платам относятся следующие виды:

  1. Arduino Uno. Наиболее распространенная плата. Есть большой выбор уроков. Плата допускает замену контроллера. Оснащена 14 цифровыми вводами-выводами (6 ШИМ), 6 аналоговыми входами, флеш-памятью 32 Кб (ATmega328), из которых 0,5 Кб использует загрузчик.
  2. Arduino Mega 2560. Создана на базе микроконтроллера ATmega2560. Флеш-память — 256 Кб, из которых 8 Кб использует загрузчик. Имеет 54 цифровых вводов-выводов (14 ШИМ), 16 аналоговых входов, 8 Кб оперативной памяти. Среди всех плат «Ардуино» у этой самый большой размер.
  3. Arduino Due. Оснащена 54 цифровыми вводами-выводами (12 ШИМ), 12 аналоговыми входами (2 выходами). Создана на базе микроконтроллера AT91SAM3X8E с рабочим напряжением 3,3 В и флеш-памятью 512 Кб.
  4. Arduino Pro Mini 3.3V. Самая миниатюрная плата в семействе Arduino. Напряжение — 3,3 В. Требует использования внешнего программатора. Память данных составляет 2 Кб. Создана на базе микроконтроллера ATmega328P. Количество цифровых выводов — 14 линий (6 из которых — ШИМ), аналоговых — 6.
  5. Arduino Pro Mini 5V. Аналог предыдущей модели с напряжением 5 В.
  6. Arduino Nano V3.0. Создана на базе ATmega328. Сдержит 32 Кб памяти, из которых 2 Кб использует загрузчик. Имеет 14 цифровых вводов-выводов (6 ШИМ), 6 аналоговых входов, встроенный порт USB. Напряжение — 5 В.
  7. Arduino Micro. Разновидность платы c возможностью имитировать различные USB-устройства при подключении к ПК. Оснащена 20 цифровыми вводами-выводами (7 ШИМ), 12 аналоговыми входами.

Кроме того, существуют дополнительные модули и датчики с нужными ответвлениями:

  1. Датчики. Системы, считывающие, отправляющие и обрабатывающие информацию. Расширяют аппаратные функции проекта.
  2. Модули. Дополнения, которые позволяют расширить вычислительные мощности проекта. К ним относят карты памяти, вспомогательные процессы.

Датчики можно разделить на категории:

  1. Устройства получения информации. Датчики и сканеры, позволяющие получить сведения об окружающей среде: давлении, температуре, влажности, расстоянии до объектов. Есть возможность вводить параметры, зависящие от этих показаний. С помощью датчика расстояния можно создавать роботы-пылесосы, которые передвигаются по комнате, избегая препятствий.
  2. Устройства обработки информации. Реализуются отдельно или совместно с предыдущими датчиками. Используются для совершения промежуточных операций.
  3. Устройства вывода информации. Это ЖК-экраны, светодиодные индикаторы, сенсорные экраны, динамики и т. д.

Среди наиболее популярных модулей «Ардуино» можно выделить:

  1. Ультразвуковой дальномер HC-SR04. Датчик, позволяющий с помощью ультразвука измерить расстояние от 2 см до 4 м.
  2. Инфракрасный дальномер Sharp. Измеряет расстояние от 20 см до 1,5 м посредством инфракрасного излучения.
  3. Модуль температуры и влажности DHT11. Измеряет температуру в диапазоне от 0 до +50°C и влажность от 20 до 90%. Используется для теплиц или в качестве комнатного термометра. Часто приобретается для умного дома.
  4. Датчик влажности почвы FC-28. Измеряет влажность почвы или другой среды. Нужен для автоматизированного полива растений.
  5. Bluetooth HC-06. Помогает организовать беспроводную связь с другими устройствами.

Цикл FOR в Ардуино

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

Синтаксис цикла FOR

Здесь конструкция будет немного сложнее:for(<начальное значение счетчика>;<условие продолжения выполнения цикла>;<изменение значения счетчика на каждом шаге>){<список_команд>}

Самый простой пример:

for(int i=5;i<10;i++){  // Конструкция «3 в одном»
 pinMode(i, OUTPUT);
}

Мы сразу создали переменную, инициализировали ее, указали, что в конце каждого цикла значение счетчика нужно увеличивать на единицу. И все – теперь можно использовать переменную внутри цикла.

Шаг переменной может быть иным. Вот примеры:

  • for(int i=0; i<10; i=i+2) // Шаг 2
  • for(int i=0; i<10; i+=2) // Аналогичен предыдущему
  • for(int i=10; i>0; i–) // Идем обратно – от 10 до 1

Цикл do while

В некоторых случаях нам нужно организовать цикл таким образом, чтобы инструкции блока выполнялись хотя бы один раз, а затем уже осуществлялась проверка. Для таких алгоритмов можно использовать конструкцию do while. Пример:

do {
  Serial.println("Working");
} while (checkSomething());

Никаких сложностей этот вариант цикла не представляет – мы просто перенесли блок с условиями вниз, поэтому все содержимое внутри фигурных скобок после оператора do выполнится до первой проверки.

Справочник радиолюбителя конструктора

Как проверить конденсатор мультиметром на работоспособность

СОДЕРЖАНИЕ ► Конденсаторы и способы их проверки тестером Как проверить ёмкость конденсатора тестером Как проверить конденсатор на исправность Проверка конденсатора

Язык программирования Ардуино C++

СОДЕРЖАНИЕ ► Arduino команды языка программирования Операторы в языке программирования Ардуино Управляющие операторы в языке Ардуино Синтаксис в языке программирования

Ошибки компиляции Arduino IDE

СОДЕРЖАНИЕ ► Ошибки компиляции для Arduino Uno, Nano, Mega Ошибка: programmer is not responding Ошибка: a function-definition is not allowed

Библиотеки для Ардуино Уно, Нано скачать

СОДЕРЖАНИЕ ► Скачать стандартные библиотеки Arduino на русском Скачать популярные библиотеки Arduino на русском Где правильно хранить библиотеки Arduino IDE

СОДЕРЖАНИЕ ► Учебники по Ардуино в формате pdf Книги по Ардуино для начинающих 25 крутых проектов с Ардуино С чего

Arduino IDE скачать на русском

СОДЕРЖАНИЕ ► Скачать Arduino IDE бесплатно Установка Arduino IDE в Windows Настройка Arduino IDE Linux Онлайн сервис Arduino Web IDE

Типы данных Ардуино

СОДЕРЖАНИЕ ► Таблица. Типы переменных Arduino Константы, директива define в скетче Преобразование переменных Arduino Типы данных (переменная) в Ардуино —

СОДЕРЖАНИЕ ► Описание пинов платы Ардуино Цифровые и ШИМ пины Ардуино Уно Цифровые и ШИМ пины Ардуино Нано Цифровые и

Как создать библиотеку в Arduino IDE

СОДЕРЖАНИЕ ► Создание новой библиотеки в Arduino IDE Как написать библиотеку для Arduino IDE Создание заголовочного файла .h Создание файла

Макетная плата как пользоваться

СОДЕРЖАНИЕ ► Для чего нужна макетная плата (breadboard) Конструкция и устройство макетной платы Как пользоваться макетной платой Ардуино Беспаечная макетная

Ардуино: установка библиотек в Arduino IDE

СОДЕРЖАНИЕ ► Что такое библиотеки в Arduino IDE Установка библиотеки в Arduino IDE Установка библиотеки через Arduino IDE Установка библиотеки

Библиотека Adafruit NeoPixel Ардуино

СОДЕРЖАНИЕ ► Библиотека Adafruit NeoPixel для Ардуино Ошибка ‘Adafruit_NeoPixel h no such file or directory’ Библиотека Adafruit NeoPixel описание команд

Библиотека FastLED Ардуино

СОДЕРЖАНИЕ ► FastLED описание библиотеки на русском Ошибка скетча ‘fastled h no such file or directory’ Описание команд библиотеки FastLED.h

Делитель напряжения на резисторах

СОДЕРЖАНИЕ ► Работа делителя напряжения на резисторах Онлайн расчет делителя напряжения на резисторах Делитель напряжения на резисторах — это схема,

Цветовая маркировка радиоэлементов

СОДЕРЖАНИЕ ► Таблица. Цветовая маркировка резисторов Таблица. Цветовая маркировка конденсаторов Раньше маркировка наносилась на корпус резисторов, и сопротивление радиоэлемента просто

Обозначение радиоэлементов с фото

СОДЕРЖАНИЕ ► Схемное обозначение радиоэлементов с названиями Обозначение радиоэлементов на электрических схемах Для понимания принципиальных электрических схем необходимо ознакомиться с

Основной закон электричества Ома

СОДЕРЖАНИЕ ► Основные понятия: электричество, ток, напряжение Главный закон электричества — Закон Ома Параллельное и последовательное соединение Электричество — совокупность

Описание analogRead

Принцип работы

Функция используется для считывания сигналов с аналоговых пинов платы arduino. На выходе мы получаем число, пропорциональное реальному значению входного напряжения (но не само напряжение). По своей сути, с помощью analogRead мы создаем вольтметр и можем использовать его показания для анализа информации с датчиков и выработки каких-либо действий.

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

Почему функция возвращает значение от 0 до 1023? Все очень просто: аналогово-цифровой преобразователь, преобразующий значение напряжения в его цифровое значение, в ардуино имеет 10 разрядов, а 2 в 10 степени равно 1024. Таким образом, диапазон значений от 0 до 1023 дает нам 1024 варианта уровня сигнала. Мы просто сравниваем полученное число с границами диапазона и принимаем решение о том, что делать.

Преобразование значения с помощью функции map()

В арудино есть специальная функция, упрощающая преобразование диапазонов значений. Вы передаете ей значение и два диапазона (исходный и требуемый), а функция возвращает новое значение, которое будет также относиться к границам требуемого диапазона как и к границам исходного. Например, значение 5 в диапазоне от 0 до 10 преобразуется в значение 10 в диапазоне от 0 до 20. Значение 500 из диапазона от 0 до 1000 преобразуется в значение 5 из диапазона от 0 до 10.

Пример использования функции map совместно с функцией analogRead ():

int val = map(analogRead(A0), 0, 1023, 1, 10); //Вернет значение аналогового порта в диапазоне от 0 до 10. При этом 0 будет соответствовать 0, а 10 – 1023.

Пример использования analogRead с платой Arduino Uno

Рассмотрим простой пример работы с функцией analogRead. Мы присоединяем напрямую к ардуино потенциометр, подключив его к аналоговому порту A0. В скетче мы считываем значение и выводит его в монитор порта. Загрузите скетч в плату и откройте окно монитора последовательного порта. Вы увидите длинную вереницу чисел, выводящихся с помощью функции Serial.println().

void setup() {
Serial.begin(9600); // Инициализируем общение c компьютером на скорости 9600
}

void loop() {
// Считываем значение с аналогового порта
int sensorValue = analogRead(A0);
// Печатаем значение в мониторе порта
Serial.println(sensorValue);
// Небольшая задержка, чтобы бать ардуино слегка отдышаться
delay(1);
}

Ужасная документация

Документация по функциям в Arduino ничего не сообщает о том, какие в них используются периферийные модули (не говоря уж о более глубоком уровне), скрывая это от обычных пользователей. Раньше я использовал openFrameworks. По крайней мере, с их средой разработки можно в коде посмотреть, как реализуются те или иные функции. С Arduino вы работаете вслепую. Можно ли обращаться к таймеру из функции servo()? Будет ли отправка строки в последовательный порт блокировать выполнение программы? Будет ли функция analogWrite() влиять на другие функции времени? В руководстве по Arduino вы об этом не прочитаете.

В справочнике по Arduino также описывается её «язык программирования». В базовой структуре используются некоторые функции Си и Си++, описанные, опять же, непонятно. «Arduino» – не тот язык, который вы не постеснялись бы указать в своем резюме. Чтобы считаться программистом, надо уметь программировать на Си! Сходства и различия этих функций неясны, что приводит к путанице при переходе на другие микроконтроллеры или в среды разработки ANSI-C. Где используются классы? Где используются структуры? Я понимаю, что Arduino не хочет отпугивать новых пользователей, но как же они станут «продвинутыми» пользователями?

Краткие выводы

Функция digitalRead одна из важнейших и часто используемых в ардуино. С ее помощью мы «чувствуем» окружающий мир. Правда, в отличие от analogRead,  картина всегда получается черно-белой: функция возвращает только два варианта значений: HIGH или LOW. Во многих случаях этого вполне хватает. Например, если нам нужно просто получить сигнал о возникновении какого-либо события, такого как срабатывание датчика движения, звука, вибрации.

Использовать digitalRead () очень просто – нужно просто передать ей номер пина, с которого будет считан сигнал. Функция возвратит нам число, равное HIGH или LOW, которое мы затем сможем сверить в блоке условия и выполнить какие-то действия. Самое главное, собрать схему так, чтобы на входе не получать случайные значения. В этой статье мы привели несколько примеров с советами.