๋กœ๋ด‡๊ต์œก/7~8ํšŒ์ฐจ_๋กœ๋ด‡๋ณดํ–‰

[7~8ํšŒ์ฐจ-2] 4์กฑ ๋กœ๋ด‡ ๋ณดํ–‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์‘์šฉ๋™์ž‘

SSEM๐Ÿ‘Œ 2020. 10. 2. 22:53

1. ์ดˆ์ŒํŒŒ์„ผ์„œ(HC-SR04)

 

HC-SR04

์ดˆ์ŒํŒŒ์„ผ์„œ๋ž€?

์ดˆ์ŒํŒŒ ์„ผ์„œ ์ค‘ ์ดˆ๋ณด์ž ๋˜๋Š” ์ž…๋ฌธ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ์— ๊ฐ€์žฅ ์‰ฝ๊ณ  ๋ณดํŽธ์ ์ธ ๋ชจ๋ธ์€ HC-SR04์ž…๋‹ˆ๋‹ค. ํ•€์ด 4๊ฐœ๋กœ๋งŒ ์ œ์–ด๊ฐ€ ๋˜์–ด ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ์„ผ์„œ๋ฅผ ์ด์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  ์ดˆ์ŒํŒŒ๋ž€ ์ธ๊ฐ„์ด ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ์†Œ๋ฆฌ์˜ ์˜์—ญ(๊ฐ€์ฒญ์˜์—ญ) 20~30kHz ์ฃผํŒŒ์ˆ˜๋ณด๋‹ค ๋†’์€ ์ฃผํŒŒ์ˆ˜ ๋Œ€์—ญ์„ ๊ฐ€์ง„ ์Œ์„ ์ดˆ์ŒํŒŒ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์†๋„๋Š” ์•ฝ 340m/s์ด๋ฉฐ, ํ™•์‚ฐ-ํก์ˆ˜-์‚ฐ๋ž€ ๋“ฑ์— ์˜ํ•ด ๊ฐ์‡ ํ•˜๋Š” ์„ฑ์งˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

  ์ดˆ์ŒํŒŒ๋ฅผ ์ด์šฉํ•ด ๋ฌผ์ฒด์™€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  ์ดˆ์ŒํŒŒ์„ผ์„œ์—์„œ Trig๋Š” ์ดˆ์ŒํŒŒ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉฐ, Echo๋Š” ๋ฌผ์ฒด ๋ฐ ์žฅ์• ๋ฌผ์— ๋ฐ˜์‚ฌ๋˜์–ด ๋Œ์•„์˜ค๋Š” ์ดˆ์ŒํŒŒ๋ฅผ ๋ฐ›๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ์ŒํŒŒ ๋ฐœ์ƒ ์‹œ๊ฐ„๊ณผ ๋ฌผ์ฒด์— ๋ถ€๋”ชํ˜€ ๋ฐ˜์‚ฌ๋˜์–ด ๋Œ์•„์˜ค๋Š” ์‹œ๊ฐ„์ฐจ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. 

์ฆ‰, [๊ฑฐ๋ฆฌ=์†๋ ฅ×์‹œ๊ฐ„]์ด๋ผ๋Š” ๋“ฑ์†๋„ ์šด๋™๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ์‹์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

->์—ฌ๊ธฐ์„œ ์†๋ ฅ์€ ์ดˆ์ŒํŒŒ(์†Œ๋ฆฌ)์˜ ์†๋„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, 340m/s๋กœ ๊ณ ์ • ๊ฐ’์ž…๋‹ˆ๋‹ค.


  ๋””์ง€ํ„ธ ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„ผ์„œ ์ค‘ ํ•˜๋‚˜์ธ ์ดˆ์ŒํŒŒ ์„ผ์„œ(HC-SR04)๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋ฆฌ ์ธก์ •์œผ๋กœ ๋Œ€ํ‘œ์ ์ธ ์„ผ์„œ์ด๋ฉฐ, trig(ํŠธ๋ฆฌ๊ฑฐ) ํ•€๊ณผ echo(์—์ฝ”) ํ•€์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์ ์™ธ์„ ๊ณผ ๋น„๊ตํ•˜์—ฌ ์ฃผ๋ณ€ ํ™˜๊ฒฝ์˜ ์˜ํ–ฅ์„ ๋œ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

  โ–ถ ์ดˆ์ŒํŒŒ ์„ผ์„œ: ์ดˆ์ŒํŒŒ๋กœ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ • ๋ฐ ์‚ฌ๋ฌผ์„ ์ธ์‹ํ•˜๋Š” ์„ผ์„œ

    - ์ธก์ • ๊ฑฐ๋ฆฌ: 2~400cm

    - ์ „์› ๊ณต๊ธ‰ ์žฅ์น˜: +5V DC

    - ๋Œ€๊ธฐ ์ „๋ฅ˜: <2mA

 

