3d интерфейс ввода на arduino

3D интерфейс ввода на Arduino

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

Сам проект представляет из себя 3D интерфейс взаимодействия с компьютером при помощи руки. Т.е. что-то типа дополненной реальности. Вы двигаете рукой в трех измерениях, в обклееном фольгой картонном кубе, а ваши действия переносятся в компьютер и повторяются уже там.

Оригинал проекта находится здесь

Итак нам понадобится:
контроллер Arduino
3 резистора 10 кОм
3 резистора 270 кОм
3 зажима «крокодил»
экранированный провод, термоусадка, картон, фольга, клей

Для начала нам понадобится изготовить 3 стороны куба. Я для этого использовал почтовую картонную коробку и пищевую фольгу.
Размер квадрата 200х200 мм.

Фольгу к картону приклеил при помощи клея момент. Вот, что получилось:

Далее, собираем саму схему. Схема подключения следующая:

Для начала, отрезаем 3 одинаковых куска экранированного провода. Сильно длинными их делать не нужно. Одни концы провода припаиваем к зажиму «крокодил», экранированную оплетку просто обрезаем на этом конце.

Подготавливаем другие концы кабеля и к центральной жиле припаиваем резистор 10 кОм. Повторяем так для всех кабелей.

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

Затем, спаиваем экраны всех трех кабелей между собой и делаем отвод от них проводом (питание +5 В)

Крокодилы зажимаем на фольге. Должно получиться что-то вроде этого:

Подключение куба к Arduino следующее:
8 вывод Arduino подключаем к оси X (левая часть)
9 вывод Arduino подключаем к оси Y (нижняя часть)
10 вывод Arduino подключаем к оси Z (правая часть)

Далее, открываем среду Arduino и скетч «Interface3D.ino». Запускаем и смотрим на результат в Serial Monitor (не забудьте в нем выставить скорость передачи на 115200, иначе увидите «крякозябры»).
Цифры будут быстро бежать и немного изменяться. Если поместить внутрь куба руку, то цифры будут менять на большие величины (порядка пару сотен).

Теперь необходимо установить программное обеспечения на компьютер. Для этого необходимо скачать среду Processing (не путать для Arduino) с сайта http://processing.org/
Среда кроссплатформенная, но у меня под Windows 7 x64 не заработала, но зато работает под Ubuntu 11.10, да и под Windows XP. Итак, скачиваем, распаковываем в директорию (установка не требуется) и открываем файл «TicTacToe3D.pde».
В самом скетче необходимо установить правильный COM-порт, на котором «висит» Arduino. Строка int serialPort =

Запускаем скетч, помещаем руку в куб, в точку показанную на экране и несколько раз щелкаем левой кнопкой мыши для калибровки. Щелчок правой кнопки мыши сбрасывает калибровку.

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

Подключаемое железо, интерфейсы

Суть и вообще предназначение Ардуино состоит в быстрой и удобной разработке электронных устройств. Это универсальный контроллер, на базе которого можно сделать законченный девайс (от англ. Device – устройство, прибор) абсолютно произвольного назначения, от полезного (часы-будильник, реле времени с кучей настроек и дисплеем, автоматизацию теплицы, умный дом…) до бесполезного, но забавного или интересного (самонаводящийся вентилятор, машинка на радиоуправлении с пушкой, робот с большим количеством функций и так далее). Для достижения этих целей к Ардуино подключаются различные внешние устройства, с которыми она может взаимодействовать.

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

Совокупность правил и длин участков 5 и 0 Вольт называют интерфейсом связи.

Распиновка Nano

  • GPIO – базовый порт ввода-вывода. Может читать и выдавать цифровой сигнал (только 0 и 5 Вольт).
  • PWM – может аппаратно генерировать ШИМ сигнал.
  • ANALOG – пин АЦП, аналогово-цифрового преобразователя. Может измерять напряжение.
  • UART – выводы аппаратного UART для подключения модулей с таким же интерфейсом.
  • I2C– выводы аппаратной шины I2C для подключения модулей с таким же интерфейсом.
  • SPI – выводы аппаратной шины SPI для подключения модулей с таким же интерфейсом.

Простые цифровые датчики

