存档12月 2019

声音探测传感器实验

#实验目的:通过声音传感器探测到声音,从而发现提示信息。
#接线效果如图
接线示例
#实验代码
代码示例

#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''

import RPi.GPIO as GPIO  ##引入GPIO模块
import time              ##引入time库

detectPin = 18

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(detectPin, GPIO.IN) ##设置18口为输入口

try:
    while True:
        status = GPIO.input(detectPin)
        if status == GPIO.LOW:   ##触发低电平 表示检测到声音
            print '有声音'
            time.sleep(2)        ##检测到预警提示持续时间
        else:
            print '一切正常'

        time.sleep(0.5)    ##检测频率

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、没有声音时,可见屏幕持续输出”一切正常“;
3、当检测到声音时,屏幕输出”有声音“并持续两秒;
4、如果声音检测灵敏度不够可以旋转灵敏度调节按钮进行调节。
#视频效果如下:

人体红外传感器探测实验

#实验目的:通过人体红外传感器感测到人体经过,从而发出预警信息。
#接线效果如图
接线示例
#传感器说明
传感器去掉外罩后可见各引脚含义
传感器说明
#实验代码
代码示例

#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''

import RPi.GPIO as GPIO  ##引入GPIO模块
import time              ##引入time库

detectPin = 18

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(detectPin, GPIO.IN) ##设置检测引脚我输入状态

try:
    while True:
        status = GPIO.input(detectPin)
        print status
        if status == 1:  ##高电平触发报警
            print '报警 发现有人'
        else:
            pass
        time.sleep(1)

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、可见默认输出 低电平状态;
3、当有人经过或将传感器指向自己,则发现输出”报警 发现有人“;
4、将传感器指向没有人的地方,可见一定延迟后输出低电平状态。
#视频效果如下:

雨滴探测传感器检测下雨并预警实验

#实验目的:通过雨滴探测传感器探测到雨滴并超过阈值后,触发继电器进而触发七彩LED灯闪烁预警提示。
#接线效果如图
接线示例
#其他说明
1、继电器触发七彩LED接线以及操作参考文章:http://www.shumeijiang.com/2019/11/23/继电器实验/
2、雨滴探测模块接线以及操作参考文章:http://www.shumeijiang.com/2019/12/21/雨滴探测传感器/
#实验代码
代码示例

#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''

import RPi.GPIO as GPIO  ##引入GPIO模块
import time              ##引入time库
import smbus             ##引入控制总线

ledPin = 17              ##继电器控制口
GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(ledPin, GPIO.OUT) ##设置BCM编码下指定引脚为输出状态

address = 0x48       ##雨滴传感器地址
A0 = 0x40            ##使用的端口地址
bus = smbus.SMBus(1) ##开启总线
threshold = 150      ##雨量触发预警的阈值 可自定义

try:
    while True:
        bus.write_byte(address, A0)       ##设置获取传感器哪个端口数
        value = bus.read_byte(address)    ##读取指定端口数据
        print ("雨量值:%1.3f " %(value))  ##输出检测值

        ##检测是否触发预警
        if value >= threshold:      ##检测是否触发预警
            GPIO.output(ledPin, GPIO.LOW)   ##没有触发预警则让继电器处于闭合状态
            continue
        else:
            print "开灯"   ##触发预警 亮灯闪烁
            GPIO.output(ledPin, GPIO.HIGH)  ##高电平开灯
            time.sleep(3)  ##预警持续时间

        time.sleep(1)   ##检测频率

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、可见屏幕输出255数值(根据探测板情况而定);
3、将水滴滴入探测板,会发现屏幕输出不同的雨滴值,如果雨滴值小于阈值,会听见咔的一声,继电器闭合通电,七彩LED灯开始闪烁。
4、预警闪烁持续3秒钟,然后继续监测;如果发现雨滴值大于阈值,则继电器关闭,LED灯预警熄灭。
#视频效果如下:

光敏传感器实验

#实验目的:通过传感器检测光的明亮程度,然后做出提示预警。
#接线效果如图
接线示例
#实验代码
代码示例

#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''

import RPi.GPIO as GPIO  ##引入GPIO模块
import time              ##引入time库
import smbus             ##引入控制总线

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一

address = 0x48   ##传感器地址
A0 = 0x40        ##使用的端口地址
bus = smbus.SMBus(1)   ##开启总线


