아래 있는 회로에서 서보모터 GND 와 VCC를 모터 구동시키는 전압과 연결해도 속도조절이 되지 않습니다..
어떤 문제 때문에 그러는지 답변 부탁드립니다..ㅠㅠ
코드와 회로 첨부하여 올립니다. 감사합니다.
#include <Servo.h>
#include <SoftwareSerial.h> //시리얼통신 라이브러리 호출
Servo myservo;
int pos=50; //서보모터의 초기값
int blueTx=2; //Tx(보내는핀 설정)
int blueRx=3; //Rx(받는핀 설정)
SoftwareSerial mySerial(blueTx, blueRx); //블루투스 통신을 위한 객체선언
String myString=""; //스마트폰에서 오는 문자를 위한 변수지정
String mySpeed=""; //Speed값 출력을 위한 변수지정
String DistanceString=""; //초음파센서 거리값 받기 위한 변수지정
String IluminationString=""; //조도값을 받기 위한 변수지정
int DC_EN =10; //속도제어
int DC_IN1=6; //IN1과 IN2를 이용해 방향제어
int DC_IN2=8;
int DC_Speed=150; //EN핀에서 제어할 속도 설정 0~255
boolean check_first; //Speed 값 초기화를 위한 boolean변수
int trig = 11; //초음파 센서를 통한 제어
int echo = 12;
int redLED = 4; //초음파 센서를 통한 LED 제어
int greenLED = 13; //조도 센서를 통한 LED 제어
int analogPIN = A0; //조도 센서 입출력
void setup()
{
Serial.begin(9600); //시리얼 모니터 통신을 위한 개방
mySerial.begin(9600); //블루투스 통신을 위한 개방
pinMode(DC_IN2, OUTPUT);
pinMode(DC_IN1, OUTPUT);
pinMode(DC_EN, OUTPUT);
myservo.attach(9); //몇번 핀에서 제어신호가 오는지 알기위함(서보모터)
myservo.write(pos); //중앙 위치 시작을 위한 출력
pinMode(trig, OUTPUT); //초음파 센서의 핀을 OUTPUT으로 설정함
pinMode(echo, INPUT); //초음파 센서의 핀을 INPUT으로 설정함
pinMode(redLED, OUTPUT); //초음파 센서 LED
pinMode(greenLED, OUTPUT);
}
void loop()
{
//loop 처음 들어올시 Speed값을 0으로 초기화 시키기 위함.
if(!check_first)
{
check_first=true;
mySpeed="0";
}
//초음파 센서 제어
digitalWrite(trig, LOW); //센서 처음값 꺼놓음
delayMicroseconds(2); //바꾸기 위한 딜레이값
digitalWrite(trig, HIGH); //센서초기화시키기 위한 켜놓음
delayMicroseconds(10);
digitalWrite(trig, LOW); //다시 꺼놓음
long distance = pulseIn(echo, HIGH)/58.2; //초음파 센서 거리 계산
DistanceString = distance; //센서거리값 출력을 위한 값전달
delay(200);
//초음파 센서에 의한 LED ON/OFF
if(distance >= 0 && distance < 13)
digitalWrite(redLED, HIGH);
else
digitalWrite(redLED, LOW);
//조도 센서에 의한 LED ON/OFF
int illuminationValue = 0;
illuminationValue = analogRead(analogPIN);
IluminationString = illuminationValue; //조도값 출력을 위한 값전달
//스마트폰 및 시리얼 모니터에 초음파센서와 조도센서값, 속도값 출력
mySerial.println(DistanceString+","+IluminationString+","+mySpeed); //스마트폰
Serial.println(DistanceString+","+IluminationString+","+mySpeed); //시리얼 모니터
//스마트폰에서 들어오는 값을 읽음
while(mySerial.available())
{
char myChar = (char)mySerial.read(); //값을 받아 Char형식으로 변환
myString += myChar;
delay(5);
}
//들어오는 값에 따라 알맞은 값 출력
if(!myString.equals(""))
{
Serial.println("input value: "+myString); //시리얼 모니터에 출력
if(myString=="1")
digitalWrite(greenLED, HIGH);
else if(myString=="2")
digitalWrite(greenLED, LOW);
//전진
else if(myString=="3")
{
DC_Speed += 10; //10의 속도씩 증가
analogWrite(DC_EN,DC_Speed); //모터에 전달
digitalWrite(DC_IN1,HIGH);
digitalWrite(DC_IN2,LOW);
mySpeed = DC_Speed; //Speed값 출력을 위한 값 전달
}
//정지
else if(myString=="4")
{
DC_Speed=245;
analogWrite(DC_EN,LOW);
digitalWrite(DC_IN1,LOW);
digitalWrite(DC_IN2,LOW);
mySpeed = DC_Speed; //Speed값 출력을 위한 값 전달
DC_Speed = 150;
}
//후진
else if(myString=="5")
{
DC_Speed += 10; //10의 속도씩 후진 가속
analogWrite(DC_EN,DC_Speed);
digitalWrite(DC_IN1,LOW); //모터의 역방향
digitalWrite(DC_IN2,HIGH);
mySpeed = DC_Speed;
DC_Speed = 150;
}
//정지
else if(myString=="6")
{
DC_Speed=245;
analogWrite(DC_EN,DC_Speed); //모터에 전달
digitalWrite(DC_IN1,LOW);
digitalWrite(DC_IN2,LOW);
mySpeed = DC_Speed; //Speed값 출력을 위한 값 전달
DC_Speed=150;
}
//서보모터 제어
else if(myString=="7") //방향전환(좌회전)
{
if(pos>25)
{
pos-=20;
myservo.write(pos);
}
}
else if(myString=="8") //방향전환(우회전)
{
if(pos<100)
{
pos+=20;
myservo.write(pos);
}
}
//초기화
myString="";
}
//아두이노에서 출력되는 값을 스마트폰에 출력하기 위해 스마트폰에 버퍼값을 write하는 과정
if(Serial.available()) //버퍼에 읽지 않은 데이터를 스마트폰에 write함.
{
mySerial.write(Serial.read());
}
}
|