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://tpai.ru/blog/perevody-statej/sozdanie-besprovodnogo-shilda-barometra-s-esp8266-chast-i-vvedenie-i-esp8266
  2. https://tpai.ru/blog/perevody-statej/sozdaniya-besprovodnogo-shilda-barometra-s-esp8266-chast-ii-moduli-i-prototipirovanie
  3. https://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://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://tpai.ru/blog/perevody-statej/ot-koncepta-na-arduino-do-gotovogo-ustrojstva

 

С чего начать программировать микроконтроллер?

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

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

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

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

После этого у вас, скорее всего, будет достаточно знаний для того чтобы начать работу. Рекомендуем начать с рассмотрения примеров работы с микроконтроллером. Самое простое упражнение – управление светодиодом. Оно позволяет изучить основы ввода-вывода, широтно-импульсную модуляцию и подключение к схеме внешних устройств. Рекомендуем обзавестись тестером, это лучше поможет понять, что происходит в реальном мире, при исполнении программы на контроллере.

Далее рекомендуем поработать с каким-либо интерфейсом, а именно UART, SPIили I2C. Устройства, работающие с этими интерфейсами, достаточно легко найти и достаточно часто можно найти модули с ними, которые выполнены в виде готовых блоков, которые остаётся только подключить.

На последнем этапе стоит поработать с такими важными возможностями контроллера, как сторожевой таймер (watchdog), энергонезависимая память (EEPORM).

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

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

Последнее, о чём бы хотелось сказать: микроконтроллер – лишь мозги схемы, оформленные в изящном корпусе. Раньше мозги и были более распределены по схеме и, достаточно часто использование даже МК не требуется для решения поставленной задачи (к примеру, классическая задача полива реализуется при помощи реле и датчика влажности почвы с пороговым модулем). Если вы желаете достигнуть определённого уровня и в этом вопросе, то рекомендуем классическую книгу «Искусство Схемотехники» Хорвица, которая, хоть и была выпущена давно, содержит все требуемые знания для построения простых и сложных схем.

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

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

Для работы в таком случае используются директивы препроцессора языка Си, т.е. все подобные константы выносятся в отдельный файл (типа config.h), в котором прописываются значения для пинов, типов устройств и их адресов (если используются шины).

Также стоит отметить, что некоторые устройства (которые подключаются к стандартным протоколам), способны сами сообщать свой адрес для работы с ними (к примеру DS18B20) или устройства с интерфейсом I2C.

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

Как делают корпуса для Arduino-проектов?

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

 

Широтно-импульсная модуляция

Широтно-Импульсная модуляция, сокращенно ШИМ (англ. PWM)

Пример использования аналогового выхода (ШИМ) для управления светодиодом доступен из меню File->Sketchbook->Examples->Analog программы Arduino.

Широтно-Импульсная модуляция, или ШИМ - это операция получения изменяющегося аналогового значения посредством цифровых устройств. Устройства используются для получения прямоугольных импульсов - сигнала, который постоянно переключается между максимальным и минимальным значениями.   Данный сигнал моделирует напряжение между максимальным значением (5 В) и минимальным (0 В), изменяя при этом длительность времени включения 5 В относительно включения 0 В. Длительность включения максимального значения называется шириной импульса. Для получения различных аналоговых величин изменяется ширина импульса. При достаточно быстрой смене периодов включения-выключения можно подавать постоянный сигнал между 0 и 5 В на светодиод, тем самым управляя яркостью его свечения.

На графике зеленые линии отмечают постоянные временные периоды. Длительность периода обратно пропорциональна частоте ШИМ. Т.е. если частота ШИМ составляет 500 Гц, то зеленые линии будут отмечать интервалы длительностью в 2 миллисекунды каждый. Вызов функции analogWrite() с масштабом 0 – 255 означает, что значение analogWrite(255) будет соответствовать 100% рабочему циклу (постоянное включение 5 В), а значение analogWrite(127) – 50% рабочему циклу. 

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

Как сбросить Arduino Mega?

Есть несколько способов для того, чтобы сбросить контроллер.

Самый простой – это подключить один из выходов к входу RESETчерез резистор на 1 кОм. Подача логического нуля (LOW) на данный пин будет вызывать перезагрузку контроллера.

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

void software_Reset()