К простым цифровым можно отнести любые датчики, имеющие пин с логическим выходом, то есть напряжение на этом пине может быть только 0 или 5 Вольт в зависимости от показания датчика. Это например ИК датчик движения, кнопка, датчик линии, энкодер, а также практически все остальные датчики с пинами питания и выходом, помеченным как DO, OUT или S.

Такие модули подключаются в любые GPIO пины.

Интерфейсы

Некоторые датчики имеют цифровой выход, но выдают не просто 0 и 5V, а передают данные по цифровому интерфейсу связи. Сигнальные пины таких датчиков могут быть подписаны как SCK, SDA, SCL, MISO, MOSI, SS и прочими аббревиатурами. Для работы с такими датчиками нужно обязательно смотреть примеры или документацию. По сути любой такой датчик можно подключить на любой GPIO пин и программно эмулировать нужный интерфейс связи, что сложно и будет отбирать лишнее процессорное время. Arduino Nano поддерживает несколько интерфейсов аппаратно, то есть позволяет работать с ними очень быстро и эффективно.

UART – пины D0 (RX) и D1 (TX). По нему чаще всего подключаются Bluetooth, GPS и GSM модули. В общем случае поддерживает подключение только одного модуля. Пины на модуле называются обычно RX и TX. Подключение к модулю осуществляется “наоборот” – RX->TX и TX->RX, так как RX принимает сигналы (Receiver), а TX – передаёт (Transmitter). Для подключения нескольких UART модулей или одновременной работы модуля и “монитора порта” используют программный UART при помощи встроенной библиотеки SoftwareSerial.

I2C – пины A4 (SDA) и A5 (SCL). Данный интерфейс является шиной, то есть к нему можно подключить параллельно сразу несколько (до 128) устройств с уникальными адресами.

Варианты маркировки и подключение к аппаратному I2C:

  • A4SCL (C, SCK) – линия синхронизации, Serial CLock

SPI – пины D11 (MOSI), D12 (MISO) и D13 (SCLK), иногда добавляется D10 (SS). Данный интерфейс также является шиной, причём высокоскоростной, и поддерживает подключение по сути неограниченного количества модулей: у модуля есть пин CS (Chip Select), который прижимается микроконтроллером к GND для выбора данного модуля в качестве устройства приёма и передачи данных в текущий момент. SPI – очень распространённый и простой интерфейс, очень часто датчики и модули подключают к любым GPIO пинам и используют программную отправку и приём данных через встроенные функции shiftIn() и shiftOut(). “Сложные” датчики и датчики с большим объёмом и высокой скоростью передаваемых данных (карта памяти, NFC модуль) нужно подключать к аппаратной шине SPI микроконтроллера.

Варианты маркировки и подключение к аппаратному SPI:

  • D11MISO (SDO, DO, DON, SO) – линия данных от модуля к Ардуино
  • D13SCLK (SCK, CLK, SPC) – линия синхронизации
  • D10CS (SS, RCK) – выбор текущего модуля прижатием этого пина к GND

Другие

Помимо этих трёх популярных интерфейсов существуют и другие (CAN, 1-wire и прочее), но так как у нас есть сила микроконтроллера, мы можем эмулировать практически любой протокол и интерфейс связи, так называемый software (softwareSerial, softwareI2C…). И тут на помощь приходит комьюнити ардуино, которое уже написало библиотеки для всего что можно, и можно без проблем общаться практически с любой железкой, поддерживающей какой-либо популярный протокол связи. По той же CAN шине можно подключиться к мозгам своего автомобиля и делать с ним всякое. Куча микросхем различного назначения без особых проблем и телодвижений подключаются к ардуино и позволяют собой управлять. Всяческие усилители, драйверы, сдвиговые регистры, ЦАПы, АЦПы, мультиплексоры, цифровые резисторы и сотни других интересных штук.

Аналоговый сигнал

Второй тип связи – аналоговый, работает только “на приём”. Микроконтроллер может измерять напряжение, которое подаётся ему на АЦП (аналогово-цифровой преобразователь), диапазон измерения ограничен вплоть до опорного напряжения или напряжения питания микроконтроллера, то есть максимум, что может измерить микроконтроллер без дополнительного железа – от 0 до 5 вольт, или от 0 до 3.3 вольт для 3.3 вольтовых моделей. К этому мы ещё вернёмся.

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