Echo ํ•€์„ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์— ์—ฐ๊ฒฐํ•  ๋•Œ ์ €ํ•ญ์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ์ŒํŒŒ ์„ผ์„œ์˜ Echo ํ•€์€ High level ์‹ ํ˜ธ ๋ฐœ์ƒ ์‹œ 5V ์ „์••์„ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์˜ GPIO ์ž…๋ ฅ์€ 3.3V ์šฉ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ HC-SR04 ์ถœ๋ ฅ์„ ์ €ํ•ญ ์—†์ด ์—ฐ๊ฒฐํ•˜๊ฒŒ ๋˜๋ฉด ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์˜ GPIO์— ์†์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €ํ•ญ์„ ์ด์šฉํ•ด์„œ ์ „์••์„ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €ํ•ญ๊ฐ’์€ ๊ผญ 1ใ€์™€ 2ใ€์ด ์•„๋‹ˆ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋žต ๋น„์Šทํ•œ ์ •๋„์˜ ๊ฐ’์„ ์ด์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

  ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์—์„œ๋Š” ์•„๋ž˜ ๋ถ€ํ’ˆ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ €ํ•ญ ๊ณ„์‚ฐ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์™ธํ˜•์€ ๊ฑฐ์˜ ๋น„์Šทํ•˜์ง€๋งŒ 3.3V์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

HC-SR04P(HC-SR04+) ์ดˆ์ŒํŒŒ ๊ฑฐ๋ฆฌ ์„ผ์„œ / 3.3V, 5V ํ˜ธํ™˜

  5V์™€ 3.3V์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ข€๋” ๋„“์€ ๋ฒ”์œ„๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

ํŠน์ง• (Features) :
  5V์™€ 3.3V์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ
  HC-SR04๋ณด๋‹ค ๋” ๋„“์€ ๋ฒ”์œ„๋ฅผ ์ง€์›ํ•จ (5V ๊ธฐ์ค€)

์‚ฌ์–‘ (Specification) :
  ์ž…๋ ฅ ์ „์•• : 3~5.5V
  ์ธก์ • ๋ฒ”์œ„ : 2~450cm (5V ๊ธฐ์ค€), 2~400cm (3.3V ๊ธฐ์ค€)

 

  ์ค€๋น„๋ฌผ ์ดˆ์ŒํŒŒ์„ผ์„œ(HC-SR04), F-F์ „์„  4๊ฐœ, (์ €ํ•ญ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ, ์ €ํ•ญ 2๊ฐœ, F-F์ „์„  2๊ฐœ)

 

 


  ๊ธฐ์กด์˜ ์ดˆ์ŒํŒŒ์„ผ์„œ(HC-SR04)๋Š” Echoํ•€์—์„œ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด GPIO ํ•€์— 5V๋กœ ์‹ ํ˜ธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด GPIO ํ•€์€ 3.3V์˜ ์ž…๋ ฅ๊นŒ์ง€๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ „์•• ๋ถ„๋ฐฐ ๋ฒ•์น™์œผ๋กœ ์ €ํ•ญ์„ ๋‚˜๋ˆ ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ํšŒ๋กœ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ 5V๋ฅผ 3.3V์— ๊ฐ€๊น๊ฒŒ ์ „์••์„ ๋‚ด๋ ค์„œ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  ์ €ํ•ญ ์—ฐ๊ฒฐ์—†์ด ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ๋„ ๋™์ž‘์€ ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ GPIO ํ•€์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์„œ ๋ณด๋“œ๊ฐ€ ๊ณ ์žฅ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

HC-SR04์™€ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด GPIO ์—ฐ๊ฒฐ(์ €ํ•ญ์€ 1kΩ ์—ฐ๊ฒฐ)


 

18-distance.py
0.00MB

 

์˜ˆ์ œ ์†Œ์Šค(18-distance.py)  
from gpiozero import DistanceSensor
from time import sleep

sensor = DistanceSensor(23, 24) #echo = 23, trigger = 24

while True:
    print('Distance to nearest object is', sensor.distance, 'm')
    sleep(1)
 

 

 

2. ์„ผ์„œ ๋กœ๋ด‡ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

  ์ดˆ์ŒํŒŒ์„ผ์„œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋กœ๋ด‡์ด ์›€์ง์ผ ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋กœ๋ด‡์€ ์•ž์œผ๋กœ ๊ณ„์† ๊ฐ€๋‹ค๊ฐ€ ์ดˆ์ŒํŒŒ์„ผ์„œ๊ฐ€ 12cm๋ฏธ๋งŒ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ธ์‹ํ•˜๋ฉด ๋’ค๋กœ ์ž ์‹œ ์ด๋™ ํ›„ ์ขŒํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ์•ž์œผ๋กœ ๊ฐ€๋Š” ํ–‰๋™์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

 

19-sensor_robot.py
0.00MB

 

์˜ˆ์ œ ์†Œ์Šค(19-sensor-robot.py)  
from Robot4 import *
from
 gpiozero import DistanceSensor 


r = Robot4()
r.setPWMFreq(50)

sensor = DistanceSensor(23, 24) #echo = 23, trigger = 24

r.sl(1,50) #๊ธฐ๋ณธ ์ž์„ธ๋กœ ์„ธํŒ…
sleep(0.5)
r.sr(2,50)
sleep(0.5)
r.sl(3,90)
sleep(0.5)
r.sr(4,90)
sleep(0.5)

