ПО для Arduino Nano 2

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

Перед прочтением рекомендуется почитать базу для работы с Arduino Nano 2. Скачать решение можно тут.

            Решение представляет готовое программное обеспечение для платы Arduino Nano 2 и любой на базе микроконтроллера Atmega 168. Основной функцией является измерение постоянного напряжения на аналоговых портах A0-A4 и отправкой значений через USB на компьютер. 

Так, прошивка имеет следующие функции:

  • Цикличное измерение – микроконтроллер производит замер через каждые n миллисекунд, которые устанавливает пользователь. Индикация цикла выполняется встроенным светодиодом.
  • Установка времени выполнения программы – сколько времени будет проводится измерение
  • Работа с 5 пинами одновременно – микроконтроллер может опрашивать до 5 портов от A0 до A4, за 1 цикл может опрашиваться только 1 пин, если необходимо получать все значения за определенное кол-во времени, то за время интервала рекомендуется установить это время, деленное на кол-во портов
  • Установка опорного напряжения –  опорное напряжение – эталон для микроконтроллера, с которым он сравнивает значение. Может устанавливаться между: 5В питания платы, 1.1В встроенное опорное напряжение мк, любое напряжение, подающееся в пин AREF на плате (до 5 вольт)
  • Установка частоты дискретизации – скорость работы АЦП, можно выбрать между 125кГц (1 сравнение в 0,008 миллисекунду) и 1МГц (1 сравнение в 0,001 миллисекунду)
  • Управление с помощью компьютера – связь осуществляется через USB, создается COM порт, который прослушивается с помощью программы на компьютере, через нее так же осуществляется управление.
  • Отправка результатов в формате JSON: {“ml” : “xxx”, “vn” : “xxx”}, где ml – время в миллисекундах снятия значения, vn – напряжение на пине n.


Управляется плата с помощью следующих простых команд:

  • c - английская маленькая с оповещает Arduino о том, что программа на компьютере ее опознала
  •  1 - запускает выполнение программы на Arduino
  •  2 - останавливает выполнение программы
  •  3 - оповещает Arduino о том, что необходимо принять время периода цикла, сопровождается временем выполнения типа: 3ХХХХХ#, где # - знак окончания передачи времени, время в миллисекундах, не менее 50мс!
  • 5 - возвращает всю доступную информацию на контроллере. Выглядит так: {"isWork":"0","CurrentTime":"10351","RemainingTime":"589649","IntervalSize":"1000","PortCount":"0","ACP_Speed":"0","ION":"10", "ProcessingTime":"600000"}
      • o   isWork - переключатель выполнения ,1 - выполняется, 0 -  нет
      • o   CurrentTime - время с включения контроллера
      • o   RemainingTime - оставшееся время в мс
      • o   IntervalSize - время выполнения 1 такта программы в мс
      • o   PortCount- счетчик включенных портов, где каждый порт прибавляет единицу
      • o   ACP_Speed - частота работы микроконтроллера 0 - 125 kHz, 1 = 1 MHz
      • o   ION - биты ИОН, 10 - 5В, 11 - 1.1В, 00 - внешнее через пин AREF
      • o   ProcessingTime - полное время выполнения программы.
  • 7 - оповещает Arduino о том, что необходимо принять время выполнения программы, сопровождается временем 7ХХХХХ#, где # - знак окончания передачи, время в миллисекундах
  • 9 - устанавливает со скольких портов Arduino должна считывать вольтаж, сопровождается числом от 0 до 4, где 1 порт - +1. 94#, где # - знак окончания передачи
  • A – (английская большая А) - устанавливает скорость работы, 1 - дискретизация 1мГц, 2 - дискретизация 125кГц (стандарт)
  •   B - английская большая В - выбирает опорное напряжение, 1 - 5В питание ардуино (шумное) 2 - встроенный ИОН 1.1В (практически не шумное) 3 – внешнее. Внимание, при переключении на внешнее сначала необходимо подать команду, только потом подключать напряжение.


Последовательность выполнения программы:

  • 1.Arduino подключается к компьютеру через USB, далее плата отправляет в порт информацию с названием платы (можно отредактировать) для автоматического соединения с обслуживающей программки.
  • 2. Arduino ожидает 1 для начала считывания напряжений или любую команду для установки параметров измерения.
  • 3.Arduino отправляет значения с каждого установленного порта по очереди с интервалом 1 секунда стандартно или любым другим указанным. Так же принимает любые команды, изменения вносятся только в следующем такте.
  • 4.По окончанию времени выполнения – стандартно 10 мин, можно установить любое время вплоть до 2,147,483,647 миллисекунд (32 разрядное переменная). Где-то раз в 57 дней необходимо перезапускать контроллер.
  • 5.Arduino ожидает команд.

Встроенный цифровой аналоговый преобразователь Arduino имеет разрядность 10 бит, т.е. может возвращать 1024 значения в интервале между 0 и опорным напряжением. Минимальное измеряемое значение вычисляется как V опорное/1024, тогда для получения напряжения снятого с пина необходимо до множить значение на V опорное/1024.

Виды опорного напряжение:

  • ·         5В – встроенное питание, поступающее через USB. Оно так же может использоваться как источник питания для внешних устройств. Такие возможности делают его не самым стабильным источником опорного напряжения, поэтому использовать его можно только в крайних случаях. 

  • ·         1.1В – точное напряжение, генерируемое самим микроконтроллером и защищенное от внешнего воздействия, рекомендуется для использования, но может быть в некоторых случаях мало.
  • ·         Внешнее опорное напряжение через AREF не должно превышать строго 5В, так же контроллер может принимать до 42 миллиампер, поэтому необходимо подбирать напряжение так, чтобы она не спалило микроконтроллер. Рекомендуется защитить его конденсатором (нужно рассчитать самим) от помех и стабилитроном (рекомендуется почитать в интернете) от статики.

Частота дискретизации 

Отражает точность полученного измерения, чем она выше – тем ниже точность. Опытно выяснено, наиболее точный результат получается на частоте 125 кГц, наиболее быстро и с наибольшей возможной точностью на частоте 1 МГц.
Не стоит забывать, что после снятия результата контроллер пытается выслать значение с помощью медленной функции Serial.read, поэтому время интервала менее 50мс может вызвать ошибки в работе связи или вовсе сломать ее, поэтому действительную разницу между 1МГц и 125 кГц ощутить сложно, но реально.

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

За помощь в создании благодарность выражаю сайту codius.ru.

Популярные сообщения из этого блога

Калькулятор

Загрузка программы в Arduino Nano 2