К аналоговым относятся модули и датчики, сигнал с которых выходит в виде напряжения от 0 до 5 Вольт, но меняется “плавно” в зависимости от показания с датчика. Это например микрофон, термистор, фоторезистор, датчик влажности, потенциометр и прочее. Многие аналоговые датчики имеют пины, подписанные так же, как цифровые. Как отличить цифровой датчик от аналогового? Либо по описанию, либо методом “тыка” – подключить в аналоговый пин и вывести сигнал. Некоторые модули имеют цифровой и аналоговый выход одновременно (датчики звука, линии, холла и некоторые другие), пины у них обычно подписаны как DO – цифровой выход и AO – аналоговый. Также аналоговый выход может быть маркирован как OUT или S.

Такие модули подключаются в любые ANALOG пины.

Резюмируя

Теперь по сути дела: датчики, их куча кучная, измерять можно ну просто всё, что вообще измеряется. Электроника: напряжение, ток, сопротивление, работа с переменным током, поля. Параметры микроклимата: температура, влажность, давление, содержание газов, скорость ветра, освещенность, что угодно. Интересных модулей тоже очень много: Bluetooth, сотовая связь, GPS, дисплеи различных типов и размеров, датчики присутствия, как ИК, так и микроволновые, модули для беспроводной связи ардуинок и многое другое.

Читайте также  Фонарик с беспроводным зу

Можно управлять абсолютно любой железкой, которая выполняет свою функцию просто при подаче питания: лампочка, светодиодная лента, электронагреватель, мотор или любой электропривод, электромагнит, соленоид-толкатель, и это все с любым напряжением питания. Но тут нужно кое что понять: Ардуино (точнее микроконтроллер) – логическое устройство, то есть по-хорошему она должна только отдавать команды другим устройствам, или принимать их от них. Это я к тому, что напрямую от ардуино не работают ни лампочки, ни моторчики, ни нагреватели, ни- ху че-го. Максимум – светодиод. С пониманием этого идём дальше. Чтобы ардуино включила или выключила (подала питание) на другое устройство, нужно устройство – посредник, например реле или транзистор. Ардуино управляет реле, а реле в свою очередь включает любую нужную нагрузку с любым напряжением питания и все такое, подробнее об этом поговорим отдельно.

Как суть всего выше написанного – возможности Ардуино по подключению и управлению различными железками практически безграничны, можно воплотить любую идею, даже самую безумную. Датчики что то измеряют, исполнительные устройства что то контролируют, в это же время ведётся отсылка данных куда-нибудь, что-то отображается на дисплее и контролируется при помощи кнопок. Романтика!

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

Сайт про изобретения своими руками

МозгоЧины

Сайт про изобретения своими руками

Самодельный 3D (жестовый) интерфейс

Самодельный 3D (жестовый) интерфейс

Давайте из соплей и палок кучки резисторов, алюминиевой фольги и Arduino соорудим настоящий трехмерный интерфейс для управления компьютером жестами. И заставим Nintendo с ее хваленым Wii от…., в смысле отойти в сторонку.

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

Чтобы понять, где можно использовать такой интерфейс – просмотрите ВИДЕОРОЛИК.

Шаг 1. Материалы и инструменты

Инструменты:

  • Arduino
  • Среда управления Processing
  • Кусачки
  • Паяльник
  • Строительный нож

Материалы:

  • Резистор номиналом 270 КилоОм – 3 шт.
  • Резистор номиналом 10 КилоОм – 3 шт.
  • Низкотемпературный припой
  • Провода
  • Алюминиевая фольга
  • Картон от упаковочных ящиков

Дополнительные материалы:

  • Скотч
  • Экранированный кабель (также известен как коаксиальный)
  • Разъем типа «крокодил» — 3 шт.
  • 3-х штырьковый разъем (тип «папа»)
  • Электротехническая стяжка (платиковый хомут)
  • Термоусадочная трубка или горячий клей

Шаг 2. Изготовление сенсорных пластин

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

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

