Блог

Прототипирование электроники: Arduino + TouchDesigner

  • Цветков Максим
  • 24.03.2018

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

Самый популярный способ прототипирования электроники это Arduino как основной контроллер. Он умеет управлять аналоговыми, цифровыми, I2C датчиками, DMX-устройствами за счет кода на C++. Arduino это название компании, которая выпускает микро-контроллер, у которого множество модификаций (есть даже российская Iskra Neo от компании «Амперка», или версия под JavaScript). Если вы не любите программировать, то существует библиотека firmata, позволяющая считывать значения датчиков и управлять ими в Touch Designer.

Что надо купить для обучения?

  • Arduino Nano/Uno (маленькая и большая)
  • USB для подключения к компу
  • BreadBoard на 830 контактов
  • Потенциометр (10 кОм)
  • Набор резисторов (на 220 Ом, 10 кОм)
  • Конденсатор
  • Фоторезистор VT90N2 или аналог
  • Кнопочный переключатель
  • Разные дополнения, вроде сервопривода с блоком питания, датчика уровня шума, инфракрасного дальномера.
Arduino Nano и Arduino Uno

И блок питания. Если брать блок питания 12V 6A, то лучше брать с запасом в 2 раза по току. Особенно, если у китайцев. Перечисленные элементы можно разделить по вольт-амперным характеристикам, они могут быть пассивные/линейные и активные/нелинейные. Так, резистор, микрофон и катушка индуктивности это пассивные компоненты, подчиняются закону Ома. Активные это диоды, транзисторы, симисторы, у них нет линейной зависимости напряжения тока. Напомню, ток это упорядоченное движение заряженных частиц, электронов с отрицательным зарядом. Когда мы вставляем батарейку + к +, — к -, то это исключительно для направленного движения электронов. Через тело человека тоже может идти электрический ток, поэтому мы работаем со слаботочкой. А электрикам сложнее и опаснее.

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

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

На территории ЗАТО будет пятиэтажка с трансформаторной будкой, от которого провод тянется в помещение. В помещении, с высокой вероятностью, будет стабилизированный трансформаторный источник питания, просто потому что он самый популярный. Есть сетевое питание 220-> понижающий трансформатор -> мост для преобразования синусоидов. Где то в доме лежит телефон, который надо зарядить. При зарядке телефона преобразовывается питание источника в более высокочастотное напряжение, и выпрямляется. Если же устройство попроще, то на проводе для зарядки могут стоять ферритовые фильтры для подавления, если электроника чувствительная. 

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

Те самые мотки проволоки из электронных устройств это катушка индуктивности, нужны для подавления помех, для накопления энергии, для сглаживания пульсации. Также имеют цветную маркировку, в которой толстое кольцо это начальная позиция. Катушки могут быть высокочастотные и низкочастотные. Высокочастотные отвечают за усиление связи сигнала, делаются из фирита. Низкочастотные делаются из электротехнической стали. Катушку могут называть дросселем, если она для ограничения тока. Кнопка включения блока питания компьютера это частный случай пуско-регулирующей аппаратуры, используется сдвоенный дроссель. Либо для фильтрации и разделения полосы частот в аудио-аппаратуре по разным динамикам. Если вы помните старые приемники, где нужно было настраивать волну, то за это отвечали варометры, сейчас их заменили варикапы. Соленоиды нужны для пушки Гаусса, но также это активатор замка в автомобиле, переключатель скоростей в автоматической коробке передач. И индуктор, который умеет нагреваться.

Транзисторы. Нужны для изменения параметров тока и напряжения в сети. В современных устройствах могут быть миллиарды транзисторов, они необходимы для вычислений: в Apple М1 Ультра 114,000,000,000+ транзисторов. Почти наверняка любое включение устройства подразумевает сильное изменение силы тока, будь то лампа или электроплита, и это задача для транзисторов. Существуют био-транзисторы для работы внутри живых организмов. Конденсаторы в разряженном состоянии позволяют току проходить без ограничений, устремляясь в бесконечность. Если он заряжен, то ток через него уже не пройдет. Есть напряжение — нет тока, есть ток — нет напряжения. Полупроводниковые диоды в современной схемотехнике могут запретить или разрешить ход тока в определенном направлении. Если ток больше 1 ампера, то диод называют выпрямителем. А если конденсатор керамический, то при нагреве упадет емкость. 

На данный момент у меня под рукой Arduino UNO R3 (CH340G). Я использую Arduino UNO для прототипирования и Arduino NANO для коммерческих проектов. Вам никто не мешает сделать свою версию Arduino на плате прототипирования. И EasyEDA для проектирования схем, экспорта Gerber для изготовления на заводах.

