Skip to content
Home » 라즈베리 파이 초음파 센서 | 【라즈베리Pi#05】 초음파 센서(Hc-Sr04) 사용하기! With (파이썬 코드)Raspberrypi Ultra-Sonic Sensor With Python ! 상위 217개 베스트 답변

라즈베리 파이 초음파 센서 | 【라즈베리Pi#05】 초음파 센서(Hc-Sr04) 사용하기! With (파이썬 코드)Raspberrypi Ultra-Sonic Sensor With Python ! 상위 217개 베스트 답변

당신은 주제를 찾고 있습니까 “라즈베리 파이 초음파 센서 – 【라즈베리Pi#05】 초음파 센서(HC-SR04) 사용하기! with (파이썬 코드)RaspberryPi Ultra-Sonic Sensor with Python !“? 다음 카테고리의 웹사이트 https://kk.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://kk.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 라즈이노 이(가) 작성한 기사에는 조회수 608회 및 좋아요 7개 개의 좋아요가 있습니다.

Table of Contents

라즈베리 파이 초음파 센서 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 【라즈베리Pi#05】 초음파 센서(HC-SR04) 사용하기! with (파이썬 코드)RaspberryPi Ultra-Sonic Sensor with Python ! – 라즈베리 파이 초음파 센서 주제에 대한 세부정보를 참조하세요

안녕하세요~
라즈이노 IoT입니다.
라즈베리파이 베이직 학습 시리즈로 \”라즈베리 파이에서 초음파 센서 모듈을 제어하는 방법\”에 대한 학습 영상입니다.
본 영상의 내용을 상세하게 정리한 게시글로도 참고 할 수 있습니다 : 링크 : https://rasino.tistory.com/349
※영상에서는 라즈베리파이를 원격으로 제어하고 GPIO에 연결된 하드웨어를 윈도환경의 PC에서 제어하는 것으로 진행되고 있는데요,
\”원격 데스크톱 연결(Samba Server 설치 등)에 관한 내용은 여기 링크(영상)를 참고해 주세요.
→ https://youtu.be/zHZRLNwf548 ( https://youtu.be/zHZRLNwf548 )
※ 라즈베리Pi에 라즈비안 OS설치와 셋팅, 그리고 선수 학습으로 참고할 만한
기초실습 자료는 아래 블로그에 링크 되어 있으니 참고해 보세요.
《 라즈베리파이 기초 학습 》
→ 【 라즈베리파이 】#01 라즈베리파이 설치하기 ( #01~#07까지 라즈비안OS 설치와 한글화 설정 등이 있습니다) : https://rasino.tistory.com/32

→ 【 라즈베리파이 】#09 RaspberryPi 실습 ① https://rasino.tistory.com/60
→ 【 라즈베리파이 】#10 RaspberryPi 실습 ② https://rasino.tistory.com/61
→ 【 라즈베리파이 】#11 RaspberryPi GPIO https://rasino.tistory.com/62
→ 【 라즈베리파이 】 #12 LED On Off 실습 with Switch https://rasino.tistory.com/99
→ 【 라즈베리파이 】 #13 LED Fade In Out 실습 (소프트웨어 PWM) https://rasino.tistory.com/112
→ 【 라즈베리파이 】 #14 타이밍 차트 활용한 LED 실습 https://rasino.tistory.com/117
→ 【 라즈베리파이 】 #15 LED SOS 신호와 동기신호 실습 https://rasino.tistory.com/118
→ 【 라즈베리파이 】 #16 State Diagram 구현 실습 https://rasino.tistory.com/139
→ 【 라즈베리파이 】 #17 4LED 순차 점멸 with Timing chart https://rasino.tistory.com/210
→ 【 라즈베리파이 】 #18 HardWare PWM 사용하기! with LED https://rasino.tistory.com/328
→ 【라즈베리Pi#20】 피에조 부저 사용하기! with (파이썬 코드) https://rasino.tistory.com/332
→ 【라즈베리Pi#21】 서보(Servo) 모터 제어하기! with (파이썬 코드) https://rasino.tistory.com/341

———————————————————————–
[BGM by NCS ][ Alan Walker ]➞ https://www.youtube.com/user/DjWalkzz
➞ Twitch http://twitch.tv/nocopyrightsounds
Track: Alan Walker – Spectre [NCS Release]Music provided by NoCopyrightSounds.
———————————————————————–

라즈베리 파이 초음파 센서 주제에 대한 자세한 내용은 여기를 참조하세요.

【라즈베리Pi#22】 초음파 센서(HC-SR04) 사용하기! with …

RaspberryPi Ultra-Sonic Sensor with Python ! 라즈베리파이에서 초음파 센서인 HC-SR04 모듈을 사용하는 방법에 대해 …

+ 여기에 더 보기

Source: rasino.tistory.com

Date Published: 5/28/2021

View: 3764

[라즈베리파이 강좌] 라즈베리파이로 초음파센서 사용하기

[라즈베리파이 강좌] 라즈베리파이로 초음파센서 사용하기 – python편 · 회로도 · 전원은 일반적인 5V와 GND에, · Trig핀은 파이 코블러의 13번핀(BCM기준)에 …

+ 여기에 자세히 보기

Source: m.blog.naver.com

Date Published: 4/1/2022

View: 5859

[가이드] 라즈베리파이 초음파 센서 ( HC-SR04 ) 제어 – e4ds make

라즈베리파이에서 초음파 센서의 초음파가 물체에 부딪쳐 반사되어 돌아오는데 까지 걸리는 시간을 측정하여 물체의 거리를 계산한다. Maker 구독 하기; 관심 Make 등록.

+ 자세한 내용은 여기를 클릭하십시오

Source: make.e4ds.com

Date Published: 10/26/2022

View: 4565

라즈베리파이 4 초음파 센서 실습 코드 – 기린 – 티스토리

