Pull to refresh

Как я создал магическое пианино

Reading time3 min
Views33K
В хакспейс роботехнопарка “Навигатор Кампус” часто обращаются с заказами на техническую разработку, об одной из таких небольших, но интересных разработок будет рассказано в этой статье.



Однажды к нам с идеей квест-проекта “Комната” обратился Артем Крамин (соучредитель свободного пространства Циферблат в Казани). Он хотел привнести некий элемент магии в свой квест и для этого модернизировать старое пианино. Задача ставилась так: при проигрывании правильной мелодии должна открыться дверь в соседнем помещении.

Функционал инструмента и его звучность не должны пострадать в процессе модернизации, ничто не должно мешать извлечению звука. Важное требование, музыкальный инструмент не должен иметь изменений в своем внешнем виде, чтобы участник квеста ни о чем раньше времени не догадался.

В процессе раздумий родились такие варианты решения как:
  • использование микрофона
  • инфракрасной камеры
  • кнопок или концевиков


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

Так выглядит общая схема устройства:


Для установки концевиков я начертил и вырезал в нашем хакспейсе на лазерной резке раму для крепления.

Процесс вырезания по версии Google Автокреатив


Крепление представляет собой единый элемент, установленный на направляющих внутри пианино.


После этого я напаял проводов на концевики (в дальнейшем выяснялось, что красный провод можно было убрать)


Затем купил ЭМ замок, блок питания и кнопку включения.
Все что приобрел проверил на работоспособность.






Затем установил и спаял все необходимые элементы схемы, выглядит грубо, но работает уже месяца полтора без сбоев.




Так вот выглядит устройство в сборе.




Вся схема работы такая: система находится в постоянном ожидании нажатия первой верной клавиши, затем следует ожидание второй верной ноты и так далее. В ситуации, когда участник квеста ошибается и нажимает неправильную ноту комбинация сбрасывается и “код” необходимо набирать заново, а если вся мелодия проиграна верно, то открывается замок, запирающий дверь комнаты.

Исходники скетча
const int key1 = 4; //до
const int key2 = 5; //ре
const int key3 = 6; //ми
const int key4 = 7; //фа
const int key5 = 8; //соль
const int key6 = 9; //ля
const int key7 = 10; //си

const int lock = 12; //замок

int lastKey = 0; //последняя нажатая кнопка

// открытие замка
void openLock() {
  digitalWrite(lock, LOW);
  delay(10000);
  closeLock();
}

//закрытие замка
void closeLock() {
  digitalWrite(lock, HIGH);
}

//нажатали кнопка с номером key
boolean isKeyPressed(int key) {
  int what = -1;
  while(true) {
    int countPressed = 0;
    
    if(digitalRead(key1) == HIGH) {
      if(lastKey != key1) {
        countPressed++;
        what = key1;
        lastKey = key1;
      }
    }
    if(digitalRead(key2) == HIGH) {
      if(lastKey != key2) {
        countPressed++;
        what = key2;
        lastKey = key2;
      }
    }
    if(digitalRead(key3) == HIGH) {
      if(lastKey != key3) {
        countPressed++;
        what = key3;
        lastKey = key3;
      }
    }
    if(digitalRead(key4) == HIGH) {
      if(lastKey != key4) {
        countPressed++;
        what = key4;
        lastKey = key4;
      }
    }
    if(digitalRead(key5) == HIGH) {
      if(lastKey != key5) {
        countPressed++;
        what = key5;
        lastKey = key5;
      }
    }
    if(digitalRead(key6) == HIGH) {
      if(lastKey != key6) {
        countPressed++;
        what = key6;
        lastKey = key6;
      }
    }
    if(digitalRead(key7) == HIGH) {
      if(lastKey != key7) {
        countPressed++;
        what = key7;
        lastKey = key7;
      }
    }
    if(what != -1) {
      Serial.print("pressed   ");
      Serial.println(what - 3);
      
      if((countPressed == 1) && (key == what)) {
        break;
      }
      if((key != what) || (countPressed >= 1)) {
        break;
      }  
    }
    
  }
  if(what == key) {
    return true;
  }
  else {
    return false;
  }
}

void setup() {
//  pinMode(test,INPUT);
  Serial.begin(9600);
  pinMode(key1, INPUT);
  pinMode(key2, INPUT);
  pinMode(key3, INPUT);
  pinMode(key4, INPUT);
  pinMode(key5, INPUT);
  pinMode(key6, INPUT);
  pinMode(key7, INPUT);
  pinMode(lock, OUTPUT);
  closeLock();
}

// пароль изменен в целях предотвращения жульничества в комнате
void loop() {
  if(isKeyPressed(key2)) {
    if(isKeyPressed(key3)) {
      if(isKeyPressed(key6)) {
        if(isKeyPressed(key2)) {
          if(isKeyPressed(key4)) {
            if(isKeyPressed(key6)) {
              if(isKeyPressed(key1)) {
                if(isKeyPressed(key7)) {
                  openLock();
                }
              }
            }
          }
        }
      }
    } 
  }
  
}



После всех подготовок устройство было установлено в пианино, а замок закреплен в дверном проеме (в каком именно секрет).








Итог: Артем остался доволен, а мне было интересно сделать что-нибудь необычное.
P.S. Читателям из Казани даже после прочтения этой статьи будет интересно пройти квест, потому что магическое пианино — только маленькая часть магии Комнаты.
Tags:
Hubs:
Total votes 34: ↑33 and ↓1+32
Comments16

Articles

Information

Website
navigatorcampus.com
Registered
Founded
Employees
Unknown
Location
Россия