Arduino это обычная электронная плата. То есть, сочетание отдельных компонентов, которые соединены между собой. Это могла быть и интегральная микросхема, которая объединяет в одном кристалле миллионы транзисторов. Вся компонентная база соединена дорожками на печатной плате или проводами на макетной плате. Все схемы можно разделить на аналоговые, цифровые и гибридные. Цифровые это дискретные, то есть определенному уровню напряжения соответствует состояние 0 или 1, логические вентили. Разработка цифровой схемотехники проще, чем аналоговой, но в обоих вариантах могут быть искажения и помехи. Гибридные схем включают и аналоговые, и цифровые цепочки. В самом простом радио-приемнике почти наверняка будет аналоговый преобразователь частоты и цифрового управления.

Плата Arduino состоит из входа USB, к которому подключается провод и вставляется в компьютер. Также есть кнопка перезагрузки, светодиод на 13-ом цифровом выходе, 14 цифровых входов/выходов (сигнал вкл/выкл — 0/1 — 0 вольт / 5 вольт, кнопки, светодиоды, датчики), 6 аналоговых (понимают более широкую градацию входящих сигналов, типа яркости света, громкости звука, дальности расстояния, уровня влаги и так далее). Порты 0 и 1 нельзя занимать датчиками.

У Arduino Nano есть линейные стабилизаторы и конвертер USB-UART. Может питать внешние модули с потреблением тока до 50 мА. Внешнее нерегулируемое напряжение подается только на вход VIN, это вход на стабилизатор. Он умеет от 7 до 12 вольт. Линейные стабилизаторы обладают низким КПД, другими словами, переизбыток напряжения сбрасывается в тепло. Поэтому стабилизаторам нужно дополнительное охлаждение. Также, необходима положительная разница напряжения между входом и выходом, так как на стабилизаторах всегда есть падение напряжение. При разнице в половину вольта большинство стабилизаторов попросту не будут работать. Но не смотря на все описанное выше, запитать STMку на стабилизаторах вполне можно. И главное, линейные стабилизаторы очень просты в использовании. 

Поддержка разных процессоров, вроде Intel (x86 и ARC-Argonaut RISC Core) и Arm® (Advanced RISC Machine). Если вы поищите Arduino Due, то удивитесь наличию собственного микропроцессора 32-bit Arm Cortex®-M3, его мощности хватит для запуска музыки. 32-bit означает, что все типы данных представлены как 32-битные числа. 32-битный 2 32= 4 294 967 296 байт, что равно порядка 4 Гигабайт. Отсюда и ограничение по памяти 32-битных машин, которого нет у 64-битных. 32 бита это разрядность в машинном слове. Сколько бит регистры и какой ширины операции может делать АЛУ (устройство). 8 бит = 1 байту (IBM), компьютеру же интереснее машинное слово, которое представлено как 32 бита. 64-битные системы интереснее: 2 64= 18 446 744 073 709 551 616 = 16 777 216 Терабайт. На данный момент это предел битности для процессора, хотя теоретически возможны полноценные 128-битные процессоры, а графические процессоры могут использовать и 512-битные регистры. Реальность такова, что можно наткнуться даже на 16-битные процессоры, которые позволят работать аж с… 64 Кбайта! Так как 16-битный процессор (216) – с 65 536 значений. Например, вполне реально найти древний Intel 8080 при работе с дешевыми дисплеями, или буквально бессмертный и полностью отечественный Z80. Более простые процессоры обладают 256 значениями, при 28. Такой 8-битный процессор может работать с символами ASCII.

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

У процессора есть регистры, то есть его личная сверхбыстрая память (СОЗУ) в виде именованных ячеек. Так как вся работа происходит внутри ЦПУ, то это наиболее быстрая память и, как принято, самая дорогая и лимитированная.

Выбор операционной системы — отдельный вопрос. В OS есть понятие user space и kernel space. Kernel space это пространство ядра. Как пользоватил системы, мы всегда работаем с софтом в user space. Программа же может попросить ядро отправить файл на печать или выделить память под задачу, т.е. программа работает с ядром. Ядро отвеает за распределение ресурсов, в том же DOS нет такого деления. DOS был для процессоров своего времени оптимальным решением, но тем не менее очень уязвим. Так, в MS DOS это всего 5 файлов:

  • io.sys — стартовал первым и считывал config.sys
  • command.com — интерфейс
  • config.sys — правила, как система работает
  • msdos.sys
  • autoexec.bat — команды, чтобы выполнить после загрузки