ВНИМАНИЕ! КВАДРАТЫ ИЗ ФОЛЬГИ НЕ ДОЛЖНЫ ИМЕТЬ КОНТАКТА МЕЖДУ СОБОЙ. КАЖДЫЙ ИЗ КВАДРАТОВ ДОЛЖЕН ИМЕТЬ СОБОДНОЕ ОТ ИЗОЛЯЦИИ МЕСТО ДЛЯ ПОДКЛЮЧЕНИЯ ЗАЖИМА ТИПА «КРОКОДИЛ».

Шаг 3. Проводники

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

Зажимы типа «крокодил» припаиваются к кабелям, которые через резисторы включается в гнезда №№ 8, 9, 10 на микроконтроллере. Несмотря на множество способов подключения сенсорных пластин, автор считает «крокодилы» самым удачным.

Примечание переводчика: учитывая, с каким трудом паяется алюминий, с автором я в целом согласен. В то же время, при отсутствии «крокодилов» вполне подойдет болт с гайкой и пара шайб. Ну и отверстие в сенсорной пластине, конечно.

Последовательность работ:

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

Оголите полдюйма (1, 275 Сантиметра) экрана и около 8 Миллиметров центральной жилы.

Припаяйте центральную жилу и экран к разъему типа «крокодил» и заизолируйте термоусадкой или изолентой.

Шаг 4. Сенсорные контуры

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

Итак:

  • Выставляем порт на режим вывода
  • Подаем на порт сигнал «логический ноль», что приводит к разрядке конденсатора на общую шину
  • Переводим порт на режим ввода

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

Через резисторы номиналом 270 КилоОм проходит ток, который заряжает конденсаторы. Чем меньше их номинал – тем быстрее заряжается конденсатор. От резисторов меньшего сопротивления (у нас — на 10 КилоОм) также время завершения полного цикла заряд/разряд, цикла, однако автор так и не понял, с чем это связано.

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

  • Выставляем порт на режим вывода.
  • Происходит зарядка пластин конденсатора до некоторой величины, условно равной уровню «логическая единица» .
  • Переводим порт на режим ввода.
  • Подаем на порт сигнал «логический ноль», что приводит к разрядке конденсатора, одновременно отключается цепь +5 Вольт.

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

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

Шаг 5. Подключение цепей к Arduino

Теперь – паяем проводники вместе на выводы 3-х штырькового разъема, который будет подключен к плате микроконтроллера.

ВАЖНО! НЕОБХОДИМО ЗАИЗОЛИРОВАТЬ ПРОВОДНИКИ ДЛЯ ПРЕДОТВРАЩЕНИЯ ЗАМЫКАНИЯ ШИНЫ +5 ВОЛЬТ НА ОБЩУЮ.

Кроме того, к месту спайки резисторов на 270 КилоОм припаиваем провод, который будет подключатся к + 5 Вольтовой шине.

Шаг 6. Подключение и загрузка программного кода

Подключите коннектор к портам №№ 8,9, 10 платы Arduino.

Зажимы «крокодил» подключите к пластинам сенсора в следующем порядке:

порт №8 – ось Х, левая пластина

порт № 9 – ось Y, нижняя пластина

включите питание, подключив соответствующий провод (красный) к выводу +5 Вольт Arduino

