질문게시판 > 아두이노 rc카 코딩 소스 도와주세요...

TODAY511 TOTAL2,162,352
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 아두이노 rc카 코딩 소스 도와주세요...

페이지 정보

작성자 아낙수나무 작성일2019-11-07 18:45 조회18,438회 댓글5건

본문

	

지금 자율주행 rc카 4륜으로 만들려고 하고있습니다. 그러나 다들 하는 센서로 장애물을 피하는 것이 아닌

일정한 경로를 미리 입력해서, 그 경로대로 주행을 하게 해야하는데요.

도저히 오픈 소스를 찾아봐도, 장애물 센서 자율주행만 나올뿐 일정한 경로 및 루트 주행차 소스는 나오지 않았습니다. 저희가 
1. 지금 직선으로 약 150cm 간뒤 
2. 3초간 멈추고
3.왼쪽으로 90도 턴 후
4. 직선으로 50cm 간뒤
5.다시 왼쪽으로 턴 후 
6.뒤로 150cm를 와야합니다.

이 경로로 아두이노 고수분께 소스 코딩좀 부탁드립니다..


   -------------
   l                l
   l                l               
   l                l
   l                l
   l                l
   l                l
   l                l
   l                l
   l                l
   l                l
도착             시작

밑은 지금 쓰고 있는 오픈소스입니다

include <Servo.h>

/* L9110s 모터드라이버

   오른쪽모터

   L9110s A_1A D6

   L9110s A_1B D11

   L9110s A_1Aa D7
   
   L9110s A_1Ba D4

   왼쪽모터

   L9110s B_1A D3

   L9110s B_1B D5

   L9110s B_1Aa D13

   L9110s B_1Ba D12

*/

int A_1A = 6;

int A_1Aa = 7;

int A_1B = 11;

int A_1Ba = 4;

int B_1A = 3;

int B_1Aa = 13;

int B_1B = 5;

int B_1Ba = 12;

/*

   초음파센서

   초음파센서 TRIG - D8

   초음파센서 ECHO - D9

*/

int trigPin = 8;

int echoPin = 9;

/*

   서보모터

   서보모터 OUT - D10

*/

int servoPin = 10;



Servo servo;



//모터의 좌우 속도가 다를 경우, 

//아래의 변수를 조정하여 해결할 수 있습니다.



int motorASpeed = 200; // 모터A 속도 (0~255)

int motorBSpeed = 200; // 모터B 속도 (0~255)



void setup() {

  // 문제발생시 테스트를 위해 시리얼모니터를 시작합니다.

  Serial.begin(9600);

  //핀을 초기화합니다.

  //L9110S 모터드라이버의 핀들을 출력으로 변경합니다.

  pinMode(A_1A, OUTPUT);

  pinMode(A_1B, OUTPUT);

  pinMode(B_1A, OUTPUT);

  pinMode(B_1B, OUTPUT);

  pinMode(A_1Aa, OUTPUT);

  pinMode(A_1Ba, OUTPUT);

  pinMode(B_1Aa, OUTPUT);

  pinMode(B_1Ba, OUTPUT);

 

  digitalWrite(A_1A, LOW);

  digitalWrite(A_1B, LOW);

  digitalWrite(B_1A, LOW);

  digitalWrite(B_1B, LOW);

  digitalWrite(A_1Aa, LOW);

  digitalWrite(A_1Ba, LOW);

  digitalWrite(B_1Aa, LOW);

  digitalWrite(B_1Ba, LOW);





  //초음파센서를 초기화합니다. Trig

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);



  //서보모터를 연결합니다.

  servo.attach(servoPin);



  //초기에 서보를 정면을 봅니다

  servo.write(90);

  delay(1000);

}



void loop() {

  int cm = getStableDistanceCM();

  long leftDistance = 0;

  long rightDistance = 0;



int time = 0;
  time = millis();
  if(time < 4000){
    forward();
  }
  
  if(time = 4000){
    stop();
  }



  //25cm이내에 벽이 있다면 아래의 코드를 실행합니다.

  if (cm < 15) {

    //0.5초간 정지합니다.

    stop();

    delay(1000);

    //왼쪽 거리를 변수에 저장합니다.

    servo.write(200);

    delay(500);

    leftDistance = getStableDistanceCM();

    delay(500);

    //오른쪽 거리를 변수에 저장합니다.

    servo.write(80);

    delay(500);

    rightDistance = getStableDistanceCM();

    delay(500);

    //      서보모터를 중앙으로 움직입니다.

    servo.write(90);

    delay(1000);

    //       0.3초간 후진합니다.

    back();

    delay(200);

    /*

     왼쪽이 오른쪽보다 크다면 0.5초간 좌회전하며, 

     아니라면(작다면)  0.5초간 우회전합니다.

     */

    if (leftDistance > rightDistance) left();

    else left();

    

    delay(530);

    //   25cm이내에 벽이 없다면 전진합니다.

  } 

  else {

    forward();

  }

}



