振动开关传感器实验

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

#!/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、检测频率可调整;
#视频效果如下:

有源蜂鸣传感器实验

实验目的:通过利用有源蜂鸣传感器在接收到低电平的时候,发出蜂鸣的特性,然后用来模仿时钟几点的报时效果。
#接线效果如图
接线示例
#实验代码

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

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

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

soundPin = 18   ##定义信号输出为18口

GPIO.setmode(GPIO.BCM)          ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(soundPin, GPIO.OUT)  ##设置信号引脚为输出状态

n = 1
moment = int(raw_input('老狼 老狼几点了:'))  ##接收问询输入
if moment > 12: moment = 12   ##12点老狼就要来了

try:
    while True:
        if n > moment: break
        print n
        GPIO.output(soundPin, GPIO.LOW)  ##输出低电平 然后传感器发出声音
        time.sleep(0.15)    ##声音输出时间
        GPIO.output(soundPin, GPIO.HIGH) ##输出高电平 然后声音输出终止
        time.sleep(0.15)    ##声音中断时间
        n += 1

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、根据提示输入时刻;
3、屏幕会逐个报数,然后同时蜂鸣传感器会开始鸣响,直到报到指定的点数;
4、仅支持报数到12点(因为老狼要来了)。
#视频效果如下:

轻触开关传感器实验

实验目的:通过点击传感器,然后程序获取状态;从而得到不同的状态提示。
#接线效果如图
接线的例子
接线示例
#实验代码

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

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

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

touchPin = 18   ##设置传感器走18口

GPIO.setmode(GPIO.BCM)  ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(touchPin, GPIO.IN)  ##设置BCM编码下18号引脚为读取状态

#隔一秒读取一次状态  然后判断输出
try:
    while True:
        status = GPIO.input(touchPin)  ##读取数据
        if status == 1:
            print '正常';
        elif status == 0:
            print '不好 被踩到了';

        time.sleep(1)

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、点击执行 Python jiujiang.py
2、传感器没有触动则提示 ”正常“;
3、点击传感器则提示 ”不好 被踩到了“;
#视频效果如下:

倾斜传感器实验

实验目的:通过操作倾斜传感器,实现对物体倾斜产生的感知。
#接线效果如图:
接线示例
#实验代码
检测小车状态

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

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

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

CarPin = 18  ##定义小车读取18口信息

GPIO.setmode(GPIO.BCM)
GPIO.setup(CarPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) ##设置为接收模式 同时拉高电阻 减少杂声干扰

#隔一秒读取一次状态  然后判断输出
try:
    while True:
        status = GPIO.input(CarPin)  ##读取数据
        if status == 0:
            print '小车正常';
        elif status == 1:
            print '不好了 小车要翻车了';

        time.sleep(1)

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行Python jiujiang.py;
2、小车正常状态下屏幕显示 “小车正常”;
3、小车发生倾斜时屏幕显示 ”不好了 小车要翻车了“。
4、每隔一秒检测一次状态,可调节时间。
#视频效果如下:

RGB三色LED灯实验

如题顾名思义,R(Red)红色,G(Green)绿色,B(Blue)蓝色。
实验目的,通过程序操作RGB三色,实现不同颜色的展示和切换。
#接线效果如图:
接线示例
#实验代码:

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

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

import RPi.GPIO as GPIO
import time

R = 18  ##Red采用18口
G = 19  ##Green采用19口
B = 20  ##Blue采用20口

GPIO.setmode(GPIO.BCM) ##采用BCM编码

#设置输出模式
GPIO.setup(R, GPIO.OUT)
GPIO.setup(G, GPIO.OUT)
GPIO.setup(B, GPIO.OUT)

#实例化PWM
rPwm = GPIO.PWM(R, 50)
gPwm = GPIO.PWM(G, 50)
bPwm = GPIO.PWM(B, 50)

#启动PWM
rPwm.start(0)
gPwm.start(0)
bPwm.start(0)

#接收用户选择
color = raw_input('选择颜色:')
color = color.lower() ##转化为小写

#根据用户选择展示不同的颜色
if color == 'red':
    rPwm.ChangeDutyCycle(100)
    gPwm.ChangeDutyCycle(0)
    bPwm.ChangeDutyCycle(0)
elif color == 'green':
    rPwm.ChangeDutyCycle(0)
    gPwm.ChangeDutyCycle(100)
    bPwm.ChangeDutyCycle(0)
elif color == 'blue':
    rPwm.ChangeDutyCycle(0)
    gPwm.ChangeDutyCycle(0)
    bPwm.ChangeDutyCycle(100)
else:
    print '不支持的颜色'

#点亮持续时间
time.sleep(2)

#点亮结束
rPwm.stop()
gPwm.stop()
bPwm.stop()

#清除端口占用
GPIO.cleanup()
#执行如上代码可见效果为:
1、执行Python jiujiang.py
2、提示输入要选择的颜色;
3、输入如red,可见led灯红色灯亮起,并持续两秒;
4、两秒后灯熄灭,等待下次调用。
#视频效果如下:

双色LED变化实验

#实验材料如图
材料准备
#实验流程
1、通过跳线和面包板连接LED灯;
2、ssh方式登录pi,然后编写Python程序,执行程序看到LED灯变化效果。
#开始操作
接线示例
2、登录系统
ssh pi@192.168.0.119  #设置了静态ip 然后通过ssh方式登录


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

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

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

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(18, GPIO.OUT) ##设置BCM编码下18号引脚为输出状态

p = GPIO.PWM(18, 50)  ##初始化18号引脚 并设置输出频率为50Hz
p.start(0)            ##启动PWM 并设置频率为0 目的是为下面的渐变为铺垫

try:
    while True:
        for dy in range(0, 100, 5):  ##以5为单位从0到100递加
            p.ChangeDutyCycle(dy)    ##更改占空比 更改高电平的占比 也就是通电时间 看到的效果是逐渐变亮
            time.sleep(0.075)        ##保持时间
        for dy in range(100, 0, -5): ##以-5为单位从100到0递减
            p.ChangeDutyCycle(dy)    ##同上 通电时间由大变小 看到的效果是逐渐变暗
            time.sleep(0.075)
except KeyboardInterrupt:            ##如果遇到Ctrl+C 则跳出循环
    pass

p.stop()        ##停止实例
GPIO.cleanup()  ##清理引脚输出 去掉引脚占用
代码执行 Python led.py 可见LED灯由暗逐渐变亮,然后再变暗;如此反复。Ctrl+C停止效果。
#视频效果如下: