Arduino UNO 霍尔传感器测转速小实验

前两年买过一片Arduino UNO,以及一些便宜的传感器。当时是想用来打发一下业余时间的。没料想,几年过去了,也没发现有什么业余时间可以用来打发一下。
最近时间突然多了,又想起压箱底的这点宝物。以陪孩子玩为借口,也给自己找点乐子吧。

现实场景

自行车码表是怎么测速的?


自行车码表

码表感应部件的安装

从图中可以看到,普通的廉价码表是靠固定在车轮和前叉上的磁性感应头感应骑行时轮子单位时间内转动的圈数,根据在码表上已经设置好的轮子的尺寸,这样用单位时间内的转数乘以轮子周长就能算出自行车的行进速度。

背景知识

  1. 干簧管传感器
    干簧管为机械式的磁敏开关,无源器件。其工作原理是磁场磁化其簧片,使其开启与关断度达到开关的效果。但由于是接触式的开关,其工作寿命有限制,而且运输、安装过程中易损坏。
    磁簧开关的工作原理非常简单,两片端点处重叠的可磁化的簧片(通常由铁和镍这两种金属所组成的)密封于一玻璃管中,两簧片呈交迭状且间隔有一小段空隙(仅约几个微米),这两片簧片上的触点上镀有层很硬的金属,通常都是铑和钌,这层硬金属大大提升了切换次数及产品寿命。玻璃管中装填有高纯度的惰性气体(如氮气),部份干簧开关为了提升其高压性能,更会把内部做成真空状态。


    Form A ( ???) 磁簧开关的基本结构与组件

    Form C (单刀双掷 )三簧片磁簧开关结构

    簧片的作用相当与一个磁通导体。在尚未操作时,两片簧片并未接触;在通过永久磁铁或电磁线圈产生的磁场时,外加的磁场使两片簧片端点位置附近产生不同的极性, 当磁力超过簧片本身的弹力时,这两片簧片会吸合导通电路;当磁场减弱或消失后,干簧片由于本身的弹性而释放,触面就会分开从而打开电路。


    干簧管原理
  2. 霍尔传感器
    霍尔元件为电子式的磁敏器件,有源器件。其输出形式有开关型和线性。利用磁场和霍尔效应达到无接触式控制的目的。由于霍尔元件本身是一颗芯片,其工作寿命理论上无限制。
    百度 一下:
    霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面?;舳вκ茄芯堪氲继宀牧闲阅艿幕痉椒?。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子迁移率等重要参数。


    1-霍尔半导体元件 2-永久磁铁 3-挡隔磁力线的叶片

    哦听起来好深奥。
    总而言之霍尔传感器就是根据霍尔效应,人们用半导体材料制成的传感器元件。它具有对磁场敏感、结构简单、体积小、频率响应宽、输出电压变化大和使用寿命长等优点,因此,在测量、自动化、计算机和信息技术等领域得到广泛的应用。例如我手头的这个:


    学习套件中的霍尔传感器
  3. Arduino中断
    什么是中断
    CPU执行时原本是按程序指令一条一条向下顺序执行的。 但如果此时发生了某一事件B请求CPU迅速去处理(中断发生),CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务). 待CPU将事件B处理完毕后, 再回到原来被中断的地方继续执行程序(中断返回),这一过程称为中断 。
    arduino中断~详解arduino的所有中断类型(附图及代码)-少儿编程网

    中断
    打个比方:假如你正在读书,这时电话响了。你放下手中的书,去接电话。接完电话后,再继续回来读书,并从原来读的地方继续往下读。
    Arduino UNO中断
    内部中断
    内部中断主要为定时中断,定时中断是指主程序在运行一段程序过后自动进行的中断服务程序。
    外部中断
    一般由外设发出中断请求,如:键盘中断、打印机中断、外部中断需外部中断源发出中断请求才能发中断。
    函数列表
  • attachInterrupt()
  • detachInterrupt()
  • interrupts()
  • noInterrupts()
    attachInterrupt()函数说明
    void attachInterrupt (uint8_t interruptNum, void(*)(void)userFunc, int mode)
    设置中断
    指定中断函数. 外部中断有0和1两种, 一般对应2号和3号数字引脚.
    参数:
    interrupt 中断类型, 0或1
    fun 对应函数
    mode 触发方式. 有以下几种:
  • LOW 低电平触发中断
  • CHANGE 变化时触发中断
  • RISING 低电平变为高电平触发中断
  • FALLING 高电平变为低电平触发中断

