Музыкально-световой клавесин на Intel Galileo

Сначала рассмотрим плату Intel Galileo. Intel Galileo — первый Arduino-совместимый микрокомпьютер на платформе Intel. Galileo полностью совместим с картами Arduino как с точки зрения ПО, так и по распиновке (все цифровые и аналоговые разьемы находятся на тех же местах, что и у Arduino Uno R3). Кроме того, Galileo имеет на борту полноразмерный слот mini-PCI Express, порт 100Mb Ethernet, слот Micro-SD, последовательный порт RS-232, USB хост и клиент, а также 8Мб NOR флеш.

Galileo собран на базе одноядерного х86 процессора Intel Quark X1000 с частотой 400 МГц. Процессор имеет 16 Кб L1 кеша и 512 Кб встроенной в чип памяти.
По сравнению с другими картами Arduino, Galileo имеет несколько особенностей, повышающих ее производительность.

  • SD слот имеет собственный контроллер, обмен данными осуществляется без участия SPI;
  • Ethernet порт также работает без помощи SPI;
  • Впервые реализован полноценный PCI Express слот, позволяющий устанавливать карты расширения, такие как Wi-Fi, Bluetooth, 3G и т.д.

Программирование Galileo осуществляется с помощью ПО Arduino. Во флэш прошит минималистический Yocto Linux образ на ucLibc и busybox, который умеет, в основном, загружать и исполнять Arduino скетчи. Если вдруг разработчику захочется поставить более функциональный дистрибутив можно загрузить на microSD-карту  образ диска IOT(Internet of Things) devkit для Intel Galileo, в который включены  полезные драйверов и библиотеки для разработки на C/C++/Python/Node.js.