{

      asm volatile ("  jmp 0"); 

}   

 

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

Подробнее об этом можно прочитать в следующей статье: https://geektimes.ru/post/255800/

Как создать USB HID из Arduino?

Как и в случае работы со многими устройствами, в Arduinoесть готовые библиотеки для этого.

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


Самым простым способом является использование микроконтроллера ATmega32U4, на котором построена плата Arduino Leonardo. Для него поддержка USB HID реализована в самом программном обеспечении Arduino IDE, так что для того, чтобы превратить микроконтроллер в "мышь" и "клавиатуру" (одновременно), достаточно просто загрузить скетч примера.


И наконец, третий вариант. В современных Arduino вместо чипа USB-UART используется микроконтроллер ATmega16U2. Это практически тот же Arduino Leonardo, только памяти у него в 2 раза меньше. Его можно перепрограммировать в USB HID.

Это информация не относится к платам, где в качестве USB-UARTиспользуются чипы CH340Gили FT232RL.

На чем пишутся скетчи в Arduino?

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

Программа или сайт для построения электросхем?

Существует достаточно большое количество программ и сайтов, в том числе и со встроенными симуляторами и эмуляторами, к примеру:

  1. QUCS
  2. Proteus
  3. Electronic Workbench (Multisim сейчас)
  4. everycircuit.com
  5. sPlan

