메이커 Maker

반자동 방충망 청소 로봇

지구빵집 2022. 1. 6. 09:16
반응형

 

 

반자동 방충망 청소 로봇 

 

반자동 방충망 청소 로봇 개요 

 

기숙사에서 보는 창 밖 학교의 계절별 풍경은 정말 아름답다. 그 아름다운 풍경을 보기 위해 창 밖을 내다봤는데, 이게 웬 걸. 방충망에 먼지가 그득히 끼여 있는 것을 발견하게 되었다. 유리 창문은 물티슈로 닦아내면 문제가 될 것이 없지만, 방충망은 물티슈로도 쉽게 청소가 되지 않아 불편했다.

 

그래서 고압 워터 건을 사용하여 청소해볼까 생각해봤지만, 아파트가 주된 주거환경인 우리나라의 특성상 소음이 많고 물이 많이 튀기는 워터 건은 사용할 수가 없다고 판단하였다.

 

어떻게 하면 이러한 문제를 해결할 수 있을까 생각해보다가 조원들과 함께 로봇공학과 연구실인 제1공학관 112호에 놀러 가서 열심히 출력을 하고 있는 3D 프린터를 발견하게 되었고, 조원들과 3D 프린터를 보면서 ‘아, 저거다!’라고 생각하고 3D 프린터의 구조를 차용하여 방충망을 자동으로 청소하는 로봇을 만들면 어떨까의 조원들의 의견을 수렴하여 이번 프로젝트를 시작하게 되었다. 

 

구성품 설명 -  기구 설명 참고해야 함.

 

반자동 방충망 청소 로봇 회로 연결도

 

작품에 대한 문제점과 해결방안

 

크기

 

우리가 만든 로봇은 크기가 일정하여 로봇과 크기가 비슷하거나 작은 창문은 청소하기 쉽지만 로봇보다 크기가 큰 창문은 청소하기 힘들다. 해결방안 : 로봇의 조립을 쉽게 할 수 있도록 하여 창문의 크기에 맞게 로봇을 맞출 수 있도록 만든다.

 

무게

 

우리가 만든 로봇은 알루미늄 프로파일과 연마봉, 리드 스크류와 같은 부품의 재질이 금속으로 이루어져 있어 무게가 많이 나간다. 더 가벼운 재료(강화 플라스틱 or 더 가벼운 금속)로 로봇을 만들어 가볍게 만든다.

 

안전 및 방수

 

현재 로봇은 아두이노 보드, 전선 등이 바깥으로 드러나 있으며 정리가 제대로 되어있지 않다. 이러한 문제점으로 인해 물 펌프와 노즐을 사용해 물을 분사하려고 했던 초기 계획을 포기해야만 했다. 전선을 정리할 수 있는 공간을 만들거나 3D펜 등을 이용해 전선을 정리할 수 있다면 합선이나 방수의 문제를 해결할 수 있을 것이며 물 펌프 또한 장착할 수 있을 것이다.

 

작동방식

 

현재 제품은 한번 실행한 후 다시 실행시키기 위해선 전원 공급을 중단한 후 다시 연결하거나 아두이노의 리셋 버튼을 눌러야 한다. 휴대폰을 이용해 원격으로 실행시킬 수 있도록 개선한다면 더 편리하게 사용할 수 있을 것이다.  

 

전체 코드를 첨부한다.

 

int dirPin1 = 1; // 좌우 1개
int stepPin1 = 2;   
int dirPin2 = 3; // 상하 왼                           
int stepPin2 = 4;
int dirPin3 = 5;  // 상하 우                         
int stepPin3 = 6;   
int switch1 = 30; // 장치 위
int switch2 = 31; // 장치 아래
int switch3 = 32; // 장치 왼쪽
int switch4 = 33; // 장치 오른쪽
int switch5 = 34; // 걸레 위
int switch6 = 35; // 걸레 아래
int switch7 = 36; // 걸레 왼쪽
int switch8 = 37; // 걸레 오른쪽
int level = 0;
int i;
void L_();
void R_();
void UP_();
void DOWN1_();