라즈베리파이 4 초음파 센서 실습 코드 … 초음파 센서란? 사람의 귀에 들리지 않을 정도로 높은 주파수 (약 20 kHz 이상)의 음파인 초음파를 발생하여 …

+ 더 읽기

Source: fishpoint.tistory.com

Date Published: 9/2/2022

View: 9500

라즈베리파이에 GPIO 파이썬을 이용해 초음파 센서(HC-SR04 …

초음파 센서를 제어하기 위해선 우선 준비물이 필요합니다. 준비물. 라즈베리파이 OS가 설치된 라즈베리파이; ELEGOO Arduino용 HC-SR04 초음파 센서 1개 …

+ 여기를 클릭

Source: playneko.github.io

Date Published: 8/4/2021

View: 4944

라즈베리파이 PWM, 초음파센서, 후방감지센서 구현 – 취준생 일지

라즈베리파이를 통해 초음파 센서를 제어해보자. 출처 : https://steemkr.com/arduino/@jhis21c/45kpa4. 맨 왼쪽 VCC 자리에는 5V,.

+ 여기에 보기

Source: andjjip.tistory.com

Date Published: 7/9/2022

View: 2200

Raspberry Pi 초음파센서, PIR센서, 온습도 센서 – 코드를 분석해라

초음파센서 VCC – 5v Trig – 23번핀 Echo – 24번핀 GND – GND import RPi.GPIO as g import time TRIGER = 23 ECHO = 24 g.setmode(g.

+ 여기에 표시

Source: aossuper8.tistory.com

Date Published: 10/25/2021

View: 1788

SunFounder 라즈베리 파이 자동차 로봇 키트, 4WD 모자 모듈 …

SunFounder 라즈베리 파이 자동차 로봇 키트, 4WD 모자 모듈, 초음파 센서, 속도 측정 모듈 등 전자 DIY 로봇,중국을 포함한 전 세계의 판매자들에게서 구매하세요.

+ 여기에 표시

Source: ko.aliexpress.com

Date Published: 12/27/2021

View: 5635

주제와 관련된 이미지 라즈베리 파이 초음파 센서

주제와 관련된 더 많은 사진을 참조하십시오 【라즈베리Pi#05】 초음파 센서(HC-SR04) 사용하기! with (파이썬 코드)RaspberryPi Ultra-Sonic Sensor with Python !. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

【라즈베리Pi#05】 초음파 센서(HC-SR04) 사용하기!  with (파이썬 코드)RaspberryPi Ultra-Sonic Sensor with Python !
【라즈베리Pi#05】 초음파 센서(HC-SR04) 사용하기! with (파이썬 코드)RaspberryPi Ultra-Sonic Sensor with Python !

주제에 대한 기사 평가 라즈베리 파이 초음파 센서

  • Author: 라즈이노
  • Views: 조회수 608회
  • Likes: 좋아요 7개
  • Date Published: 2022. 4. 18.
  • Video Url link: https://www.youtube.com/watch?v=bFjqhJu1ac4

라즈이노 iOT :: 【라즈베리Pi#22】 초음파 센서(HC-SR04) 사용하기! with (파이썬 코드)

반응형

【 라즈베리 Pi #22 】 초음파 센서(HC-SR04) 사용하기 ! with (파이썬 코드)

RaspberryPi Ultra-Sonic Sensor with Python !

라즈베리파이에서 초음파 센서인 HC-SR04 모듈을 사용하는 방법에 대해 다루어 보겠습니다.

코드는 파이썬으로 하고, “거리 측정기”를 예시로 진행해 보겠습니다.

그리고, 내용 초반에 라즈베리파이에 직접 모니터와 키보드, 마우스 등을 연결하지 않고 자신의 주 PC인 윈도 PC에서 원격 접속으로 접속하여 동작시키는 방법으로 진행이 되는데요, (물론 직접 연결하여 진행해도 됩니다)

만약 원격 접속 제어 방법이 궁금하다면, 라즈이노 ioT(게시글) 블로그와 유튜브 영상을 참고해 주세요.

【라즈베리Pi#19】 윈도 PC에서 라즈베리 Pi 원격 제어하기

[ 윈도 PC에서 라즈베리 Pi 원격 제어하기 – 유튜브 영상으로 보기 ]

원격 접속을 하면, 모니터 및 키보드와 마우스를 추가로 연결할 필요 없고, 멀리 떨어진 임의의 장소에 설치되었더라도, 네트워크만 연결되어 있으면, 제어할 수 있어 활용도가 높은 장점이 있습니다.

【 실습 준비물 】

위 실습 준비물을 준비해주시는데요, GPIO 40핀 어댑터&케이블은 없어도 실습을 진행할 수 있으나,

있다면 핀 네임을 보며 연결할 수 있기에 좀 더 안정적으로 편하게 연결할 수 있습니다.

브레드보드 또한 크게 사이즈 상관이 없으며, 작은 사이즈를 타이트하게 사용하거나 두 개 이어 붙여 사용할 수 있습니다.

【 라즈베리Pi 초음파 센서 연결도 】

위 이미지는 라즈베리파이 초음파 거리측정 회로 연결 도면입니다. 연결 도면을 보고 부품들을 연결해 주세요.

※ 주의 사항!

아래 주의사항들을 반드시 숙지하고서 작업해 주세요~!

[ 라즈베리파이의 출력 ]

라즈베리파이의 GPIO 핀의 출력 허용 전류는 핀당 최대 8mA로(모든 핀 총합 50mA)로 제한되어 있기에 LED 이상의 모터 등과 같은 모듈을 직접 출력 제어하는 것은 라즈베리파이를 손상시킬 수 있습니다.

[ 라즈베리파이의 입력 ]

최대 3.3V까지 입력이 허용되며, 신호 레벨의 임계값은 1.8V입니다. 즉, 1.8V 보다 크면 논리 1(High), 작으면 논리 0(Low)으로 인식합니다.

입력 가능 전류는 핀당 최대 5mA를 넘지 않도록 해야 합니다.

라즈베리파이의 GPIO는 3.3V 레벨로 동작하기 때문에 반드시 3.3V 이상의 전원 또는 신호 레벨이 입력되지 않도록 주의하세요~!

아두이노와 달리 컴퓨터 시스템과 같은 라즈베리파이는 포트에 출력으로 할애할 수 있는 여유가 크지 않기 때문에 LED 이상의 부품들은 포트 출력으로 작동시키지 말고 VCC 전원을 싱크(Synk)하여 처리하거나, 별도의 전원을 공급하여 처리하는 것이 좋습니다.

또한, 라즈베리파이는 입력받을 수 있는 전압 또는 신호 레벨이 3.3V 이하여서, 초음파 센서의 Echo핀으로 받는 5V의 High 신호 레벨을 3.3V로 낮추기 위해 1 : 2 비율의 저항을 연결하여 아래 그림처럼 3.3V로 낮추어 입력받게 됩니다.

입출력 핀은 어떤 GPIO 핀을 사용해도 상관없으며, 코드에서 핀 번호와 일치시켜주면 됩니다.

그럼, 초음파 센서를 통하여 거리 측정하는 원리를 간단히 설명해 보겠습니다.

초음파 센서 모듈을 살펴보면, 송신 모듈과 수신 모듈이 한 세트로 되어 있는 것을 볼 수 있습니다.

아두이노에서 초음파 센서의 Trigger Pin으로 10us의 펄스 신호를 입력해 주면, 초음파 센서의 송신 모듈에서 25us짜리 8개의 음파를 발사하게 되고, 이 음파가 물체에 부딪혀 수신 모듈로 되돌아올 때, 에코 핀에서는 그 시간 동안만 High 신호를 출력하게 됩니다.

이 High 신호의 간격(시간)을 이용해 아두이노에서 음파의 속도를 적용하여 물체와의 거리 값을 계산하게 됩니다

〔 음파의 속도 : 343m/s (34,300cm/s) 〕

Echo Pin의 High 펄스 시간은 펄스가 발사되고 물체에 반사되어 되돌아오기(왕복)까지의 시간이기 때문에, 나누기 2를 해주면 물체와의 거리 값을 구할 수 있습니다.

distance = (check_time x 34300) / 2

다음은, 회로를 동작시킬 파이썬 코드입니다.

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) TRIG = 23 ECHO = 24 print(“초음파 거리 측정기”) GPIO.setup(TRIG, GPIO.OUT) GPIO.setup(ECHO, GPIO.IN) GPIO.output(TRIG, False) print(“초음파 출력 초기화”) time.sleep(2) try: while True: GPIO.output(TRIG,True) time.sleep(0.00001) # 10uS의 펄스 발생을 위한 딜레이 GPIO.output(TRIG, False) while GPIO.input(ECHO)==0: start = time.time() # Echo핀 상승 시간값 저장 while GPIO.input(ECHO)==1: stop = time.time() # Echo핀 하강 시간값 저장 check_time = stop – start distance = check_time * 34300 / 2 print(“Distance : %.1f cm” % distance) time.sleep(0.4) except KeyboardInterrupt: print(“거리 측정 완료 “) GPIO.cleanup()

[ 위 코드 다운로드 ]

UltraSonic.zip 0.00MB

아래는 초음파 거리측정 회로를 연결한 실제 모습입니다.

이렇게 연결 커넥터(어댑터)를 이용하면 부품을 연결할 때 쉽고 간결하게 작업할 수 있습니다.

또한 핀 레이블이 적혀있어, 잘못 연결되는 실수를 줄일 수 있습니다.

그럼, 실습을 위해 라즈베리파이를 부팅시키세요.

키보드와 마우스를 직접 연결하여 라즈베리파이에서 코드를 직접 실행시킬 수 있으며, 윈도 PC에서 “원격 데스크톱 연결” 기능을 사용하여 원격으로 실행할 수도 있습니다.

원격 데스크톱 기능을 사용하면 아래 사진처럼, 키보드나 마우스 연결이 필요 없어 Pi 주변이 깔끔해집니다.

물론 랜선 연결 대신, WiFi로 연결하면 더욱 깔끔해지겠죠.

그리고 이때, 네트워크 연결은 PC와 동일한 네트워크로 연결되어 있어야 합니다.

일반적으로 라즈베리파이가 랜선 연결일 경우 원격 접속하는 PC도 랜선으로 동일한 내부 네트워크로 접속해야 하고,

WiFi 연결할 경우 동일한 WiFi중계기에 접속된 PC나 노트북 등으로 원결 접속하면 됩니다.

그럼 윈도 PC에서 원격 데스크톱 접속(검색)을 실행시켜 주세요. (라즈베리파이에서 직접 실행시키는 분은 상관없습니다)

컴퓨터 항목에 라즈베리파이가 할당받은 IP주소를 입력하고 연결을 클릭하세요.

라즈베리파이가 할당 받은 IP주소는 사전에 한 번 라즈베리파이로 모니터를 연결하여 파악해 주세요.

ID와 패스워드를 화면처럼 소문자로 입력합니다.

일반적으로 User 이름과 패스워드를 특별히 다른 것으로 변경하지 않았다면, 아이디는 pi , 비번은 raspberry입니다.

부팅이 완료되면, Raspberry Pi Configuration (환경설정) 메뉴로 들어갑니다.

Interfaces 메뉴로 들어가서 (SSH)를 Enable로 체크해 주세요.

만약 설정이 바뀌었다면 재부팅을 하고 다시 원격으로 연결하세요.

그리고 원격에서 Pi 시작 메뉴의 종료(다시 시작) 메뉴가 작동하지 않는 경우: 원격에서 라즈베리파이를 종료시키는 명령어 (터미널 창 이용)를 사용해 보세요

$ sudo shutdown -h now

그럼 이제, 개발 메뉴에서 Thonny Python IDE를 실행합니다.

토니 파이썬에 코드를 입력하고 실행시켜 봅니다.

그럼, 초음파 센서의 정면으로 평평한 면적의 노트나 박스 같은 것을 준비해서 측정해 보세요.

아래는 실제 측정되는 모습입니다.

만약, 수치가 들쭉날쭉하다면, 초음파가 잘 반사될 수 있도록 센서의 각도와 반사판의 면적이 너무 작지 않은지? 등 확인해 보세요.

네, 이렇게 라즈베리파이에서 초음파 센서(sr-04)를 연결하고, 응용 예시로 거리측정까지 다루어 보았습니다.

본 게시글의 내용을 따라 하기 쉽도록 영상으로도 만들었으니, 아래 유튜브 영상을 참고해 보세요.

감사합니다.

반응형

[라즈베리파이 강좌] 라즈베리파이로 초음파센서 사용하기 – python편

[라즈베리파이 강좌] 라즈베리파이로 초음파센서 사용하기 – python편

이번시간에는 디지털 신호를 사용하는 센서중 하나인 초음파 센서(HC-SR04)를 사용해 보도록 하겠습니다.

아무리 디지털 신호라고는 해도 파이는 쉽게 쓰게해주지 않습니다.

바로 3.3V 로직때문인데요 이게 정말 많은 애를 먹입니다.

초음파 센서의 Echo핀에서는 5V출력이 나오는데 파이는 3.3V밖에 입력받지 못합니다.

어떻게 하느냐? 우리는 ‘저항’이 있습니다.

간단하게나마 저항의 전압 분배법칙을 이용하여 5V로직을 3.3V에 가깝게 만들어 줄 수 있습니다.

회로도

전원은 일반적인 5V와 GND에,

Trig핀은 파이 코블러의 13번핀(BCM기준)에, Echo핀은 저항을 거쳐 19번핀(BCM기준)에 연결되어 있습니다.

그러면 왜 저항에 연결되어 있느냐?

위에서 설명드렸듯 5V 출력의 신호를 3.3V로 만들어 주기 위함인데요

1k옴 저항과 2k옴저항을 이용하여 5V를 약 3.3V로 만들어 주었습니다.

왜 3.3V가 되느냐? 이는 저항의 전압 분배법칙에 있습니다.

저항에 전압이 분배되는 공식은 V=IR에 있습니다.

그러면 하나하나 계산을 해보겠습니다.

먼저 전체 전압은 5V이므로 V0 = 5, I는 모르므로 x, R은 직렬 저항의 합인 3k옴입니다.

5 / 3000 = x

여기서 x는 약 0.00166666666666666666666이 됩니다.

그냥 0.0016이라 하겠습니다.

전체 전류가 0.0016이므로 각 저항에 걸리는 전류도 0.0016입니다.

그러면 1k옴 저항에 걸리는 전압을 V1, 2k옴 저항에 걸리는 전압을 V2라 하겠습니다.

V1 = 1000 * 0.0016, V1 = 1.6V,

V2 = 2000 * 0.0016, V2 = 3.2V

전압의 합이 5V가 아니라구요? 위에서 전류가 0.001666666666인데 그냥 0.0016으로 계산해서 이런 오차가 나온 것입니다.

더욱 자세한 사항은 다음시간에 다루도록 하겠습니다.

중요한 것은 1k옴 저항을 지난 echo신호가 어떻게 되느냐? 5V신호에서 약 1.6V가 빠진 3.4V가 됩니다.

이정도라면 충분히 파이에서 사용할 수 있습니다.

이제 소스코드입니다.

저번시간을 잘 따라하셨던 분이라면 아실테지만 그래도 홈에서부터 시작해 보도록 하겠습니다.

$cd ~

홈으로 이동합니다.

$mkdir py_sources

py_sources라는 폴더를 만들어 줍니다. 저번시간에 하셨던 분들은 안만드셔도 됩니다.

$vim ultra.py

ultra.py 라는 이름의 파일을 생성하고 vim으로 실행합니다.

그러면 소스코드입니다.

아아 이렇게 올리면 붙여넣기가 안되죠? 어짜피 라즈베리파이에서 붙여넣기하긴 조금 귀찮습니다.

import RPi.GPIO as gpio

import time

gpio.setmode(gpio.BCM)

trig = 13

echo = 19

print “start”

gpio.setup(trig, gpio.OUT)

gpio.setup(echo, gpio.IN)

try :

while True :

gpio.output(trig, False)

time.sleep(0.5)

gpio.output(trig, True)

time.sleep(0.00001)

gpio.output(trig, False)

while gpio.input(echo) == 0 :

pulse_start = time.time()

while gpio.input(echo) == 1 :

pulse_end = time.time()

pulse_duration = pulse_end – pulse_start

distance = pulse_duration * 17000

distance = round(distance, 2)

print “Distance : “, distance, “cm”

except :

gpio.cleanup()

핀 설정하거나 print하는 부분은 저번 시간과 같습니다.

새로이 나온 부분은

while gpio.input(echo) == 0 : pulse_start = time.time() while gpio.input(echo) == 1 : pulse_end = time.time() pulse_duration = pulse_end – pulse_start distance = pulse_duration * 17000 distance = round(distance, 2)

바로 이 부분인데요

하나하나 짚어 보도록 하겠습니다.

먼저 while gpio.input(echo) == 0 : 입니다.

while문은 조건문이 false가 될때까지 계속 실행한다는 것을 알고 계실겁니다. 모르시면 지금부터 하나하나 알아가면 됩니다. 그러면 그러면 gpio.input은 무엇이냐?

함수의 형태는 gpio.input(pin number)형태입니다.

핀넘버에 해당하는 부분이 전압이 들어오고 있다(2.0 ~ 3.3V)라고 하면 1를 리턴하고

전압이 들어오고 있지 않다(0 ~ 1V)라고 하면 0를 리턴합니다.

이 리턴값과 뒤에있는 0이 비교연산자를 통해 다시 True or False로 구분됩니다.

슬슬 헷갈리실텐데요

그러면 표를 통해 보도록 하겠습니다.

LOW일 때 HIGH일 때 gpio.input(echo)의 값 0 1 조건문의 결과 True False while의 탈출여부 탈출 실패 탈출 성공

이해가 되시나요?

결론적으로 echo핀이 HIGH가 되면 while문을 탈출하게 됩니다.

그러면 그때까지 뭘 하느냐?

pulse_start 라는 변수에 time.time()을 계속 대입하고 있습니다.

여기서 time.time()은 1970년 1월 1일을 기준으로 흐른 시간을 float단위로 리턴해줍니다. 그냥 현재 시간이라 보시면 됩니다.

탈출할 때에는 HIGH가 되었을 때의 시간이 입력되어 있겠지요?

그리고 다시 while문이 나옵니다.

while gpio.input(echo) == 1 :

어렵다구요? 그냥 위 표를 거꾸로 생각해 보시면 됩니다. LOW일 때 HIGH일 때 gpio.input(echo)의 값 0 1 조건문의 결과 False True while의 탈출여부 탈출 성공 탈출 실패

조건문의 결과가 바뀌었으므로 탈출도 LOW상태일 때 하게됩니다.

그리고 그때까지 시간을 계속 저장하게 됩니다.

그러면 echo핀이 LOW가 되었을 때 pulse_end는 그 시간을 가지고 있겠지요?

그리고 pulse_end – pulse_start를 해주면 HIGH가 된 시간을 알 수 있습니다.

그 값을 pulse_duration에 저장하는 것이지요.

그리고 이 값을 distance로 바꿔주는데 왜 17000이라는 값을 곱해주는 것일까요?

이는 초음파의 속도와 관게가 있습니다.

물론 기압, 온도등에 따라 변하지만 어느 친절한 과학자분께서 약 340m/s라고 측정을 해주셨습니다.

속도 = 거리 / 시간 공식에 따라 속도에는 340m/s, 거리는 x, 그리고 시간은 duration / 2를 해주었습니다.

여기서 왜 시간을 2로 나누어 주냐구요?

초음파 센서는 초음파를 내보내고 돌아오기까지의 시간을 측정합니다.

이는 한 거리를 2번 지났다는 말이지요.

그래서 2를 나누어 주게 됩니다.

그리고 단위가 m였으므로 0을 2개 붙여 17000이 되는 것입니다.

이렇게 해서 바로 출력하면 소숫점 아래 약 10자리정도가 나와 지저분해 보이므로 round를 이용하여 소숫점 아래 3째자리에서 반올림하여 줍니다.

그러면 원하는 거리가 나오게 됩니다.

저번과 마찬가지로 Ctrl + C를 하게되면 프로그램이 종료됩니다.

이렇게 라즈베리파이로 초음파 센서를 사용하는 방법에 대해 알아보았습니다.

다음 시간에는 c언어를 이용하여 보여드리도록 하겠습니다.

그럼 즐거운 하루 되시기 바랍니다.

작성자 : Bill

e4ds make

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

( 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코드

라즈베리파이 4 초음파 센서 실습 코드

반응형

초음파 센서란? 사람의 귀에 들리지 않을 정도로 높은 주파수 (약 20 kHz 이상)의 음파인 초음파를 발생하여 음파를 쏘아올리고 반사되어 오는 음파까지의 시간차를 거리로 계산하여 측정하는 방식으로 동작한다.

초음파 거리 센서는 발신부와 수신부로 구성된다. 발신부는 함수 발생기에서 (+)와 전압을 번갈아 압전소자에 가해주면 압전소자의 변형에 의해 진동이 발생하고 진동에 의해 초음파가 발생하는 역압전현상을 이용한다. 수신부는 발신부에서 발생한 초음파가 물체에 반사되어 돌아오는 파동에 의해 압전소자가 진동하고 진동에 의해 전압이 발생되는 정압전형상을 이용하여 반사되어 돌아오는 시간을 기초로 거리를 측정한다.

초음파 거리 센서 원리

초음파는 파장이 짧아 지향성과 직진성이 높으며 공기 중에서는 340m/s의 일정한 속도로 진행하는 특징을 가지므로 거리 측정을 위한 수단으로 많이 사용된다. 자동차의 후방 경보 시스템이 초음파를 이용한 대표적인 예에 해당한다.

초음파 센서

– 센서 파트 넘버: HC-SR04

센서 이미지

초음파 센서 HC-SR04

아래 간략한 초음파 센서를 설명한 자료를 참고합니다.

초음파 센서 기구 사이즈와 음파 범위

초음파 센서 원리와 실행

연결도

초음파 센서 HC-SR04 연결도

– 파일 이름: ultrasonic.c

– 소스코드: 할당된 gpio 번호는 예고없이 변경할 수 있습니다.

컴파일 명령

$gcc -o ultrasonic lutrasonic.c -l wiringPi

$실행 명령

$sudo ./ultrasonic

다른 초음파 센서 참고 포스팅

* 주의 사항

#include #include #define trigPin 1 //gpio 21 #define echoPin 29 //gpio 18 //old #define trigPin 21 //gpio 5 //old #define echoPin 4 //gpio J16-pin3 GPIO 23 int main(void) { int distance=0; int pulse = 0; long startTime; long travelTime; if(wiringPiSetup () == -1) { printf(“Unable GPIO Setup”); return 1; } pinMode (trigPin, OUTPUT); pinMode (echoPin, INPUT); for(;;) { digitalWrite (trigPin, LOW); usleep(2); digitalWrite (trigPin, HIGH); usleep(20); digitalWrite (trigPin, LOW); while(digitalRead(echoPin) == LOW); startTime = micros(); while(digitalRead(echoPin) == HIGH); travelTime = micros() – startTime; int distance = travelTime / 58; printf( “Distance: %dcm

“, distance); delay(200); } }