И были драйверы, всякие mouse.sys, cdrom.sys, keyrus.exe. Так как в MS DOS не было деления на user space и kernel space, то любое ПО оставалось в системе как драйвер, что было очень благоприятной средой для вирусов. Отсюда много зависаний ОС. Например, шрифты были точечные (матрица 8×8), и драйвер KeyRus.exe/kb.com умел подменять латинские символы на кириллические, и отслеживать смену раскладки.

Выбирая или создавая OS для устройства, учтите, что драйверы должны быть в kernel space, так как они работают с железом в монолитном ядре. Но существует и микроядро в разных вариациях, тогда драйверы работают за пределами kernel и user space. Так, ядро линкуса монолитное, и в случае смерти драйвера наступает kernel-паника (паника ядра) и перезагрузка системы. Во встраиваемых ОС, для бортовых компьютеров на самолете или в машине, важно чтобы система реагировала на прерывания и не падала. Поэтому для таки систем лучший выбор это микро-ядро, где драйвера находятся отдельно от ядра. Ядро – это основа операционной системы. Отвечает за взаимодействие программного и аппаратного обеспечения, доступа к файлам и сети, межпроцессное взаимодействие, управление задачами и распараллеливание. Ядро операционной системы может быть монолитным. И важно подумать о многозадачности. Многозадачность бывает вытесняющая и невытясняющая. Невытясняющая многозадачность: например, программа зависла, но мы можем работать с другими программами. Вытесняющая многозадачность — система сама закроем зависшую программу. В MS DOS была однозадачность, т.е. одна программа в момент времени. Справедливости ради нужно сказать, что в MS DOS была и невытесняющая многозадачность через драйвер для переключения задач через механизм прерываний. То есть, невытесняющую многозадачность легко реализовать.

Существует множество OS: серверные ОS, такие как Linux, Windows Server 200x, FreeBSD, Solaris. Можно пойти дальше и посмотреть на встроенные операционные системы, которые работают в микроволновках, машинах, телефонах, MP3-плеерах, примерами таких OS считаются QubesOS, QNX и VxWorks. Для сенсоров используется TinyOS, для smart-карт также существуют отдельные очень примитивные OS. OS не обязана быть огромной и тяжелой, например RIOT весит 10Кб и может работать на 8-и битных микроконтроллерах.

Я уделил этому отдельное внимание, так как это сильно сказывается на UX. Например, гибридное ядро приводит к тому, что сейчас крах драйвера NVidia не приводит к перезагрузке драйвера операционной системой. И всем известный Blue Screen of Death (BSOD) – своего рода визитная карточка Windows, часто появлялся именно из-за краха драйвера. С другой стороны, существует много других отказов, приводящих к появлению BSOD.

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

К плате подключаются всякие классные датчики, так называемые платы расширения. Какие они бывают? Два типа: 3-х и 4-х пиновые шлейфы. Если шлейф с 4-я пинами, то это GVSS: земля/питание/сигнал/сигнал. Трехпиновые: сигнал/питание/земля. Простое правило: черный провод всегда должен вставляться туда, где написано gmd. Комфортнее использовать трехпроводные шилды, датчику нужны только питание, сигнальный кабель и земля. Можно подключить плату для питания от батарейки, для NANO достаточно взять батарейку и закинуть плюс на 5v соединить с VIN, а минус с GND.

Запись кода на плату

Предположим, все нужные материалы у вас есть. Теперь программная часть, надо скачать IDE. Если Arduino не официальный, то понадобится драйвер CH340/CH341. Плата будет отображена в интерфейсе программы в разделе File -> Port. Тип устройства можно посмотреть и выбрать в File -> Board. При работе с китайскими копиями нужно выбрать тип платы как Duemilanove, это та плата, которая была до UNO. После всего этого надо зайти в диспетчер устройств Windows в раздел с портами, запомнить номер com-порта, на который «сел» Arduino, и выбрать его в File -> Port. Если возникают проблемы, то почти наверняка на многие вопросы есть ответы тут и тут.

Давайте сделаем первый шаг. На любой плате должен быть светодиод на цифровом порте №13. Большинство плат Arduino поставляются с отладочным светодиодом, он позволяет запустить вашу первую программу (мигающий светодиод) без подключения каких-либо дополнительных схем. Только за счет тока, не напряжения. Подсоединяем плату по USB и идем в File -> Examples -> Basics -> Blink. Плата должна начать моргать. Не забываем про кнопку перезагрузки на самой плате, если возникли проблемы. Если не получилось, то не задерживайтесь на этом шаге, мы будем разбирать настройку более детально.

