存档11月 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 '发现磁场'
        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/树莓派语音识别-物联网实验/

振动开关传感器实验

实验目的:通过传感器检测振动,进而提示出振动发生。
#接线效果如图
接线示例
#实验代码
代码示例

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

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

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

uPin = 18

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

try:
    while True:
        status = GPIO.input(uPin)
        if status == 1:       ##高电平说明有振动
            print '路面不平'
        elif status == 0:
            print '==='
        time.sleep(0.3)      ##检测频率 可调节
except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、屏幕可见 ”===“输出,表示路面平整;
3、当小车经过高低不平时,屏幕显示 ”路面不平“;
#视频效果如下:

U型光电传感器测量速度频率实验

实验目的:通过U型传感器,检测物体多次经过的时间间隔;从而计算出物体经过的速度和频率。
#接线效果如图
接线示例
#实验过程
1、执行程序 Python jiujiang.py
2、拿起遮挡物反复执行拿起放下,模拟物体规律经过光电检测口;
3、可见屏幕显示遮挡物每次出现距离上次的时间;从而推导出频次信息;
实验结果
4、由于实验只是计算上次和这次的时间检测,没有做统计信息;也可以每次时间都记录下来,然后单独分析,做更宏观的分布统计;
#实验代码

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

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

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

uPin = 18

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

filePath = 'time.data' ##文本记录通过时间戳 也可用数据库表

try:
    while True:
        status = GPIO.input(uPin)  ##接收状态
        if status == 0: continue   ##检测到没有物体时候跳过
        if status == 1:
            handle = open(filePath, 'r+')

            currentTime = time.time() ##获取当前时间点
            getTime = handle.read()   ##读取上次通过时的时间点
            getTime = float(getTime)

            if not getTime: getTime = 0 ##如果上次没有时间 则不计算
            handle.seek(0)
            handle.truncate()  ##清空上次记录 记录本次时间点

            handle.write(str(currentTime))  ##填写本次触发时间点
            handle.flush()
            handle.close()

            if getTime == 0:  continue  ##如果不能计算 则跳过
            frequency = round(currentTime-getTime-0.3, 2)
            print("频率为%s秒/次" %(frequency))   ##输出信息

            time.sleep(0.3)  ##检测频率 可自己调整

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#视频效果如下:

U型光电传感器实验

实验目的:传感器两端分别有一个发射端一个接收端,正常情况下传感器输出低电平;当物体遮挡时输出高电平,从而实现感知效果。
#接线效果如图
接线示例
#实验代码

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

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

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

uPin = 18

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

try:
    while True:
        status = GPIO.input(uPin)
        if status == 1:
            print '被挡住了'
        elif status == 0:
            print '正常'
        time.sleep(0.1)
except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、屏幕输出 ”正常“;
3、拿物体挡住传感器中间,屏幕输出”被挡住了“;
4、检测频率可调整;
#视频效果如下: