반응형

https://youtu.be/-MkV4kbN0lI

 

설연휴 직전 녹칸다의 마지막 스트리밍인 424편에서 구독자분들께 소소한 즐거움을 드리기 위해서 스탭모터로 간단한 연주를 해보았습니다~~!

 

시간이 촉박해서 많이 준비하지는 못하고 까치까치 설날은~ 어저께고요 할때 설날송하고 스타워즈에서 제국의 행진이라는 곡의 일부분만 스탭모터로 재생해보았습니다!!!

 

회로도는 이대로 연결하면 됩니다!!

그리고 아래 소스코드를 그대로 입력하면 아마 작동이 될것입니다~!

시리얼모니터에 숫자 0을 전송하면 까치송이 재생되고 1을 전송하면 스타워즈 브금이 재생됩니다~~!

까치까치설날은.txt
0.00MB


#include <AccelStepper.h>

#define DIR1 2
#define STEP1 3

AccelStepper stepper1 = AccelStepper(1, STEP1, DIR1);

int nockanda[][2] = {
    {392,1500}, //솔
    {330,500},  //미
    {392,1000}, //솔
    {523,1000}, //도
    {440,1000}, //라
    {523,500},  //도
    {440,500},  //라
    {392,2000},  //솔
    {330,1500},  //미
    {349,500},  //파
    {330,500},  //미
    {294,500},  //레
    {262,500},   //도
    {330,500}, //미
    {294,3000},  //레
    {392,1500}, //솔
    {330,500},  //미
    {392,1000}, //솔
    {523,1000}, //도
    {440,1000}, //라
    {523,500},  //도
    {440,500},  //라
    {392,2000},  //솔
    {392,1000},  //솔
    {659,1000},  //미
    {587,1000},  //레
    {494,1000},  //시
    {523,3000},   //도
    {392,1500}, //솔
    {330,500},  //미
    {392,1000}, //솔
    {523,1000}, //도
    {440,1000}, //라
    {523,500},  //도
    {440,500},  //라
    {392,2000},  //솔
    {330,1500},  //미
    {349,500},  //파
    {330,500},  //미
    {294,500},  //레
    {262,500},   //도
    {330,500}, //미
    {294,3000},  //레
    {262,1500}, //도
    {294,500},  //레
    {330,1000}, //미
    {392,1000}, //솔
    {440,1000}, //라
    {440,500},  //라
    {523,500},  //도
    {392,2000},  //솔
    {330,1500}, //미
    {349,500},  //파
    {330,500}, //미
    {349,500}, //파
    {392,500}, //솔
    {196,500},  //시
    {262,3000}  //도
};

int nockanda2[][2] = {
  {110,1000}, //라1
  {110,1000}, //라1
  {110,1000}, //라1
  {87,500}, //파1
  {131,500}, //도2
  {110,1000}, //라1
  {87,500}, //파1
  {175,500}, //도2
  {110,2000}, //라1
  {165,1000}, //미2
  {165,1000}, //미2
  {165,1000}, //미2
  {175,500}, //파2
  {175,500}, //도2
  {104,1000}, //라플렛1
  {87,500}, //파1
  {175,500}, //도2
  {110,2000}, //라1
  {247,1000}, //시2
  {123,500}, //시1
  {123,500}, //시1
  {247,1000}, //시2
  {233,500}, //시2플렛
  {196,500}, //솔2
  {185,500}, //솔2플렛
  {175,500}, //파2
  {185,500}, //솔2플렛
  {117,500}, //시1플렛
  {156,1000}, //미2플랫
  {147,500}, //레2
  {139,500}, //레2플렛
  {131,500}, //도2
  {123,500}, //시1
  {131,500}, //도2
  {87,500}, //파1
  {104,1000}, //라1플렛
  {87,500}, //파1
  {104,500}, //라1플렛
  {131,1000}, //도2
  {110,500}, //라1
  {131,500}, //도2
  {165,2000}, //미2
  {247,1000}, //시2
  {123,500}, //시1
  {123,500}, //시1
  {247,1000}, //시2
  {233,500}, //시2플렛
  {196,500}, //솔2
  {185,500}, //솔2플렛
  {175,500}, //파2
  {185,500}, //솔2플렛
  {117,500}, //시1플렛
  {156,1000}, //미2플랫
  {147,500}, //레2
  {139,500} //레2플렛
};

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);//결과를 시리얼모니터에서 볼거야~
  stepper1.setMaxSpeed(1000); //초당 몇스탭이냐? 1000/s(초당5회전)
  stepper1.setCurrentPosition(0); //현재 스탭을 설정
}

//메인스레드
void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()){
    char c= Serial.read();
    if(c == '0'){
      for(int i = 0;i<58;i++){
        stepper1.setCurrentPosition(0); //0점 조절
        int pitch = nockanda[i][0];
        float duration = nockanda[i][1]/1500.0;
        Serial.print(i);
        Serial.print("/");
        Serial.print(pitch);
        Serial.print("/");
        Serial.println(duration);
        stepper1.setSpeed(pitch); //1바퀴/s
        while(stepper1.currentPosition() <= pitch*duration){
          stepper1.runSpeed(); //스탭모터 작동(고정속도)
        }  
      }
    }else if(c == '1'){
      for(int i = 0;i<55;i++){
        stepper1.setCurrentPosition(0); //0점 조절
        int pitch = nockanda2[i][0];
        float duration = nockanda2[i][1]/1500.0;
        Serial.print(i);
        Serial.print("/");
        Serial.print(pitch);
        Serial.print("/");
        Serial.println(duration);
        stepper1.setSpeed(pitch); //1바퀴/s
        while(stepper1.currentPosition() <= pitch*duration){
          stepper1.runSpeed(); //스탭모터 작동(고정속도)
        }  
        delay(50);
      }
    }
  }
  
}
반응형
Posted by 덕력킹
,