Đây là một con robot đơn giản có thể chơi đàn piano bằng một ngón tay và chơi những bài nhạc được điều khiển từ máy tính. Robot này được làm từ những bộ phận như hai động cơ servo, mạch điều khiển Arduino Uno, một lá nhôm tản nhiệt và hai thanh gỗ.
Bước 1: Cắt hai thanh gỗ hoặc ống nhựa PVC
Đầu tiên, bạn cần phải cắt hai thanh gỗ hình trụ tròn (hoặc có thể thay thế bằng ống nhựa PVC). Khi xong, bạn chuẩn bị hai bệ bằng miếng gỗ cao khoảng 1cm rồi dùng súng bắn keo để kết dính hai thanh gỗ lên bệ gỗ.
Sau đó, bạn cắt một tấm gỗ mỏng (gỗ ván ép) rồi khoan ốc vít cố định tấm nhôm lên tấm gỗ và gắn động cơ servo giống như trong hình.
Bước 2: Dùng đũa để làm “ngón tay”
Để làm ngón tay bấm các phím trên đàn piano, bạn sử dụng những chiếc đũa bếp rối cắt ngắn theo kích thước mong muốn, và khoan những lỗ trên đũa phù hợp để kết nối chúng lại với nhau, cũng như gắn chúng vào động cơ servo.
Bước 3: Kết nối servo với mạch Arduino
Bạn kết nối trực tiếp hai động cơ servo với mạch Arduino Uno 5vcc, gnd và chân 11, chân 13. Rồi chạy trên phần mềm điều khiển Arduino dòng lệnh sau đây:
#include servo.h
Servo servo1,servo2,servo3; //int potPin = 2; // select the input pin for the potentiometer int ledPin = 13; // select the pin for the LED
//Analog read pins const int buttonPin = 2;
void myServo(int curAngle,int newAngle,int angleInc,int incDelay,int servoNum) { if (curAngle < newAngle) { for(int angle=curAngle;angle < newAngle;angle += angleInc) { if (servoNum == 1) servo1.write(angle); if (servoNum == 2) servo2.write(angle); if (servoNum == 3) servo3.write(angle); delay(incDelay); } } else if (curAngle > newAngle) { for(int angle=curAngle;angle > newAngle;angle -= angleInc) { if (servoNum == 1) servo1.write(angle); if (servoNum == 2) servo2.write(angle); if (servoNum == 3) servo3.write(angle); delay(incDelay); } } }
void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT //pinMode(buttonPin,INPUT); servo1.attach(9); delay(10); servo1.write(110);
servo3.attach(11); delay(10); servo3.write(71); delay(5000); randomSeed(analogRead(0)); } void playKey(int slidePos) { servo3.write(slidePos); delay(300); servo1.write(85); delay(100); servo1.write(110); delay(300); } void loop() { //Serial.print(” delay val= “);Serial.print(val);Serial.print(” angle val= “);Serial.println(valPot2); digitalWrite(ledPin,HIGH); //myServo(90,5,1,1,3); /* playKey(165);//f delay(500); playKey(149);//g playKey(138);//a playKey(127);//b playKey(116);//c playKey(105);//d playKey(94);//e playKey(83);//f playKey(72);//g playKey(61);//a playKey(50);//b playKey(28);//c playKey(15);//d */ // cetk // playKey(71); playKey(60); playKey(83); playKey(170); delay(400); playKey(116); delay(2000); // avengers // playKey(72); playKey(94); playKey(83); playKey(50); playKey(15); playKey(28); playKey(72); playKey(94); playKey(83); delay(2000); //amazing grace playKey(160); playKey(116); playKey(94); playKey(94); playKey(105); playKey(116); playKey(138); playKey(149); delay(2000); //indiana jones playKey(138); playKey(127); playKey(116); playKey(83); delay(500); playKey(149); playKey(138); playKey(127); delay(500); playKey(116);//c playKey(105);//d playKey(94);//e playKey(50);//c playKey(105);//d playKey(94);//e playKey(83);//f playKey(72);//g playKey(61);//a delay(2000); //gilligan playKey(138);//f playKey(105);//g playKey(61);//a playKey(61);//f playKey(61);//g playKey(72);//a playKey(94);//f playKey(116);//g delay(500); playKey(138);//f playKey(105);//g playKey(61);//a playKey(61);//f playKey(61);//g playKey(72);//a delay(500); playKey(138);//f playKey(105);//g playKey(61);//a playKey(61);//f playKey(61);//g playKey(72);//a playKey(28);//a delay(500); playKey(72);//a playKey(83);//a delay(500); playKey(94);//a playKey(116);//a playKey(105);//a delay(2000); // somewhere over the rainbow
playKey(127); delay(300); playKey(50); delay(300); playKey(61);//f delay(300); playKey(83); playKey(72);//g playKey(61);//a playKey(50);//b delay(200); playKey(125);delay(300); playKey(72);delay(300); playKey(83); cli(); /*playKey(149);//g playKey(138);//a playKey(127);//b playKey(116);//c playKey(105);//d playKey(94);//e playKey(83);//f playKey(72);//g playKey(61);//a playKey(50);//b playKey(28);//c playKey(15);//d */ }
Sau khi chạy dòng lệnh xong, bạn hãy quan sát hoạt động của con robot và chỉnh sửa những chiếc đũa sao cho phù hợp với yêu cầu thiết kế.