커뮤니티 - 자유게시판
아두이노 리니어 액츄에이터 제어 질문 있습니다.
김형규
-
- 작성일
- 2024-05-28
-
- 조회수
- 138
-
0
리니어 액츄에이터를 사용하여 모터의 이송거리를 제어하는 코드를 짜고있습니다. 지금까지 한 코딩은 초음파 센서와 물체 사이의 거리를 측정해서 그 거리 값에 따라 리니어 액츄에이터의 이송 거리를 제어하고 있습니다. (갔다가 돌아오는 왕복 식입니다)
혹시 여기서 초음파 센서를 사용하지 않고도 저희가 원하는 값만큼 액츄에이터의 이송거리를 제어할 수 있는 방법이 있는지 궁금합니다.
아래는 저희가 지금까지 한 코드 내용입니다.
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