Ребятушки всем Привет. Если перефразировать знаменитую пословицу, то получиться следующее. «Что нам стоит пианино построить». На прошлом weekend-e были с сыном на выставке робототехники и увидели там фруктовое пианино от MakeyMakey. Интересная штуковина хочу сказать вам.

И вот  в памяти всплыл принцип работы этого пианино. Плата от MakeyMakey стоит неприличные 50$, а на полке лежит свеженький Arduino Pro Micro от Дядюшки Ляо. В голове созрел план. Для особо ленивых видео в конце статьи.

Немного теории для начала.

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

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

Это не мой оригинальный дизайн. Идея управления цифровым устройством, используя человеческое тело как часть схемы, была известна уже давно, и MakeyMakey популяризировал его с помощью симпатичного маленького комплекта. Если вам нравится принцип «достал из коробки и все работает «, обязательно посмотрите Makey Makey! Но если вам как и мне жалко отдавать 50$, вы можете создать подобное устройство самостоятельно, используя только Arduino и несколько соединительных проводов, несколько резисторов, компьютер с виртуальным пианино и набором фруктов.

Как это работает?

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

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

Если рука не касается фрукта, тогда вся схема тело-руки-тело становится открытой цепью с бесконечным сопротивлением. В этом случае схема упрощается до + 5В, подключенных через резистор 1 мОм к аналоговому входу. Поскольку аналоговый вход сам по себе потребляет практически нулевой ток, в цепи не будет течь ток и не будет падать напряжение на резисторе 1 мОм (помните закон Ома V = iR, поэтому, когда i = 0, тогда V = 0). Напряжение, измеренное на аналоговом входе, все равно будет + 5 В, а функция Arduino analogRead(A0) вернет 1023, максимально возможное значение для его 10-битного разрешения.

Когда рука касается фрукта, схема «фрукт-рука-тело» образует органический резистор с сопротивлением около 1 мегаом. Ток будет течь от +5 В через реальный резистор 1 мОм, затем через резистор 1 мегаом с плодовым корпусом и падать на землю. Общее сопротивление между + 5 В и GND составляет 2 мОма, а при наличии двух резисторов равного значения напряжение в точке на полпути между ними будет вдвое меньше общего падения напряжения. Это означает, что аналоговый вход Arduino будет иметь напряжение 2,5 В, а функция analogRead(A0)вернет значение около 512.

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

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

Важный момент. Перед тем как перейти к коду программы. Мы будем эмулировать нажатие клавиш на клавиатуре при помощи стандартной библиотеки Keyboard.h К сожалению Arduino может эмулировать работу HID USB устройств начиная с микроконтроллеров 16u4 и выше на борту. Поэтому Arduino Nano, Uno и им подобные к сожалению в пролете. 

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

#include <Keyboard.h>

int analogValue0 = 0;
int analogValue1 = 0;
int analogValue2 = 0;
int analogValue3 = 0;
int analogValue4 = 0;

int threshold = 800;
int wait = 100;

void setup() {
  Serial.begin(9600);
  Keyboard.begin();
}

void loop() {
  analogValue0 = analogRead(A0);
  analogValue1 = analogRead(A1);
  analogValue2 = analogRead(A2);
  analogValue3 = analogRead(A3);
  analogValue4 = analogRead(A9);
  
  if (analogRead(A0) < threshold)
  {
    Keyboard.press(216);
    Serial.println(analogValue0);
    delay(wait);
    Keyboard.release(216); 
  }
  else if (analogRead(A1) < threshold)
  {
    Keyboard.press(218);
    Serial.println(analogValue1);
    delay(wait);
    Keyboard.release(218); 
  }
  else if (analogRead(A2) < threshold)
  {
    Keyboard.press(215);
    Serial.println(analogValue2);
    delay(wait);
    Keyboard.release(215); 
  }
  else if (analogRead(A3) < threshold)
  {
    Keyboard.press(217);
    Serial.println(analogValue3);
    delay(wait);
    Keyboard.release(217); 
  }
  
}

Обещанное видео для тех кому лень читать.

Друзья. Если вам понравилась эта статья, поделитесь ей в социальных сетях. Обязательно напишите комментарий если у вас возникли вопросы. Мне важно ваше мнение. У нас есть групповой чат в Telegram, где вы можете оперативно задать вопрос и узнать о последних новостях.  И поддержите проект монеткой на страничке Donate.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here

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