一、介绍

   霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(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:霍尔传感器实验相关推荐

  1. 潘多拉 IOT 开发板学习(RT-Thread)—— 实验16 WiFi 模块实验(学习笔记)

    本文代码参考 RT-Thread 官方 BSP 文章目录 实验功能 代码剖析 rt_hw_wlan_wait_init_done() LOG_D() rt_wlan_scan_sync() rt_wl ...

  2. 实验30:避障传感器实验

    本次实验也是一个小实验 避障传感器实验 简单的功能: 遇到障碍物LED灯亮 离开障碍物LED灯灭 用于智能小车躲避障碍物 01 硬件电路设计 整体电路图 直接讲接口好了 大家传感器都用了一段时间了 代 ...

  3. 线性霍尔传感器——霍尔摇杆

    线性霍尔传感器--自制霍尔摇杆 1. 线性霍尔传感器实验 霍尔传感器型号:AH3503 stm32f103的ADC信号采集 原始读取范围0 - 4096,对应电压值:0 - 3.3 V 磁铁:直径:8 ...

  4. 树莓派基础实验31:MPU6050陀螺仪加速度传感器实验

    一.介绍    MPU6050是世界上第一款也是唯一一款专为智能手机.平板电脑和可穿戴传感器的低功耗.低成本和高性能要求而设计的6轴运动跟踪设备.    它集成了3轴MEMS陀螺仪,3轴MEMS加速度 ...

  5. 树莓派基础实验20:火焰报警传感器实验

    一.介绍    火焰传感器模块通过捕获来自火焰的红外波长来执行检测.它可以用来探测火焰是否存在,在这个实验中,我们使用火焰传感器来检测火焰并发出报警信号. 二.组件 ★Raspberry Pi主板*1 ...

  6. 树莓派基础实验18:声音传感器实验

    一.介绍    声音传感器是一种接受声波并将其转换为电信号的组件,它像麦克风一样检测周围环境中的声音强度. 二.组件 ★Raspberry Pi主板*1 ★树莓派电源*1 ★40P软排线*1 ★PCF ...

  7. 树莓派基础实验34:L298N模块驱动直流电机实验

    一.介绍   直流电机是一种将直流电能转换为机械能的电动机,因其良好的调速性能而在电力拖动中得到广泛应用,用于驱动各种设备,如电风扇.遥控小车.电动车窗等,也非常适合作为机器人的行走机构.   L29 ...

  8. 树莓派基础实验29:I2C LCD1602实验

    一.介绍    众所周知,虽然液晶显示器和其他显示器大大的丰富了人机交互,但他们有一个共同的弱点.当它们连接到控制器时,需要占用大量的IO口,但是一般的控制器没有那么多的外部端口,也限制了控制器的其他 ...

  9. 树莓派4bpython串口通信解读数据_树莓派基础实验36:通用串口通信实验

    一.介绍 对于树莓派 3B+来说,他的UART功能有三种: 1.内部蓝牙使用: 2.控制终端使用: 3.与其他设备进行串口通信. 在树莓派基础实验35:USB TO TTL模块实验中学习了通过串口对树 ...

最新文章

  1. hdu2639,第K优决策
  2. python计数属性类
  3. 转载.Android HAL实现的三种方式(1) - 基于JNI的简单HAL设计
  4. 前端学习(3056):vue+element今日头条管理-反馈
  5. java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法
  6. NameNode之DataNode管理
  7. linux关机_LINUX快速入门第二章:Linux 系统启动过程
  8. ptime在SIP中的应用
  9. iis6.0渗透实战笔记
  10. ajaxSubmit问题求解
  11. xp怎么设置计算机共享的打印机共享的打印机共享,XP设置打印机局域网共享的解决方法步骤...
  12. PHP将图片剪切成圆形
  13. excel 合并单元格筛选
  14. origin登录显示无网络连接到服务器,origin显示“您初次登录时必须保持联网。请检查您的网络连接后再试一次”,怎么处理...
  15. java ip 国家_java通过ip获取用户所在国家 | 学步园
  16. c++中内存拷贝函数(C++ memcpy)详解
  17. 【阿里开发手册】所有的类都必须添加创建者和创建日期——在Idea中创建类时自动添加作者信息
  18. bat文件调用CMD命令快速显示ip
  19. AMBA CHI协议学习笔记2-Link层
  20. Exchange 2003升级到Exchange 2010 之启用Outlook Anywhere!

热门文章

  1. 电磁场与仿真软件(7)
  2. IT规划及管理讨论,请各位凭借自己的理解踊跃发言(可选择回答^^)
  3. 家长会计算机教师致辞,学科教师在家长会上的讲话稿(精选5篇)
  4. Java-常用实用类
  5. ocelot和nginx比较_Ocelot一个优秀的.NET API网关框架
  6. 基于声网 SDK 实现 iOS 端的一对一视频通话
  7. Win11任务栏里华为电脑管家图标重叠怎么办?
  8. maven设置打包文件的名称
  9. uniapp 重力感应关闭
  10. ​Java的jstack命令使用详解​