라즈베리 파이 초음파 센서 거리 LED - lajeubeli pai cho-eumpa senseo geoli LED

라즈베리파이 C++

거리 0~10사이 빨간불 on

거리 10~15사이 녹색불 on

거리 15~30사이 파란불 on

 1 #include <iostream>
 2 #include <wiringPi.h>
 3 using namespace std;
 4
 5 #define PIN_TRIG 23
 6 #define PIN_ECHO 24
 7 #define RANGE_MAX 200
 8 #define RANGE_MIN 0
 9
10 #define LED_R  18
11 #define LED_G  17
12 #define LED_B  27
13
14
15 int main(int argc, char* argv[]){
16     wiringPiSetupGpio();
17     unsigned int T,L;
18     pinMode(PIN_TRIG, OUTPUT);
19     pinMode(PIN_ECHO, INPUT);
20     pinMode(LED_R, OUTPUT);
21     pinMode(LED_G, OUTPUT);
22     pinMode(LED_B, OUTPUT);
23
24     while(1){
25         digitalWrite(PIN_TRIG, LOW); delayMicroseconds(2);
26         digitalWrite(PIN_TRIG, HIGH); delayMicroseconds(20);
27         digitalWrite(PIN_TRIG, LOW);
28         while(digitalRead(PIN_ECHO) == LOW);
29         unsigned int startTime = micros();
30         while(digitalRead(PIN_ECHO) == HIGH);
31         T=micros() - startTime;
32         L=T/58.2;
33
34         if(0<=L && L<10){
35             cout<<L<<endl;
36              digitalWrite(LED_R,HIGH);
37              digitalWrite(LED_G,LOW);
38              digitalWrite(LED_B,LOW); }
39
40         else if(10<=L && L<15) {
41              digitalWrite(LED_R,LOW);
42              digitalWrite(LED_G,HIGH);
43              digitalWrite(LED_B,LOW);  }
44
45         else if(15<=L && L<30) {
46              digitalWrite(LED_R,LOW);
47              digitalWrite(LED_G,LOW);
48              digitalWrite(LED_B,HIGH);  }
49
50         else {
51             digitalWrite(LED_R,LOW);
52             digitalWrite(LED_G,LOW);
53             digitalWrite(LED_B,LOW);  }
54
55         delay(1000);
56     }
57 }
58

라즈베리파이 Python 코딩.

초음파센서에 접근하면 LED ON

CNDI 보드, LED, 초음파 센서

GPIO 라이브러리 설치!

1. 라즈베리파이에서 파일 다운

https://sourceforge.net/projects/raspberry-gpio-python/

raspberry-gpio-python

Download raspberry-gpio-python for free. A Python module to control the GPIO on a Raspberry Pi. To get started with RPi.GPIO, it would be worthwhile reading the examples in the project wiki (link above). Note that this module is unsuitable for real-time or

sourceforge.net

2. 터미널 실행

3. cd /home/pi/Downloads

4. tar zxvf RPi.GPIO-0.7.0.tar.gz

5. cd / RPi.GPIO-0.7.0

6. sudo apt-get install python-dev

7. sudo python setup.py install

라즈베리 파이 초음파 센서 거리 LED - lajeubeli pai cho-eumpa senseo geoli LED
초음파 연결 도면
라즈베리 파이 초음파 센서 거리 LED - lajeubeli pai cho-eumpa senseo geoli LED
LED 연결 도면

LED GPIO 4번

Tring =24

ECHO = 23

Python 코드

import RPi.GPIO as gpio
import time
import sys
import warnings
warnings.filterwarnings('ignore')
LED = 4
TRIGER = 24
ECHO = 23

gpio.setmode(gpio.BCM)
gpio.setup(TRIGER, gpio.OUT)
gpio.setup(ECHO,gpio.IN)
gpio.setup(LED, gpio.OUT)
startTime = time.time()

try:
    while True:
        gpio.output(TRIGER,gpio.LOW)
        time.sleep(0.1)
        gpio.output(TRIGER,gpio.HIGH)
        time.sleep(0.00002)
        gpio.output(TRIGER,gpio.LOW)

        while gpio.input(ECHO) == gpio.LOW:
            startTime = time.time()

        while gpio.input(ECHO) == gpio.HIGH:
            endTime = time.time()

        period = endTime - startTime
        dist1 = round(period * 1000000 / 58, 2)
        dist2 = round(period * 17241, 2)
        try:
            if dist2 <= 20:
                print('error124')
                gpio.output(LED, gpio.HIGH)
                time.sleep(1)
                gpio.output(LED, gpio.LOW)
                time.sleep(1)
        except KeyboardInterrupt:
            print("error")
        print('Dist1', dist1, 'cm', ', Dist2', dist2, 'cm')