/**

   전방 거리측정(CM)

   초음파센서를 이용해서 벽까지의 거리(mm)를 구합니다.

*/

float getDistanceCM() {

  digitalWrite(echoPin, LOW);

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);



  //    거리값을 저장합니다.

  float distance = pulseIn(echoPin, HIGH)  / 29.0 / 2.0;



  return distance;


}



float getStableDistanceCM() {

  int CmSum = 0;



  for (int i = 0; i < 10; i++) {

    CmSum += getDistanceCM();

  }



  return CmSum / 10;

}



/**

   RC카 전진

   왼쪽,오른쪽 모터를 정회전하여 전진합니다.

*/

void forward() {

  //모터A 정회전

  analogWrite(A_1A, motorASpeed);

  analogWrite(A_1B, 0);

  analogWrite(A_1Aa, motorASpeed);

  analogWrite(A_1Ba, 0);

  //모터B 정회전

  analogWrite(B_1A, motorBSpeed);

  analogWrite(B_1B, 0);

  analogWrite(B_1Aa, motorBSpeed);

  analogWrite(B_1Ba, 0);

 

}



/**

   RC카 후진

   왼쪽,오른쪽 모터를 역회전하여 후진합니다.

*/



void back() {

  //모터A 역회전

  analogWrite(A_1A, 0);

  analogWrite(A_1B, motorASpeed);

  analogWrite(A_1Aa, 0);

  analogWrite(A_1Ba, motorASpeed);

  //모터B 역회전

  analogWrite(B_1A, 0);

  analogWrite(B_1B, motorBSpeed);

  analogWrite(B_1Aa, 0);

  analogWrite(B_1Ba, motorBSpeed);

 

}



/**

   RC카 좌회전

   오른쪽 모터를 정회전, 왼쪽모터를 정지하여 좌회전합니다.

*/

void left() {

  //모터A 정회전

  analogWrite(A_1A, motorASpeed);

  analogWrite(A_1B, 0);

  analogWrite(A_1Aa, motorASpeed);

  analogWrite(A_1Ba, 0);

  //모터B 역회전

  analogWrite(B_1A, 0);

  analogWrite(B_1B, motorBSpeed);

  analogWrite(B_1Aa, 0);

  analogWrite(B_1Ba, motorBSpeed);

 

}



/**

   RC카 우회전

   오른쪽 모터를 정지, 왼쪽 모터를 정회전하여 우회전합니다.

*/



void right() {

  //모터A 역회전

  analogWrite(A_1A, 0);

  analogWrite(A_1B, motorASpeed);

  analogWrite(A_1Aa, 0);

  analogWrite(A_1Ba, motorASpeed);

  //모터B 정회전

  analogWrite(B_1A, motorBSpeed);

  analogWrite(B_1B, 0);

  analogWrite(B_1Aa, motorBSpeed);

  analogWrite(B_1Ba, 0);



}



/**

   RC카 정지

   오른쪽,왼쪽모터를 모두 정지합니다.

*/