Теперь заставим моргнуть внешнюю лампочку. У любых лампочек/светодиодов есть + (анод) и — (катод). Что есть что, можно определить визуально. Если вы посмотрите на нижнюю часть светодиода, то на кромке корпуса будет плоская сторона. Эта сторона — катод. Другой способ определить, какой стороной является анод, это посмотреть на длину ножек, Анод более длинный. Это важно, светодиоды позволяют току течь только в одном направлении — от анода к катоду. И не переживают перегрузок. Поскольку ток течет от положительного к отрицательному, анод светодиода должен быть подключен к источнику тока (в данном случае к цифровому сигналу 5V), а катод должен быть подключен к заземлению, для этого ставится резистор последовательно за светодиодом. Резистор это ограничитель тока в электрической цепи. Резисторы обладают номинальным сопротивлением в Омах, предельная рассеиваемая мощность (если больше — ломается), точность. Резисторы не поляризованы, поэтому вам не нужно беспокоиться об их ориентации. Для большей информации, гуглить ГОСТ 2.728-74. Для регулировки громкости аудио будет использоваться переменный резистор. Если резистор уже встроен в плату, то корректно не измерить его сопротивление, обычно на резисторах есть цветные кольца для определения номинала резистора. Такая цветовая маркировка в 4 цветных кольца, но бывает и 5. Два первых кольца это цифры номинального ряда, третье кольцо – множитель, четвертое – допустимое отклонение. Я использую мобильное приложение EE Helper как справочник по маркировкам.

Давайте рассчитаем резистор для белого светодиода:

  • 5V — 3.2V = 1.8V, из поступающего напряжения вычитаем рабочее напряжение светодиода.
  • Нужное сопротивление резистора: R = U/I = 1.8/0.03 = 60 Ом. Тут мы взяли 30 милиампер и поделили на ток. Выбираем соответствующий номинал резистора. Либо можно уменьшить ток и смириться с чуть менее яркой лампочкой.
  • Мощность рассеивания: P = 1.8V * 0.03 = 0.054 Вт.

Если нужно подключить сразу несколько светодиодов, то лучше подключать их последовательно, нежели параллельно. Параллельное подключение подразумевает, что характеристики светодиодов одинаковые, но это невозможно даже если светодиоды из одной партии. Появляется риск вывести из строя один светодиод -> увеличить кол-во тока на следующий светодиод -> цепная реакция выхода из строя всех светодиодов. Выход: каждому светодиоду по своему резистору. Или параллельно-последовательное соединение светодиодов. По такому принципу делаются светодиодные ленты.

Сопротивление резистора легко измерить омметром или мультиметром (тестером, авометром, цешкой). Если все 4 полосы зеленые, то это 5.5 Ом, 0.5%, а красные – 110 Ом, 1%. Чем больше значение резистора, тем больше он ограничивает прохождение тока, и тем сильнее светится светодиод. Также, не лишним будет иметь осциллограф для изменения параметров электрического сигнала. Генератор сигналов, лабораторный блок питания, логический анализатор. Работая с мультиметром, черную клемму прикрепляем на землю (кусок металла), и красным касаемся пинов. Если мультиметр высветил ноль, то это земля. На больших объемах производства, мультиметр будет заменен на специальный стенд джига (jig). Через специальные иголки будет производиться запитывание, чтение и отправка данных.

У меня под рукой классические маломощные резисторы с цветовой маркировкой, 220 Ом, 5%. Если около резистора расположить нагревающийся элемент, характеристики резистора изменяется. То есть, номинальное значение резистора 100 Ом ±5, т.к. это допустимый диапазон реального значения. В iPhone 7 кнопка Home сделана на тензорезисторе, сопротивление зависит от деформации.

Питание. Питание может идти по проводу. Скажем, медному. Нам нужно запитать устройство током в 10 ампер и постоянным напряжением 12V. Расстояние между устройством и источником питания = 10 метров (20 метров, 10 метров плюс и 10 метров минус). В наличии провод с сечением 1,5мм², значит на выходе блока питания будет 12,5V, а на входе на устройство получим только, например, 10,9V. Поэтому принято размещать источник питания как можно ближе к нагрузке. Порой хочется подавать питание плавно, например, уменьшать яркость лампочки от диммера, тогда используется тимистор или симистор.

