메뉴 건너뛰기

배경이미지

Arduino - 센서 2개 연결

2018.04.03 17:48

센서 2개 연결

조회 수 138 추천 수 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 문에서 탈출
    }
    }
    }

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

List of Articles
번호 제목 글쓴이 날짜 조회 수
16 2개센서 구동 LED 1 EMOON 2018.04.06 62
15 L293B 모터드라이브 EMOON 2018.04.04 63
14 Touch Sensor file EMOON 2018.04.03 92
» 센서 2개 연결 3 EMOON 2018.04.03 138
12 LoL shield / LED 극성 알아보기 file EMOON 2018.03.29 196
11 ATTINY85 동작 테스트 EMOON 2018.03.29 64
10 제 수업 file EMOON 2018.03.16 63
9 제5수업 LED Project 1 file EMOON 2018.03.07 59
8 map() EMOON 2018.03.07 60
7 제4 수업2 2018 0226 EMOON 2018.02.28 57
6 Interactive led table module file EMOON 2018.02.21 60
5 다수 서보모터 구동 16ch EMOON 2018.02.20 60
4 제3수업 EMOON 2018.02.20 54
3 제2 수업 1 EMOON 2018.02.12 66
2 인터넷강의 EMOON 2018.02.10 63
1 제1 수업 file EMOON 2018.02.10 65
Board Pagination Prev 1 Next
/ 1