void stop() {

  //모터A 정지

  analogWrite(A_1A, 0);

  analogWrite(A_1B, 0);

  analogWrite(A_1Aa, 0);

  analogWrite(A_1Ba, 0);

  //모터B 정지

  analogWrite(B_1A, 0);

  analogWrite(B_1B, 0);

  analogWrite(B_1Aa, 0);

  analogWrite(B_1Ba, 0);



  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 5

조회수 18,438

master님의 댓글

master 작성일

센서로 장애물을 피하는 것이 아닌 일정한 경로를 미리 입력해서, 그 경로대로 주행을 하게 해야한다고 적었는데요
코드에서는 센서로 장애물을 피하고 있습니다.
DC 모터는 정확한 거리를 주행하지 못합니다.
그나마 정확하게 진행 하려면 스텝모터를 사용해야 합니다.
스텝모터로 주행 할 때에도 4륜이 아닌 2륜+볼케스터를 사용합니다.
4륜은 회전시 바퀴의 미끄러짐이 발생하기 때문이죠

아낙수나무님의 댓글

아낙수나무 댓글의 댓글 작성일

코드를 다시 짜야하는 건 알고있습니다 ㅠㅠㅠ 스스로 다시 짤 수 있는 능력이 없어서 도움을 요청드립니다..ㅠㅠ 센서를 사용하지않고 정확한 거리가 아니더라도  타이머같은 함수를 사용하지는
못할까요...

master님의 댓글

master 댓글의 댓글 작성일

DC 모터는 전원의 전압및 전류 변동 등의 영향까지 받으므로 변수가 많아서 간단하지 않습니다.
4륜은 무조건 어렵다고 보셔야합니다.
(2륜+볼케스터) 스텝모터 경우에는 (오래전에 유행했던) 미로찾기 마우스에서 많이 사용한 방법입니다.

아낙수나무님의 댓글

아낙수나무 댓글의 댓글 작성일

그렇다면 2륜 볼케스터로 했을 시에
코딩 소스좀 알 수 있을까요..? 경로는 정확하지않아도 됩니다!! 방향만 맞으면 됩니다 부탁드려요 ㅠㅠ

master님의 댓글

master 댓글의 댓글 작성일

기본예제가 아닌 경우에는 원하는 소스를 찾는 것은 거의 불가능합니다.
그렇다고 제가 만들어드릴수는 없겠죠?
부품 구입하고 회로 꾸며서 프로그램을 작성해드리려면 많은 시간이 소요되며
유료가 아니라면 그 누구도 해드리지 못합니다.

스스로 어느정도 해결하시고
막히는 한 두가지를 질문해서 도움을 받도록하세요

https://www.google.com/search?q=%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C+%EB%A7%88%EC%9A%B0%EC%8A%A4&pws=0&gl=us&gws_rd=cr
마이크로 마우스 예제소스는 잘 뒤지면 얼마든지 찾습니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 9628
공지 사이트 이용 안내댓글[24] master 17-10-29 29628
질문 아두이노 블루투스 통신 관련 질문 있습니다!! 새글 블루툿 10:51 9
답변 답변글 답변 : 아두이노 블루투스 통신 관련 질문 있습니다!! 새글 master 11:05 8
질문 아두이노 DRV2605 헵틱 모터 드라이버댓글[1] 새글 gano 08:43 18
질문 아두이노 d1r2 W238 방수 초음파 센서댓글[1] 새글 밤새아두이노 03:24 15
질문 아두이노 블루투스(hc-06)사용중 질문있습니다. 새글첨부파일 띵꽁 22-05-20 20
답변 답변글 답변 : 아두이노 블루투스(hc-06)사용중 질문있습니다. 새글 master 09:52 13
질문 아두이노 블루투스 통신댓글[1] 새글 블루툿 22-05-20 20
질문 ATmega128 진동센서 코딩 질문입니다.댓글[5] 새글 444222a 22-05-20 26
질문 아두이노 초음파센서 코딩 질문댓글[3] 이미지새글첨부파일 아두이노아린이 22-05-20 25
질문 아두이노 스케치 후 pc usb 연결없이 사용한가요?댓글[1] 새글 까치 22-05-20 19
질문 atmega128 서보모터와 초음파센서댓글[5] 새글 tmiae 22-05-20 28
질문 avr compiler 종류 질문입니다!댓글[3] 새글 민준싸 22-05-20 25
질문 컴퓨터 usb연결시 정상 작동하나 9V건전지 외부전원 연결 시 작동하지 않는 문제댓글[3] 이미지새글첨부파일 보겐을운용 22-05-19 160
질문 아두이노 dac 연결댓글[5] 이미지새글첨부파일 kodory 22-05-19 28
질문 아두이노 millis ->atmega128에서 사용하고 싶습니다. 새글 akmong413 22-05-19 29
답변 답변글 답변 : 아두이노 millis ->atmega128에서 사용하고 싶습니다. 새글 master 22-05-19 32
질문 아트메가 모터드라이브와 초음파 센서 연동 질문입니다댓글[1] 123424135123q 22-05-19 35
질문 스텝모터 드라이버 선정 질문드립니다. 아흐흑 22-05-18 33
답변 답변글 답변 : 스텝모터 드라이버 선정 질문드립니다.댓글[1] 이미지 master 22-05-19 35
질문 아두이노로 모터+드라이버 제어댓글[6] 모토 22-05-18 63
질문 온도센서로 서보모터 제어 코딩댓글[1] 진수네1조 22-05-18 58
질문 라즈베리파이 웹캠 데이터 아두이노 전송 (초보)댓글[1] 전자과 22-05-17 54
질문 아두이노 코딩 도와주세요 (초음파센서와 금속감지센서로 서보모터 제어하기) 이현주 22-05-17 88
답변 답변글 답변 : 아두이노 코딩 도와주세요 (초음파센서와 금속감지센서로 서보모터 제어하기) master 22-05-18 138
질문 아두이노 우노 2개와 앱인벤터끼리의 블루투스 통신 방법댓글[3] 이미지첨부파일 pyoleo 22-05-17 108
질문 졸업작품 첨부파일 ejdog 22-05-16 102
질문 PCB의 커넥터 연결관련 이슈같은데.. 원인을 정확히 모르겠습니다.댓글[2] 이미지 설계못해서개털림 22-05-16 86
질문 STM32F767 사용중인데 발열이 발생합니다.댓글[5] 존클라프 22-05-16 84
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기