FAQ ПО ARDUINO

КАК РАБОТАТЬ С БИБЛИОТЕКАМИ ARDUINO

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

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

Если же устройство является клоном, который может нести в себе некоторые модификации (как в хорошем, так в плохом или (чаще всего) в нейтральном смысле), то стандартная библиотека может не подойти, или потребуется произвести дополнительные настройки. В частности, в дисплеях с интерфейсом I2Cможет меняться адрес устройства I2C, который указывается при инициализации модуля. Для определения порта устройства требуется использовать скетч I2сScanner (https://playground.arduino.cc/Main/I2cScanner).

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

Для открытия списка библиотек достаточно выбрать следующий пункт меню Arduino IDE последней версии.

Интерфейс выглядит следующим образом.

К каждой библиотеке доступны описание и ссылка на страницу разработчика. Поддерживается обновление библиотек.

ШИФРОВАНИЕ И ARDUINO

Прежде всего стоит определить, зачем вам, требуется наличие шифрования, а оно может потребоваться, когда вы используете протоколы радиосвязи, типа протоколов на 433 и 315 МГц, подключаетесь к системам, которые уже требуют шифрования, или хранятся какие-либо данные, которые не должны быть получены методом обратной разработки.

При выборе алгоритма надо помнить, что алгоритмы бывают симметричные и ассиметричные. Базовую теорию шифрования можно подчерпнуть из Википедии: (https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)

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

После этого можно найти в интернете уже готовую реализацию шифрования. В частности, для достаточно популярного алгоритма симметричного шифрования AESесть следующая библиотека: https://github.com/DavyLandman/AESLib

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

КАК ОРГАНИЗОВАТЬ ИБП ДЛЯ ARDUINO

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

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

  1. Зарядка для батареек
  2. Модуль защиты от перезаряда
  3. Батарейный блок

КАК НАПИСАТЬ ПРИЛОЖЕНИЕ НА JAVA, РАБОТАЮЩЕЕ С ARDUINO

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

В случае языка Javaпростой поиск в гугл выдаёт, в частности, следующую библиотеку: http://fazecast.github.io/jSerialComm/

При подключении требуется указать COMпорт, к которому подключена Arduino (в Windowsможно посмотреть через диспетчер задач, в macOSили Linux– через листинг директории /devи команду lsusb).

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

ОРГАНИЗАЦИЯ УМНОГО СВЕТИЛЬНИКА В КОМНАТЕ

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

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

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

В случае с MOSFETрезисторами схема подключения 12 вольтовой RGBленты имеет следующий вид:

Управление самой Arduinoможно реализовать через COMпорт (хорошо, если у вас стационарный компьютер) или подключить какой-либо сетевой модуль, типа Ethernet- WiFiили Bluetooth.

Аналогичным образом можно использовать модули на основе ESP8266.

Само же управление яркостью каждого канала определяется параметрами команды analogWrite(pin, value), которая используется для управления PWM. Здесь:

  • pin: порт вход/выхода, на который подаем ШИМ сигнал.
  • value: период рабочего цикла, значение между 0 (полностью выключено) и 255 (сигнал подан постоянно).

НА ЧЕМ СОБРАТЬ СИСТЕМУ УПРАВЛЕНИЯ ПОДВЕСКОЙ АВТОМОБИЛЯ С ТЕЛЕФОНА?

Собственно, ответ на данный вопрос дан выше. Для управления с телефона удобнее всего будет использование веб-интерфейса (так как не потребуется реализовывать дополнительно приложение на телефон), поэтому можно рассмотреть использование ESP8266.

ЧТО КУПИТЬ НОВИЧКУ, ЧТОБЫ РАБОТАТЬ С ARDUINO?

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

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

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

КАК РАБОТАТЬ С ПОСТОЯННОЙ ПАМЯТЬЮ В ARDUINO UNO

Есть несколько вариантов сохранения данных:

  1. Передача данных на удалённый сервер с использованием сетевого модуля
  2. Использование энергонезависимой памяти EEPROM
  3. Использование SD-карт

В первом случае требуется организация коммуникации с каким-либо сервером. Такое решение стоит рассмотреть, если ваше устройство просто «наблюдает» за средой. Оно интересно тем, что есть уже готовые сервисы для сбора данных, к примеру  https://www.xively.com/ Подробнее о подобном методе можно прочитать в статьях нашего блога:

  1. https://old.tpai.ru/blog/perevody-statej/sozdanie-besprovodnogo-shilda-barometra-s-esp8266-chast-i-vvedenie-i-esp8266
  2. https://old.tpai.ru/blog/perevody-statej/sozdaniya-besprovodnogo-shilda-barometra-s-esp8266-chast-ii-moduli-i-prototipirovanie
  3. https://old.tpai.ru/blog/perevody-statej/sozdanie-besprovodnogo-shilda-barometra-s-esp8266-chast-iii-pajka-i-otpravka-dannykh-v-onlajn

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

Последний способ хорошо подходит в случае, если требуется автономное хранилище данных. К счастью, SDкарты используют для работы протокол SPI, поэтому их легко подключить к Arduino и работать с ними. Важно отметить, что стандартные SDкарты работают с напряжением 5В, тогда как microSD– с напряжением 3.3В, однако для последнего случая есть модули с интегрированными преобразователями. Пример работы с SDкартой есть в нашем блоге: https://old.tpai.ru/blog/perevody-statej/datchik-temperatury-s-zapisyu-dannykh

КАК ПОДКЛЮЧИТЬ К ПИТАНИЮ НЕСКОЛЬКО АРДУИН, КАКОЙ ДОЛЖЕН БЫТЬ ТОК И НАПРЯЖЕНИЕ?

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

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

СБОРКА СИСТЕМЫ АВТОПОЛИВА ДЛЯ НЕСКОЛЬКИХ КОМНАТНЫХ РАСТЕНИЙ

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

Насос можно подключить через реле (если он рассчитан на 220 вольт), через MOSFETили мост, если насос на 12 вольт. Даже если это насос на 5В, не надо подключать его напрямую к Arduino, это приведёт к поломке контроллера.

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

КАК ПОЛУЧИТЬ ВРЕМЯ ЧЕРЕЗ ETHERNET-SHIELD ARDUINO?

Для этого можно использовать библиотеку NTPClient.

КАК ОТКАЛИБРОВАТЬ ДАТЧИК ТЕМПЕРАТУРЫ?

Любой датчик температуры калибруется при помощи другого измерительного устройства. Как правило, в качестве такого устройства может выступать ртутный или спиртовой (в случае воды) градусник. После чего можно получить поправку.

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

МОЖНО ЛИ ПЕРЕДАВАТЬ ТЕКСТОВУЮ ИНФОРМАЦИЮ С ARDUINO НА ARDUINO ПО ОБЫЧНЫМ ПИНАМ, НАПРИМЕР, 10,11,6,4,7 И Т.П., А НЕ ПО 1 И 2?

Можно передавать не только текстовую, но и любую другую по любым пинам, но для этого нужен программный протокол передачи, например, SoftwareSerial. Также в Atmega328 предусмотрены аппаратные протоколы SPI и I2C.

Кроме того, на некоторых версиях Arduinoесть дополнительные UARTинтерфейсы. Они отмечены как RX1, TX1, RX2, TX2 и так далее.

КАК ТЕХНИЧЕСКИ НАЗЫВАЕТСЯ КНОПКА ДЛЯ РАЗРЫВА ЦЕПИ?

Кнопка с фиксацией

КАК ЛУЧШЕ ОТПРАВЛЯТЬ СТАТИСТИЧЕСКИЕ ДАННЫЕ? ЧЕРЕЗ СОКЕТ ИЛИ UDP ПАКЕТАМИ?

UDP - это тоже "сокет", если вы выбираете между TCP и UDP, лучше использовать TCP, но периодичность, как и доставку пакетов неповрежденными при проблемах с сетью (отключение после начала отправки или слишком низкая скорость), он не гарантирует, данный функционал Вам придётся реализовывать самостоятельно (чтобы подсчёт и проверка чек-суммы, перезапрос пакета принимающей стороной при проблемах, и пакет "перезапрос" тоже с чек-суммой и так до бесконечности, пока не придет целый пакет), о размерах буфера тоже необходимо позаботится, если он разный реализуйте границы, например, отправкой в первых байтах пакета его размера в байтах. Еще необходима авторизация, так как в любой момент к серверу может подключиться какой-то бот и все испортить, попытавшись отправить, к примеру, HTTP-запрос.
Периодичность вам никто не сможет гарантировать, т.к:
1. В случае использования UDP - пакет просто может потеряться по дороге.
2. В случае использования TCP, если пакет потеряется, то TCP-стек это обнаружит и попросит отправить его еще раз, другой вопрос, что обнаружить он это сможет не через 5 или 10 сек, а много позже. Т.о. периодичность будет нарушена.

КАК СДЕЛАТЬ КНОПКУ ВКЛЮЧЕНИЯ И БЛОКИРОВКИ ДЛЯ ARDUINO?

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

КАК НА ПРАКТИКЕ ПРОИЗВОДИТСЯ ПЕРЕНОС ПРОЕКТОВ ARDUINO В ОТДЕЛЬНОЕ УСТРОЙСТВО?

Об этом можно прочитать в статье в нашем блоге: https://old.tpai.ru/blog/perevody-statej/ot-koncepta-na-arduino-do-gotovogo-ustrojstva

С ЧЕГО НАЧАТЬ ПРОГРАММИРОВАТЬ МИКРОКОНТРОЛЛЕР?

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

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

После этого у вас будет некоторое представление о том, с чем предстоит работать, и какие при этом инструменты использовать.

Чаще всего микроконтроллеры программируются на Си-подобных языках. Если вы не знаете Си, то лучше начать с изучения его в версии для персонального компьютера, поскольку достаточно часто микроконтроллер нельзя пошагово отладить, что усложнит понимание на первых этапах. Дл