Мы рекомендуем использовать Fritzing (http://fritzing.org/home/). Одним из плюсов данной программы является простое построение шилдов для Arduino.

Можно ли использовать инфракрасный датчик препятствий как ик передатчик Arduino?

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

Как подключить LCD 2004 к Arduino c помощью I2C?

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

  1. https://tpai.ru/blog/perevody-statej/adresaciya-lcd-adaptera-1602-2004
  2. https://tpai.ru/blog/perevody-statej/otobrazhenie-svoikh-simvolov-i-prostykh-kartinok-na-lcd-1602lcd2004-chast-i
  3. https://tpai.ru/blog/perevody-statej/datchik-temperatury-s-zapisyu-dannykh

Стоит отметить, что подобные дисплеи часто используют один из протоколов:

  1. Motorola M68-type parallel interface
  2. Intel I80-type parallel interface
  3. Синхронный последовательный интерфейс

Поэтому библиотека LiqiudCrystalможет работать не только с LCDдисплеями, но, к примеру, с VFD дисплеями Futaba, поскольку используется один и тот же протокол.

Как сделать ftp клиент на ESP8266?

Вам нужно вручную обрабатывать соединения и отсылать команды.
Список команд описан тут www.nsftools.com/tips/RawFTP.htm

Для примера можно через telnet попробовать протокол. Вот пример общения с ftp.debian.org: pastebin.com/Cweysg4C

На ESP будет удобней использовать пассивный режим. Для этого перед использованиям команд LIST RETR и некоторых других нужно отослать команду PASV, в ответ придут данные для второго подключения.
227 Entering Passive Mode (a1,a2,a3,a4,p1,p2)
где a1.a2.a3.a4 это IP адрес, а p1*256+p2 порт для подключения

Например для получения содержимого папки debian:
отсылаете "PASV" в ответ приходит
227 Entering Passive Mode (130,89,148,12,68,176).

Открываете второе подключение на 130.89.148.12 на порт 17584 (68*256+176)

После отсылки в первом подключении команды "LIST debian" во второе придет ответ
-rw-rw-r-- 1 1176 1176 1063 Mar 01 22:03 README
-rw-rw-r-- 1 1176 1176 1290 Jun 26 2010 README.CD-manufacture
-rw-rw-r-- 1 1176 1176 2591 Mar 01 22:03 README.html
....
drwxr-xr-x 3 1176 1176 4096 Oct 10 2012 tools

Аналогично с получением файла, его содержимое будет приходить во второе соединение.

Можно ли программировать Arduino на Python?

К сожалению, реализации синтаксиса, похожего на Pythonдля Arduinoнет, но есть платы, которые созданы специально под этот язык программирования: https://habrahabr.ru/post/205626/

В Arduino можно использовать библиотеку OpenGL?

Нет

Чем отличаются цифрвые пины у arduino, помеченные тильдой (~) и просто пронумерованные?

Тильдой помечены выходы, на которые можно подавать ШИМ сигнал при помощи функции analogWrite.

Можно ли использовать pinmode для 0 и 1 (TX и RX)?

Да, можно. Но не забывайте отключать сторонние устройства от них при прошивке контроллера, так как наличие чего-либо ещё на них может помешать прошивке.

Как подсчитать импульсы за промежуток времени?

Самый простой способ – использовать функцию pulseIN, она приостанавливает выполнение программы до тех пор, пока на указанный вход не поступит высокий или низкий сигнал (в зависимости от переданных параметров).

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

  1. Получаем значение millis
  2. Вызываем N-раз функцию pulseIN
  3. Считаем разность между сохранённым значением millisи текущим. Делим Nна полученное число и получаем количество импульсов в миллисекунду.

Так же, в атмеге не менее двух таймеров. Первый таймер настраиваете на работу от внешнего тактового источника с делителем 1:1, второй таймер настраиваете на работу от тактового генератора контроллера с подходящим вам делителем (на мегагерце подойдет, например, 1:64) и активируете ему прерывание по переполнению.

В обработчике этого прерывания смотрите значение, которое насчитал первый таймер.

На каком максимальном расстоянии от Arduino можно разместить энкодер?

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

Для увеличения расстояния можно использовать усилители сигнала или поставить контроллер, который преобразует сигнал для передачи по протоколу, который рассчитан на большие расстояния (RS232, RS485, Ethernet, Wi-Fi).

Как подключить UART к микроконтроллеру?

Если в контроллере есть UART - выставляете для него режим работы и скорость передачи. Если нужен RS-232 - соответствующие ноги контроллера подключаются к преобразователю типа MAX232, который преобразует сигналы UARTв RS232

Как задать частоту передачи ИК импульса?

Частота передачи ИК импульса определяется возможностями микроконтроллера. Поскольку на каждое включение и выключение уходит определённое время, то частота ограничена намного сильнее, даже если микроконтроллер может оперировать временем в микросекундах.

Для отправки сигналов можно использовать следующие функции. Для передачи единицы в течении mLenмикросекунд:

voidmark(unsigned longmLen) {

 if(mLen==0) return;

 unsigned longnow = micros();

 while((micros() - now) < mLen) {

 digitalWrite(txPinIR, HIGH);

 delayMicroseconds(HIGHTIME-6);

 digitalWrite(txPinIR, LOW);

 delayMicroseconds(LOWTIME-7);

 }

}

 

Дляпередачинуля:

voidspace(unsigned longsLen) {

 if(sLen==0) return;

 while(sLen>16383) {

 delayMicroseconds(16383);

 sLen -= 16383;

 }

 delayMicroseconds(sLen);

}

 

Соответственно, комбинируя эти функции, можно добиться требуемой частоты.

Какая допустимая сила тока для Arduino по USB входу?

В Arduino Uno встроен самовосстанавливающийся предохранитель, который защищает порт USB компьютера от токов более 500 мА. Поэтому больше 500 мА при питании через USB не получить, независимо от того USB2.0 или USB3.0 порт на компьютере.

Зачем нужен кварцевый резонатор?

  1. Для тактирования стабильной частотой определенного значения. Это важно в случае, если контроллер использует UART для связи, например, с компьютером.
  2. В качестве высокодобротного, как следствие, высокоселективного полосового (обычно узкополосного) фильтра;
  3. В качестве стабилизатора частоты опорного генератора. Девиация (болтанка) частоты генератора обратно пропорциональна добротности колебательного контура, стоящего в петле ПОС. Если у LC контуров можно как-то помучавшись получить добротность в районе 500-800, то у кварцевого резонатора она может доходить до значений 1*10^6 и даже до 1*10^7, а если использовать двойное термостатирование, то даже до 1*10^9

 

Arduino. Как управлять Шаговым двигателем через клавиатуру?

Вариантов много. Главное понять, что удобнее вам в плане программирования на компьютере. Можно использовать любой удобный протокол – например, Firmata.
Т.е. открываете последовательный порт и шлёте в него сообщения заданного формата, которые обрабатывает скетч на МК и соответствующим образом управляет шаговиком.
Как вариант - написать приложение в Processing, которое бы считывал нажатые клавиши и передавало значения в com порт.