본문 바로가기

메이킹/아두이노

아두이노 선풍기(L9110) 팬모터로 만들기(버튼, 초음파센서)

반응형

아두이노와 팬모터 (L9110 Fan Motor)를 이용해 선풍기를 만들 때 사용할 수 있는 다양한 센서들을 활용해 응용방법을 배워보기로 하겠습니다. 여기서는 버튼과 초음파센서, 온습도센서 등을 이용해 선풍기를 만들어보겠습니다.

 

팬모터 (L9110 Fan Motor)?

 - 아두이노 프로펠러 모듈로 모터드라이버가 내장되어 회전방향과 속도제어가 가능합니다. 권장전압은 5V, 동작전압은 2.5 ~ 12V이고 사용전류는 약 300mA입니다. 

아두이노선풍기 L9110 팬모터 모듈
아두이노선풍기 L9110 팬모터 모듈

아두이노와 팬모터 (L9110 Fan Motor) 모듈 연결

아두이노선풍기 회로 연결
아두이노선풍기 회로 연결

int INA=5;
int INB=6;

void setup(){    
    pinMode(INA,OUTPUT);  // 5번 핀을 출력핀으로 설정함.
    pinMode(INB,OUTPUT);  // 6번 핀을 출력핀으로 설정함.

}

void loop(){    
    digitalWrite(INA,HIGH); // 5번 핀에 High 신호를 보내면 팬모터의 INA와 연결되어 있기 때문에 A방향으로 회전함.
    digitalWrite(INB,LOW);

//    digitalWrite(INA,LOW); 
//    digitalWrite(INB,HIGH); // 6번 핀에 High 신호를 보내면 팬모터의 INB와 연결되어 있기 때문에 B방향으로 회전함.

}

 

아두이노 팬모터 선풍기 버튼으로 제어하기

아두이노 선풍기 버튼 제어
아두이노 선풍기 버튼 제어

int INA=5;
int INB=6;

int Btn=2;
int state=0;

void setup(){  
    Serial.begin(9600);
    pinMode(Btn, INPUT_PULLUP);  // 버튼 2번 핀을 입력핀으로 설정함.  
    pinMode(INA,OUTPUT);  // 5번 핀을 출력핀으로 설정함.
    pinMode(INB,OUTPUT);  // 6번 핀을 출력핀으로 설정함.

}

void loop(){  
  int val=digitalRead(Btn);
//  Serial.println(val);
  
  if (val==LOW){ //버튼을 눌렀을 때
    if(state==0){
      state=1;
      Serial.println("on"); 
    }
    else if(state=1){
      state=0; 
      Serial.println("off"); 
    }     
 }

  if(state==1){
    digitalWrite(INA,HIGH); 
    digitalWrite(INB,LOW);
  }
  else{
    digitalWrite(INA,LOW); 
    digitalWrite(INB,LOW); 
  }
}

아두이노 팬모터 선풍기 초음파센서로 작동 제어하기

아두이노선풍기 버튼 초음파 연결
아두이노선풍기 버튼 초음파 연결

- 버튼을 눌러 선풍기를 켜고 초음파센서로 거리를 측정하여 가까우면 꺼지도록 만들다.

int INA=5;
int INB=6;

int Btn=2;
int state=0;

int trig = 9;
int echo = 10;

void setup(){  
    Serial.begin(9600);
    pinMode(Btn, INPUT_PULLUP);  // 2번 핀을 입력핀으로 설정함.  
    pinMode(INA,OUTPUT);  // 5번 핀을 출력핀으로 설정함.
    pinMode(INB,OUTPUT);  // 6번 핀을 출력핀으로 설정함.
    pinMode(trig, OUTPUT);
    pinMode(echo, INPUT);
}

void loop(){ 
  float cycletime;
  float distance;
   
  int val=digitalRead(Btn);  
  if (val==LOW){ //버튼을 눌렀을 때
    if(state==0){
      state=1;
      Serial.println("on"); 
    }
    else if(state=1){
      state=0; 
      Serial.println("off"); 
    }     
 }
  digitalWrite(trig, HIGH);
  delay(10);
  digitalWrite(trig, LOW);
  cycletime = pulseIn(echo, HIGH); 
  distance = ((340 * cycletime) / 10000) / 2;  
  Serial.print("Distance:");
  Serial.print(distance);
  Serial.println("cm");
  delay(500);
  
  if(state==1){ //모터가 작동할 때
    if ( distance > 20){ //20cm보다 멀리 떨어져있을 때만 작동
      digitalWrite(INA,HIGH); 
      digitalWrite(INB,LOW);
    }
    else{
      digitalWrite(INA,LOW); //거리가 20cm보다 가까우면 안전을 위해 꺼지도록함
      digitalWrite(INB,LOW);       
    }
  }
  else{
    digitalWrite(INA,LOW); 
    digitalWrite(INB,LOW); 
  }
}

