吴文洁

Garden of Eden 自由 平等 尊重

白相Raspberrypi-3-装个耳朵哦

| Comments

BEGIN

  • 前一篇已经讲到如何玩LED了
  • 这次说给树莓派装个耳朵

耳朵?

  • 用声音传感器作为它的耳朵
  • 声音传感器的样子
  • sound_moudle

材料与安装

  • 准备若干杜邦线、LED、声音传感器等
  • LED正极接GPIO18口
  • 声音传感器接GPIO4
  • 其他接地GND

让耳朵听到声音1

  • 这种方法比较简单,便于理解,但不推荐日常使用
sound.py
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
#-*- coding:utf-8 -*-

import RPi.GPIO as GPIO
import time

# LED正极连接的GPIO口 GPIO18
LED = 18

# 声音感应器OUT口连接的GPIO口 GPIO4
SENSOR = 4

# 当前LED灯的开关状态
flg = False

GPIO.setmode(GPIO.BCM)

# 指定GPIO4(声音感应器的OUT口连接的GPIO口)的模式为输入模式
# 默认拉高到高电平,低电平表示OUT口有输出
GPIO.setup(SENSOR, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# 指定GPIO18(LED长针连接的GPIO针脚)的模式为输出模式
GPIO.setup(LED, GPIO.OUT)

try:
        while True:
                # 检测声音感应器是否输出低电平,若是低电平,表示声音被检测到,点亮或关闭LED灯
                if (GPIO.input(SENSOR) == 0):
                        flg = not flg
          GPIO.output(LED, flg)
          # 稍微延时一会,避免刚点亮就熄灭,或者刚熄灭就点亮。
          time.sleep(1.5)
except KeyboardInterrupt:
  pass

GPIO.cleanup()

让耳朵听到声音2

  • 这种方法用到GPIO的中断处理1 2
  • 执行:echo 4 > /sys/class/gpio/export
  • 声音感应器OUT口连接的GPIO口 GPIO4
sound2.py
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
39
40
41
42
43
44
#-*- coding:utf-8 -*-

import RPi.GPIO as GPIO
import time

print GPIO.VERSION

# LED正极连接的GPIO口 GPIO18
LED = 18

# 声音感应器OUT口连接的GPIO口 GPIO4
# echo 4 > /sys/class/gpio/export
SENSOR = 4

# 当前LED灯的开关状态
flg = False

GPIO.setmode(GPIO.BCM)

# 指定GPIO4(声音感应器的OUT口连接的GPIO口)的模式为输入模式
# 默认拉高到高电平,低电平表示OUT口有输出
GPIO.setup(SENSOR, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# 指定GPIO18(LED长针连接的GPIO针脚)的模式为输出模式
GPIO.setup(LED, GPIO.OUT)

#GPIO.add_event_detect(SENSOR,GPIO.RISING,callback=my_callback)
while 1:
        try:
                #print "\nWaiting for falling edge on port "+str(SENSOR)
                GPIO.wait_for_edge(SENSOR,GPIO.FALLING)
                #print "\nFalling edge detected."

                # 检测声音感应器是否输出低电平,若是低电平,表示声音被检测到,点亮或关闭LED灯
                if (GPIO.input(SENSOR) == 0):
                        flg = not flg
                        GPIO.output(LED, flg)
                        # 稍微延时一会,避免刚点亮就熄灭,或者刚熄灭就点亮。
                        #time.sleep(1.5)

        except KeyboardInterrupt:
                GPIO.cleanup()

GPIO.cleanup()

效果

玩的开心啊