커뮤니티 - 자유게시판

아두이노 리니어 액츄에이터 제어 질문 있습니다.

김형규
  • 작성일
    2024-05-28
  • 조회수
    138
리니어 액츄에이터를 사용하여 모터의 이송거리를 제어하는 코드를 짜고있습니다. 지금까지 한 코딩은 초음파 센서와 물체 사이의 거리를 측정해서 그 거리 값에 따라 리니어 액츄에이터의 이송 거리를 제어하고 있습니다. (갔다가 돌아오는 왕복 식입니다) 혹시 여기서 초음파 센서를 사용하지 않고도 저희가 원하는 값만큼 액츄에이터의 이송거리를 제어할 수 있는 방법이 있는지 궁금합니다. 아래는 저희가 지금까지 한 코드 내용입니다. const int trigPin = 11;const int echoPin = 10;int green=13, red=12;int PUL = 7;int DIR = 6;int microStep = 8; //스텝 and 펄스int rotation ; //회전수unsigned int i;void setup(){  Serial.begin (9600);   pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);  pinMode(green, OUTPUT);  pinMode(red, OUTPUT);   pinMode(PUL, OUTPUT);  pinMode(DIR, OUTPUT);    delay(0);}float Distance, duration;    void loop ()  {   {  digitalWrite(trigPin, HIGH); //초음파 발생  delayMicroseconds(1); // 0.001초 대기  digitalWrite(trigPin, LOW); // 초음파 멈춤 // 초음파가 갔다가 돌아온 시간 저장  duration = pulseIn(echoPin, HIGH); // trig핀HIGH ~ echo 핀 HIGH 사이의 시간 측정 Distance = ((float)(duration * 340) / 10000) / 2;   // 시간 -> 거리(cm)로 환산  Serial.print(Distance);  Serial.println("cm");  Serial.println();  delayMicroseconds(1);  }   if(Distance >= 20)   //rotatoion이 계산되어야한다  {   rotation = 1800 ;     digitalWrite(green, HIGH);    digitalWrite(red, LOW);  }  else (Distance >= 1 && Distance < 20)  {    rotation = 3600;    digitalWrite(green, LOW);    digitalWrite(red, HIGH);  }     /*else  {    rotation = 0;    digitalWrite(green, LOW);    digitalWrite(red, LOW);  }*/   //센서나 스위치로 제어를 해 줄 신발을 인식      digitalWrite(DIR,LOW);  for(i=0;i<(microStep*rotation);i++)  {    digitalWrite(PUL,HIGH);    delayMicroseconds(40); //속도    digitalWrite(PUL,LOW);    delayMicroseconds(40);  }     delay(100);   /* {  digitalWrite(trigPin, HIGH); //초음파 발생  delayMicroseconds(1); // 0.001초 대기  digitalWrite(trigPin, LOW); // 초음파 멈춤 // 초음파가 갔다가 돌아온 시간 저장  duration = pulseIn(echoPin, HIGH); // trig핀HIGH ~ echo 핀 HIGH 사이의 시간 측정 Distance = ((float)(duration * 340) / 10000) / 2;   // 시간 -> 거리(cm)로 환산  Serial.print(Distance);  Serial.println("cm");  Serial.println();  delayMicroseconds(1);  }*/    digitalWrite(DIR,HIGH);  for(i=0;i<(microStep*rotation);i++)  {    digitalWrite(PUL,HIGH);    delayMicroseconds(40);    digitalWrite(PUL,LOW);    delayMicroseconds(40);  } delay(100);    /* if(Distance < 20)    {    rotation = 3600;    digitalWrite(green, LOW);    digitalWrite(red, HIGH);  }  else  {    rotation = 1800;    digitalWrite(green, HIGH);    digitalWrite(red, LOW);  }*/       }

댓글 0

아두이노 리니어 액츄에이터 제어 질문 있습니다. : 창업정보 포털 오늘의창업