分类目录试试传感器

直流电机驱动变速实验

#实验目的:通过测试外接可变压电源以及直流电机驱动板(L298N)这个组合,驱动自制的风扇,在pwm的调节下,展现转动速度连续发生变化的现象。
#接线效果如图:
接线示例
#注:其中风扇造型可采用其他形式代替,只要可体现转动速度即可。
#驱动板:采用的是L298N的改进型,某宝有卖;他跟传统L298N驱动板控制pwm不同在于,它直接在对应电机的高电平引脚输出即可;单个板可同时驱动两个电机。具体接线效果如下:
#控制原理如下: 
直流电机转动形式IN1IN2IN3IN4
MOTOR-A正向(调速)高电平/PWM低电平
反向(调速)低电平高电平/PWM
停止低电平低电平
刹车高电平高电平
MOTOR-B正向(调速)高电平/PWM低电平
反向(调速)低电平高电平/PWM
停止低电平低电平
刹车高电平高电平
#实验代码:
代码示例

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

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

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

motorA1 = 18   ##定义电机A的IN1引脚
motorA2 = 19   ##定义电机A的IN2引脚

GPIO.setmode(GPIO.BCM)  ##此处采用BCM编码
GPIO.setup(motorA1, GPIO.OUT)  ##设置引脚为输出模式
GPIO.setup(motorA2, GPIO.OUT)

pwm = GPIO.PWM(motorA1, 80)    ##引脚A1高电平为正转,所以创建一个正转pwm实例并设置频率
pwm.start(70)  ##初始化占空比 即单位时间高电平的时间占比

GPIO.output(motorA1, GPIO.HIGH) ##设置A1 引脚为高电平
GPIO.output(motorA2, GPIO.LOW)  ##设置A2 引脚为低电平 如此可控制电机A正转,反之电机A反转

##通过一定时间间隔设置占空比,可见电机间隔一定时间后会发生速度变化 其中0则电机停止转动
try:
    while True:
        pwm.ChangeDutyCycle(30)
        time.sleep(2)
        pwm.ChangeDutyCycle(70)
        time.sleep(2)
        pwm.ChangeDutyCycle(0)  ##电机停止转动
        time.sleep(2)  ##持续时间

except KeyboardInterrupt:
    pass

pwm.stop()
GPIO.cleanup()
#实验效果:
1、执行代码 Python jiujiang.py;
2、可见小风扇快速转动,然后持续2秒钟;速度增强到原来两倍;
3、速度增强转动2秒钟后,风扇停止转动;
4、停转2秒后,风扇继续往复前面一个动作。
#视频效果如下:

LCD液晶显示屏显示实验

#实验目的:通过实验展示LCD1602液晶显示屏+PCF8574T转接板如何通过I2C协议展示想要的文案。
#接线效果如图:
接线示例
#注:LCD1602液晶显示屏外接PCF8574T转接板来驱动,可以节省树莓派很多宝贵的IO口。
#实验代码:
执行代码
#驱动类可发送邮件至lee.chuke@foxmail.com获取

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

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

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

##内容输出
lcd.print_lcd(0, 0, "Shumeijiang.com") #前两个参数分别是x轴和y轴 即0坐标点开始 第一行第一列开始
lcd.print_lcd(0, 1, "test pi!")  ##第二行第一列开始
time.sleep(2)   ##延迟2秒
lcd.print_lcd(0, 1, "by Jiujiang")  ##第二行内容切换
time.sleep(2)   ##延迟2秒
lcd.clear_lcd() ##清空屏幕
#实验效果:
1、执行代码 Python jiujiang.py;
2、可见屏幕第一行显示“Shumeijiang.com”,同时第二行显示“test pi!”;
3、持续两秒钟后,第二行切换显示“by Jiujiang”,第一行内容不变;
4、持续两秒钟后,屏幕清空。
#视频效果如下:

烟雾探测传感器实验

#实验目的:实验通过烟雾探测传感器+数模转换模块,通过检测空气情况,然后输出烟雾探测值。
#接线效果如图
接线示例
#实验代码
代码示例

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

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

import time              ##引入time库
import smbus             ##引入控制总线

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、可见屏幕依次打印出数值,并相对稳定输出(数字越大 烟雾越大);
3、当用酒精(安全起见)靠近传感器时,可见数值逐渐增大;
4、当将酒精移开后,数值逐渐降低;
5、由于实验温度,实验规模受限因此无法实际模拟真实烟雾场景,仅做参考;
6、由于获取的是模拟信号,因此需要自己设定一个报警值,作为触发预警的阈值。
#视频效果如下:

循迹传感器实验

#实验目的:通过利用传感器发射红外线,遇到黑色线后被吸收而无法被反射被发现的原理,从而发现传感器循迹的原理和奥秘。
#传感器原理
传感器背面
  • 可见传感器背面有蓝色LED灯和黑色LED灯;
  • 蓝色LED灯负责发射红外线,黑色LED灯则负责接收发射后的红外线;
  • 当红外线被发射并照射到白色表面时,红外线被吸收和反射,此时黑色LED灯接收到反射的红外线,从而输出低电平;
  • 当遇到黑色表面时,由于红外线被吸收,黑色LED等无法接收到反射的红外线,从而输出高电平。
#接线效果如图:
接线示例
#实验代码
代码示例
#注:发现黑色线为高电压,没发现为低电平;

#!/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.HIGH:   ##高电平触发 发现黑色线
            print '发现黑色线,继续前进'
            time.sleep(1)        ##检测到预警提示持续时间
        else:
            print '路径丢失,重新规划路线'

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

except KeyboardInterrupt:
    pass

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

声音探测传感器实验

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

#!/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、将传感器指向没有人的地方,可见一定延迟后输出低电平状态。
#视频效果如下:

光敏传感器实验

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

#!/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停止检测。
#视频效果如下: