分类目录动手就动手

LCD液晶显示屏滚动播放实验

#实验目的:通过代码控制实现LCD液晶显示屏内容滚动播放效果。
#接线效果如图:
接线示例
#实验代码:

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

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

import time
from LCD1602 import LCD1602  ##引入LCD1602驱动类
lcd = LCD1602(0x27)      ##实例化 0x27为液晶显示器地址

##要输出的内容
listData = ["aaaaaa","bbbbbb", "ccccc", "dddddd", "eeeeee", "ffffff", "ggggggggg"]

allCount = len(listData)   ##计算数量
for i in range(0, allCount):
    line1 = listData[i]    ##第一行
    line2 = '' if i+1 > allCount-1 else listData[i+1]  ##判断第二行是否有值

    lcd.print_lcd(0, 0, line1)  ##第一行输出
    time.sleep(1)   ##第二行延迟 可去掉 然后两行同时显示
    lcd.print_lcd(0, 1, line2)  ##第二行输出
    time.sleep(1)   ##延迟1秒
    lcd.clear_lcd() ##清空屏幕
#实验效果:
1、执行代码 Python jiujiang.py;
2、可见第一行首先出现内容,然后隔一秒第二行出现内容;
3、一秒后,屏幕清空,然后第一行重复上次的第二行内容,以此类推,直到内容显示完成。
4、也可以去掉第一行和第二行之间的时间间隔,将出现同页面同时刷新的效果。

人体红外传感器检测触发七彩LED灯闪烁实验

#实验目的:通过人体红外传感器检测是否有人经过,从而触发继电器通电,然后触发七彩LED灯(或其他预警)闪烁预警。
#接线效果如图:
接线示例
1、继电器接线具体可参考:http://www.shumeijiang.com/2019/11/23/继电器实验/
2、人体红外传感器接线具体可参考:http://www.shumeijiang.com/2019/12/28/人体红外传感器探测实验/
#实验关键代码:
代码示例

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

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

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

ledPin = 20  ##继电器控制
detectPin = 23  ##人体红外传感器检测

GPIO.setmode(GPIO.BCM)  ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(ledPin, GPIO.OUT)  ##设置继电器为输出模式
GPIO.setup(detectPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) ##设置人体红外传感器为输入模式 并初始化拉低电平

GPIO.output(ledPin, GPIO.LOW)  ##初始化继电器为低电平

##定义七彩LED灯预警闪烁方法
def startWarning():
    GPIO.output(ledPin, GPIO.HIGH)  ##高电平闪烁
    time.sleep(8)  ##闪烁8秒
    GPIO.output(ledPin, GPIO.LOW)  ##低电平熄灭


GPIO.add_event_detect(detectPin, GPIO.RISING)   ##添加一个边沿检测事件 检测电压升高
GPIO.add_event_callback(detectPin, startWarning)  ##同时添加一个回调动作

try:
    while True:
        if GPIO.event_detected(detectPin):  ##检测是否触发事件 电压升高触发
            print "触发预警"
        else:
            pass

        time.sleep(1)  ##检测频率为1秒/次  可自定义
except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果:
1、执行代码 Python jiujiang.py;
2、由于初始化为低电压,所以当人体红外传感器没有检测到人体时,不会触发预警;
3、当将手触放在人体红外传感器前,传感器会触发高电平,进而触发边沿事件,再而触发回调方法,触发LED闪烁。
4、由于回调方法有几秒延迟,因此可见LED等持续闪烁,直到时间到达,程序设置为低电平,LED灯熄灭;然后进入下一个检测周期。
#视频效果如下:

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

#实验目的:通过雨滴探测传感器探测到雨滴并超过阈值后,触发继电器进而触发七彩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灯预警熄灭。
#视频效果如下:

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()
#视频效果如下: