树莓派基础实验16:霍尔传感器实验
一、介绍
霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。
二、组件
★Raspberry Pi主板*1
★树莓派电源*1
★40P软排线*1
★PCF8591模数转换器模块*1
★霍尔传感器模块*1
★双色LED灯模块*1
★双色LED模块*1
★面包板*1
★跳线若干
三、实验原理
磁场中有一个霍尔半导体片,恒定电流I从A到B通过该片。在洛仑兹力的作用下,I的电子流在通过霍尔半导体时向一侧偏移,使该片在CD方向上产生电位差,这就是所谓的霍尔电压。
霍尔电压随磁场强度的变化而变化,磁场越强,电压越高,磁场越弱,电压越低,霍尔电压值很小,通常只有几个毫伏,但经集成电路中的放大器放大,就能使该电压放大到足以输出较强的信号。若使霍尔集成电路起传感作用,需要用机械的方法来改变磁感应强度。上图所示的方法是用一个转动的叶轮作为控制磁通量的开关,当叶轮叶片处于磁铁和霍尔集成电路之间的气隙中时,磁场偏离集成片,霍尔电压消失。这样,霍尔集成电路的输出电压的变化,就能表示出叶轮驱动轴的某一位置,利用这一工作原理,可将霍尔集成电路片用作点火正时传感器。霍尔效应传感器属于被动型传感器,它要有外加电源才能工作,这一特点使它能检测转速低的运转情况。
本实验中霍尔传感器有两个输出:模拟输出(AO),数字输出(DO)。当传感器检测到有磁场时,模拟输出低电平,否则输出高电平。有磁场时数字输出信号读值ADC.read(0)==0,没有有磁场时数字输出信号读值ADC.read(0)==255,存在少量误差。
该模块可以检测出所用磁铁南北极,本实验不讨论。
四、实验步骤
第1步: 连接电路。
树莓派 | T型转接板 | PCF8591模块 |
---|---|---|
SDA | SDA | SDA |
SCL | SCL | SCL |
5V | 5V | VCC |
GND | GND | GND |
霍尔传感器模块 | T型转接板 | PCF8591模块 |
---|---|---|
AO | * | AIN0 |
DO | G17 | * |
VCC | 5V | VCC |
GND | GND | GND |
双色LED模块 | T型转接板 |
---|---|
R | G18 |
G | G27 |
GND | GND |
第2步: PCF8591模块采用的是I2C(IIC)总线进行通信的,但是在树莓派的镜像中默认是关闭的,在使用该传感器的时候,我们必须首先允许IIC总线通信。
第3步: 开始编程。这里先编写一个PCF8591.py库文件,后面再编写一个python程序引入这个库文件。
PCF8591.py库文件就是PCF8591模块的程序,单独编写是为了便于重用。在这个脚本中,我们使用了一个放大器用于模拟输入和一个LED灯用于模拟输出,模拟输入不能超过3.3V!
该程序也可以单独运行,用于测试3个电阻模块的功能。需用短路帽连接AIN0和INPUT0(电位计模块),连接AIN1和INPUT1(光敏电阻模块),以及连接AIN2和INPUT2(热敏电阻模块)。
连接LED灯,AIN0(模拟输入0)端口用于接收来自电位计模块的模拟信号,AOUT(模拟输出)用于将模拟信号输出到双色LED模块,以便改变LED的亮度。
PCF8591的详细内容请查看树莓派基础实验12:PCF8591模数转换器实验。
#!/usr/bin/env python
#------------------------------------------------------
#
# 您可以使用下面语句将此脚本导入另一个脚本:
# “import PCF8591 as ADC”
#
# ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1”
# i2cdetect is a userspace program to scan an I2C bus for devices.
# It outputs a table with the list of detected devices on the specified bus.
# ADC.read(channal) # Channal范围从0到3
# ADC.write(Value) # Value范围从0到255
#
#------------------------------------------------------
#SMBus (System Management Bus,系统管理总线)
import smbus #在程序中导入“smbus”模块
import time# for RPI version 1, use "bus = smbus.SMBus(1)"
# 0 代表 /dev/i2c-0, 1 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定
bus = smbus.SMBus(1) #创建一个smbus实例#在树莓派上查询PCF8591的地址:“sudo i2cdetect -y 1”
def setup(Addr):global addressaddress = Addrdef read(chn): #channelif chn == 0:bus.write_byte(address,0x40) #发送一个控制字节到设备if chn == 1:bus.write_byte(address,0x41)if chn == 2:bus.write_byte(address,0x42)if chn == 3:bus.write_byte(address,0x43)bus.read_byte(address) # 从设备读取单个字节,而不指定设备寄存器。return bus.read_byte(address) #返回某通道输入的模拟值A/D转换后的数字值def write(val):temp = val # 将字符串值移动到temptemp = int(temp) # 将字符串改为整数类型# print temp to see on terminal else comment outbus.write_byte_data(address, 0x40, temp) #写入字节数据,将数字值转化成模拟值从AOUT输出if __name__ == "__main__":setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect -y 1”,查询出PCF8591的地址为0x48while True:print '电位计 AIN0 = ', read(0) #电位计模拟信号转化的数字值print '光敏电阻 AIN1 = ', read(1) #光敏电阻模拟信号转化的数字print '热敏电阻 AIN2 = ', read(2) #热敏电阻模拟信号转化的数字值tmp = read(0)tmp = tmp*(255-125)/255+125
# 125以下LED不会亮,所以将“0-255”转换为“125-255”,调节亮度时灯不会熄灭write(tmp)time.sleep(2)
若想深入学习模/数转换等模电知识,强烈推荐以下书籍,国外大学最经典模电教程,比国内教程生动有趣更易懂。扫码购买或者点击下面的链接。
《模拟电子基础》点击购买:https://u.dangdang.com/OIVk
第4步: 编写控制程序。检测到磁场时,亮红灯;没有检测到磁场时,亮绿灯。模拟信号输出表示检测到磁场时,打印检测到磁场的信息“Detected magnetic materials”。同时数字信号输出表示检测到磁场时,打印“Detected Magnet”。
#/usr/bin/env python
import RPi.GPIO as GPIO
import PCF8591 as ADC
import timeHallPin = 11
Gpin = 13
Rpin = 12def setup():ADC.setup(0x48)GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical locationGPIO.setup(Gpin, GPIO.OUT) # Set Green Led Pin mode to outputGPIO.setup(Rpin, GPIO.OUT) # Set Red Led Pin mode to outputGPIO.setup(HallPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Set BtnPin's mode is input, and pull up to high level(3.3V)GPIO.add_event_detect(HallPin, GPIO.BOTH, callback=detect, bouncetime=200)
# 检测到磁场时,数字输出低电平,即GPIO.input(HallPin)==0
#没有检测到磁场时,数字输出高电平,即GPIO.input(HallPin)==1def Led(x):if x == 0: #检测到磁场时,亮红灯GPIO.output(Rpin, 1)GPIO.output(Gpin, 0)if x == 1: #没有检测到磁场时,亮绿灯GPIO.output(Rpin, 0)GPIO.output(Gpin, 1)def Print1(x):if x == 0: #检测到磁场时,数字输出低电平,x==0print ' ***********************************'print ' * Detected magnetic materials *'print ' ***********************************'def detect(chn): Led(GPIO.input(HallPin))Print1(GPIO.input(HallPin))def Print2(x):if x == 1:print ''print '*************'print '* No Magnet *'print '*************'print ''if x == 0:print ''print '*************'print '* Detected Magnet *'print '*************'print ''def loop():status = 0while True:res = ADC.read(0) #模拟输出信号A/D转换后的数字信号值print 'Current intensity of magnetic field : ', resif res < 10: #这里的数字输出ADC.read(0)只有两个值,0或255tmp = 0 #ADC.read(0)为255时没有检测到磁场#ADC.read(0)为 0 时检测到磁场,但有少量误差的其它值,比如1或254等值偶尔出现if res > 200: tmp = 1if tmp != status:Print2(tmp)status = tmptime.sleep(0.5)def destroy():GPIO.output(Gpin, GPIO.LOW) # Green led offGPIO.output(Rpin, GPIO.LOW) # Red led offGPIO.cleanup() # Release resourceif __name__ == '__main__':setup()try:loop()except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed.destroy()
树莓派基础实验16:霍尔传感器实验相关推荐
- 潘多拉 IOT 开发板学习(RT-Thread)—— 实验16 WiFi 模块实验(学习笔记)
本文代码参考 RT-Thread 官方 BSP 文章目录 实验功能 代码剖析 rt_hw_wlan_wait_init_done() LOG_D() rt_wlan_scan_sync() rt_wl ...
- 实验30:避障传感器实验
本次实验也是一个小实验 避障传感器实验 简单的功能: 遇到障碍物LED灯亮 离开障碍物LED灯灭 用于智能小车躲避障碍物 01 硬件电路设计 整体电路图 直接讲接口好了 大家传感器都用了一段时间了 代 ...
- 线性霍尔传感器——霍尔摇杆
线性霍尔传感器--自制霍尔摇杆 1. 线性霍尔传感器实验 霍尔传感器型号:AH3503 stm32f103的ADC信号采集 原始读取范围0 - 4096,对应电压值:0 - 3.3 V 磁铁:直径:8 ...
- 树莓派基础实验31:MPU6050陀螺仪加速度传感器实验
一.介绍 MPU6050是世界上第一款也是唯一一款专为智能手机.平板电脑和可穿戴传感器的低功耗.低成本和高性能要求而设计的6轴运动跟踪设备. 它集成了3轴MEMS陀螺仪,3轴MEMS加速度 ...
- 树莓派基础实验20:火焰报警传感器实验
一.介绍 火焰传感器模块通过捕获来自火焰的红外波长来执行检测.它可以用来探测火焰是否存在,在这个实验中,我们使用火焰传感器来检测火焰并发出报警信号. 二.组件 ★Raspberry Pi主板*1 ...
- 树莓派基础实验18:声音传感器实验
一.介绍 声音传感器是一种接受声波并将其转换为电信号的组件,它像麦克风一样检测周围环境中的声音强度. 二.组件 ★Raspberry Pi主板*1 ★树莓派电源*1 ★40P软排线*1 ★PCF ...
- 树莓派基础实验34:L298N模块驱动直流电机实验
一.介绍 直流电机是一种将直流电能转换为机械能的电动机,因其良好的调速性能而在电力拖动中得到广泛应用,用于驱动各种设备,如电风扇.遥控小车.电动车窗等,也非常适合作为机器人的行走机构. L29 ...
- 树莓派基础实验29:I2C LCD1602实验
一.介绍 众所周知,虽然液晶显示器和其他显示器大大的丰富了人机交互,但他们有一个共同的弱点.当它们连接到控制器时,需要占用大量的IO口,但是一般的控制器没有那么多的外部端口,也限制了控制器的其他 ...
- 树莓派4bpython串口通信解读数据_树莓派基础实验36:通用串口通信实验
一.介绍 对于树莓派 3B+来说,他的UART功能有三种: 1.内部蓝牙使用: 2.控制终端使用: 3.与其他设备进行串口通信. 在树莓派基础实验35:USB TO TTL模块实验中学习了通过串口对树 ...
最新文章
- hdu2639,第K优决策
- python计数属性类
- 转载.Android HAL实现的三种方式(1) - 基于JNI的简单HAL设计
- 前端学习(3056):vue+element今日头条管理-反馈
- java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法
- NameNode之DataNode管理
- linux关机_LINUX快速入门第二章:Linux 系统启动过程
- ptime在SIP中的应用
- iis6.0渗透实战笔记
- ajaxSubmit问题求解
- xp怎么设置计算机共享的打印机共享的打印机共享,XP设置打印机局域网共享的解决方法步骤...
- PHP将图片剪切成圆形
- excel 合并单元格筛选
- origin登录显示无网络连接到服务器,origin显示“您初次登录时必须保持联网。请检查您的网络连接后再试一次”,怎么处理...
- java ip 国家_java通过ip获取用户所在国家 | 学步园
- c++中内存拷贝函数(C++ memcpy)详解
- 【阿里开发手册】所有的类都必须添加创建者和创建日期——在Idea中创建类时自动添加作者信息
- bat文件调用CMD命令快速显示ip
- AMBA CHI协议学习笔记2-Link层
- Exchange 2003升级到Exchange 2010 之启用Outlook Anywhere!
热门文章
- 电磁场与仿真软件(7)
- IT规划及管理讨论,请各位凭借自己的理解踊跃发言(可选择回答^^)
- 家长会计算机教师致辞,学科教师在家长会上的讲话稿(精选5篇)
- Java-常用实用类
- ocelot和nginx比较_Ocelot一个优秀的.NET API网关框架
- 基于声网 SDK 实现 iOS 端的一对一视频通话
- Win11任务栏里华为电脑管家图标重叠怎么办?
- maven设置打包文件的名称
- uniapp 重力感应关闭
- ​Java的jstack命令使用详解​