결과

Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm Distance: 8cm

반응형

라즈베리파이에 GPIO 파이썬을 이용해 초음파 센서(HC-SR04) 제어하기

라즈베리파이에 GPIO 파이썬을 이용해 초음파 센서(HC-SR04) 제어하기

안녕하세요.

이번에 소개할 내용은 라즈베리파이에 GPIO, 파이썬을 이용해 초음파 센서(HC-SR04) 제어하기 입니다.

초음파 센서를 통해서 거리를 계산을 하거나 할경우 이용을 하실수가 있습니다.

초음파 센서를 제어하기 위해선 우선 준비물이 필요합니다.

준비물 라즈베리파이 OS가 설치된 라즈베리파이

ELEGOO Arduino용 HC-SR04 초음파 센서 1개

점퍼케이블 암,수 4줄

플레이트 보드 1개

1KΩ 저항 1개, 2KΩ저항 1개

준비물이 준비가 되셨으면 본격적으로 초음파 센서 제어를 해보도록 하겠습니다.

아래의 회로도를 참고하셔서 케이블과 센서를 연결을 해주시기 바랍니다.

1KΩ 저항은 Echo와 연결을 해주세요.

2KΩ 저항은 GND와 연결을 해주세요.

Trig는 GPIO 17번과 연결을 해주세요.

