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

Одним из самых интересных навыков промдизайнера по праву считается возможность переводить свои идеи в физический мир. Помимо понятных навыков и знаний про разработку серийных продуктов из пластмассы и твердотельного поверхностного моделирования в 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 раза по току. Особенно, если у китайцев. Перечисленные элементы можно разделить по вольт-амперным характеристикам, они могут быть пассивные/линейные и активные/нелинейные. Так, резистор, микрофон и катушка индуктивности это пассивные компоненты, подчиняются закону Ома. Активные это диоды, транзисторы, симисторы, у них нет линейной зависимости напряжения тока. Напомню, ток это упорядоченное движение заряженных частиц, электронов с отрицательным зарядом. Когда мы вставляем батарейку + к +, — к -, то это исключительно для направленного движения электронов. Через тело человека тоже может идти электрический ток, поэтому мы работаем со слаботочкой. А электрикам сложнее и опаснее.

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

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

Транзисторы. Нужны для изменения параметров тока и напряжения в сети. В современных устройствах могут быть миллиарды транзисторов, они необходимы для вычислений: в 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 вольт.

Поддержка разных процессоров, вроде 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 была и невытесняющая многозадачность через драйвер для переключения задач через механизм прерываний. То есть, невытесняющую многозадачность легко реализовать.

Я уделил этому отдельное внимание, так как это сильно сказывается на 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%. Чем больше значение резистора, тем больше он ограничивает прохождение тока, и тем сильнее светится светодиод. Также, не лишним будет иметь осциллограф для изменения параметров электрического сигнала. Генератор сигналов, лабораторный блок питания, логический анализатор. Работая с мультиметром, черную клемму прикрепляем на землю (кусок металла), и красным касаемся пинов. Если мультиметр высветил ноль, то это земля.

У меня под рукой классические маломощные резисторы с цветовой маркировкой, 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.

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, это еще одна программа для создания визуально классных инсталляций. Или процессинг. Это уже про написание кода, отдельный редактор.

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

  1. Динар

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

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

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

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

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

      • ilya Zlobin

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

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

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

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

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

  2. Ruslan Stellaberg

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

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

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

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

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

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

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

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

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

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

  4. Imya Familiev

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

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

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

«Взаимодействуя с данным сайтом, вы, как пользователь, автоматически даете согласие согласие на обработку персональных данных» Согласие

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