雨滴探测传感器实验

#实验目的:通过水滴打湿传感器检测板,从而得到传感器发出探测到雨滴的指令消息。由于我们使用的是模拟信号,因此可看到随着雨量的变化而出现数值的变化。
#接线效果如图
接线示例
#其他说明
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即可退出选项;至此,开启配置完成。

干簧管传感器实验

#实验目的:通过利用干簧管传感器,通电后产生磁性;从而能检测到磁铁的存在的原理,从而实现磁场开关的效果。
#接线效果如图
接线示例
#实验代码
代码示例

#!/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 '发现磁场'
        else:
            pass

        time.sleep(0.5)

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py; 
2、当磁铁没有靠近传感器时,屏幕无输出;当磁铁靠近传感器时,DO-LED指示灯亮起,屏幕输出”发现磁场“的提示;
3、Ctrl+C停止检测。
#视频效果如下:

超声波传感器探测距离实验

#实验目的:通过控制超声波传感器(HC-SR04)不断发送超声波,然后利用超声波遇物体检反射的特性,检测接收超声波的反馈时间,从而计算出前方物体的实时距离。
#接线效果如图:
接线示例
注:
1、发送超声波需要至少10微妙的高电平;
2、Trig发送声波时,会同时把Echo置为高电平;但是两者之间有微小的时间差;此时记录开始时间,当声波遇到物体回传被Echo接收到后,Echo会被置为低电平;因此检测Echo的由高电平到低电平的时间即可计算传输时间;
3、将得到的时间/2,即可得到单次距离所用的时间;然后乘以声音的速度(340m/s),即可得到距离。
#实验代码
实验代码

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

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

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

triggerPin = 18  ##trigger英文含义触发 用来发送声波
echoPin    = 19  ##echo 英文含义回声、回响 用来接收声波

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(triggerPin, GPIO.OUT)  ##设置trigger为输出状态
GPIO.setup(echoPin, GPIO.IN)      ##设置echo为接收状态
GPIO.output(triggerPin, GPIO.LOW) ##初始化trigger

##封装单次声波发送-回收函数
def getDistance():
    GPIO.output(triggerPin, GPIO.HIGH)  ##高电平发送声波
    time.sleep(0.000010)                ##声波保持10微妙
    GPIO.output(triggerPin, GPIO.LOW)   ##停止发送声波

    while GPIO.input(echoPin) == GPIO.LOW:  ##等待echoPin生成高电平
        pass

    startTime = time.time()             ##echoPin高电平状态 说明检测开始
    while GPIO.input(echoPin) == GPIO.HIGH:  ##等待echoPin接收到信号并拉低电平
        pass

    stopTime = time.time()              ##记录拉低电平的时间 也就是收到声波的时间
    print '检测到距离'

    useTime = stopTime-startTime        ##单位秒
    return (useTime*340)/2              ##声音传播速度340m/s 暂不考虑温度和气压影响

try:
    while True:
        distance = getDistance()  ##执行测距
        print '距离是:%0.4f米' %distance
        time.sleep(0.5)           ##0.5秒检测一次 可调整

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验过程
1、准备一把尺子作为校验物;
2、通过移动障碍物,会看到屏幕显示距离的动态变化;
检测结果
#视频效果如下:

红外避障传感器实验

实验目的:红外避障传感器主要由红外发射器,红外接收器和电位器组成。实验主要利用遇到障碍物时,发射的红外线会被反射回来从而被检测接收;没有遇到障碍物发射的红外线则会逐渐消失的特性,从而检测障碍物的存在与否。进而做出预警反应。
#接线效果如图
接线示例
#实验代码
代码示例

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

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

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

sensePin = 18

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(sensePin, GPIO.IN) ##设置为接收模式

try:
    while True
        status = GPIO.input(sensePin) ##检测传感器状态
        if status == 0:  ##低电平触发
            print '有障碍物!!'  ##界面提示 后续会增加触发声光报警实验
        else:
            print '继续倒车'

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

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、当传感器前没有障碍物时,屏幕输出”继续倒车“;当放置障碍物时,屏幕输出”有障碍物!“;
3、Ctrl+C停止检测。
#视频效果如下:

触摸开关传感器实验

实验目的:通过触摸传感器触发传感器的检测,然后做出对应的提示;以及后续的触发声光报警等。
#接线效果如图
接线示例
#实验代码

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

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

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

touchPin = 18

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(touchPin, GPIO.IN)  ##设置为接收模式

try:
    while True:
        status = GPIO.input(touchPin) ##读取传感器状态
        if status == 1:       ##高电平说明有触摸
            print '有人碰我'
        time.sleep(0.3)       ##检测频率 可调节

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、用手指触摸传感器sensor部分;
3、可见屏幕输出”有人碰我“字样的提示;
4、Ctrl+C停止检测。
#视频效果如下:

继电器实验

实验目的:通过利用继电器接收高电平或者低电平触发开合的特性来实现通过程序控制七彩LED灯的开灭效果。
#接线效果如图
接线示例
注:七彩LED灯如果接收到电流输入即会点亮,同时展现多重绚丽颜色。(图片遗漏DC+另一端接5V,DC-接GND)。
#实验代码

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

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

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

pin = 18

GPIO.setmode(GPIO.BCM)      ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(pin, GPIO.OUT)   ##设置BCM编码下18号引脚为输出状态
GPIO.output(pin, GPIO.LOW)  ##由于跳线帽设置高电平出发,因此低电平关灯

status = raw_input('操作:') ##接收开灯指令

if status == '开灯':
    GPIO.output(pin, GPIO.HIGH) ##高电平开灯
    time.sleep(3)  ##开灯时间 也可用while 持续点亮
else:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、提示输入”操作“;
3、输入”开灯“;
4、可见七彩LED灯持续闪烁;
#视频效果如下:
#更多实验可见 https://www.shumeijiang.com/2021/07/21/树莓派语音识别-物联网实验/