Echo는 GPIO 18번과 연결을 해주세요.

Echo의 경우 5V의 전압을 사용하기 때문에

저항을 이용해서 라즈베리파이에 부담을 주지않는 3.3V로 다시 낮춰 주셔야만 합니다.

Color Pi GPIO Pin Notes Red 2 5V Yellow 11 17 White 12 18(PWM0) Gray 39 GND

GPIO핀에 대한 자세한 내용을 원하시는 분은 아래의 링크를 들어가셔서 참고해 주세요.

라즈베리파이에서 GPIO를 사용하기전 알아두어야 할 사항

위와같이 라즈베리파이와 플레이트 보드의 구성을 모두 마치셨으면

이제 본격적인 코딩을 해야만 합니다.

Visual Studio Code(비주얼 스튜디오 코드)를 실행해 주시기 바랍니다

실행을 하셨으면 파일명을 gpio_HC-SR04.py로 추가를 해주시기 바랍니다.

간단한 예제로 파이썬을 이용해 초음파 센서(HC-SR04)를 제어할 소스를 작성 하겠습니다.

아래의 코드를 입력해 주세요.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

import RPi.GPIO as GPIO

import time

print( “AkibaTV HC-SR04 Start” )

GPIO.setmode(GPIO.BCM)

GPIO.setup( 17 , GPIO.OUT)

