정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 프로그래밍과정을 익히면서 합쳐봤는데 잘 안되네요...
흰곰 | 2019-11-26
 

1. 프로젝트 사용한 보드 종류

  아두이노 우노

 

 

2. 사용한 개발 프로그램명

  아두이노

 

 

3. 사용한 센서 모델명

  초음파센서2개, 모터, 서보모터(MG995), 모터드라이버(ta8050p), 레귤레이터(lm7805), 삼색LED

 

4. 연결한 회로 설명 (또는 이미지)

 루프가 2개를 합쳤는데 하나는 초음파센서1로 거리를 측정하여 삼색LED의 빛을 표시해주는 것과

 다른 하나는 초음파센서로 손을 인식하여 모터가 일정시간 회전하고 멈추면 서보모터가 동작하고 서보모터가

휴지를 잡으면 모터가 역회전을 하고 휴지가 끊어지면 서보모터가 다시 원위치로 돌아가는 프로그래밍을 했습니다.

초음파센서 거리안에 들어오면 모터가 동작을 안하게 했어요

 

 

5. 소스코드 (주석 필수)

 

#include <Servo.h>  

int trig1 = 12;
int echo1 = 13;
int motorL = 6;
int motorR = 5;                
int trig2 = 8;
int echo2 = 7;
int servoPin = 4;    
Servo servo; 
          
          
void setup() {
  pinMode(motorL, OUTPUT);
  pinMode(motorR, OUTPUT);
  pinMode(trig1, OUTPUT);
  pinMode(echo1, INPUT);
  pinMode(trig2, OUTPUT);
  pinMode(echo2, INPUT);
  servo.attach(servoPin);
             
}

void loop() {
  analogWrite(11, 0);
  analogWrite(10, 0);
  analogWrite(9, 0); 

  digitalWrite(trig1, LOW);
  delayMicroseconds(2);
  digitalWrite(trig1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig1, LOW);
                 
                 
  long duration = pulseIn(echo1, HIGH);
  long distance = (duration * 340) / 2 / 10000;
                   
  
   if (distance<3) {
    analogWrite(10, 255); 
  } else if(distance<5) {analogWrite(11, 255); 
  } else if(distance<7) {analogWrite(9, 255);} 

delay(100);            

  digitalWrite(trig2, LOW); //trig 초음파 출력x
  delayMicroseconds(2);
  digitalWrite(trig2, HIGH); //trig 초음파 출력○
  delayMicroseconds(10);
  digitalWrite(trig2, LOW);
                    
                    
  long duration2 = pulseIn(echo2, HIGH); 
  long distance2 = (duration2 * 340) / 2 / 10000;
                
                
  if (distance2<20){
     servo.write(10);
     digitalWrite(motorL,HIGH);
     delay(5000);
     digitalWrite(motorL,LOW);
     delay(3000);
     servo.write(170);
     digitalWrite(motorR,HIGH);
     delay(4000);
     digitalWrite(motorR,LOW);
     delay(20);
     servo.write(10);
     delay(1);
           
  }           
  else if(distance2>20){
    digitalWrite(motorR,LOW);
    digitalWrite(motorL,LOW);
  }             

}              

 

6. 문제점 및 에러 내용

  서보모터 관련 내용을 지우면 원하는대로 작동이 되어서 사이에 서보모터 명령어를 추가하면 모터에 전류가 들어오지 않고

 LED가 깜빡하면 서보모터가 조금 움직이는 현상만 계속 반복 됩니다. 프로그래밍을 제대로 배운적은 없고 이번에 제작하면서 

찾으면서 만든거라 어색하지만 원인이 뭔지 모르겠어요... 순서대로 제대로 작동하기위해서 어떤 순서로 작성해야되거나 어떤방식으로 해야되는지 알고싶습니다.

이전글   |    아두이노 센서값에 따른 기능넣기(앱인벤터) ... 2019-11-25
다음글   |    DIY 금고 지문인식 관련해서 질문합니다. 2019-11-27