Прототипирование электроники: 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 раза по току. Особенно, если у китайцев.

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

Плата 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-битных чисел. 8 бит = 1 байту, компьютеру же интереснее машинное слово, которое представлено как 32 бита.

К плате подключаются всякие классные датчики, так называемые платы расширения. Какие они бывают? Два типа: 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), а катод должен быть подключен к заземлению, для этого ставится резистор последовательно за светодиодом. Резистор это ограничитель тока. Резисторы не поляризованы, поэтому вам не нужно беспокоиться об их ориентации.

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

На резисторах есть цветовая маркировка, обычно 4 цветных кольца, но бывает и 5. Два первых кольца это цифры номинального ряда, третье кольцо – множитель, четвертое – допустимое отклонение. Сопротивление резистора легко измерить омметром или мультиметром. Если все 4 полосы зеленые, то это 5.5 МОм, 0.5%, а красные – 110 Ом, 1%. Чем больше значение резистора, тем больше он ограничивает прохождение тока, и тем сильнее светится светодиод. У меня под рукой классические маломощные резисторы с цветовой маркировкой, 220 Ом, 5%.

Подключаем 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);
}

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

Ниже показано, как надо вставить провода в макетную плату (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

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

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.

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

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

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