except KeyboardInterrupt:
    gpio.cleanup()
    sys.exit()

라즈베리파이 초음파 센서 ( HC-SR04 ) 제어 작성자 : 네오즈

1. 초음파센서 테스트 회로 구성

라즈베리 파이 초음파 센서 거리 LED - lajeubeli pai cho-eumpa senseo geoli LED

                            ( HC-SR04 초음파 센서 1EA, , 1KΩ 저항 1EA Echo연결, 2KΩ 저항 1EA GND 연결 )

                                          Trig: GPIO 17번 연결, Echo: GPIO 18번 연결

주의사항 : echo 핀에 High level 신호 발생시 5V를 전송 하게 된다. 그러나 라즈베리파이는 3.3V로

작동되므로 라즈베리파이 손상을 방지하기 위해 1KΩ, 2KΩ 저항으로 3.3V로 낮춰줘야 한다.

코드 작성 및 실행 방법은 " 라즈베리파이 GPIO 포트 ( LED, 버튼 ) 제어 " 가이드 참조

2. 초음파센서 테스트 Python 코드

초음파가 물체에 부딪쳐 반사되어 돌아오는데 까지 걸리는 시간을 측정하여 물체의 거리를 계산한다.

import RPi.GPIO as GPIO                    # RPi.GPIO에 정의된 기능을 GPIO라는 명칭으로 사용
import time                                # time 모듈

GPIO.setmode(GPIO.BCM)                     # GPIO 이름은 BCM 명칭 사용
GPIO.setup(17, GPIO.OUT)                   # Trig=17 초음파 신호 전송핀 번호 지정 및 출력지정
GPIO.setup(18, GPIO.IN)                    # Echo=18 초음파 수신하는 수신 핀 번호 지정 및 입력지정

print “Press SW or input Ctrl+C to quit”   # 메세지 화면 출력

try:
    while True:
            GPIO.output(17, False)         
            time.sleep(0.5)

            GPIO.output(17, True)          # 10us 펄스를 내보낸다.
            time.sleep(0.00001)            # Python에서 이 펄스는 실제 100us 근처가 될 것이다
            GPIO.output(17, False)         # 하지만 HC-SR04 센서는 이 오차를 받아준다

            while GPIO.input(18) == 0:     # 18번 핀이 OFF 되는 시점을 시작 시간으로 잡는다
               start = time.time()

            while GPIO.input(18) == 1:     # 18번 핀이 다시 ON 되는 시점을 반사파 수신시간으로 잡는다
               stop = time.time()

            time_interval = stop – start      # 초음파가 수신되는 시간으로 거리를 계산한다
            distance = time_interval * 17000
            distance = round(distance, 2)

            print “Distance => “, distance, “cm”

except KeyboardInterrupt:                  # Ctrl-C 입력 시
    GPIO.cleanup()                         # GPIO 관련설정 Clear
    Print "bye~"

3. 초음파센서 테스트 C코드

#include <stdio.h>                              // stdio.h 파일 포함( printf() 사용하기 위해 )
#include <wiringPi.h>                           // wiringPi.h 파일 포함

int main(void )
{
   Float distance, start, stop;

   wiringPiSetup();
                                                // wiringPi 기준으로 PIN 번호 매김
   pinMode(0, OUTPUT);                          // wiringPi GPIO 0번  = Python(BCM) 17번 
   pinMode(1, INPUT);                           // wiringPi GPIO 1번  = Python(BCM) 18번

  while(1)
  {
      digitalWrite(0,0);                        // wiringPi 0번핀을 Low로 출력
      digitalWrite(0,1);                        // wiringPi 0번핀을 High로 출력
      delayMicroseconds(10);                    // 10마이크로초 동안 멈춘다
      digitalWrite(0,0);
    
      while(digitalRead(1) == 0)                // wiringPi 1번핀을 Low일 경우
         start = micros();                      // 마이크로초 저장
      while(digitalRead(1) == 1)                // wiringPi 1번핀을 High일 경우
         stop = micros();                       // 마이크로초 저장

      distance = (stop – start) / 58;           // 시간의 차이를 이용하여 거리를 도출한다
      printf(“Distance=> %2f cm \n”,distance);  
      delay(1000);
  }

  return 0;
}

※ e4ds make에 등록된 자료는 e4ds와 지식 제공자(기업포함) 이외에는 상업화 용도로 사용할 수 없습니다. 영리 목적 이외의 사용 시 출처를 밝혀야 합니다.

Comments

관련 Make

라즈베리 파이 초음파 센서 거리 LED - lajeubeli pai cho-eumpa senseo geoli LED

라즈베리 파이 초음파 센서 거리 LED - lajeubeli pai cho-eumpa senseo geoli LED

관련 상품