GPIO.setup( 18 , GPIO.IN)

try :

while True :

GPIO.output( 17 , False )

time.sleep( 0.5 )

GPIO.output( 17 , True )

time.sleep( 0.00001 )

GPIO.output( 17 , False )

while GPIO. input ( 18 ) == 0 :

start = time.time()

while GPIO. input ( 18 ) == 1 :

stop = time.time()

time_interval = stop – start

distance = time_interval * 17000

distance = round (distance, 2 )

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

except KeyboardInterrupt:

GPIO.cleanup()

print( “AkibaTV HC-SR04 End” )

작성하신 소스를 라즈베리파이에 넣고 실행을 하기위해

소스파일을 라즈베리파이의 임의의 폴더에 올려주시기 바랍니다.

그리고 라즈베리파이를 VNC를 이용해 접속후 터미널을 실행해 주세요.

라즈베리파이의 리스트 목록을 보시면 gpio_HC-SR04.py 파일명으로 파일이 올라가 있는걸 확인할수 있습니다.

이제 명령어로 초음파 센서(HC-SR04)가 작동하는지 확인 해보도록 하겠습니다.

아래의 명령어를 입력해 주세요.

1

2

$ sudo python ./gpio_HC-SR04.py

1

2

$ sudo python3 ./gpio_HC-SR04.py