void setup() {
  pinMode(dirPin1, OUTPUT);
  pinMode(stepPin1, OUTPUT);
  pinMode(dirPin2, OUTPUT);
  pinMode(stepPin2, OUTPUT);
  pinMode(dirPin3, OUTPUT);
  pinMode(stepPin3, OUTPUT);
  pinMode(switch1, INPUT);
  pinMode(switch2, INPUT);
  pinMode(switch3, INPUT);
  pinMode(switch4, INPUT);
  pinMode(switch5, INPUT);
  pinMode(switch6, INPUT);
  pinMode(switch7, INPUT);
  pinMode(switch8, INPUT);
}

void loop() {
  if(level == 0){
  UP_();
  if(digitalRead(switch1)==HIGH || digitalRead(switch5) == HIGH){
    level = 1;    
  }
  }
  if(level == 1){
    digitalWrite(stepPin2, LOW);
    digitalWrite(stepPin3, LOW);
    L_();
    if (digitalRead(switch3) == HIGH || digitalRead(switch7) == HIGH){
      level = 2;
    }
  }
  if(level == 2){
    digitalWrite(stepPin1, LOW);
    level = 3;    
  }
  if(level == 3){
    R_();
    if(digitalRead(switch4) == HIGH || digitalRead(switch8) == HIGH){
      level = 4;
    }
  }
  if(level == 4){
    digitalWrite(stepPin1, LOW);
    for(i=1;i<1000;i++){
    DOWN1_();    
     
    if(digitalRead(switch2)==HIGH || digitalRead(switch6) == HIGH){
      level = 7;
      goto AA;
    }
    }
    level = 5;
  }
  if(level == 5){
    L_();
    if(digitalRead(switch3) == HIGH || digitalRead(switch7) == HIGH){
      level = 6;
    }
  }
  if(level == 6){
    digitalWrite(stepPin1, LOW);
    for(i=1;i<1000;i++){
    DOWN1_();
    
    if(digitalRead(switch2)==HIGH || digitalRead(switch6) == HIGH){
     	 level = 7;
     	 goto AA;
   	 }
    }
    level = 3;
  }
  if(level == 7){
    AA:
    digitalWrite(stepPin1, LOW);
    digitalWrite(stepPin2, LOW);
    digitalWrite(stepPin3, LOW);
    L_();
    if(digitalRead(switch3) == HIGH || digitalRead(switch7) == HIGH){
      level = 8;
    }
  }
  if(level == 8){
    digitalWrite(stepPin1, LOW);
    digitalWrite(stepPin2, LOW);
    digitalWrite(stepPin3, LOW);
  }
}

void R_(){ // 오른쪽으로
  digitalWrite(dirPin1, LOW); // 오른쪽으로
  digitalWrite(stepPin1, HIGH);
  delayMicroseconds(500);
  digitalWrite(stepPin1, LOW);
  delay(1); 
}
void L_(){ // 왼쪽으로
  digitalWrite(dirPin1, HIGH); 
  digitalWrite(stepPin1, HIGH);
  delayMicroseconds(500);
  digitalWrite(stepPin1, LOW);
  delay(1);
}
void UP_(){
  digitalWrite(dirPin2, HIGH);
  digitalWrite(dirPin3, HIGH);
  digitalWrite(stepPin2, HIGH);
  digitalWrite(stepPin3, HIGH);      
  delayMicroseconds(500);
  digitalWrite(stepPin2, LOW);
  digitalWrite(stepPin3, LOW);
  delay(1); 
}
void DOWN1_(){
  digitalWrite(dirPin2, LOW);
  digitalWrite(dirPin3, LOW);
  digitalWrite(stepPin2, HIGH);
  digitalWrite(stepPin3, HIGH);      
  delayMicroseconds(500);
  digitalWrite(stepPin2, LOW);
  digitalWrite(stepPin3, LOW);
  delay(1);
}

 

반자동 방충망 청소 로봇

 

 

반응형