Любой корпус для электронного устройства нуждается в заземлении. Без этого он бьется током, мешает микрофону/колонкам/электростатическим излучателям/звукоснимателям, и электроника внутри под угрозой. Да и метрологи будут недовольны. Если ваш корпус бьется током, то зачастую это пыль в БП, сам БП умирает, микросхемы прислонены к корпусу. Самый бюджетный вариант заземления это варистор, геркон. Для промышленных объектов будет заменено на свинцовые или цинковые заземлители. Любая старая проводка идет без заземления по схеме TN-C, хотя кабель питания идет с тремя контактами, один из которых про заземление. Возможна и обратная ситуация: в розетке есть земля, а в дешевом удлинителе бутафорский штекер с заземлением.

Вспомним школьный закон Ома. V = IR, где V (Voltage) — потенциальная разница между двумя токами. I — ток всегда течет от сильного напряжения к слабому. R (Resistance) — сопротивляемость, низкое значение сопротивляемости тока означает высокую скорость прохождения тока. Так, более по книжному, V — разность напряжений в вольтах, I — ток в амперах, а R — сопротивление. По уравнению можно подсчитать, какой резистор нам необходим. Чем слабее резистор, тем ярче светится лампочка в рамках своих возможностей, мои (как и большинство) упираются в 20 миллиампер. Мы не сможем использовать закон Ома для расчета вольтамперных характеристик лампы накаливания, так как нить накала меняет свойства сопротивления из-за нагрева, чем сильнее греется — тем больше сопротивление. Поэтому первый пуск квадрокоптера делается через лампочку.

Подключаем Arduino Uno с компьютером через USB-кабель. Вы увидите, как на плате загорится светодиод «ON», и начнёт мигать светодиод «L». Это означает, что на плату подано питание, и микроконтроллер Arduino Uno начал выполнять прошитую нами (или на заводе) программу «Blink» (мигание светодиодом). Далее по шагам:

  • Windows попробуем самостоятельно установить драйверы, безрезультатно.
  • Скорее всего, у вас китайская копия Arduino и большинство инструкций из интернета вам не помогут.
  • Скачиваем в интернете драйвер, в моем случае это CH341, устанавливаем CH341Serial_driver, то, что нужно для UART.
  • И устанавливаем софт, если еще нет — Arduino IDE.

Далее расставляем все как на картинке и запускаем код:

int led = 8;
void setup()
{
pinMode(led, OUTPUT);
}
void loop()
{
digitalWrite(led, HIGH);
delay(50);
digitalWrite(led, LOW);
delay(50);
}

Более интересный светодиод hw-479, умеет светиться поконально в RGB. Его уже не стыдно сделать и COB ламсветильником.

const int redPin = 8;
const int greenPin = 10;
const int bluePin = 12;
 
void setup() {}
 
void loop() {
  analogWrite(redPin, random(0,255));
  analogWrite(greenPin, random(0,255));
  analogWrite(bluePin, random(0,255));
  delay(800);
}

Давайте сделаем что-нибудь прикладное. У меня есть датчик температуры и влажности, называется DHT11 с тремя пинами (VCC, GND и DATA). Он умеет измерять температуру в диапазоне от 0 до 50 ºC +/-2 ºC и влажность от 20 до 80% +/-5%. Он ниже на фото, очень бюджетный, поэтому реальная погрешность считывания данных куда выше, особенно по влажности. Если есть возможность купить сразу DHT22 или BC18-D20, то так и сделайте. Но для прототипа сойдет старая модель.

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

Ниже показано, как надо вставить провода в макетную плату (breadboard), и все будет работать. Подключаем по USB, запускаем код, и в окне Serial Monitor (ctrl + shift + M) вы увидите отслеживание температуры и влажности. Можно поиграться, попробовать нагреть воздух, увеличить влажность, в моем примере ниже видно, что датчик реагирует изменением значений. Или загляните в окно плоттера (ctrl + shift + L).

#include "DHT.h"
#define Type DHT11
int sensePin=2;
DHT HT(sensePin,Type);
float humidity;
float tempC;
float tempF;
int setTime=500;
int dt=1000;
 
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
HT.begin();
delay(setTime);
}
 
void loop() {
humidity=HT.readHumidity();
tempC=HT.readTemperature();
tempF=HT.readTemperature(true);
 
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% Temperature ");
Serial.print(tempC);
Serial.print(" C ");
Serial.print(tempF);
Serial.println(" F ");
delay(dt);
}
17:02:35.143 -> Humidity: 64.00% Temperature 28.00 C 82.40 F 
17:02:36.161 -> Humidity: 64.00% Temperature 28.00 C 82.40 F 
17:02:37.419 -> Humidity: 68.00% Temperature 28.00 C 82.40 F 
17:02:38.438 -> Humidity: 68.00% Temperature 28.00 C 82.40 F 
17:02:39.692 -> Humidity: 95.00% Temperature 28.00 C 82.40 F 
17:02:40.711 -> Humidity: 95.00% Temperature 28.00 C 82.40 F 
17:02:41.963 -> Humidity: 95.00% Temperature 29.00 C 84.20 F 
17:02:42.980 -> Humidity: 95.00% Temperature 29.00 C 84.20 F 
17:02:44.269 -> Humidity: 95.00% Temperature 29.00 C 84.20 F 
17:02:45.253 -> Humidity: 95.00% Temperature 29.00 C 84.20 F 
17:02:46.541 -> Humidity: 95.00% Temperature 29.00 C 84.20 F 

