BASIC4MCU | 질문게시판 | 아두이노 리미트 스위치를 이용한 모터 제어
페이지 정보
작성자 오모리 작성일2022-09-22 10:58 조회6,683회 댓글4건본문
// Flexpin = 플렉시블 센서 입력
// FlexVal = 플렉시블 센서 함수
// 센서값이 0보다 높을 경우 모터 후진
// 센서값이 100보다 작을 경우 모터 전진
int motor_1 = 9;
int motor_2 = 3;
int FlexPin = A0;
int limitPin_Stop = 5;
void setup()
{
Serial.begin(9600);
pinMode(motor_1, OUTPUT);
pinMode(motor_2, OUTPUT);
}
void loop()
{
int FlexVal;
FlexVal = analogRead(FlexPin);
Serial.print("sensor: ");
Serial.println(FlexVal);
delay(100);
if(FlexVal < 100){
analogWrite(motor_1, 255);
digitalWrite(motor_2, HIGH);
delay(10);
}
else {
analogWrite(motor_1, 255);
digitalWrite(motor_2, LOW);
delay(10);
}
}
안녕하세요. 혼자서 기능 구현을 시도하다가 어려움이 생겨 자문 구하려고 글 남깁니다.
현재 플렉시블 센서를 이용하여 모터의 전진 및 후진을 제어 하고 있습니다.
추가로 리미트 스위치를 이용하여 모터 정지 기능까지 구현해보려고 합니다.
플렉시블 센서에 100보다 높은 값이 들어가면 모터가 후진하고 100보다 낮은 값이 들어가면 모터가 전진을 하고 있습니다.
여기에서 모터가 전진 시 멈춰주는 기능을 넣지 않으면 과부하가 걸린다고 들어서 리미트 스위치를 이용하여 멈춰주는 기능을 넣고자 합니다.
해당 코드에 대한 자문좀 구할 수 있을까요 ??
댓글 4
조회수 6,683master님의 댓글
master 작성일
int FlexPin=A0;
int motor_1=9,motor_2=3;
int limitPin_Stop=5;
//
void setup(){
Serial.begin(9600);
pinMode(motor_1,OUTPUT); pinMode(motor_2,OUTPUT);
analogWrite(motor_1,255);
}
//
void loop(){
int FlexVal=analogRead(FlexPin);
Serial.print("sensor: "); Serial.println(FlexVal);
delay(100);
if(FlexVal<100){
if(digitalRead(limitPin_Stop))digitalWrite(motor_2,HIGH); // 리미트 아니면 전진
else digitalWrite(motor_2,LOW); // 리미트면 정지
}
else{
digitalWrite(motor_2,LOW);
}
}
오모리님의 댓글
오모리
감사합니다. 테스트해보고 결과 말씀드리겠습니다 !
오모리님의 댓글
오모리
테스트를 해보았는데 "else digitalWrite(motor_2,LOW); // 리미트면 정지" 부분에서 정지하지 않고 후진을 하여서
"else analogWrite(motor_1, 0); digitalWrite(motor_2,LOW); // 리미트면 정지" 이렇게 바꾸어서 정지를 시켰습니다.
그런데 여기에서 문제는 리미트 스위치가 닿아있는 상태에서만 정지했으면 좋겠는데 닿지 않아도 이미 리미트 스위치가 한번 닿았기 때문에 계속 정지 상태가 유지됩니다..
추가로 궁금한게 리미트스위치에서 On/Off 신호를 0과 1로 출력이 가능한가요 ??
master님의 댓글
master 작성일
int FlexPin=A0;
int motor_1=9,motor_2=3;
int limitPin_Stop=5;
//
void setup(){
Serial.begin(9600);
pinMode(motor_1,OUTPUT); pinMode(motor_2,OUTPUT);
digitalWrite(motor_1,0);
}
//
void loop(){
int FlexVal=analogRead(FlexPin);
Serial.print("sensor: "); Serial.println(FlexVal);
delay(100);
if(FlexVal<100){
if(digitalRead(limitPin_Stop))digitalWrite(motor_2,1); // 리미트 아니면 전진
else digitalWrite(motor_2,0); // 리미트면 정지
}
else{
digitalWrite(motor_2,LOW);
}
}