Загрузите код в микроконтроллер (если вы находитесь за пределами Северной Америки – вам возможно потребуется заменить значение аргумента #define mains на 50 вместо 60).

Ссылки на код для Arduino и Processing приведены ниже.

Шаг 7. Немного развлечемся

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

Почему именно 10 герц? Поясним – каждый сенсор опрашивается 2 раза, что при частоте развёртки экрана в 60 герц по формуле:

Частота экрана/количество циклов на сенсор * количество сенсоров дает искомые 10 Герц. Программный код считывает показания сенсоров максимальное количество раз за период 2 цикла с целью предотвращения дублирования результатов.

Первое, что сделал автор по его собственным словам – написал простой интерфейс для игры в трехмерные крестики-нолики. Код рабочей демо-версии приведен по этой ссылке, то есть вам всего лишь достаточно папку под названием «TiCTacToe3D» в директорию с исходным кодом проектов Processing.

Этот проект демонстрирует три основные вещи:

  • Линеаризация полученных с датчиков необработанных данных. Время зарядки конденсатора в соответствии с законом степенной зависимости пропорционально дистанции. Таким образом, для определения дистанции вам необходимо извлечь квадратный корень из соотношения дроби 1/время. Таким образом, дистанция рассчитывается по следующей формуле: Дистанция = корень квадратный из (1/время).
  • Нормализация полученных данных. После запуска проекта, зажмите левую кнопку мыши и одновременно перемещайте ладонь в зоне действия сенсорных пластин. Это позволит установить границы виртуальной рабочей зоны.
  • Устраняет «дребезг» сенсоров путем введения начальной точки отсчета.

На практике, с использованием описанной схемы автору удалось достигнуть максимальной площади сенсорной пластины в 1.5 кубических фута.

Шаг 8. Варианты дальнейшего развития проекта

  • Создать большие по площади сенсоры
  • Подобрать номиналы резисторов и оптимизировать код для обработки вибраций более высокой частоты с перспективой создания чувствительного конденсаторного микрофона
  • Найти способ уменьшить электромагнитные наводки от сети переменного тока (мощный конденсатор между сенсорными пластинами и землей)
  • Сделать подборщик цветов
  • Организовать управления видео- или музыкальными параметрами (подбор мелодии или ритма)
  • Сделать интерфейс управления, как в фильме «Особое мнение»

Журнал проекта

На сайте о Arduino размещены две статьи, посвященные использованию емкостных сенсоров. Там же, выложена для загрузки готовая библиотека для работы с емкостными сенсорами. В конце — концов, автор изменил конструкцию емкостной цепи из книги «Physical Computing».

Микросекундные интервалы были подобраны опытным путем с использованием слегка измененного кода с конференции о Arduino.

Читайте также  Урок 7 - графическая библиотека для дисплея st7783

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

Автор выражает благодарность Dane Kouttron за терпение и выдержку при доведении до него общих принципов работы колебательного контура терменвокса.

3d интерфейс ввода на arduino

  1. Шаблон интерфейса для «умного дома» на Ардуино
  2. Суть работы
  3. Внешний вид
  4. Опыт изучения Arduino. Пост второй. Интерфейс Arduino IDE. — DRIVE2
  5. 3D революция на Arduino
  6. Зачем нужно 3D на Ардуино?
  7. Сферы применения 3D
  8. Визуализация данных
  9. 3D миры
  10. Интерактивное обучение
  11. Технологические проблемы
  12. Техническое решение
  13. Интерактивность
  14. Взаимодействие системы и 3D модели
  15. Видео
  16. Заключение
  17. Интерфейс SPI и Arduino
  18. 2Реализация интерфейса SPI на платах семейства Arduino
  19. 3Библиотека для работы с интерфейсом SPI
  20. 4Подключение сдвигового регистра к Arduino
  21. 5Скетч для управления сдвиговым регистром по интерфейсу SPI
  22. 6«Бегущая волна» из светодиодов
  23. Наука молодых – page 535
  24. Дешевый 3D принтер на Arduino
  25. Электроника
  26. Узлы, которые надо напечатать на 3D принтере
  27. Модификация шагового двигателя 28BYJ-48
  28. Ось Y
  29. Ось Х
  30. Ось Z
  31. Стол для печати
  32. Собираем весь 3D принтер
  33. Подключаем электронику к 3D принтеру
  34. Программное обеспечение для Arduino
  35. Фото процесса печати и результаты
  36. Arduino Tinkercad — лучший онлайн симулятор ардуино на русском
  37. Tinkercad для ардуино
  38. Симулятор или эмулятор
  39. Что такое Tinkercad?
  40. История создания
  41. Возможности симулятора Tinkercad для разработчика Arduino
  42. Первые шаги в Tinkercad
  43. Регистрация онлайн
  44. Tinkercad Dashboard — Начальная страница
  45. Создаем и редактируем проект
  46. Добавляем новую схему Circuits
  47. Описание интерфейса Тинкеркад в режиме редактирования
  48. Создание схемы в Tinkercad шаг за шагом
  49. Первый шаг. Создаем схему Circuit
  50. Подготовка электронной схемы
  51. Третий шаг. Программируем скетч виртуального Arduino
  52. Четвертый шаг. Запускаем симулятор ардуино
  53. Подводя итоги

Шаблон интерфейса для «умного дома» на Ардуино

Здравствуйте. Целью написания данной статьи является желание поделиться с общественностью накопленной информацией и, конечно же, узнать что-то новое.

Я опишу, как подключить ардуину к роутеру и как сделать шаблон веб-интерфейса для управления ардуиной, а точнее, для дискретного «дёрганья ножками».
Как это выглядит «вживую», можно посмотреть здесь.

Повествование будет вестись на основе популярного нынче роутера TL-MR3020 и Arduino Nano.

Подключаться ардуина будет к USB, вариант с UARTом хоть и проще, но всё же трудней. Такая вот суперпозиция )