Команда Serial.begin(9600) задает на связь по Serial скорость 9600 бит в секунду, и это самая частотная скорость для большинства устройств с связью через TTL. Вторая по частоте 115200.

Макетная плата (breadboard) это легкий способ прототипировать электронику без необходимости паять. Внимательный читатель найдет синие и красные линии, проходящие по всей длине платы, они отвечают за питание и заземление. Красные — питание на 5V, плюс. Синие — цифровые входы, выходы, минус. Верхние и нижние линии не соединены, но можно соединить их проводом. Вертикальные ряды соединены по двум блокам. То есть, верхние синие соединены и это минус, красные соединены и это плюс, нижний блок из дырочек соединен только по вертикали. Но контакты на макетной плате держаться не очень надежно, для коммерческого использования почти наверняка не подойдет.

Возьмем другой классный модуль расширения, 1602a, это крупный текстовый экран без возможности выводить кириллический текст (буквы английского алфавита зашиты в память контроллера). Буквы в хранятся в ПЗУ и не нуждаются в питании, чтобы оставаться на микросхеме. 1602 означает 16 символов на двух строках. Вариантов 1602 экранов много разных, в основном они сделаны на старом контроллере HD44780U с разным качеством экрана и яркостью. Помимо самого экрана, нужен 1602 LCD конвертор в IIC/I2C. Убедитесь, что у вас установлена библиотека LiquidCrystal. Скорее всего, первые подключения выльются в такие вот квадраты. Основные причины: плохой контакт или неправильное подключение проводов (не те пины или перепутан порядок);

Для настройки яркости экрана надо крутить синий винтик на модуле, это позволяет регулировать напряжение и тем самым регулируется контрастность экрана. Перемычка слева отвечает за подсветку экрана. GND — минус, VCC на питание 5v, SDA на A4, SCL на A5.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2); // установка адреса и размера дисплея
void setup()
{
  lcd.init(); // инициализация дисплея
  lcd.backlight();
  lcd.print("Hello, world!");
}
void loop()
{
}

Такой простой код покажет на экране Hello, world! Далее, датчик звука. Я использую KY-037 с потенциметром bochen 3296 guosheng, который замеряет громкость звука. Это пример неудобного варианта, в котором 4 пина: Pin 4: Digital Output, Pin 3: + 5 Volts, Pin 2: Ground, Pin 1: Analog Output, + нам понадобится резистор. Подключаем, как на фото, и используем следующий код:

void setup() {
Serial.begin(9600); // setup serial
}
void loop() {
Serial.println(analogRead(A0));
delay(100);
}
19:29:44.651 -> 323
19:29:44.753 -> 67
19:29:44.854 -> 838
19:29:44.955 -> 254
19:29:45.057 -> 125
19:29:45.159 -> 68
19:29:45.261 -> 72
19:29:45.363 -> 51
19:29:45.465 -> 892
19:29:45.567 -> 132
19:29:45.669 -> 165

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

Может показаться, что все сделанное нами очень просто. Но посмотрите на схему SIM-карты, она также очень простая.

Touch Designer

Для написания чего-то более сложного нам понадобится Firmata, либо знание С++. Я предпочитаю Firmata + Touch Designer. Firmata позволяет визуально работать с большим количеством датчиков, а Touch Designer генерирует интерактивные инсталляции. Выполним пример по аналогии с blink, но с путем Examples -> Firmata -> Standart Firmata, записав его на плату. Забегая вперед, это позволит нам взаимодействовать с Touch Designer и с VVVV.

В Touch Designer присутствуют некоторые виды нод по категориям: TOP — работа с графикой, CHOP — математика и аудио, SOP — генерация геометрии, MAT — материалы, DAT — таблицы. Итак, подключаем джостик, или любой другой манипулятор, настраиваем связь нод. Указываем нужный порт, включаем все свитчи и протыкиваем все кнопки pulse. Вы увидите прыгающие цифры, мы работаем с аналоговыми портами и в них всегда есть шум. Решается добавлением ноды lag, в которой можно настроить значения. Можно добавить и операционный усилитель для усиления аналогового сигнала.

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