저의 경우는 파이썬을 3.x버전대를 사용하고 있기에 3.x의 명령어로 실행을 하도록 하겠습니다.

위와같이 초음파가 실행되면 거리에 대한 값이 터미널에 출력되는것을 확인 하실수 있습니다.

미묘한 오차는 발생할수는 있을수가 있겠습니다.

초음파 센서를 이용하시면 원거리의 값이나 가까이에 무엇인가 있을경우 측정을 하실때

유용하게 사용할수가 있겠습니다.

다음에는 좀더 다양한 방법으로 초음파 센서를 이용한 방법을 소개해 드리도록 하겠습니다.

취준생 일지 :: 라즈베리파이 PWM, 초음파센서, 후방감지센서 구현

반응형

PWM

PWM(Pulse Width Modulation => 펄스 폭 변조)는 디지털 출력으로 아날로그 회로를 제어하는 기술이다.

일정한 주기 내에서 Duty 비를 변화시켜서 평균 전압을 제어하는 기술이다.

이때 모터나 센서가 on되는 시간을 duty라고 한다.

duty가 50이다 -> 전체에서 50퍼만 쓴다라는 뜻으로 해석할 수 있다.

(모터의 속도조절은 PWM의 기술을 사용한것이라고 한다)

엘레베이터로 예시를 들어보자.

엘레베이터를 타고 제일 꼭대기층에 간다고하면,

고속으로 가다가 해당층에 도달하면 천천히 줄어들면서 멈춘다.( -> 목표에 도달하면서 모터의 힘을 서서히 바꾸는 것)

이 기술의 원리가 PWM 기술을통해 duty를 점점 줄이면서 작동하는 원리라고 볼 수 있다.

직류에서는 0, 1 밖에 존재하지 않는데 어떻게 5V에서 2.5V의 힘을 줄 수 있을까?(어떻게 duty를 조절할 수 있을까?)

