색상 예측기로 피아노를 만들어 봅시다! 이 예에서는 4가지 색상을 사용하여 간단한 색상 피아노를 만듭니다. 피아노가 완성되면 드론으로 음악을 만들 수 있습니다!
항상 그렇듯이 가져오기, 개체 생성 및 페어링으로 시작합니다.
from codrone_edu.drone import *
import time
drone = Drone()
drone.pair()
이전 단계에서 우리는 보정된 색상 분류기를 로드해야 한다는 것도 배웠습니다. 여기서도 그렇게 해야 합니다!
drone.load_classifier("color_data")
다음으로, 드론이 지속적으로 색상을 찾을 수 있도록 무한으로 작동하는 while 반복문을 생성합니다. 이 while 반복문 내에서 현재 색상 데이터를 가져와 코드론 EDU가 우리의 이전 색상 예측 예에서 처럼 어떤 색을 보고 있는지 예측하도록 해야 할 것입니다.
while True:
color_data = drone.get_color_data()
color = drone.predict_colors(color_data)
색상 예측 예제 코드를 사용했을때를 생각해보면 코드론 EDU가 바닥에서 드론을 들어 올린 이후에도, 계속 색상을 예측하는 것을 보셨을 것입니다. 이것은 컬러 피아노가 공중에 떠 있는 동안 계속 음을 연주하기 때문에 문제를 일으킬 수 있습니다. 이 문제를 해결하기 위해 내부 자이로스코프를 사용할 것입니다. 자이로스코프의 x 및 y 각도가 0인 경우에만 드론이 음을 연주하도록 허용합니다. 즉, 드론이 평평한 표면에 놓여있는 경우에만 음을 연주하려고 합니다.
만약 우리의 자이로스코프 정보가 0이라면, 우리는 우리의 색상 예측에 다른 if 문을 사용할 것입니다. 우리가 만든 color
변수는 사실 목록과 같습니다! color[0]
은 전면 색상 센서를, color[1]
은 후면 색상 센서를 예측합니다. F이 예에서는 color[0]
을 사용하여 예측 색상을 확인합니다. 만약 우리의 색이 녹색이라면, 우리는 1초 동안 B4 음표를 연주할 것입니다.
if drone.get_x_angle() == 0 and drone.get_y_angle() == 0:
if color[0] == "green":
drone.drone_buzzer(Note.B4, 1000)
주요 구성은 끝났습니다. 이제 더 많은 소리와 색상을 추가하기만 하면 됩니다. 부저를 사용하지만 만일을 대비하여 아무 소리도 내지 않는 else 문을 추가할 것입니다.
elif color[0] == "red":
drone.drone_buzzer(Note.A4, 1000)
elif color[0] == "yellow":
drone.drone_buzzer(Note.C4, 1000)
elif color[0] == "black":
drone.drone_buzzer(Note.G4, 1000)
else:
drone.drone_buzzer(0, 0)
마지막으로, 우리는 한 번에 컬러 센서에 너무 많은 신호를 보내지 않도록 sleep()
뿐만 아니라 어떤 색이 예측되는지 볼 수 있도록 print()
를 추가할 것입니다.
print(color[0])
time.sleep(0.2)
여기까지 컬러 피아노였습니다!
완성된 코드는 다음과 같습니다.
from codrone_edu.drone import *
import time
drone = Drone()
drone.pair()
drone.load_classifier("color_data")
while True:
color_data = drone.get_color_data()
color = drone.predict_colors(color_data)
if drone.get_x_angle() == 0 and drone.get_y_angle() == 0:
if color[0] == "green":
drone.drone_buzzer(Note.B4, 1000)
elif color[0] == "red":
drone.drone_buzzer(Note.A4, 1000)
elif color[0] == "yellow":
drone.drone_buzzer(Note.C4, 1000)
elif color[0] == "black":
drone.drone_buzzer(Note.G4, 1000)
else:
drone.drone_buzzer(0, 0)
print(color[0])
time.sleep(0.2)