Сравнивая аналоговые и цифровые порты, аналоговый порт это разовый «скачок» между 0 и 5v, переключение True и False. Цифровой порт также «бегает» между 0 и 5v, но используя весь диапазон. Например, для датчика света полная тьма в комнате = 0, а максимальное освещение = 5. Существуют аналого-цифрового преобразователя (ADC), они умеют преобразовать аналоговые значения напряжения в удобный для работы формат. В случае моей платы Arduino Uno используется 10-битный ADC, выдающий до 210 различных значений, 2^10 = 1024. Так, 5v возвращает значение 1023, 0v = 0, а 2.5v = 512.

Это задачи раздела математики «теория сложности вычисления», решаются по Тьюрингу только перебором всех вариантов. Булева алгебра, где каждая величина может принимать только одно из двух значений, true или false. Например, 1&&0 = 0, 1 || 0 = 1. Первые машины были сделаны на лампах, все было вручную — диод может либо пропускать ток, либо не пропускать, получаем на выходе нолики и единички. Лишь потом появились транзисторы, в которых помещаются примеси атомов в кристаллическую решутку. И они проводят ток. На транзисторах работают аналоговые цифровые схемы, и первые программы на перфокартах уже работали через транзисторы.

Пытливые умы также могут поработать с библиотекой maxuino в Max / MSP / Jitter, это еще одна программа для создания визуально классных инсталляций. Или процессинг. Это уже про написание кода, отдельный редактор.