-  버튼 없이 초음파센서로 거리를 측정하여 가까우면 꺼지도록 만들다.(회로는 바꿀 필요 없고 버튼만 빼면 됩니다.)

int INA=5;
int INB=6;

int trig = 9;
int echo = 10;

void setup(){  
    Serial.begin(9600);
    pinMode(INA,OUTPUT);  // 5번 핀을 출력핀으로 설정함.
    pinMode(INB,OUTPUT);  // 6번 핀을 출력핀으로 설정함.
    pinMode(trig, OUTPUT);
    pinMode(echo, INPUT);
}

void loop(){ 
  float cycletime;
  float distance;
   
  digitalWrite(trig, HIGH);
  delay(10);
  digitalWrite(trig, LOW);
  cycletime = pulseIn(echo, HIGH); 
  distance = ((340 * cycletime) / 10000) / 2;  
  Serial.print("Distance:");
  Serial.print(distance);
  Serial.println("cm");
  delay(500);
  
  if ( distance > 20){ //20cm보다 멀리 떨어져있을 때만 작동
      digitalWrite(INA,HIGH); 
      digitalWrite(INB,LOW);
    }
   else{
      digitalWrite(INA,LOW); 
      digitalWrite(INB,LOW);       
    }
}

아두이노 팬모터 선풍기 온습도센서로 제어하기

온습도센서로 온도와 습도를 측정하여 온도가 20도 이상이거나 습도가 30%이상이면 선풍기를 작동시킨다.

아두이노선풍기 DHT11연결
아두이노선풍기 DHT11

#include "DHT.h"
int INA=5;
int INB=6;

int dht_pin = A0;
DHT dht11(dht_pin, DHT11);

void setup(){  
    Serial.begin(9600);
    pinMode(INA,OUTPUT);  // 5번 핀을 출력핀으로 설정함.
    pinMode(INB,OUTPUT);  // 6번 핀을 출력핀으로 설정함.
    dht11.begin();
}

void loop(){ 
  float humi = dht11.readHumidity();
  float temp = dht11.readTemperature();
  float hic = dht11.computeHeatIndex(temp, humi, false);
  Serial.println(temp);
  Serial.println(humi);
    
  if (isnan(humi) || isnan(temp)) {
    Serial.println("Failed to read from DHT11 sensor!");
    return;
  }
  
  if ( temp > 20 || humi > 30){ //온도가 20도 또는 습도 30 보다 높으면 작동
      digitalWrite(INA,HIGH); 
      digitalWrite(INB,LOW);
    }
   else{
      digitalWrite(INA,LOW); 
      digitalWrite(INB,LOW);       
    }
}

아두이노 나노와 팬모터, 온습도센서, 버튼을 이용해 선풍기 만들기 완성

아두이노 우노 대신 작은 아두이노 나노를 이용해 선풍기를 완성하였습니다. 외형은 포장박스를 이용해 만들었고 회로도는 다음과 같이 아두이노 나노보드와 미니브레드보드만 바꿔서 연결하면 됩니다.

아두이노 나노와 온습도센서, 팬모터, 버튼 연결 회로도

아두이노나노 버튼선풍기 DHT11온습도센서 연결
아두이노나노 버튼선풍기 DHT11온습도센서 연결

아두이노 나노보드로 변경할 때 보드를 먼저 선택한다.

아두이노 나노보드로 변경
아두이노 나노보드로 변경

포장용 상자를 이용해 조립하여 선풍기 완성

아두이노나노 선풍기 조립
아두이노나노 선풍기 조립
아두이노나노 선풍기
아두이노나노 선풍기 완성
아두이노나노 선풍기
아두이노나노 선풍기 완성

 

아두이노와 팬모터 (L9110 Fan Motor)를 이용해 선풍기를 만들 때 안전을 위해 부드러운 재질의 프로펠러를 이용하면 더욱 안전하게 사용할 수 있습니다. 

반응형