Я предполагаю что у заинтересованных лиц уже есть роутер прошитый OpenWrt и установлен сервер (Lighttpd), поддерживающий PHP. Ну, или просто компьютер

Если то — истина, тогда follow my way

Подключение ардуино

Если при посылке пакета ардуина перегружается (диоды моргают, но D13 не горит), тогда нужно поставить электролитический конденсатор5-10мкФ между Reset и GND.

Не забудьте отключать его, когда заливаете скетч.

Существуют трудности у ардуин с мостом ch341

Если всё работает, то идём дальше.

Редактируем файл конфигурации ser2net:

nano /etc/ser2net.conf
Закомментируйте всё строчки в конце и сохраните.

Добавьте stty и ser2net в автозагрузку:

nano /etc/rc.localВот так нужно сделать:stty -F /dev/ttyUSB0 cs8 57600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl ser2net -C “3002:raw:0:/dev/ttyUSB0:57600 NONE 1STOPBIT 8DATABITS -XONXOFF -LOCAL -RTSCTS” exit 0

Обратите внимание. Строки инициализации должны быть записаны одной строкой (без переноса). Перегрузите и проверьте.echo ‘Y+=ZA’ > /dev/ttyUSB0
echo ‘Y+=Za’ > /dev/ttyUSB0

Так меняется интерфейс при включении нумерации строк. Уже немного веселее)

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

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

Если кликнуть по плюсу, то код раскроется в изначальном виде.

Еще очень полезная и удобная фишка — автоформатирование. Меню Инструменты > Автоформатирование или комбинация клавиш Ctrl + T. Для Мас Comand + T.

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

Помимо этого в окне программы элементы скетча подсвечиваются разными цветами:Команды — зеленым,константы — голубым,блоки комментариев — серым,функции (в том числе встроенные) — оранжевым.Остальные элементы скетча чёрные.

Что ещё очень немаловажно, среда разработки Arduino IDE может работать и с “чистым С++”, понимает некоторые команды ассемблера, и даже знает регистры микропроцессора, установленного на плате Arduino.