16 комментариев

  1. Динар

    18.05.2021

    Привет! как эти знания масштабировать на реальное производство?

    • Цветков Максим

      18.05.2021

      Многая китайская техника собрана на STM32 (в отличии от ардуиновской Atmega), и любое цифровое оборудование требует микропроцессора или микроконтроллера. Зубные щетки, складские роботы, домофоны, устройства яндекса — все на STM32. И далее идет массовое производство, но для такого производства должен быть соответствующий спрос на рынке. Завозить смонтированные электронные модули и производить отверточную сборку — это один процесс. Если делать монтаж компонентов на плату, разрабатывать схемотехнику, продумывать топология печатных плат — другой процесс. Альтернатива это ESP, также часто встречаются в бытовой технике, особенно в колонках.

      Не советую гнаться за 14нм, производство 28нм налажено лучше.

      Примеров отечественной электроники много, например, электросчетчики, светильники или кассовая техника. Они выпускаются миллионами штук. И Эльбрусы-Байкалы. Все это на территории Евразийского союза.

      • ilya Zlobin

        29.07.2022

        У нас задача, сделать переносной програмно аппаратный комплекс для связи промышленного оборудования и сервера. Уместно ли использовать STM32? Или лучше сразу идти в сторону MDR32?

        И что делать с питанием устройства, как рассчитывается?

        • Цветков Максим

          29.07.2022

          Любой микроконтроллер это микросхема для управления другими электронными устройствами. Состоит из процессорного ядра, собственных ОЗУ и ПЗУ, практически однокристальный компьютер для простых операций. STM32 это основа для потребительской электроники, по STM32 много документации, интегрированная среда разработки Eclipse, отладчики и анализаторы, много библиотек. Программирование под STM32 очень схоже с программированием под микроконтроллеры другой серии STM32. Адреса в памяти будут другими, но высокоуровные функции для отправки данных — одинаковые. Звучит просто, но основная сложность работы с электроникой в том, что требуется учитывать много разных аспектов: электроника, печатная плата, логика внутренних переферийных устройств, программирование, отладочные средства, и самая жирная тема это электропитание микроконтроллера. Существуют разные STM32: L0 требуют питания (STM32L0), WL для беспроводных (STM32WL).

          По питанию: питающие напряжения должны находиться в допустимом диапазоне (спасибо кеп). Типовое питание STM32 = 3.3V, больше подавать нельзя. Только на пины с обозначением FT можно подать до 5V. Аналоговая периферия требует отдельный полигон под аналоговую землю, и отдельный под цифру. Так шумы с цифровой части не попадут на аналоговую часть. Для STM32F030 вот пример схемы питания: VDD это цифровое питание, аналоговое питание должно быть без пульсации. Например, если мы делаем считыватель показателей, то для аналоговой и цифровой частей используются отдельные источники питания. Шумы портят результаты измерений. Но! если не нужна высокая точность для аналоговой части — то все можно запитать от одного источника питания. С цепями фильтрации, конденсаторами для фильтрации шумов.

  2. Ruslan Stellaberg

    27.07.2021

    Какие процессоры используются в более простой технике, чем компьютеры или телефоны?

    • Цветков Максим

      27.07.2021

      Если не Intel (x86 ) и не AMD, где ARM это мобильнички. Есть M1 ARM от Apple, но он только для техники Apple и относится к категории произведений искусства.

      Можно посмотреть на Zhaoxin KX-U6780A или KX-U6880A. Производительность не впечатляет и не дотягивает до Intel Core i5, но вполне работают. Другие процессоры Hygor Dhyana, но с ними уже не так все радужно. И Эльбрус для правительственных серверов и техники для военных. Я бы смотрел на RISC-V.

  3. Анна Бурлыга

    17.10.2021

    Привет! на что посмотреть при выборе аккума для прибора?

    • Цветков Максим

      17.10.2021

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

      Аккум может быть Li-ion от Li-Pol. Они примерно одинаковые, Li-ion имеет меньше циклов, но лучше отдает энергию. В гаджетах, в основном используются Li-Pol. Быстрая зарядка уменьшает срок жизни аккумулятора.
      В авто зачастую батареи из кобальта. Можно найти Li-ion 4.35 или 4.4в (Li-HV аккумуляторы).

      Для литий-марганцевых и литий-никель-марганцевых электрических аккумуляторов лучше не заряжать батарею до 100% и не разряжать ниже 30%, так батарейка прослужит дольше.
      Литий-кобальтовые аккумуляторы не рекомендуется заряжать выше 4.15 вольта, т. к. выделяется водород и если ему некуда выйти, то вздувается корпус устройства.

  4. Imya Familiev

    17.01.2022

    Есть какое-то устройство, которое может помочь с газовой плитой, сломалась кнопка для создания искорок?

    • Цветков Максим

      17.01.2022

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

  5. Kirill Mayorov

    16.07.2023

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

    • Цветков Максим

      16.07.2023

      По описанию похоже на архитектуру для хранения документов на офисном принтере с маленьким встроенным веб-сервером.
      Я бы смотрел на библиотеку FatFs. В устройство добавляется SD-карта для хранения файлов, и какой-нибудь STM32F407 все это обрабатывает. И я понимаю, что FatFs весьма старая файловая система, и ее популярность падает. Но она по прежнему активно используется в маленьких устройствах. Я решил ее посоветовать, потому что она очень простая. Есть корневой каталог (таблица) с именами файлов и ссылками на сектора, где хранятся файлы. В микроконтроллерах есть однименная библиотека FatFs, драйвер файловой системы. Платформо-независимый, работает на любом кикроконтроллере, лишь бы хватило оперативной памяти. В теории, не оставляет следов, но так как запись ведется по секторам, то минимум один сектор в районе 1кб будет жить в пямяти. Так вы сможете по названию читать и записывать файлы.

  6. Dian Nugmanov

    22.07.2023

    Интересует вот что: при проектировании устройства, как плату защитить от скачков напрядения?

    • Цветков Максим

      22.07.2023

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

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

      Так вот, вы вставили диод, он в одну сторону пропускает ток, в другую не пускает. Если пользователь вставит источник питания неправильно, то ток не пойдет, будет напряжение пробоя. Предположим, что через нагрузку идет 2А, а падает 1,5Вт на светодиоде. Это много, так что понадобится диод повышенной мощности и теплоотвод. Диод хорошее решение для маломощных нагрузок, но для больших нагрузок это растрата энергии. Если на среднерыночный диод падает 0,5Вт, то это уже много, нужен другой метод защиты от переплюсовки. Стабилитрон это тоже своего рода диод, у него маленькое напряжение пробоя. Его можно использовать для отключения питания. Или альтернатива стабилитронам — TVS-диоды, для подавления резких скачков, они быстрее стабилитрона. Защита от мощных статических зарядов это универсально TVS-диод, варистор, газоразрядник. Но это некий уровень сверх-защиты, для бытовых приборов хватает резистора + стабилитрона.

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

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

      Лично я предпочитаю релейные системы, хоть их и надо коммутировать. Есть некая управляющая система, независимая от источника питания, которая должна коммутировать релийную систему. И другой отличный вариант это линейный стабилизатор: ему на вход прилетает 12, а на выходе он выдает 5. Куда-то теряется 7 вольт, которые рассеиваются в стабилизаторе, и у этого есть предел. Помним, что стабилизатор всегда про уменьшение нагрузки, он не может повысить напряжение.

  7. Иван Репин

    13.08.2023

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

    • Цветков Максим

      13.08.2023

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

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

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

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

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

Оставить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.