try:
    while True:
        bus.write_byte(address, A0)    ##设置获取传感器哪个端口数据
        value = bus.read_byte(address)   ##读取指定端口的数据
        print ("光亮度值:%1.3f " %(value)) ##范围为0~255
        time.sleep(1)    ##探测频率

except KeyboardInterrupt:
    pass
#实验效果
1、执行代码 Python jiujiang.py;
2、当有光亮照射时屏幕输出0~255之间数值(光照强度决定);
3、当用不透光物体遮挡时,可见屏幕输出数值变化;
4、由此得出结论当光照越强时数值越小,光照越弱时越接近255。
#视频效果如下:

雨滴探测传感器实验

#实验目的:通过水滴打湿传感器检测板,从而得到传感器发出探测到雨滴的指令消息。由于我们使用的是模拟信号,因此可看到随着雨量的变化而出现数值的变化。
#接线效果如图
接线示例
#其他说明
1、实验采用I2C协议,树莓派默认是关闭的因此需打开。可参考:http://www.shumeijiang.com/2019/12/08/基于命令行打开i2c协议支持/
2、I2C查看当前已挂载设备地址命令:

i2cdetect -r -y 1
#实验代码
代码示例

#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
http:://www.suhmeijiang.com
'''

import RPi.GPIO as GPIO  ##引入GPIO模块
import time              ##引入time库
import smbus             ##引入控制总线

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一

address = 0x48   ##传感器地址
A0 = 0x40        ##使用的端口地址
bus = smbus.SMBus(1)   ##开启总线

try:
    while True:
        bus.write_byte(address, A0)      ##设置获取传感器哪个端口数据
        value = bus.read_byte(address)   ##读取指定端口的数据
        print ("雨量值:%1.3f " %(value))  ##范围为0~255
        ##print ("雨量值:%1.3f " %(value*3.3/255))  ##转换为电压输出 如果是5V需要将3.3替换为5
        time.sleep(1)    ##探测频率

except KeyboardInterrupt:
    pass
#实验效果
1、执行代码 Python jiujiang.py;
2、当检测板没有雨滴时,输出255(如果上次有实验,寄存器有数据会输出上一次实验数据)。
3、然后将水滴滴入检测板,可见数值随着水滴面积增大而数值逐渐变小。
4、根据数值变化(或者转换为电压也可)可预警雨量变化。
5、Ctrl+C停止检测。
#视频效果如下:

数字信号和模拟信号区别

#直观理解:
1、数字信号用高电平和低电平标示,表示有或者无,高或者低;
2、模拟信号则可以表示多少;
如上图,用电池电量举例;数字信号表示电池有无电量,而模拟信息可以表示有多少电量。
#应用场景不同
1、有的传感器比如通电即量的LED灯,如果使用数字信号,则只可控制LED量或者熄灭;如果使用模拟信号则可以模拟LED亮度多少。

基于命令行打开I2C协议支持

实验目的:通过命令行命令执行,打开树莓派对于I2C协议的支持;或者查看当前自己的树莓派支持的协议情况。因为有些协议默认是关闭的。
#操作流程:
1、ssh登录树莓派,可以写成一个shell脚本;例如下图,我这边有三个树莓派板子登录脚本,分别是car、dog和master。
2、实验用的是dog-login.sh,less可见脚本内容:
3、执行sh ./dog-login.sh登录dog树莓派;因为pi没有设置密,所以可直接登录。
4、接下来查看树莓派配置,执行命令 sudo raspi-config,可见效果如图:
5、上图可见很多选项,有关于用户密码,网络设置,开机设置等等,我们这边选择5 Interfacing Options(关于外接设备的接口设置);通过键盘上下键移动选择选项,左右键选择Select还是Finish,按Enter键选择,可见效果如下图:
6、可见选项列表,有P1 Camera(外接摄像头需要打开),P2 SSH (ssh登录需要打开,我们这次就是采用ssh登录因此需要先执行这个配置的打开),P3 VNC(允许远程控制,比如QQ的允许其他人控制电脑),P4 SPI(SPI协议),P5 I2C(I2C协议)等,我们这次要打开I2C协议,因此通过上下键选择,然后Enter执行,可见如下效果:
7、上图提示是否开启I2C协议支持(即使当前已经开启),默认选中”是“,Enter键执行即可。
8、提示上图表示已开启成功,然后会跳转到步骤4的选项列表,左右光标移动选择Finish即可退出选项;至此,开启配置完成。