IR리모컨으로 DC모터 제어
페이지 정보
작성자 akrrkd 작성일18-12-04 16:25 조회6,539회 댓글0건본문
안녕하세요 질문입니다.
IR리모컨으로 DC모터를 제어하려고 합니다.
리모컨 수신은 잘 되는데 DC모터가 동작하고있을땐 리모컨 수신이 안됩니다.
DC모터연결을 해제하면 리모컨수신이 다시 잘되는데 오로지 DC모터가 연결되어 동작하고있을때만 리모컨 수신이 안됩니다.
답변 부탁드립니다.
밑엔 사용된 소스입니다.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include
#include
#include
#include
int RECV_PIN = A0; //define input pin on Arduino
IRrecv irrecv(RECV_PIN);
decode_results results;
int DIR1 = 3;
int DIR2 = 4;
int EN1 = 5;
void Motor_cw(){ //시계방향 회전
digitalWrite(DIR1, LOW);
digitalWrite(DIR2, HIGH);
digitalWrite(EN1, HIGH);
}
void Motor_stop(){ //정지
digitalWrite(DIR1, HIGH);
digitalWrite(DIR2, HIGH);
digitalWrite(EN1, LOW);
}
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(DIR1,OUTPUT);
pinMode(DIR2,OUTPUT);
pinMode(EN1,OUTPUT);
//analogWrite(3, 1);
while (! Serial);
Serial.println("Speed 0 to 255");
}
void loop() {
if (irrecv.decode(&results)) {
if(results.value==0x00FF10EF){//4번 버튼 수동모드
Serial.println("수동모드");
Motor_stop();
while(1){
if (irrecv.decode(&results)){
if(results.value==0x00FF30CF){//1번 버튼 미풍
Serial.println("미풍");
Motor_cw();
analogWrite(EN1, 120);
break;
}
if(results.value==0x00FF18E7){//2번 버튼 약풍
Serial.println("약풍");
Motor_cw();
analogWrite(EN1, 175);
delay(2000);
Motor_stop();
}
if(results.value==0x00FF7A85){//3번 버튼 강풍
Serial.println("강풍");
Motor_cw();
analogWrite(EN1, 255);
}
if(results.value==0x00FF6897){//0번 버튼 수동정지
Serial.println("정지");
Motor_stop();
break;
}
irrecv.resume();
}
}
}
else if(results.value==0x00FF38C7)//5번 버튼 자동모드
{
Serial.println("자동모드");
while(1){
int ThermistorPin = A5; // Analog input pin for thermistor voltage
int Vo; // Integer value of voltage reading
float R = 2000.0; // Fixed resistance in the voltage divider
float logRt;
float Rt;
float T;
float R0 = 5369; // R0 10kΩ at T0
float T0 = 298.15; // T0 (25 °C = 298.15 K)
float B = 3434; // 4200
float C = 0;
Vo = analogRead(ThermistorPin);
Rt = R*( 1023.0 / (float)Vo - 1.0 );//써미스터 저항 측정
T = 1.0/(1.0/T0 + (1/B)*log((Rt/R0)));
C = T - 301.15;
Motor_cw();
if(C>=33)//
analogWrite(EN1, 255);
else if(C<32)
analogWrite(EN1, 150);
else if(C<10||C>50)
Motor_stop();
else if(results.value==0x00FF5AA5)//6번 버튼 자동모드끔
break;
}
}
irrecv.resume(); // Receive the next value
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
현재 회로도에서 IR수신 센서랑 온도센서의 아날로그 핀이 서로 바껴있는거빼곤 다른것없습니다.
댓글 : 0
조회수 : 6,539
등록된 댓글이 없습니다.