То есть если написать не pinMode(13, OUTPUT) , а DDRB |= (1

3D революция на Arduino

До последнего момента контроллеры (и Ардуино, в частности) работали либо вообще без интерфейса, либо с примитивными интерфейсами, условно говоря, с одной — двумя кнопками. С появлением Arduino Mega Server ситуация кардинально изменилалась и появилась возможность сделать любой интерфейс к вашему проекту на Ардуино.

Сегодня мы пойдём ещё дальше и поговорим о том, как сделать полноценный интерактивный 3D интерфейс для вашего проекта на Ардуино. Все эксперименты будем проводить на новом микроконтроллере Genuino 101 совместного производства Intel и Arduino и любезно предоставленным компанией Intel для портирования на него системы Arduino Mega Server.

Зачем нужно 3D на Ардуино?

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

Сферы применения 3D

Весь спектр применения 3D технологий на микроконтроллерах можно разделить на три части: визуализация данных, 3D интерфейсы и интерактивное обучение. Рассмотрим подробнее каждый из этих аспектов.

Визуализация данных

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

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

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

3D миры

Под 3D мирами здесь подразумеваются развитые интерактивные 3D модели, которые содержат наборы элементов (объектов) и правила взаимодействия этих объектов в пределах модели («физика» этого мира).

Применительно к контроллерам (своими сенсорами они связаны с реальным миром) эта концепция выливается в представительство реальных объектов и процессов в виртуальном 3D мире. А поскольку виртуальная модель интерактивна, то воздействие на неё в виртуальном мире приводит к изменению состояния объектов в реальном мире (контроллер связан с реальным миром множеством актуаторов).

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

Интерактивное обучение

Эта технология (в совокупности с технологиями Arduino Mega Server и OHAS) позволяет создавать контроллеры, которые содержат внутри себя всё необходимое для взаимодействия с пользователем (интерактивные 3D примеры, документацию, справочники, руководства и т. п.) и построения сложных систем просто, как складывание кубиков Лего.

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

Технологические проблемы

В общем, идея научить контроллеры Ардуино работать с 3D графикой кажется очень привлекательной, но воплощение этой идеи наталкивается на преграду ограничений микроконтроллеров как по объёмам оперативной памяти, так и по вычислительной мощности самого контроллера.

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

Техническое решение

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

В данных конкретных примерах использовались стандартные библиотеки Processing.js и Three.js. Но, если вы являетесь поклонником какой-либо другой библиотеки, то ничто не мешает вам воспользоваться вашей любимой библиотекой.

Всё, что вам нужно сделать, чтобы начать использовать 3D в своём проекте на Ардуино, это подключить обычным способом соответствующую 3D библиотеку

Далее, либо вставляете в страницу код 3D примера, либо вставляете ссылку на файл с 3D примером

И это, собственно, всё, что вам нужно сделать, чтобы на вашей страничке Arduino Mega Server заработал 3D пример. Всё делается точно также, как на обычном сайте в Интернет. А Arduino Mega Server берёт на себя всю черновую работу по обеспечению работоспособности системы.

Интерактивность

Просто запустить 3D модель на Ардуино это, безусловно, здорово, но не забываем, что работа происходит на контроллере, а это устройство, которое связано с реальным миром множеством датчиков на входе и множеством актуаторов на выходе. И было бы неплохо отображать на 3D модели какие-нибудь параметры реальной системы.

Давайте, для примера, рассмотрим визуализацию работы сетевых функций микроконтроллера.

Работу интерфейса Arduino Mega Server обеспечивает непрерывный Ajax обмен между контроллером и браузером пользователя. В качестве 3D модели возьмём гиперкуб, состоящий из шести объектов по каждой из трёх осей координат (всего 216 объектов).

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

В результате, мерная пульсация двух сфер на 3D модели показывает нормальную работу Ajax функций системы и у вас есть ещё 214 объектов для индикации любых других параметров. И практически неограниченное количество веб-страниц для визуализации других 3D моделей.

Читайте также  Arduino как hid устройство

Взаимодействие системы и 3D модели

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

В файле scripts.js объявляется переменная

var dash_marker1 = 0;

А затем расставляются маркеры в нужных местах программы, которые меняют состояние переменной. В данном случае при «входе» и «выходе» из сетевой функции.

dash_marker1 = parseFloat(“1.0”); dash_marker1 = parseFloat(“0.0”);

В скетче на Процессинге объявляются переменные для «ловли» значений из JavaScript

float for_dash_marker1 = 0;

И сам момент «ловли»

А дальше описываются действия с 3D моделью, в зависимости от состояния переменных

Увеличение портов ввода-вывода на Arduino (PCF8574)

Автор: Сергей · Опубликовано 17.04.2021 · Обновлено 17.06.2021

В этой статье рассмотрим модуль расширения портов на чипе PCF8574. С помощью которого можно увеличить количество портов ввода-вывода микроконтроллера на 8 штук (максимально 64), используя шину I2C, которая требует только 2 вывода.

Технические параметры

► Микросхема: PCF8574;
► Напряжение питания: 3 — 5.5 В;
► Интерфейс: I2C;
► Количество портов GPIO: 8;
► Размеры: 55 x 15 x 12 мм;
► Вес: 5 грамм.

Обзор модуля PCF8574

Основная и единственная микросхема на модуле это PCF8574, которая является расширителем ввода-вывода с двухпроводным интерфейсом I2C. Данная микросхема позволяет увеличить количество портов на 8 штук, а если подключить несколько микросхем PCF8574, можно увеличить до 64 портов. Так же, на модуле установлены два подтягивающих резистора на 1 кОм, необходимые для работы шины I2C. Так же, микросхема PCF8574 используется в интерфейсном модуле LCD1602 и LCD2004.

Модуль содержит три разъема, назначение каждого вывода можно посмотреть ниже:

Четырех контактный разъем (дублируются)
Vcc — вывод питания 3 — 5.5 В;
GND — заземляющий вывод питания;
SDA — вывод данных I2C подключается к линии I2C;
SCL — вывод I2C, подключается к линии I2C микроконтроллера, рабочие напряжение 3 В или 5 В.

Девяти контактный разъем:
P0 — P7 — вывод входа выхода;
INT — прерывание инвертированный сигнал.

Смена адреса I2C
По умолчанию, на модуле установлен адрес 0x20, при необходимости его можно изменить, это позволяет подключать до восьми устройств. Для смен адреса, необходимо поменять перемычку на (A0-A2), которая подтягивает линии A0, A1, A2 к питанию или наоборот. Ниже приведена таблица с адресами:

A0 — 0 // A1 — 0 // A2 — 0 // — 0x20
A0 — 0 // A1 — 0 // A2 — 1 // — 0x21
A0 — 0 // A1 — 1 // A2 — 0 // — 0x22
A0 — 0 // A1 — 1 // A2 — 1 // — 0x23
A0 — 1 // A1 — 0 // A2 — 0 // — 0x24
A0 — 1 // A1 — 0 // A2 — 1 // — 0x25
A0 — 1 // A1 — 1 // A2 — 0 // — 0x26
A0 — 1 // A1 — 1 // A2 — 1 // — 0x27

Подключение модуля PCF8574 к Arduino

Необходимые детали:
► Arduino UNO x 1 шт.
► Модуль расширения портов ввода вывода на базе PCF 8574 x 1 шт.
► Провода DuPont M-F, 20 см x 1 шт.

Описание:
В примере покажу как подключить модуль PCF 8574 к Arduino. Так же приведу программу, которая будет включать светодиоды при нажатии кнопок.

Подключение.
Сначала подключить питание, выводы +5 В и GND (Arduino) подключаем к выводам Vcc и GND (PCF 8574), далее подключаем интерфейс I2C, выводы A4 и A5 (Arduino) подключаем к выводам SDA и SCL (PCF 8574). Теперь подключаем кнопки, вывода P0-P3 подключаем к кнопкам, а второй вывод от кнопок подключаем к GND. Далее подключаем светодиоды, вывода P4-P7 подключаем к светодиоду, второй вывод через резистор подключаем к 5В.

Установка библиотек:
Для работы с модулем необходимо установить библиотеку «PCF8574», для установки библиотеки, перейдите в Скетч —> Подключить библиотеку —> Управление библиотеками.

В строке поиска введите «PCF 8574», найдите библиотеку «PCF8574 library» и установите данную библиотеку.

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

Текстовый экран 16×2: инструкция по подключению и примеры использования

Текстовый экран 16×2 пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.

Видеообзор

Примеры работы для Arduino

В качестве примера подключим дисплей к управляющей плате Arduino Uno.

Подключение к Arduino

Вывод Обозначение Пин Arduino Uno
1 GND GND
2 VCC 5V
3 VO GND
4 RS 11
5 R/W GND
6 E 12
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4 5
12 DB5 4
13 DB6 3
14 DB7 2
15 VCC 5V
16 GND GND

Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.

Вывод текста

Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:

Кириллица

Существует два способа вывода кириллицы на текстовые дисплеи:

Рассмотрим оба способа более подробно.

Таблица знакогенератора

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

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

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две записанные рядом строки склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

Переключение страниц знакогенератора

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

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

Полную таблицу символов с кодами можно найти в документации к экрану.

Использование библиотеки LiquidCrystalRus

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

Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.

В качестве примера выведем фразу «Привет от Амперки» на дисплей.

Примеры работы для Espruino

В качестве примера подключим дисплей к управляющей плате Iskra JS.

Подключение к Iskra JS

Вывод Обозначение Пин Iskra JS
1 GND GND
2 VCC 5V
3 VO GND
4 RS P11
5 R/W GND
6 E P12
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4 P5
12 DB5 P4
13 DB6 P3
14 DB7 P2
15 VCC 5V
16 GND GND

Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.

Вывод текста

Для вывода программы приветствия, воспользуйтесь скриптом:

Кирилица

Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.

Таблица знакогенератора

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

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

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9 и A–F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

Переключение страниц знакогенератора

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

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

Полную таблицу символов с кодами можно найти в документации к экрану.

Комнатный термометр

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