Основные понятия электроники и контроллер Arduino
Основные понятия электроники
Электронное устройство
Любое электронное устройство должно быть подключено к источнику питания, + и –.
(В лекции рассматриваем только постоянный ток.)
Датчик температуры
2) Обычно электронные устройства имеют несколько сигнальных контактов для выдачи/приёма данных.
3) Недопустимо прямое соединение + и –.
Это короткое замыкание. Провода начинают дымить и перегорают, блок питания выходит из строя. USB-порт компьютера также может выгореть.
Аналоговое устройство
1) Ток в вольтах
Потенциометр
2) ШИМ (Широтно-импульсная модуляция)
http://musiccreate.ru/images/articles/005
/arduino.ru/sites/default/files/pwm_ru.png
Цифровое устройство
Цифровой сигнал, закодированный двумя уровнями тока
0011001010011000
Цифровые датчики работают точнее, чем аналоговые, но для их использования нужны цифровые контрллеры
Гироскоп/акселерометр
GY-521 - Гироскоп + акселерометр на ИС MPU6050
https://vk.com/photo-63602362_325730697
Примеры устройств
http://www.itsahit.com/rikard/Restorations/images/JP6/uncleanpcbpotsandall.jpg
http://www.djtechtools.com/wp-content/uploads/2008/11/nano-sliders.jpg
ИК датчики движения
Активные 
стоит излучатель и приемник.
acroname Sharp IR (в России пока не нашел) - меряет также расстояние.
Autonics BA2M-DDT - по типу реле, выдает бинарный сигнал если объект ближе некоторого расстояния.
Проблемы - если объект черный, то могут не сработать так как они рассчитаны на то, что объект отражает свет. Показатель расстояния зависит от цвета объекта.
Пассивные
Использутся в охранных системах.
Основаны на измерении (теплового) ИК-излучения от объектов
Ультразвуковой датчик расстояния - сонар
Maxbotix LV-MAXSONAR-EZ1
Компактный, недорогой, используется энтузиастами-любителями, в частности, для экспериментальной робототехники.
Проблемы для применения в интерактивных системах - недостаточно точный, и не будет работать за стеклом.
Принцип работы - посылает ультразвуковой сигнал и меряет время, через которое приходит отраженный сигнал.
Детектор движения
HC-SR501 - ИК детектор движения https://vk.com/photo-63602362_320206638
Настройки детектора движения
Настройка чувствительности Настройка задержки (между срабатываниями)
Тензодатчик (измерение силы)
https://vk.com/photo-63602362_352390624
Датчик уровня жидкости
https://vk.com/photo-63602362_318052401
Датчик температуры
Датчик температуры DS18B20 (влагозащищённый)
https://vk.com/photo-63602362_348476303
Сегментный дисплей
Четырёхразрядный семисегментныйиндикатор
https://vk.com/photo-63602362_349083198
Светодиодная матрица
Светодиодная матрица 8x8 RGB 60мм https://vk.com/photo-63602362_354022621
Arduino
Arduino — аппаратная вычислительная платформа, основными компонентами которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wiring.
Arduino может работать как автономная микропроцессорная плата.
Также может подключаться через USB к компьютеру и интегрироваться с программным обеспечением, выполняемым на компьютере.
Например, Flash, Processing, Max/MSP, Pure Data, SuperCollider, OpenFrameworks.
Аппаратура
Плата Arduino состоит из микроконтроллера Atmel AVR, а также элементов обвязки для программирования и интеграции с другими схемами.
Программирование
Для Arduino создана интегрированная среда разработки на Java, включающая в себя редактор кода, компилятор и модуль передачи прошивки в плату. Запускается сразу, без установки.
Контроллер Arduino
Arduino UNO R3
https://vk.com/photo-63602362_323260084
Программа для мигания встроенным светодиодом
Запустить Arduino.exe, затем в меню выбрать File - Examples - Digital - Blink
int ledPin = 13; // LED connected to digital pin 13 - это также выводит и на встр.ламп.
// The setup() method runs once, when the sketch starts
void setup() {
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop()
{
digitalWrite(ledPin, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(ledPin, LOW); // set the LED off
delay(1000); // wait for a second
}
Программа для мигания внешним светодиодом
Подключим светодиод к цифровому выходу 12, и AREF (он подключен к питанию)
(С точки зрения радиоэлектроники не очень корректно - надо еще резистор, но для примера нормально)
В предыдущей программе изменить строку:
int ledPin = 12;
Тут Arduino работает как независимое устройство. Можно выключить USB-шнур и подключить внешний источник питания.
Но нас больше интересует, как ввести данные для использования в OpenFrameworks. Займемся этим.
Подключение потенциометра (фейдера)
Как передать данные от Arduino в PC - Serial Port.
Arduino обменивается с PC данными через последовательный COM-порт. Мы подключили через USB - в этом случае COM-порт эмулируется.
Подключим к Arduino сонар и будем просто печатать в порт приходящие значения.
В среде программирования для Arduino есть возможность смотреть данные с порта, а также посылать туда значения.
Использование Arduino в openFrameworks
Подключение сонара к аналоговому входу Arduino
Скомпилировав и закачав эту программу в устройство,
нужно в Arduino IDE нажать кнопку "Serial Monitor",
и появится список считанных значений.
...
sensor = 50
sensor = 50
sensor = 143
sensor = 143
sensor = 140
sensor = 140
sensor = 50
sensor = 48
...
ПРИМЕЧАНИЕ Повышение точности измерений сонара
Если в Setup() добавить analogReference(INTERNAL); то будет измерение точнее - так как сравнивать не с 5 В, а 1.1В
(другие значения - DEFAULT = 5В, EXTERNAL - внешний, сравнение с AREF)
Протокол Firmata
Мы рассмотрели пример, как с помощью класса ofSerial можно работать с последовательным портом.
Это позволяет обмениваться данными с Arduino.
Обычно это делается синхронно - посылаем в Arduino управляющий сигнал (например, произвольный 1 байт), а в ответ ждем пачку данных.
Неудобство: для каждой новой конфигурации датчиков нужно перепрограммировать и отлаживать Arduino и процедуру обмена данными в OpenFrameworks.
Решение: использовать протокол Firmata, специально созданный для упрощения операций ввода/вывода данных.
А на стороне Arduino программа она не меняется: все настройки делаются через OpenFrameworks / Processing / Max/MSP.
Протокол Firmata
Firmata is a generic protocol for communicating with microcontrollers from software on a host computer. It is intended to work with any host computer software package. Right now there is a matching object in a number of languages. It is easy to add objects for other software to use this protocol. Basically, this firmware establishes a protocol for talking to the Arduino from the host software. The aim is to allow people to completely control the Arduino from software on the host computer.
Класс ofArduino в OpenFrameworks использует Firmata, и имеет простые команды для подключения к Arduino и ввода-вывода данных с портов Arduino, например:
int getAnalog(int pin) - считать данные с аналогового входа номер pin
int getDigital(int pin) - считать данные с цифрового входа номер pin
Чтобы этим пользоваться, надо поставить в Arduino программу работы с Firmata, см. далее.
Пример обмена данными OpenFrameworks - Firmata - Arduino
- На стороне Arduino: закачать программу
Firmata - StandartFirmata
- На стороне OpenFrameworks:
запустить пример FirmataExample, предварительно указав в нем в строке используемый порт
(это могут быть COM4, COM6, COM7 и т.д.):
ard.connect("COM6", 57600);
(3. Если работа идет с тем же сонаром - стоит в Arduino - Setup() добавить analogReference(INTERNAL); для повышения точности измерений, см. примечание выше).
Как узнать порт - программа пишет при старте в отладочном окне список имеющихся портов.
Если же список портов на экран не вывелся, то при включенном устройстве можно посмотреть его в Диспетчере Устройств.
Пример обмена данными OpenFrameworks - Firmata - Arduino
Проект с увеличивающимся квадратом
Цель: исследование точности и устойчивости измерений сонара.
На основе примера firmataExample сделать проект, в котором рисуется квадрат, размеры которого зависят от измеренного расстояния.
Проект: управление генератором звука с помощью сонара
Идея: использовать значения сонара для изменения высоты генерируемого звука.
Генерацию звука рекомендуется делать на основе примера audioOutputExample.
Данные, приходящие с сонара, стоит сглаживать.
Простейший фильтр:
filtered = f * value + (1-f) * filtered.
где filtered - сглаженное значение, value - новое значение, f - коэффициент фильтра, от 0 до 1, например, 0.2 или 0.01.
Физические вычисления
Профессор Йоичи Нагашима.
Университет Искусства и Культуры,
г. Шизуока (Япония)
Композитор, инженер, изобретатель,
автор нескольких книг по физическим вычислениям (на японском)
Сайт:
nagasm.org/ASL/index.html
Art & Science Laboratory
2010 - Екатеринбург, УГК,
Выступление с произведением
“Ural Power” на фестивале SYNC’2010
Мастер-классы по Max/MSP
/www.youtube.com/watch?v=32FLFkgZYKk