0을 보내는 신호일때 0V, 1을 보내는 신호일때는 5V의 전압을 준다고 가정해보자.

만약 어떤 기기가 1초에 5V의 힘을 낸다고 가정하면,

1초 동안 2.5V의 힘을 얻고싶을때는 1초 동안 5V의 힘을 내는 받는 기기를 0.5초 동안의 힘만 내면 된다.

따라서 대략적인 그래프로 표현했을때 0.5초 동안 받는 5V와 1초 동안 받는 2.5V의 면적(duty)이 같다고 볼 수 있다.

두 그래프의 면적이 같다고 볼 수 있다

이제 PWM의 원리를 적용하여 LED의 밝기를 조절해보자.

하얀색 LED의 + 극에 21번핀,

– 에 GND를 연결해서 해당 코드를 실행해보자.

1. PWM의 원리를 이용하여 LED의 밝기를 변화시키는 회로와 코드 작성

#-*-coding: utf-8-*- # 파일이름 : ledPwm1.py import RPi.GPIO as GPIO import time ledPin = 21 GPIO.setmode(GPIO.BCM) GPIO.setup(ledPin, GPIO.OUT) p = GPIO.PWM(ledPin, 255) p.start(0) try: while True: for i in range(20): p.ChangeDutyCycle(5*i) time.sleep(0.1) for i in reversed(range(20)): p.ChangeDutyCycle(5*i) time.sleep(0.1) except KeyboardInterrupt: print() GPIO.cleanup()

하얀색 LED가 밝아졌다가 어두워지는 것을 확인할 수 있다

이러한 원리로 무드등 제어의 원리를 알 수 있다.

2. 밝기를 직접 입력하여 LED 밝기를 조절하는 코드 작성

#-*-coding: utf-8-*- # 파일이름 : ledPwm.py import RPi.GPIO as GPIO ledPin = 21 GPIO.setmode(GPIO.BCM) GPIO.setup(ledPin, GPIO.OUT) p = GPIO.PWM(ledPin, 255) p.start(0) while True: d = input(“Enter Brightness(0 to 100) : “) # LED 밝기 입력 duty = int(d) # 입력받은 값이 정수인지 확인 if(duty == 100): p.stop() GPIO.cleanup() break else: p.ChangeDutyCycle(duty)

입력한 숫자에따라 LED의 밝기가 달라진다.

초음파 센서 제어

초음파 센서는 주파수를 보냈을때의 시간과 주파수를 보낸후 반사되어 돌아오는 시간의 차이를 측정해서 대략적인 거리를 알 수 있게하는 센서이다.

출처 : http://www.3demp.com/community/boardDetails.php?cbID=124

Trig핀에 10u/s의 트리거 신호를 주면 초음파를 발생시켜서 물체에 쏘고,

Echo 핀에서 초음파가 돌아오는 시점의 시간을 측정하여 거리를 재는 원리이다.

라즈베리파이를 통해 초음파 센서를 제어해보자.

출처 : https://steemkr.com/arduino/@jhis21c/45kpa4

맨 왼쪽 VCC 자리에는 5V,

맨 오른쪽 GND 자리에는 그라운드,

왼쪽에서 두번째 Trig 자리에는 14번핀,

오른쪽에서 두번째 Echo 자리에는 4번 핀에 연결하고 밑의 코드를 실행해보자.

3. 초음파 센서 제어

#-*-coding: utf-8 -*- # 파일이름 : ultrasonic01.py import RPi.GPIO as GPIO import time triggerPin = 14 echoPin = 4 GPIO.setmode(GPIO.BCM) GPIO.setup(triggerPin, GPIO.OUT) # 트리거핀을 출력으로 사용 GPIO.setup(echoPin, GPIO.IN) # 에코핀을 입력으로 사용 try: while True: #구형파 발생 GPIO.output(triggerPin, GPIO.LOW) # 10m/s 동안 초음파를 쏴야함 time.sleep(0.00001) # 기초단위가 1초라서 10us는 10의 마이너스 5승으로 처리 GPIO.output(triggerPin, GPIO.HIGH) #시간측정 while GPIO.input(echoPin) == 0: # 펄스 발생(초음파 전송이 끝나는 시간을 start에 저장) start = time.time() while GPIO.input(echoPin) == 1: # 펄스 돌아옴(초음파 수신이 완료될때까지의 시간을 stop에 저장) stop = time.time() rtTotime = stop – start # 리턴 투 타임 = (end시간 – start시간) # 거리 = 시간 * 속력 # 이때 소리의 속력은 340m/s인데 cm로 단위를 바꿔줘야함=> 34000 cm/s # 그리고 340m/s 는 왕복속도라서 편도로 봐야하니 나누기 2를 해줘야함 distance = rtTotime * ( 34000 / 2 ) print(“distance : %.2f cm” %distance) # 거리를 출력 time.sleep(1) # 1초마다 받아옴 except KeyboardInterrupt: GPIO.cleanup()

초음파센서에 손이나 물건을 갖다대서 거리 수치 변화를 관찰해보자

4. 초음파센서와 부저센서를 이용한 후방감지센서 만들기

초음파센서를통해 물체와의 거리를 잴 수 있게 됬으니, 자동차의 후방센서를 구현해보자.

초음파센서에 물체와의 거리가 점점 좁혀지면 부저센서에서 더 빠르게 소리를 출력하는 원리를 구현해보자.

회로구성