Помимо обычных средств программирования, в образе диска IOT devkit для Intel Galileo также содержится одно не совсем обычное. Румынский стартап Wyliodrin (см. рис. 15.1) (http://www.wyliodrin.com) разработал среду программирования на основе Blockly, облегчающая графическое программирование сенсоров/актуаторов на Intel Galileo, Edison и Raspberry Pi. Wyliodrin – это онлайн сервис, который позволяет программировать устройства, загружать программы и управлять устройствами прямо из браузера. При программировании встраиваемых устройств, как правило, необходимо подключить их к компьютеру. С Wyliodrin, устройство должно быть подключено только к Интернету. Если устройство подключено к Интернету, оно может быть в любом месте. Вы можете запрограммировать его, просто войдя в свой аккаунт Wyliodrin. Если у вас есть метеостанция ​​или удаленное устройства автоматизации, вы можете запрограммировать и управлять ими из вашего дома или офиса. Программирование встраиваемых устройств обычно означает изучение C или C ++. С Wyliodrin вы можете выбрать язык, который вы любите от C / C ++, Java, Pascal, Shell Script, Perl, PHP, Objective-C, C #, Python, JavaScript. Если вы не знаете никакого языка программирования, вы можете использовать визуальную среду программирования, где построение программы осуществляется простым перетаскиванием блоков. Сервис позволяет строить графики, для отображения данных, получаемых с устройств.

Сервис Wyliodrin с 24.11.2014 по 24.12.2014 года проводит конкурс проектов, в качестве призов купоны для amazon.com и бесплатные аккаунты в сервисе Wyliodrin. О проекте узнал неделю назад, времени осталось совсем мало, но сделать что-то успел. Предлагаю вашему вниманию проект музыкально светового поздравления. Набираем на клавиатуре подключенной к Arduino/Raspbery Pi  нотами в две октавы музыкальный фрагмент, он понотно передается через Интернет и сервис Wyliodrin на плату Intel Galileo, где проигрывается на динамике и кроме того на RGB-ленте воспроизводятся эти ноты в виде цвета.

Raspberry Pi (с Arduino на борту) и плата Intek Galileo подключены к сервису Wyliodrin

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

Первая часть проекта — Отправка сообщений из Raspberry Pi на плату Intel Galileo через сервис Wyliodrin

Плата Arduino Uno подключена  к Raspberry Pi  

При нажатии на кнопки воспроизводится звук ноты и в последовательный порт /dev/ttyAMA0 выдается сообщение в формате JSON, которое скрипт на python в Raspberry Pi перенаправляет в сервис Wyliodrin плате Intel Galileo. 

Скетч на Arduino

 #include "Keypad.h"  const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //define the cymbols on the buttons of the keypads char hexaKeys[ROWS][COLS] = {   {'1','2','3','A'},   {'4','5','6','B'},   {'7','8','9','C'},   {'*','0','#','D'} }; byte rowPins[ROWS] = {11, 10, 9, 8}; //connect to the row pinouts of the keypad byte colPins[COLS] = {7, 6, 5, 4}; //connect to the column pinouts of the keypad  //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);  char key;  #include  SoftwareSerial mySerial(2, 3); // RX, TX  const int pinTone = 12; int tones[] = { 3830, 3400, 3038, 2864, 2550, 2272, 2028,                 1915, 1700, 1519, 1432, 1275, 1136, 1014 };  void setup()   {   Serial.begin(9600);   Serial.println("Project Wyliodrin");   mySerial.begin(9600);   mySerial.println("Start Wylio send");   }    void loop()   {   key = customKeypad.getKey();      if (key)     {       Serial.println(key);     mySerial.print("{note:");     switch(key)       {       case '1':          tone(pinTone,tones[0]);mySerial.print("C");mySerial.print(",id_note:");           mySerial.print("1");mySerial.println("}");           break;       case '2':          tone(pinTone,tones[1]);mySerial.print("D");mySerial.print(",id_note:");           mySerial.print("2");mySerial.println("}");           break;       case '3':          tone(pinTone,tones[2]);mySerial.print("E");mySerial.print(",id_note:");           mySerial.print("3");mySerial.println("}");           break;       case 'A':          tone(pinTone,tones[3]);mySerial.print("F");mySerial.print(",id_note:");           mySerial.print("4");mySerial.println("}");           break;       case '4':          tone(pinTone,tones[4]);mySerial.print("G");mySerial.print(",id_note:");           mySerial.print("5");mySerial.println("}");           break;       case '5':          tone(pinTone,tones[5]);mySerial.print("A");mySerial.print(",id_note:");           mySerial.print("6");mySerial.println("}");           break;       case '6':          tone(pinTone,tones[6]);mySerial.print("B");mySerial.print(",id_note:");          mySerial.print("7");mySerial.println("}");           break;       case 'B':          noTone(pinTone);mySerial.print("S");mySerial.print(",id_note:");           mySerial.print("8");mySerial.println("}");           break;       case '7':          tone(pinTone,tones[7]);mySerial.print("c");mySerial.print(",id_note:");          mySerial.print("9");mySerial.println("}");           break;       case '8':          tone(pinTone,tones[8]);mySerial.print("d");mySerial.print(",id_note:");         mySerial.print("10");mySerial.println("}");           break;       case '9':          tone(pinTone,tones[9]);mySerial.print("e");mySerial.print(",id_note:");         mySerial.print("11");mySerial.println("}");           break;       case 'C':          tone(pinTone,tones[10]);mySerial.print("f");mySerial.print(",id_note:");           mySerial.print("12");mySerial.println("}");           break;       case '*':          tone(pinTone,tones[11]);mySerial.print("g");mySerial.print(",id_note:");         mySerial.print("13");mySerial.println("}");           break;       case '0':          tone(pinTone,tones[12]);mySerial.print("a");mySerial.print(",id_note:");         mySerial.print("14");mySerial.println("}");           break;       case '#':          tone(pinTone,tones[13]);mySerial.print("b");mySerial.print(",id_note:");         mySerial.print("15");mySerial.println("}");           break;       case 'D':          noTone(pinTone);mySerial.print("S");mySerial.print(",id_note:");         mySerial.print("8");mySerial.println("}");           break;       default:          noTone(pinTone);mySerial.print("S");mySerial.print(",id_note:");         mySerial.print("8");mySerial.println("}");           break;       }     }   } 

Скрипт на Python пишется в сервисе Wyliodrin (My Applications) 

и из приложения загружается на выполнения на плату Raspberry Pi

При нажатии клавиш воспроизводятся ноты и в сервис Wyliodrin отправляются сообщения в формате JSON.

Вторая часть проекта — Получение сообщений платой Intel Galileo через сервис Wyliodrin

Вторая часть проекта — получение платой Intel Galileo приходящих сообщений из сервиса Wyliodrin сообщений из, обработка сообщений, вывод звука приходящей ноты, и вывод цвета ноты на RGB-ленту.

Схема подключения элементов к плате Intel Galileo.

Код приложения для Intel Galileo пишем в визуальном редакторе Wyliodrin

Запускаем приложение на плату Intel Galileo, смотрим в мониторе вывод отладочных сообщений, а на плате происходит вывод звука и цвета для приходящих нот

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Arduino UNO Плата Arduino Arduino Uno 1
Galileo Плата Intel Galileo 1
Raspberry Pi Микрокомпьютер Raspberry Pi 1
Converter Преобразователь уровня сигнала 1
T1 Биполярный транзистор КТ503Е 2
T2-T4 Биполярный транзистор TIP120 3
R1, R5 Резистор 510 Ом 2
R2-R4 Резистор 200 Ом 3
SP Динамик 8 Ом 1 Вт 2
Клавиатура матричная 4×4 1
RGB-tape RGB лента 1