r.sl(11,90)
sleep(0.5)
r.sr(12,90)
sleep(0.5)
r.sl(13,90)
sleep(0.5)
r.sr(14,90)
sleep(0.5)

while True:

    #์ „์ง„1~2  
    r.sr(12,60) #์•ž ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
    r.sl(13,60) #๋’ค ์™ผ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
    sleep(0.025)
    r.sr(2,60) #์•ž ์˜ค๋ฅธ์ชฝ ์•”
    r.sl(3,60) #๋’ค ์™ผ์ชฝ ์•”
    sleep(0.025)
    r.sr(12,90) #์•ž ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ๋‚ด๋ฆผ
    r.sl(13,90) #๋’ค ์™ผ์ชฝ ๋‹ค๋ฆฌ ๋‚ด๋ฆผ
    sleep(0.025)

    #์ „์ง„2
    r.sl(11,60) #์•ž ์™ผ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
    r.sl(14,60) #๋’ค ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
    sleep(0.025)
    r.sr(2,90) #์•ž ์˜ค๋ฅธ์ชฝ ์•”
    r.sl(3,90) #๋’ค ์™ผ์ชฝ ์•”
    sleep(0.025)

    #์ „์ง„3
    r.sl(1,60) #์•ž ์™ผ์ชฝ ์•”
    r.sr(4,60) #๋’ค ์˜ค๋ฅธ์ชฝ ์•”
    sleep(0.025)
    r.sl(11,90) #์•ž ์™ผ์ชฝ ๋‹ค๋ฆฌ ๋‚ด๋ฆผ
    r.sr(14,90) #๋’ค ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ๋‚ด๋ฆผ
    sleep(0.025)
   
    #์ „์ง„4
    r.sr(2,60) #์•ž ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
    r.sl(3,60) #๋’ค ์™ผ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
    sleep(0.025)
    r.sl(1,90) #์•ž ์™ผ์ชฝ ์•”
    r.sr(4,90) #๋’ค ์˜ค๋ฅธ์ชฝ ์•”
    sleep(0.025)
    r.sr(2,90) #์•ž ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ๋‚ด๋ฆผ
    r.sl(3,90) #๋’ค ์™ผ์ชฝ ๋‹ค๋ฆฌ ๋‚ด๋ฆผ
    sleep(0.025)

    if sensor.distance < 0.12: #์ดˆ์ŒํŒŒ ์„ผ์„œ ๊ฑฐ๋ฆฌ๊ฐ€ 12cm ๋ฏธ๋งŒ์ด๋ฉด ๋’ค๋กœ๊ฐ€์„œ ์ขŒํšŒ์ „
        for i in range(7): #๋’ค๋กœ
            #ํ›„์ง„1
            r.sl(11,60) #์•ž ์™ผ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
            r.sr(14,60) #๋’ค ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
            sleep(0.025)
            r.sl(1,90) #์•ž ์™ผ์ชฝ ์•”
            r.sr(4,90) #๋’ค ์˜ค๋ฅธ์ชฝ ์•”
            sleep(0.025)
            r.sl(11,90) #์•ž ์™ผ์ชฝ ๋‹ค๋ฆฌ ๋‚ด๋ฆผ
            r.sr(14,90) #๋’ค ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ๋‚ด๋ฆผ
            sleep(0.025)

            #ํ›„์ง„2
            r.sl(1,50) #์•ž ์™ผ์ชฝ ์•”
            r.sr(4,50) #๋’ค ์˜ค๋ฅธ์ชฝ ์•”
            sleep(0.025)

            #ํ›„์ง„3
            r.sr(12,60) #์•ž ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
            r.sl(13,60) #๋’ค ์™ผ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
            sleep(0.025)
            r.sr(2,90) #์•ž ์™ผ์ชฝ ์•”
            r.sl(3,90) #๋’ค ์˜ค๋ฅธ์ชฝ ์•”
            sleep(0.025)

            #ํ›„์ง„4
            r.sr(12,90) #์•ž ์™ผ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
            r.sl(13,90) #๋’ค ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ ์˜ฌ๋ฆผ
            sleep(0.025)
            r.sr(2,50) #์•ž ์˜ค๋ฅธ์ชฝ ์•”
            r.sl(3,50) #๋’ค ์™ผ์ชฝ ์•”
            sleep(0.025)
            
        for i in range(8): #์ขŒํšŒ์ „
            #์ขŒํšŒ์ „1
            r.sl(11,60)
            r.sl(1,100)
            sleep(0.025)
            r.sl(11,90)
            r.sr(12,60)
            sleep(0.025)
            r.sr(2,90)
            r.sr(12,90)
            sleep(0.025)

            #์ขŒํšŒ์ „2
            r.sl(3,130)
            r.sr(4,50)
            sleep(0.025)
            r.sr(2,50)
            sleep(0.025)
            r.sl(1,60)
            r.sr(2,60)
            sleep(0.025)
            r.sl(3,90)
            r.sr(4,90)
            sleep(0.025)