메뉴 건너뛰기

배경이미지

Arduino - 센서 2개 연결

2018.04.03 17:48

센서 2개 연결

조회 수 189 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?
  • ?
    EMOON 2018.04.03 17:59
    void setup() {
    // put your setup code here, to run once:
    pinMode(2, OUTPUT);
    pinMode(3, INPUT);

    pinMode(4, OUTPUT);
    pinMode(5, INPUT);
    }

    void loop() {
    // put your main code here, to run repeatedly:
    digitalWrite(2, LOW);
    delayMicroseconds(2);
    digitalWrite(2, HIGH);
    delayMicroseconds(2);

    digitalWrite(4, LOW);
    delayMicroseconds(2);
    digitalWrite(4, HIGH);
    delayMicroseconds(2);

    long duration = pulseIn(3, HIGH);
    long duration2 = pulseIn(3, HIGH);
    if (duration == 0 || duration2 == 0)
    {
    return;
    }
    long distance = duration / 58.2;
    tone(8, 1000, 20);
    delay(20);
    noTone(8);
    delay(2 * distance);

    long distance2 = duration2 / 58.2;
    tone(9, 1000, 20);
    delay(20);
    noTone(9);
    delay(2 * distance2);
    }
  • ?
    EMOON 2018.04.03 18:08
    2개 센서 읽기

    #include <NewPing.h> //NewPing 라이브러리

    #define TRIGGER_CH1_PIN 4 //첫번째 Trigger pin
    #define ECHO_CH1_PIN 2 //첫번째 Echo pin

    #define TRIGGER_CH2_PIN 5 //두번째 Trigger pin
    #define ECHO_CH2_PIN 3 //두번째 Echo Pin

    #define MAX_DISTANCE 200 //최대 측정 거리 설정

    //첫번째 NewPing 라이브러리 생성 (핀(TRIG, ECHO)과 최대 거리 설정)
    NewPing sonar_ch1(TRIGGER_CH1_PIN, ECHO_CH1_PIN, MAX_DISTANCE);
    //두번째 NewPing 라이브러리 생성 (핀(TRIG, ECHO)과 최대 거리 설정)
    NewPing sonar_ch2(TRIGGER_CH2_PIN, ECHO_CH2_PIN, MAX_DISTANCE);

    void setup() {
    //모니터 프로그램을 위한 시리얼 시작
    Serial.begin(115200);
    }

    void loop() {
    //최소한 29ms이상은 대기를 해야한다고 함.
    //대기
    delay(50);
    //첫번째 거리 읽기
    Serial.print("Ch1: ");
    Serial.print(sonar_ch1.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
    Serial.println("cm");

    //두번째 거리 읽기
    Serial.print("Ch2: ");
    Serial.print(sonar_ch2.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
    Serial.println("cm");

    }
  • ?
    EMOON 2018.04.03 18:43
    https://nobelmann.blog.me/220822300633

    /*탁구공 공치기*/

    #include<Servo.h> // 서보모터 동작을 위한 라이브러리 사용 명시
    Servo myservo; // 서보모터 동작을 위해 myservo 라는 변수 설정 (최대 8개까지 가능)
    int servoPin = 8; // 서보모터 디지털 8번 포트에 동작 변수 설정
    int pos = 0; // 서보모터 포지션(position) 을 pos 로 설정하고 값을 0 으로 할당

    int sensorpin_1 = 0; // 포토센서 아날로그 1번 핀 연결 변수 설정
    int sensorpin_2 = 1; // 포토센서 아날로그 2번 핀 연결 변수 설정
    int val_1 = 0; // 포토센서_1 가 읽은 값을 저장하는 변수 설정(기본값: 0)
    int val_2 = 0; // 포토센서_2 가 읽은 값을 저장하는 변수 설정(기본값: 0)

    unsigned long time_1 = 0; // 포토센서_1 앞을 지나갈 때 시간 변수 설정
    unsigned long time_2 = 0; // 포토센서_2 앞을 지나갈 때 시간 변수 설정
    unsigned long time_gap = 0; // 시간 차이 = time_1 - time_2

    void setup()
    {
    myservo.attach(servoPin); // 서보모터 변수명으로 지정한 myservo 에 servoPin 에 할당한 핀 번호로 제어
    myservo.write(pos); // 처음 동작을 할 때 서보모터 초기화 실시

    Serial.begin(9600); // 포토센서를 시리얼 모니터 보기 (ctrl + shift + m)
    }

    void loop() // 아래 소스를 위에서 부터 아래로 계속해서 반복 수행
    {

    val_1 = analogRead(sensorpin_1); // 포토센서_1 의 값 읽기
    Serial.println("var_1:"); // 시리얼 모니터로 포토센서_1 의 값 출력 시 구분용으로 var_1: 출력
    Serial.println(val_1); // 시리얼 모니터로 포토센서_1 의 값 출력하기

    val_2 = analogRead(sensorpin_2); // 포토센서_2 의 값 읽기
    Serial.println("var_2:"); // 시리얼 모니터로 포토센서_1 의 값 출력 시 구분용으로 var_2: 출력
    Serial.println(val_2); // 시리얼 모니터로 포토센서_2 의 값 출력하기

    if (val_1 > 450) // val_1 값 설정 범위. 이 범위 안에 들어 올 때 아래 동작.
    { // val_1 > 450 의 값은 현재 공치기 모델 장치에 맞는 값일 뿐 모든 경우에 해당하지 않음
    time_1 = millis(); // millis(): 아두이노 보드 실행 후 지나간 시간(ms) 을 반환
    Serial.println("time_1:"); // 시리얼 모니터로 포토센서_1 의 값 출력하기
    Serial.println(time_1); // 시리얼 모니터로 포토센서_1 의 값 출력하기
    }

    if (val_2 > 450) // val_2 값 설정 범위. 이 범위 안에 들어 올 때 아래 동작
    {
    time_2 = millis();
    Serial.println("time_2:"); // 시리얼 모니터로 포토센서_1 의 값 출력하기
    Serial.println(time_2); // 시리얼 모니터로 포토센서_2 의 값 출력하기
    }

    if (time_1 > 0 && time_2 > 0 && time_2 > time_1) // 포토센서 중 1개라도 공을 인식하지 못하는 경우를 대한 동작.
    // 역방향 이동 시 동작 차단을 위해 2개의 값 비교
    {
    time_gap = time_2 - time_1; // 포토센서 2개의 시간 차이 계산
    delay (time_gap); // 공이 포토센서1과 2 지났던 시간 차이 만큼 기다린 후
    myservo.write(90); // 서보모터 90 값 만큼 회전
    delay(300); // 서보 모터 회전하도록 시간 부여




    if (myservo.read() >= 90)
    {
    myservo.write(pos); // 서보모터 pos = 0 의 위치로 이동 (재배치)
    time_1 = 0; // time_1 의 값을 0 으로 만들어서 if 문에서 탈출. 없으면 if 문 안에서 loop 로 나가지 못함
    time_2 = 0; // time_2 의 값을 0 으로 만들어서 if 문에서 탈출
    }
    }
    }

    [출처] 아두이노 실습 - 포토 센서와 서보 모터를 이용한 공치기 제작 (완성)|작성자 한네스 노벨만

  1. 2개센서 구동 LED

  2. No Image 04Apr
    by EMOON
    2018/04/04 by EMOON
    Views 75 

    L293B 모터드라이브

  3. No Image 03Apr
    by EMOON
    2018/04/03 by EMOON
    Views 109 

    Touch Sensor

  4. 센서 2개 연결

  5. No Image 29Mar
    by EMOON
    2018/03/29 by EMOON
    Views 207 

    LoL shield / LED 극성 알아보기

  6. No Image 29Mar
    by EMOON
    2018/03/29 by EMOON
    Views 75 

    ATTINY85 동작 테스트

  7. 제 수업

  8. 제5수업 LED Project

  9. No Image 07Mar
    by EMOON
    2018/03/07 by EMOON
    Views 72 

    map()

  10. No Image 28Feb
    by EMOON
    2018/02/28 by EMOON
    Views 68 

    제4 수업2 2018 0226

  11. Interactive led table module

  12. No Image 20Feb
    by EMOON
    2018/02/20 by EMOON
    Views 72 

    다수 서보모터 구동 16ch

  13. No Image 20Feb
    by EMOON
    2018/02/20 by EMOON
    Views 67 

    제3수업

  14. 제2 수업

  15. No Image 10Feb
    by EMOON
    2018/02/10 by EMOON
    Views 75 

    인터넷강의

  16. No Image 10Feb
    by EMOON
    2018/02/10 by EMOON
    Views 77 

    제1 수업

Board Pagination Prev 1 Next
/ 1