라즈베리파이 프로젝트 피아노 만들기 -마무리 편
안녕하세요!! 첫 글을 작년 초에 작성하였는데.. 전자과 3학년 정말 너무너무 바빴습니다..ㅠㅠ
결국 지금 쓰게 되네요 허허.. 저번에 이어 피아노가 구동되는 과정을 간략히 설명드리고 시연영상을 보여드리고자 합니다.
MCU는 라즈베리파이를 이용했기 때문에 파이썬 언어를 사용하여 코딩을 작성하였는데요.
각 건반의 아래에 있는 스위치에는 각 각 다른 음역대의 주파수 소리를 내도록 설정되어 있습니다. 스위치를 누르면 부저 스피커가 위의 사진처럼 주파수에 따른 소리를 내게 되는데 마치 도레미파솔라시도 의 소리와 같게 되는 겁니다.
사실 더 고퀄리티로 만들고 싶다면 부저의 소리가 아닌 mp3로 변환된 소리를 스위치가 눌릴 때 넣는 것이 좋을 겁니다. 예를 들면 if(GPIO(22)=HIGH) > play(솔 소리.mp3) 뭐 이런 느낌으로요. 하지만 프로젝트인 만큼 센서나 회로 소자에 대한 배움이 있어야한다고 생각했습니다.
세부 기능으로는 각 건반을 누를 때 LCD에서 계이름이 표시되고 옥타브를 조절하여 활용할 수 있습니다. 또한 이전 영상에서 보신 것 처럼 검정색 판을 열면 조도 센서가 작동하여 지정한 노래가 나오게됩니다.
각 건반은 빠른 반응을 위해 인터럽트 기능을 사용하였고, 아직 파이썬이 서투신 분은 하드코딩으로 if문을 반복하여 구현할 수 있지만 이 김에 class문을 배워서 코드를 정리해보는 시간을 가지는 것도 좋다고 생각합니다. 객체지향을 활용하면 코드가 간결 및 수정이 용이해져서 차후에 많은 도움이 될거에요!!
너무 옛날에 한거라서 코드가 완전 정리가 안되어있긴합니다만.. 혹시 필요하신 분들을 위해 코드도 올려볼게요~~
##----OnOFF----
from subprocess import call
from datetime import datetime
#-----cdf---#---buzzer-#---------Pitch setup---------------------------
import RPi.GPIO as GPIO
from time import *
#-------LCD GPIO---
import RPi_I2C_driver
#------multiplay-----
from threading import Thread
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#----OnOFF----
btn_pin = 5
shutdown_sec = 1
led = 1
#-----cdf---
cdf=23
do = 261
do1 = 277
re = 294
re1 = 311
mi = 329
fa = 349
fa1 = 369
sol = 392
sol1 = 391
ra = 440
ra1 = 466
si = 493
do2 = 523
do3 = 554
re2 = 587
re3 = 622
mi2 = 659
fa2 = 698
fa3 = 739
sol2= 783
sol3= 830
ra2 = 880
ra3 = 932
si2 = 987
__ = 1
scale = [re,fa,sol,sol,ra1,do2,re2,fa2,re2,do2,ra1,sol,re2,do2,sol,re2,do2,sol,fa,re,re,fa,sol,sol,ra1,do2,re2,fa2,re2,do2,ra1,sol,re2,do2,sol,re2,do2,sol,fa,re,re,fa,sol,fa,sol,ra,fa,sol,fa,do,re,re,fa,sol,fa,sol,ra1,ra,fa,re,re,fa,sol,fa,sol,ra,fa,sol,fa,do,re,re2,do2,sol,re2,do2,sol,fa,sol,re,fa,sol,fa,sol,ra,fa,sol,fa,do,re,re,fa,sol,fa,sol,ra1,ra,fa,re,re,fa,sol,sol,fa,sol,ra,fa,sol,fa,do,re,re2,do2,sol,re2,do2,sol,fa,sol,re2,do2,sol,re2,do2,sol,fa,sol]
#-----Pitch-
Do = 17
DoS = 6
Re = 27
ReS = 13
Mi = 22
Fa = 10
FaS = 19
Sol = 9
SolS = 26
Ra = 11
RaS = 21
Si = 0
Do1 = 18
Do1S = 20
Re1 = 25
Re1S = 16
Mi1 = 24
#---buzzer-
buzzer = 12
#----Octave control swich-
Octave_control_up = 7
Octave_control_down = 8
#-------LCD GPIO---
#GPIO2,3
lcd = RPi_I2C_driver.lcd(0x27)
piano_screen = RPi_I2C_driver.lcd()
#-------------------------------
#----OnOFF----
GPIO.setup(btn_pin,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(led,GPIO.OUT)
#-----cdf---
GPIO.setup(cdf,GPIO.IN)
#---------Pitch setup---------------------------
GPIO.setup(Do,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(DoS,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Re,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(ReS,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Mi,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Fa,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(FaS,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Sol,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(SolS,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Ra,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(RaS,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Si,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Do1,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Do1S,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Re1,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Re1S,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Mi1,GPIO.IN,pull_up_down = GPIO.PUD_UP)
#-----buzzer--
GPIO.setup(buzzer,GPIO.OUT)
#----Octave control swich-
GPIO.setup(Octave_control_up,GPIO.IN,pull_up_down = GPIO.PUD_UP)
GPIO.setup(Octave_control_down,GPIO.IN,pull_up_down = GPIO.PUD_UP)
#---------------------------------------------------------------------------------------------------
press_time = None
def button_state_changed(pin):
global press_time
if GPIO.input(pin) == 0:
if press_time is None:
press_time = datetime.now()
else:
if press_time is not None:
elapsed = (datetime.now() - press_time).total_seconds()
press_time = None
if elapsed >= shutdown_sec:
GPIO.output(led,False)
lcd.clear()
piano_screen.lcd_display_string("Please unplug",1)
piano_screen.lcd_display_string("the power cord !!",2)
lcd.backlight(0)
call(["shutdown", "-h", "now"], shell=False)
#----make start end--------------------
def number(n,minn,maxn):
return max(min(maxn,n),minn)
Octave_a = 4
def Octave_control_u(self):
try:
global Octave_a
Octave_a =number(Octave_a,1,6)
Octave_a += 1
sleep(0.5)
if Octave_a == 1:
piano_screen.lcd_display_string("Octave:1",1)
Octave_play_screen()
if Octave_a == 2:
piano_screen.lcd_display_string("Octave:2",1)
Octave_play_screen()
if Octave_a == 3:
piano_screen.lcd_display_string("Octave:3",1)
Octave_play_screen()
if Octave_a == 4:
piano_screen.lcd_display_string("Octave:4",1)
Octave_play_screen()
if Octave_a == 5:
piano_screen.lcd_display_string("Octave:5",1)
Octave_play_screen()
if Octave_a == 6:
piano_screen.lcd_display_string("Octave:6",1)
Octave_play_screen()
if Octave_a == 7:
piano_screen.lcd_display_string("Octave:7",1)
Octave_play_screen()
else:
None
return Octave_a
except:
pass
finally:
pass
def Octave_control_d(self):
try:
global Octave_a
Octave_a =number(Octave_a,1,6)
Octave_a -= 1
sleep(0.5)
if Octave_a == 1:
piano_screen.lcd_display_string("Octave:1",1)
Octave_play_screen()
if Octave_a == 2:
piano_screen.lcd_display_string("Octave:2",1)
Octave_play_screen()
if Octave_a == 3:
piano_screen.lcd_display_string("Octave:3",1)
Octave_play_screen()
if Octave_a == 4:
piano_screen.lcd_display_string("Octave:4",1)
Octave_play_screen()
if Octave_a == 5:
piano_screen.lcd_display_string("Octave:5",1)
Octave_play_screen()
if Octave_a == 6:
piano_screen.lcd_display_string("Octave:6",1)
Octave_play_screen()
if Octave_a == 7:
piano_screen.lcd_display_string("Octave:7",1)
Octave_play_screen()
else:
None
return Octave_a
except:
pass
finally:
pass
#------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------
def Do():
lcd.setCursor(7,1)
lcd.print("Do", 0.001)
sleep(0.01)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def DoS():
lcd.setCursor(7,1)
lcd.print("DoS", 0.001)
sleep(0.01)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Re():
lcd.setCursor(7,1)
lcd.print("Re", 0.001)
sleep(0.01)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def ReS():
lcd.setCursor(7,1)
lcd.print("ReS", 0.001)
sleep(0.01)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Mi():
lcd.setCursor(7,1)
lcd.print("Mi", 0.001)
sleep(0.01)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Fa():
lcd.setCursor(7,1)
lcd.print("Fa", 0.001)
sleep(0.01)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def FaS():
lcd.setCursor(7,1)
lcd.print("FaS", 0.001)
sleep(0.01)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Sol():
lcd.setCursor(7,1)
lcd.print("Sol", 0.001)
sleep(0.01)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def SolS():
lcd.setCursor(7,1)
lcd.print("SolS", 0.001)
sleep(0.01)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Ra():
lcd.setCursor(7,1)
lcd.print("Ra", 0.001)
sleep(0.1)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def RaS():
lcd.setCursor(7,1)
lcd.print("RaS", 0.001)
sleep(0.1)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Si():
lcd.setCursor(7,1)
lcd.print("Si", 0.001)
sleep(0.1)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Do1():
lcd.setCursor(7,1)
lcd.print("Do1", 0.001)
sleep(0.1)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Do1S():
lcd.setCursor(7,1)
lcd.print("Do1S", 0.001)
sleep(0.1)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Re1():
lcd.setCursor(7,1)
lcd.print("Re1", 0.001)
sleep(0.1)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Re1S():
lcd.setCursor(7,1)
lcd.print("Re1S", 0.001)
sleep(0.1)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
def Mi1():
lcd.setCursor(7,1)
lcd.print("Mi1", 0.001)
sleep(0.1)
lcd.setCursor(7,1)
lcd.print(" ", 0.001)
sleep(0.001)
#------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------
p= GPIO.PWM(buzzer,1000)
p.start(0)
Octave_1=[33,35,37,39,41,44,46,49,52,55,58,62,65,69,73,78,82]
Octave_2=[65,69,73,78,82,87,93,98,104,110,117,123,131,139,147,156,165]
Octave_3=[131,139,147,156,165,175,185,196,208,220,233,247262,277,294,311,330]
Octave_4=[262,277,294,311,330,349,370,392,415,440,466,494,523,554,587,622,659]
Octave_5=[523,554,587,622,659,698,740,784,831,880,932,988,1047,1109,1175,1320,1319]
Octave_6=[1047,1109,1175,1320,1319,1397,1480,1568,1661,1760,1865,19762093,2217,2349,2489,2637]
Octave_7=[2093,2217,2349,2489,2637,2794,2960,3136,3322,3520,3729,3951,4186,4435,4699,4978,5230]
Octave_plus_1={17:0,6:1,27:2,13:3,22:4,10:5,19:6,9:7,26:8,11:9,21:10,0:11,18:12,20:13,25:14,16:15,24:16}
def Octave1_0(btn):
p.ChangeFrequency(Octave_1[btn])
p.ChangeDutyCycle(80)
sleep(0.2)
p.ChangeDutyCycle(0)
sleep(0.05)
def Octave1_1(pin):
Octave1_0(Octave_plus_1[pin])
Do()
def Octave1_2(pin):
Octave1_0(Octave_plus_1[pin])
DoS()
def Octave1_3(pin):
Octave1_0(Octave_plus_1[pin])
Re()
def Octave1_4(pin):
Octave1_0(Octave_plus_1[pin])
ReS()
def Octave1_5(pin):
Octave1_0(Octave_plus_1[pin])
Mi()
def Octave1_6(pin):
Octave1_0(Octave_plus_1[pin])
Fa()
def Octave1_7(pin):
Octave1_0(Octave_plus_1[pin])
FaS()
def Octave1_8(pin):
Octave1_0(Octave_plus_1[pin])
Sol()
def Octave1_9(pin):
Octave1_0(Octave_plus_1[pin])
SolS()
def Octave1_10(pin):
Octave1_0(Octave_plus_1[pin])
Ra()
def Octave1_11(pin):
Octave1_0(Octave_plus_1[pin])
RaS()
def Octave1_12(pin):
Octave1_0(Octave_plus_1[pin])
Si()
def Octave1_13(pin):
Octave1_0(Octave_plus_1[pin])
Do1()
def Octave1_14(pin):
Octave1_0(Octave_plus_1[pin])
Do1S()
def Octave1_15(pin):
Octave1_0(Octave_plus_1[pin])
Re1()
def Octave1_16(pin):
Octave1_0(Octave_plus_1[pin])
Re1S()
def Octave1_17(pin):
Octave1_0(Octave_plus_1[pin])
Mi1()
#---------------------------------------------------------2-------------------------
def Octave2_0(btn):
p.ChangeFrequency(Octave_2[btn])
p.ChangeDutyCycle(80)
sleep(0.2)
p.ChangeDutyCycle(0)
sleep(0.05)
def Octave2_1(pin):
Octave2_0(Octave_plus_1[pin])
Do()
def Octave2_2(pin):
Octave2_0(Octave_plus_1[pin])
DoS()
def Octave2_3(pin):
Octave2_0(Octave_plus_1[pin])
Re()
def Octave2_4(pin):
Octave2_0(Octave_plus_1[pin])
ReS()
def Octave2_5(pin):
Octave2_0(Octave_plus_1[pin])
Mi()
def Octave2_6(pin):
Octave2_0(Octave_plus_1[pin])
Fa()
def Octave2_7(pin):
Octave2_0(Octave_plus_1[pin])
FaS()
def Octave2_8(pin):
Octave2_0(Octave_plus_1[pin])
Sol()
def Octave2_9(pin):
Octave2_0(Octave_plus_1[pin])
SolS()
def Octave2_10(pin):
Octave2_0(Octave_plus_1[pin])
Ra()
def Octave2_11(pin):
Octave2_0(Octave_plus_1[pin])
RaS()
def Octave2_12(pin):
Octave2_0(Octave_plus_1[pin])
Si()
def Octave2_13(pin):
Octave2_0(Octave_plus_1[pin])
Do1()
def Octave2_14(pin):
Octave2_0(Octave_plus_1[pin])
Do1S()
def Octave2_15(pin):
Octave2_0(Octave_plus_1[pin])
Re1()
def Octave2_16(pin):
Octave2_0(Octave_plus_1[pin])
Re1S()
def Octave2_17(pin):
Octave2_0(Octave_plus_1[pin])
Mi1()
#----------------------------------------3--------------
def Octave3_0(btn):
p.ChangeFrequency(Octave_3[btn])
p.ChangeDutyCycle(80)
sleep(0.2)
p.ChangeDutyCycle(0)
sleep(0.05)
def Octave3_1(pin):
Octave3_0(Octave_plus_1[pin])
Do()
def Octave3_2(pin):
Octave3_0(Octave_plus_1[pin])
DoS()
def Octave3_3(pin):
Octave3_0(Octave_plus_1[pin])
Re()
def Octave3_4(pin):
Octave3_0(Octave_plus_1[pin])
ReS()
def Octave3_5(pin):
Octave3_0(Octave_plus_1[pin])
Mi()
def Octave3_6(pin):
Octave3_0(Octave_plus_1[pin])
Fa()
def Octave3_7(pin):
Octave3_0(Octave_plus_1[pin])
FaS()
def Octave3_8(pin):
Octave3_0(Octave_plus_1[pin])
Sol()
def Octave3_9(pin):
Octave3_0(Octave_plus_1[pin])
SolS()
def Octave3_10(pin):
Octave3_0(Octave_plus_1[pin])
Ra()
def Octave3_11(pin):
Octave3_0(Octave_plus_1[pin])
RaS()
def Octave3_12(pin):
Octave3_0(Octave_plus_1[pin])
Si()
def Octave3_13(pin):
Octave3_0(Octave_plus_1[pin])
Do1()
def Octave3_14(pin):
Octave3_0(Octave_plus_1[pin])
Do1S()
def Octave3_15(pin):
Octave3_0(Octave_plus_1[pin])
Re1()
def Octave3_16(pin):
Octave3_0(Octave_plus_1[pin])
Re1S()
def Octave3_17(pin):
Octave3_0(Octave_plus_1[pin])
Mi1()
#---------------------------------4-----------------
def Octave4_0(btn):
p.ChangeFrequency(Octave_4[btn])
p.ChangeDutyCycle(80)
sleep(0.2)
p.ChangeDutyCycle(0)
sleep(0.05)
def Octave4_1(pin):
Octave4_0(Octave_plus_1[pin])
Do()
def Octave4_2(pin):
Octave4_0(Octave_plus_1[pin])
DoS()
def Octave4_3(pin):
Octave4_0(Octave_plus_1[pin])
Re()
def Octave4_4(pin):
Octave4_0(Octave_plus_1[pin])
ReS()
def Octave4_5(pin):
Octave4_0(Octave_plus_1[pin])
Mi()
def Octave4_6(pin):
Octave4_0(Octave_plus_1[pin])
Fa()
def Octave4_7(pin):
Octave4_0(Octave_plus_1[pin])
FaS()
def Octave4_8(pin):
Octave4_0(Octave_plus_1[pin])
Sol()
def Octave4_9(pin):
Octave4_0(Octave_plus_1[pin])
SolS()
def Octave4_10(pin):
Octave4_0(Octave_plus_1[pin])
Ra()
def Octave4_11(pin):
Octave4_0(Octave_plus_1[pin])
RaS()
def Octave4_12(pin):
Octave4_0(Octave_plus_1[pin])
Si()
def Octave4_13(pin):
Octave4_0(Octave_plus_1[pin])
Do1()
def Octave4_14(pin):
Octave4_0(Octave_plus_1[pin])
Do1S()
def Octave4_15(pin):
Octave4_0(Octave_plus_1[pin])
Re1()
def Octave4_16(pin):
Octave4_0(Octave_plus_1[pin])
Re1S()
def Octave4_17(pin):
Octave4_0(Octave_plus_1[pin])
Mi1()
#---------------------------------------5------------
def Octave5_0(btn):
p.ChangeFrequency(Octave_5[btn])
p.ChangeDutyCycle(80)
sleep(0.2)
p.ChangeDutyCycle(0)
sleep(0.05)
def Octave5_1(pin):
Octave5_0(Octave_plus_1[pin])
Do()
def Octave5_2(pin):
Octave5_0(Octave_plus_1[pin])
DoS()
def Octave5_3(pin):
Octave5_0(Octave_plus_1[pin])
Re()
def Octave5_4(pin):
Octave5_0(Octave_plus_1[pin])
ReS()
def Octave5_5(pin):
Octave5_0(Octave_plus_1[pin])
Mi()
def Octave5_6(pin):
Octave5_0(Octave_plus_1[pin])
Fa()
def Octave5_7(pin):
Octave5_0(Octave_plus_1[pin])
FaS()
def Octave5_8(pin):
Octave5_0(Octave_plus_1[pin])
Sol()
def Octave5_9(pin):
Octave5_0(Octave_plus_1[pin])
SolS()
def Octave5_10(pin):
Octave5_0(Octave_plus_1[pin])
Ra()
def Octave5_11(pin):
Octave5_0(Octave_plus_1[pin])
RaS()
def Octave5_12(pin):
Octave5_0(Octave_plus_1[pin])
Si()
def Octave5_13(pin):
Octave5_0(Octave_plus_1[pin])
Do1()
def Octave5_14(pin):
Octave5_0(Octave_plus_1[pin])
Do1S()
def Octave5_15(pin):
Octave5_0(Octave_plus_1[pin])
Re1()
def Octave5_16(pin):
Octave5_0(Octave_plus_1[pin])
Re1S()
def Octave5_17(pin):
Octave5_0(Octave_plus_1[pin])
Mi1()
#--------------------------------------6------------
def Octave6_0(btn):
p.ChangeFrequency(Octave_6[btn])
p.ChangeDutyCycle(80)
sleep(0.2)
p.ChangeDutyCycle(0)
sleep(0.05)
def Octave6_1(pin):
Octave6_0(Octave_plus_1[pin])
Do()
def Octave6_2(pin):
Octave6_0(Octave_plus_1[pin])
DoS()
def Octave6_3(pin):
Octave6_0(Octave_plus_1[pin])
Re()
def Octave6_4(pin):
Octave6_0(Octave_plus_1[pin])
ReS()
def Octave6_5(pin):
Octave6_0(Octave_plus_1[pin])
Mi()
def Octave6_6(pin):
Octave6_0(Octave_plus_1[pin])
Fa()
def Octave6_7(pin):
Octave6_0(Octave_plus_1[pin])
FaS()
def Octave6_8(pin):
Octave6_0(Octave_plus_1[pin])
Sol()
def Octave6_9(pin):
Octave6_0(Octave_plus_1[pin])
SolS()
def Octave6_10(pin):
Octave6_0(Octave_plus_1[pin])
Ra()
def Octave6_11(pin):
Octave6_0(Octave_plus_1[pin])
RaS()
def Octave6_12(pin):
Octave6_0(Octave_plus_1[pin])
Si()
def Octave6_13(pin):
Octave6_0(Octave_plus_1[pin])
Do1()
def Octave6_14(pin):
Octave6_0(Octave_plus_1[pin])
Do1S()
def Octave6_15(pin):
Octave6_0(Octave_plus_1[pin])
Re1()
def Octave6_16(pin):
Octave6_0(Octave_plus_1[pin])
Re1S()
def Octave6_17(pin):
Octave6_0(Octave_plus_1[pin])
Mi1()
#---------------------7---------------------------
def Octave7_0(btn):
p.ChangeFrequency(Octave_7[btn])
p.ChangeDutyCycle(80)
sleep(0.2)
p.ChangeDutyCycle(0)
sleep(0.05)
def Octave7_1(pin):
Octave7_0(Octave_plus_1[pin])
Do()
def Octave7_2(pin):
Octave7_0(Octave_plus_1[pin])
DoS()
def Octave7_3(pin):
Octave7_0(Octave_plus_1[pin])
Re()
def Octave7_4(pin):
Octave7_0(Octave_plus_1[pin])
ReS()
def Octave7_5(pin):
Octave7_0(Octave_plus_1[pin])
Mi()
def Octave7_6(pin):
Octave7_0(Octave_plus_1[pin])
Fa()
def Octave7_7(pin):
Octave7_0(Octave_plus_1[pin])
FaS()
def Octave7_8(pin):
Octave7_0(Octave_plus_1[pin])
Sol()
def Octave7_9(pin):
Octave7_0(Octave_plus_1[pin])
SolS()
def Octave7_10(pin):
Octave7_0(Octave_plus_1[pin])
Ra()
def Octave7_11(pin):
Octave7_0(Octave_plus_1[pin])
RaS()
def Octave7_12(pin):
Octave7_0(Octave_plus_1[pin])
Si()
def Octave7_13(pin):
Octave7_0(Octave_plus_1[pin])
Do1()
def Octave7_14(pin):
Octave7_0(Octave_plus_1[pin])
Do1S()
def Octave7_15(pin):
Octave7_0(Octave_plus_1[pin])
Re1()
def Octave7_16(pin):
Octave7_0(Octave_plus_1[pin])
Re1S()
def Octave7_17(pin):
Octave7_0(Octave_plus_1[pin])
Mi1()
#-----------------------------------------------end------
#---------------------------------------------------------
def inter_play1():
GPIO.add_event_detect(17,GPIO.FALLING,callback=Octave1_1,bouncetime=320)
GPIO.add_event_detect(6,GPIO.FALLING,callback=Octave1_2,bouncetime=320)
GPIO.add_event_detect(27,GPIO.FALLING,callback=Octave1_3,bouncetime=320)
GPIO.add_event_detect(13,GPIO.FALLING,callback=Octave1_4,bouncetime=320)
GPIO.add_event_detect(22,GPIO.FALLING,callback=Octave1_5,bouncetime=320)
GPIO.add_event_detect(10,GPIO.FALLING,callback=Octave1_6,bouncetime=320)
GPIO.add_event_detect(19,GPIO.FALLING,callback=Octave1_7,bouncetime=320)
GPIO.add_event_detect(9,GPIO.FALLING,callback=Octave1_8,bouncetime=320)
GPIO.add_event_detect(26,GPIO.FALLING,callback=Octave1_9,bouncetime=320)
GPIO.add_event_detect(11,GPIO.FALLING,callback=Octave1_10,bouncetime=320)
GPIO.add_event_detect(21,GPIO.FALLING,callback=Octave1_11,bouncetime=320)
GPIO.add_event_detect(0,GPIO.FALLING,callback=Octave1_12,bouncetime=320)
GPIO.add_event_detect(18,GPIO.FALLING,callback=Octave1_13,bouncetime=320)
GPIO.add_event_detect(20,GPIO.FALLING,callback=Octave1_14,bouncetime=320)
GPIO.add_event_detect(25,GPIO.FALLING,callback=Octave1_15,bouncetime=320)
GPIO.add_event_detect(16,GPIO.FALLING,callback=Octave1_16,bouncetime=320)
GPIO.add_event_detect(24,GPIO.FALLING,callback=Octave1_17,bouncetime=320)
def inter_play2():
GPIO.add_event_detect(17,GPIO.FALLING,callback=Octave2_1,bouncetime=320)
GPIO.add_event_detect(6,GPIO.FALLING,callback=Octave2_2,bouncetime=320)
GPIO.add_event_detect(27,GPIO.FALLING,callback=Octave2_3,bouncetime=320)
GPIO.add_event_detect(13,GPIO.FALLING,callback=Octave2_4,bouncetime=320)
GPIO.add_event_detect(22,GPIO.FALLING,callback=Octave2_5,bouncetime=320)
GPIO.add_event_detect(10,GPIO.FALLING,callback=Octave2_6,bouncetime=320)
GPIO.add_event_detect(19,GPIO.FALLING,callback=Octave2_7,bouncetime=320)
GPIO.add_event_detect(9,GPIO.FALLING,callback=Octave2_8,bouncetime=320)
GPIO.add_event_detect(26,GPIO.FALLING,callback=Octave2_9,bouncetime=320)
GPIO.add_event_detect(11,GPIO.FALLING,callback=Octave2_10,bouncetime=320)
GPIO.add_event_detect(21,GPIO.FALLING,callback=Octave2_11,bouncetime=320)
GPIO.add_event_detect(0,GPIO.FALLING,callback=Octave2_12,bouncetime=320)
GPIO.add_event_detect(18,GPIO.FALLING,callback=Octave2_13,bouncetime=320)
GPIO.add_event_detect(20,GPIO.FALLING,callback=Octave2_14,bouncetime=320)
GPIO.add_event_detect(25,GPIO.FALLING,callback=Octave2_15,bouncetime=320)
GPIO.add_event_detect(16,GPIO.FALLING,callback=Octave2_16,bouncetime=320)
GPIO.add_event_detect(24,GPIO.FALLING,callback=Octave2_17,bouncetime=320)
def inter_play3():
GPIO.add_event_detect(17,GPIO.FALLING,callback=Octave3_1,bouncetime=320)
GPIO.add_event_detect(6,GPIO.FALLING,callback=Octave3_2,bouncetime=320)
GPIO.add_event_detect(27,GPIO.FALLING,callback=Octave3_3,bouncetime=320)
GPIO.add_event_detect(13,GPIO.FALLING,callback=Octave3_4,bouncetime=320)
GPIO.add_event_detect(22,GPIO.FALLING,callback=Octave3_5,bouncetime=320)
GPIO.add_event_detect(10,GPIO.FALLING,callback=Octave3_6,bouncetime=320)
GPIO.add_event_detect(19,GPIO.FALLING,callback=Octave3_7,bouncetime=320)
GPIO.add_event_detect(9,GPIO.FALLING,callback=Octave3_8,bouncetime=320)
GPIO.add_event_detect(26,GPIO.FALLING,callback=Octave3_9,bouncetime=320)
GPIO.add_event_detect(11,GPIO.FALLING,callback=Octave3_10,bouncetime=320)
GPIO.add_event_detect(21,GPIO.FALLING,callback=Octave3_11,bouncetime=320)
GPIO.add_event_detect(0,GPIO.FALLING,callback=Octave3_12,bouncetime=320)
GPIO.add_event_detect(18,GPIO.FALLING,callback=Octave3_13,bouncetime=320)
GPIO.add_event_detect(20,GPIO.FALLING,callback=Octave3_14,bouncetime=320)
GPIO.add_event_detect(25,GPIO.FALLING,callback=Octave3_15,bouncetime=320)
GPIO.add_event_detect(16,GPIO.FALLING,callback=Octave3_16,bouncetime=320)
GPIO.add_event_detect(24,GPIO.FALLING,callback=Octave3_17,bouncetime=320)
def inter_play4():
GPIO.add_event_detect(17,GPIO.FALLING,callback=Octave4_1,bouncetime=320)
GPIO.add_event_detect(6,GPIO.FALLING,callback=Octave4_2,bouncetime=320)
GPIO.add_event_detect(27,GPIO.FALLING,callback=Octave4_3,bouncetime=320)
GPIO.add_event_detect(13,GPIO.FALLING,callback=Octave4_4,bouncetime=320)
GPIO.add_event_detect(22,GPIO.FALLING,callback=Octave4_5,bouncetime=320)
GPIO.add_event_detect(10,GPIO.FALLING,callback=Octave4_6,bouncetime=320)
GPIO.add_event_detect(19,GPIO.FALLING,callback=Octave4_7,bouncetime=320)
GPIO.add_event_detect(9,GPIO.FALLING,callback=Octave4_8,bouncetime=320)
GPIO.add_event_detect(26,GPIO.FALLING,callback=Octave4_9,bouncetime=320)
GPIO.add_event_detect(11,GPIO.FALLING,callback=Octave4_10,bouncetime=320)
GPIO.add_event_detect(21,GPIO.FALLING,callback=Octave4_11,bouncetime=320)
GPIO.add_event_detect(0,GPIO.FALLING,callback=Octave4_12,bouncetime=320)
GPIO.add_event_detect(18,GPIO.FALLING,callback=Octave4_13,bouncetime=320)
GPIO.add_event_detect(20,GPIO.FALLING,callback=Octave4_14,bouncetime=320)
GPIO.add_event_detect(25,GPIO.FALLING,callback=Octave4_15,bouncetime=320)
GPIO.add_event_detect(16,GPIO.FALLING,callback=Octave4_16,bouncetime=320)
GPIO.add_event_detect(24,GPIO.FALLING,callback=Octave4_17,bouncetime=320)
GPIO.add_event_detect(7,GPIO.FALLING,callback=Octave_control_u,bouncetime=1000)
GPIO.add_event_detect(8,GPIO.FALLING,callback=Octave_control_d,bouncetime=1000)
GPIO.add_event_detect(btn_pin, GPIO.BOTH, callback=button_state_changed)
while True:
sleep(3)
break
def inter_play5():
GPIO.add_event_detect(17,GPIO.FALLING,callback=Octave5_1,bouncetime=320)
GPIO.add_event_detect(6,GPIO.FALLING,callback=Octave5_2,bouncetime=320)
GPIO.add_event_detect(27,GPIO.FALLING,callback=Octave5_3,bouncetime=320)
GPIO.add_event_detect(13,GPIO.FALLING,callback=Octave5_4,bouncetime=320)
GPIO.add_event_detect(22,GPIO.FALLING,callback=Octave5_5,bouncetime=320)
GPIO.add_event_detect(10,GPIO.FALLING,callback=Octave5_6,bouncetime=320)
GPIO.add_event_detect(19,GPIO.FALLING,callback=Octave5_7,bouncetime=320)
GPIO.add_event_detect(9,GPIO.FALLING,callback=Octave5_8,bouncetime=320)
GPIO.add_event_detect(26,GPIO.FALLING,callback=Octave5_9,bouncetime=320)
GPIO.add_event_detect(11,GPIO.FALLING,callback=Octave5_10,bouncetime=320)
GPIO.add_event_detect(21,GPIO.FALLING,callback=Octave5_11,bouncetime=320)
GPIO.add_event_detect(0,GPIO.FALLING,callback=Octave5_12,bouncetime=320)
GPIO.add_event_detect(18,GPIO.FALLING,callback=Octave5_13,bouncetime=320)
GPIO.add_event_detect(20,GPIO.FALLING,callback=Octave5_14,bouncetime=320)
GPIO.add_event_detect(25,GPIO.FALLING,callback=Octave5_15,bouncetime=320)
GPIO.add_event_detect(16,GPIO.FALLING,callback=Octave5_16,bouncetime=320)
GPIO.add_event_detect(24,GPIO.FALLING,callback=Octave5_17,bouncetime=320)
def inter_play6():
GPIO.add_event_detect(17,GPIO.FALLING,callback=Octave6_1,bouncetime=320)
GPIO.add_event_detect(6,GPIO.FALLING,callback=Octave6_2,bouncetime=320)
GPIO.add_event_detect(27,GPIO.FALLING,callback=Octave6_3,bouncetime=320)
GPIO.add_event_detect(13,GPIO.FALLING,callback=Octave6_4,bouncetime=320)
GPIO.add_event_detect(22,GPIO.FALLING,callback=Octave6_5,bouncetime=320)
GPIO.add_event_detect(10,GPIO.FALLING,callback=Octave6_6,bouncetime=320)
GPIO.add_event_detect(19,GPIO.FALLING,callback=Octave6_7,bouncetime=320)
GPIO.add_event_detect(9,GPIO.FALLING,callback=Octave6_8,bouncetime=320)
GPIO.add_event_detect(26,GPIO.FALLING,callback=Octave6_9,bouncetime=320)
GPIO.add_event_detect(11,GPIO.FALLING,callback=Octave6_10,bouncetime=320)
GPIO.add_event_detect(21,GPIO.FALLING,callback=Octave6_11,bouncetime=320)
GPIO.add_event_detect(0,GPIO.FALLING,callback=Octave6_12,bouncetime=320)
GPIO.add_event_detect(18,GPIO.FALLING,callback=Octave6_13,bouncetime=320)
GPIO.add_event_detect(20,GPIO.FALLING,callback=Octave6_14,bouncetime=320)
GPIO.add_event_detect(25,GPIO.FALLING,callback=Octave6_15,bouncetime=320)
GPIO.add_event_detect(16,GPIO.FALLING,callback=Octave6_16,bouncetime=320)
GPIO.add_event_detect(24,GPIO.FALLING,callback=Octave6_17,bouncetime=320)
def inter_play7():
GPIO.add_event_detect(17,GPIO.FALLING,callback=Octave7_1,bouncetime=320)
GPIO.add_event_detect(6,GPIO.FALLING,callback=Octave7_2,bouncetime=320)
GPIO.add_event_detect(27,GPIO.FALLING,callback=Octave7_3,bouncetime=320)
GPIO.add_event_detect(13,GPIO.FALLING,callback=Octave7_4,bouncetime=320)
GPIO.add_event_detect(22,GPIO.FALLING,callback=Octave7_5,bouncetime=320)
GPIO.add_event_detect(10,GPIO.FALLING,callback=Octave7_6,bouncetime=320)
GPIO.add_event_detect(19,GPIO.FALLING,callback=Octave7_7,bouncetime=320)
GPIO.add_event_detect(9,GPIO.FALLING,callback=Octave7_8,bouncetime=320)
GPIO.add_event_detect(26,GPIO.FALLING,callback=Octave7_9,bouncetime=320)
GPIO.add_event_detect(11,GPIO.FALLING,callback=Octave7_10,bouncetime=320)
GPIO.add_event_detect(21,GPIO.FALLING,callback=Octave7_11,bouncetime=320)
GPIO.add_event_detect(0,GPIO.FALLING,callback=Octave7_12,bouncetime=320)
GPIO.add_event_detect(18,GPIO.FALLING,callback=Octave7_13,bouncetime=320)
GPIO.add_event_detect(20,GPIO.FALLING,callback=Octave7_14,bouncetime=320)
GPIO.add_event_detect(25,GPIO.FALLING,callback=Octave7_15,bouncetime=320)
GPIO.add_event_detect(16,GPIO.FALLING,callback=Octave7_16,bouncetime=320)
GPIO.add_event_detect(24,GPIO.FALLING,callback=Octave7_17,bouncetime=320)
def inter_clean():
pins = [17,6,27, 13, 22,10, 19,9,26,11,21,0,18,20,25,16,24]
for i in pins:
GPIO.remove_event_detect(i)
def Octave_play_screen():
global Octave_a
try:
if Octave_a == 1 :
inter_clean()
inter_play1()
if Octave_a == 2:
inter_clean()
inter_play2()
if Octave_a == 3:
inter_clean()
inter_play3()
if Octave_a == 4:
inter_clean()
inter_play4()
if Octave_a == 5:
inter_clean()
inter_play5()
if Octave_a == 6:
inter_clean()
inter_play6()
if Octave_a == 7:
inter_clean()
inter_play7()
else:
pass
except:
pass
finally:
pass
Oct_play_screen=Thread(target=Octave_play_screen)
def ddd():
lcd.setCursor(1,0)
lcd.print("Welcome Jinbeom", 0.1)
lcd.setCursor(2,1)
lcd.print("Elec piano^0^",0.1)
sleep(1)
for i in range(2):
lcd.scrollDisplayLeft()
sleep(0.4)
for i in range(4):
lcd.scrollDisplayRight()
sleep(0.4)
for i in range(3):
lcd.scrollDisplayLeft()
sleep(0.4)
lcd.clear()
piano_screen.lcd_display_string("Octave:4",1)
piano_screen.lcd_display_string(" Made by",1.5)
piano_screen.lcd_display_string("Pitch:",2)
piano_screen.lcd_display_string(" ÒJBBám¨",2.5)
first_lcd=Thread(target=ddd)
first_lcd.daemon = True
first_lcd.start()
first_lcd.join()
Oct_play_screen.daemon = True
Oct_play_screen.start()
while True:
GPIO.output(led,True)
sleep(2)
if GPIO.input(cdf) == GPIO.LOW:
for i in range(100):
p.ChangeDutyCycle(1)
p.ChangeFrequency(scale[i])
sleep(0.3)
p.ChangeDutyCycle(0)
sleep(0.05)
else:
None
아 .. 완성 영상이 있는 줄 알았는데.. 전부 날아갔더라고요 ㅠㅠ 그래서 3D 프린터가 완성되기 이전에 규격이 덜 맞았던 프로토타입 연주 영상밖에 없습니다. ㅠㅠㅠ 죄송해요
다음 영상은 옥타브를 변경하는 모습이에요.!!
아.. 너무 지저분해요 ㅠㅠ 정말 이쁘게 연주도하고 조도 센서를 열면 제가 준비한!!! 이누야사에 시대를 초월한 마음이 연주되는 모습을 보면.. 마음이 멀어지는 .. 아쉽네요 ㅎㅎ 영상을 찾게되거나 지금 있는 피아노에 라즈베리를 다시 연결할 시간이 된다면 이 글에 영상을 추가 기재해보겠습니다!!
아무튼 ㅠㅠ 피아노 만들기 프로젝트 초보자, 중급자 분들에게 정말 추천합니다. 이유를 간략히 말씀드리면 회로 구성, 납땜, 파이썬 학습, 각 종 센서 및 소자 사용, 3D 프린터 사용 등 정말 다양한 경험을 할 수 있고 버리지 않고 소장하여도 정말 기쁩니다. 만약 3D 프린터를 만들 여건이 안되신다면 빵판에다가 또는 우드락을 잘라서 구현할 수도 있지 않을까요~~?
도움이 되셨다면 공감과 댓글~~ 다음에 봐요 안녕 ^~^~~
'Make' 카테고리의 다른 글
라즈베리파이 프로젝트 RC카 만들기(feat.andriod studio) (0) | 2022.08.03 |
---|---|
라즈베리파이 프로젝트 음성인식 AI 구글 어시스턴트 스피커 만들기 (0) | 2022.08.03 |
라즈베리파이 프로젝트 피아노 만들기 -3D프린트 편 (2) | 2021.01.14 |