에듀이노-코딩교육 전문 쇼핑몰 에듀이노-코딩교육 전문 쇼핑몰

학교, 공공기관이라면 후불결제하세요!

 
현재 위치
  1. 게시판
  2. 묻고답하기

묻고답하기

기술문의 게시판입니다.

게시판 상세
제목 라인트레이싱과 초음파 센서 동시 동작에 대해 질문있습니다.
작성자 안수철 (ip:)
  • 작성일 2021-06-16
  • 추천 추천하기
  • 조회수 731

라인트레이싱 동작 완료 후 거기에 초음파 센서 추가하여 부착했습니다.(서보 연결 부의 핀이 9번과 10번으로 연동이 된다하여 거기에 부착하였습니다.)

초음파 센서를 활용하여 라인트레이싱 중 전방에 장애물을 감지할 시 정지하였다가 장애물이 사라지면 다시 주행하는 동작을 원하였으나

현재 라인트레이싱 주행은 가능하고 초음파 센서 동작에서 장애물을 감지하여 정지하는 동작까지 수행하였으나 다시 주행하도록 하는 부분에 있어서 동작하지 않아

어떤식으로 소스 코드를 구성할지에 대해서 질문드리고 싶습니다.

추가적으로 초음파 센서 연결 이외에도 다른 센서들 또한 부품 장착이 가능하다 전달받았는데 가능한지 궁금합니다.

게시글 신고하기

신고사유

신고해주신 내용은 쇼핑몰 운영자의 검토 후 내부 운영 정책에 의해 처리가 진행됩니다.

평점 0점
첨부파일
비밀번호 수정 및 삭제하려면 비밀번호를 입력하세요.
  • 아두이노짱 2021-06-16 0점
    수정 삭제 댓글
    스팸글 음.. 작성하신 코드를 한 번 보여주셔야할 것 같아요

    +센서는 추가적으로 더 연결할 수는 있으나 공급 전원에 따라 작동이 불안정해질 수 있어요
  • 아나수철 2021-06-16 0점
    수정 삭제 댓글
    스팸글

    #include
    #include

    AF_DCMotor motor_L(1); // 모터드라이버 L293D 1: M1에 연결, 4: M4에 연결
    AF_DCMotor motor_R(4);


    int trig = 9;
    int echo = 10;


    void setup() {
    Serial.begin(9600); // PC와의 시리얼 통신속도
    Serial.println("Eduino Smart Car Start!");

    // turn on motor
    motor_L.setSpeed(200); // 왼쪽 모터의 속도
    motor_L.run(RELEASE);
    motor_R.setSpeed(200); // 오른쪽 모터의 속도
    motor_R.run(RELEASE);

    pinMode(trig,OUTPUT);
    pinMode(echo,INPUT);

    }



    void loop() {
    int val1 = digitalRead(A0); // 라인센서1
    int val2 = digitalRead(A5); // 라인센서2

    float distance=-1;
    digitalWrite(trig,LOW);
    delayMicroseconds(2);
    digitalWrite(trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(trig,LOW);

    //if(digitalRead(echo)==LOW){
    distance=(float)pulseIn(echo,HIGH)/29/2;


    //}
    //else
    //{
    //pinMode(echo,OUTPUT);
    //digitalWrite(echo,LOW);
    //pinMode(echo,INPUT);
    //}

    Serial.print("초음파 :"); Serial.println(distance);
    Serial.print("좌 :"); Serial.println(val1);
    Serial.print("우 :");
    Serial.println(val2);

    if(distance>15) {
    if (val1 == 0 && val2 == 0) { // 직진

    motor_L.run(FORWARD);
    motor_R.run(FORWARD);

    }
    else if (val1 == 0 && val2 == 1) { // 우회전

    motor_L.run(FORWARD);
    motor_R.run(RELEASE);
    }
    else if (val1 == 1 && val2 == 0) { // 좌회전

    motor_L.run(RELEASE);
    motor_R.run(FORWARD);
    }

    }
    else
    {

    motor_L.run(RELEASE);
    motor_R.run(RELEASE);

    }
    }

    이렇게입니다.
  • 아두이노짱 2021-06-16 0점
    수정 삭제 댓글
    스팸글 음.. 일단 초음파 발생부분이라고 해야되나요

    float distance=-1;
    digitalWrite(trig,LOW);
    delayMicroseconds(2);
    digitalWrite(trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(trig,LOW);

    //if(digitalRead(echo)==LOW){
    distance=(float)pulseIn(echo,HIGH)/29/2;

    이 부분이 조금 이상한데요
    크게 의미는 없지만 -1 값을 대입하는 이유가 있나요?
    그리구 아래 초음파 센서 작동 관련하여 코드 붙여드리겠습니다 해당 코드 참고하셔서 작성해보세요

    long duration, distance;
    digitalWrite(trigPin, HIGH); // trigPin에서 초음파 발생(echoPin도 HIGH)
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
    distance = ((float)(340 * duration) / 1000) / 2;
  • 안수철 2021-06-22 0점
    수정 삭제 댓글
    스팸글 혹시 전체적인 코드도 알 수 있을까요?

스팸신고 스팸해제

댓글 수정

비밀번호 :

수정 취소

/ byte

비밀번호 : 확인 취소

댓글 입력

댓글달기이름 :비밀번호 : 관리자답변보기

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

에게만 댓글 작성 권한이 있습니다.

댓글 입력

댓글달기이름 :비밀번호 :

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

에게만 댓글 작성 권한이 있습니다.

«
»