#-*-coding: utf-8 -*- import RPi.GPIO as GPIO import time triggerPin = 14 echoPin = 4 pinPiezo = 21 GPIO.setmode(GPIO.BCM) GPIO.setup(triggerPin, GPIO.OUT) # 출력 GPIO.setup(echoPin, GPIO.IN) # 입력 GPIO.setup(pinPiezo, GPIO.OUT) Buzz = GPIO.PWM(pinPiezo, 440) # 부저센서 초기화 try: while True: #구형파 발생 GPIO.output(triggerPin, GPIO.LOW) time.sleep(0.00001) GPIO.output(triggerPin, GPIO.HIGH) #시간측정 while GPIO.input(echoPin) == 0: # 펄스 발생 start = time.time() while GPIO.input(echoPin) == 1: # 펄스 돌아옴 stop = time.time() rtTotime = stop – start # 리턴 투 타임 = (end시간 – start시간) distance = rtTotime * (34000 / 2 ) print(“distance : %.2f cm” %distance) # 거리 출력 time.sleep(0.2) if(distance <= 40 and distance > 25): # 26 ~ 40 cm 일때 Buzz.start(50) Buzz.ChangeFrequency(523) time.sleep(0.3) Buzz.stop() time.sleep(0.3) elif(distance <= 25 and distance > 10): # 25 ~ 11 cm 일때 Buzz.start(50) Buzz.ChangeFrequency(523) time.sleep(0.15) Buzz.stop() time.sleep(0.1) elif(distance <= 10): # 10cm 이하일때 Buzz.start(99) Buzz.ChangeFrequency(523) time.sleep(0.05) Buzz.stop() time.sleep(0.05) else: # 그 외(겁나 멀때) Buzz.stop() time.sleep(0.5) except KeyboardInterrupt: GPIO.cleanup() 영상을 확인해보면 거리에따라 부저센서가 울리는 빈도수 변화를 관찰할 수 있다. 반응형

Raspberry Pi 초음파센서, PIR센서, 온습도 센서

초음파센서

VCC – 5v

Trig – 23번핀

Echo – 24번핀

GND – GND

import RPi.GPIO as g import time TRIGER = 23 ECHO = 24 g.setmode(g.BCM) g.setup(TRIGER, g.OUT) g.setup(ECHO, g.IN) def getDistance(): g.output(TRIGER, False) time.sleep(1) g.output(TRIGER,True) time.sleep(0.00001) #10ms초 만큼 신호 발생 g.output(TRIGER, False) while g.input(ECHO) == 0 : pulse_start = time.time() #현재시간을 측정 – HIGH신호가 발생되는 시간을 측정 while g.input(ECHO) == 1: pulse_end = time.time() #ECHO핀이 LOW신호가 발생되는 시간을 측정 pulse_duration = pulse_end – pulse_start distance = pulse_duration * 340 * 100 / 2 distance = round(distance,2) #소수점 2자리까지 return distance if __name__ == “__main__” : try: while True: distance_value = getDistance() if 2 < distance_value < 400 : print("distance: %.2f cm" % distance_value) else: print("범위가 벗어남") except KeyboardInterrupt: pass finally: g.cleanup() PIR센서 <선 조절값> 인 상태로

맨 위 VCC – 3.3V

가운데 아웃풋 – 17번핀

맨 아래 GND – GND

import RPi.GPIO as g import time g.setmode(g.BCM) g.setup(17,g.IN) try: while True: if g.input(17) == 1: print(“motion detected…”) else: print(“no motion…”) time.sleep(1) except KeyboardInterrupt: pass finally: g.cleanup()

온습도 센서

Adafruit_DHT 라이브러리를 사용해야한다.

근데 기존에 사용하던 Adafruit-DHT 라이브러리가 오래된 라이브러리이고 더이상 업데이트가 되지 않음

라즈베리파이4에 추가된 내용이 반영되어 있지 않음

1. 통신패키지 설치

– 센서들과 통신 할 수 있는 통신패키지를 설치

– libgpiod2 패키지 설치

– sudo apt install libgpiod2 명령어 입력

2. 파이썬 통신 패키지 설치

– 라즈베리파이에서 GPIO와 통신할 수 있는 패키지 설치

– 파이썬 내부에서 센서와 통신할 수 있도록 구성

– 보드 컨트롤러 id파악

– 아날로그랑 디지털 입출력 핀 구성

– 데이터 전송을 위해서 필요한 파이썬 패키지 설치

– pip3 install adafruit-blinka 명령어 입력

3. 파이썬 온습도 모듈 설치

– 센서를 파이썬에서 사용하기 위해서 작업

– pip3 install adafruit-circuitpython-dht

– : GND

가운데 : 핀

+ : 5V

import time import board # 데이터 송신용 board모듈 import adafruit_dht mydht11 = adafruit_dht.DHT11(board.D20) while True: try: humidity_data = mydht11.humidity temperature_data = mydht11.temperature print(humidity_data, temperature_data) time.sleep(2) # 대기시간이 2초 필요 – 센서 내부에서 초기화작업시 필요한 시간 except RuntimeError as error: print(error.args[0]) finally: pass

키워드에 대한 정보 라즈베리 파이 초음파 센서

다음은 Bing에서 라즈베리 파이 초음파 센서 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 【라즈베리Pi#05】 초음파 센서(HC-SR04) 사용하기! with (파이썬 코드)RaspberryPi Ultra-Sonic Sensor with Python !

  • 라즈이노
  • 라즈이노IOT
  • 아두이노
  • 라즈베리파이
  • Arduino
  • RaspberryPi
  • 프로그래밍
  • 프로세싱
  • 라이노
  • 3D프린터
  • 영상강좌
  • 배우기강좌

【라즈베리Pi#05】 #초음파 #센서(HC-SR04) #사용하기! # #with #(파이썬 #코드)RaspberryPi #Ultra-Sonic #Sensor #with #Python #!


YouTube에서 라즈베리 파이 초음파 센서 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 【라즈베리Pi#05】 초음파 센서(HC-SR04) 사용하기! with (파이썬 코드)RaspberryPi Ultra-Sonic Sensor with Python ! | 라즈베리 파이 초음파 센서, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  생활 과 과학 Pdf | 45 (고교학점제 선택과목 맛보기) 생활과 과학 과목에 관한 설명 자료 17 개의 가장 정확한 답변

Leave a Reply

Your email address will not be published. Required fields are marked *