注解:
在中断函数中 delay 函数不能使用, millis 始终返回进入中断前的值. 读串口数据的话, 可能会丢失. 中断函数中使用的变量需要定义为 volatile 类型.

实验材料和电路连线

实验中使用硬纸板制作一圆盘模拟车轮;圆盘边缘安装一片小磁钢;使用霍尔传感器检测圆盘转动;用LCD1602液晶显示测出的速度;使用一个发光二极管在霍尔传感器检测到磁钢从侧面经过。
电路部分的连接如下图:


电路连接图

制作过程

  1. 用硬纸板剪一个圆盘,以及一个U字型的支架。
  2. 用一根圆的一次筷子作为轴,确保圆盘能够自由转动(必要时在筷子穿过位置套一段硬塑料管,起到加强纸板强度和减少摩擦力的作用。
  3. 在圆盘一头合适位置固定霍尔传感器,在圆盘边缘固定一片小磁钢,使圆盘转动时探头尽量接近磁钢,但又不影响圆盘转动为宜。
  4. 按连接图进行连线。
    所有硬件制作并连接完成的样子就是这样了:


    IMG_20200517_153247.jpg
IMG_20200517_153219.jpg
IMG_20200517_153209.jpg

程序代码

接下来在Arduino IDE里写好程序,上传。为确保圆盘每转动一圈都正常计数,使用了Arduino的0号中断。中断处理函数中只对计数变量进行自增。
loop()函数中每秒进行一次计算和显示,将此次取得的圈数减去上次取得的圈数,得到最近一秒内所转的圈数,乘以周长,计算出速度。
程序:

#include <LiquidCrystal.h>
#define ledPin 13       //LED灯接口  
#define hallPin 10         //霍尔传感器接口
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);//LCD显示??樯柚媒涌?int c1=0;
int c2=0;
int c=0;
long unsigned int t1=0;
long unsigned int t2=0;
float t=0.0;
float r=3.14*150*2/1000; //圆盘半径150mm
float v=0.0;

void setup() { 
  lcd.begin(16,2);
  lcd.clear(); //清屏
  delay(1000); //延时1000ms
  Serial.begin(9600);
  pinMode(ledPin,OUTPUT); //设定LED接口为输出状态
  attachInterrupt(0, count, FALLING);
}

void loop() 
{ 
  c=c1-c2;
  c2=c1;
  v=c; 
  Serial.println("当前速度:"+String(v)+"圈/秒,即:"+String(v*r*3600.0)+"米/小时");
  digitalWrite(ledPin,LOW);
  
  lcd.setCursor(0, 0) ;   //设置光标位置为第1行第1个位置
  lcd.print("Speed:"+String(v*r*3600.0/1000)+"km/h"); //使屏幕显示文字
  lcd.setCursor(0, 1) ; //第2行第1个位置
  lcd.print("("+String(v)+"r/s)"); //使屏幕显示文字
  delay(1000);
}

void count() //中断处理
{
    digitalWrite(ledPin,HIGH);
    c1+=1;
}

运行

用手转动圆盘,每转一圈磁钢从霍尔传感器旁边经过一次,LED灯闪亮一次。每秒钟LCD显示刷新一次,显示最近1秒内测得的速度值。OK,大功告成!


image.png
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351