BASIC4MCU | 질문게시판 | 답변 : 스텝모터 관련 질문
페이지 정보
작성자 master 작성일2022-11-14 09:49 조회942회 댓글0건본문
int value=analogRead(A0);
value는 아나로그 입력이므로 0~1023의 값을 받습니다.
0과 1을 입력받는 디지털입력과 다릅니다.
Serial.print("Rain : "); Serial.println(value);
시리얼모니터 창에 뜨는 값의 범위를 잘 체크하세요이 예제와 동일한 센서라면비가오지 않으면 925정도, 비가오면 490 정도입니다.중간값은 707 정도입니다.707을 체크하는 값으로 사용하면 되겠습니다.//
digitalWrite(stepPin,1); delay(2); digitalWrite(stepPin,0); delay(2);
이 스텝 펄스 한 개로는 모터가 1스텝밖에 회전하지 못합니다.
#define stepsPerRevolution 1600
1600스텝 1회전이라면 360/1600=0.225도 회전하는 셈입니다.
만약 3회전해서 문이 열리거나 닫힌다면 1600*3=4800스텝을 줘야합니다.
//
//
#define dirPin 10
#define stepPin 11
//stepsPerRevolution 1600
//
bool window=0;
//
void motor_pulse(){ digitalWrite(stepPin,1); delay(2); digitalWrite(stepPin,0); delay(2); }
//
void sensor_open(){
if(window!=1){ window=1; // 닫혀있다면 열어라
Serial.println("open"); digitalWrite(dirPin,1); for(int i=0;i<4800;i++)motor_pulse();
}
}
//
void sensor_close(){
if(window!=0){ window=0; // 열려있다면 닫아라
Serial.println("Close"); digitalWrite(dirPin,0); for(int i=0;i<4800;i++)motor_pulse();
}
}
//
void setup(){
Serial.begin(9600);
pinMode(dirPin,OUTPUT); pinMode(stepPin,OUTPUT);
}
//
void loop(){
int value=analogRead(A0); Serial.print("Rain : "); Serial.println(value);
//
if(value>707){ sensor_open(); } // 비가 안오면
else { sensor_close(); } // 비가 오면
//
delay(5000);
}
댓글 0
조회수 942등록된 댓글이 없습니다.