采用arduino plus速度控制的数字转速表。

转速表是一种用于在给定的时间间隔内测量对象的转数的设备。通常它以每分钟或rpm的转数表示。早期的转速仪纯机械通过机械联轴器(电缆或轴)将旋转转移到转速表的情况下,使用齿轮机构确定RPM,并在拨号上显示。随着现代电子产品的出现,转速计变化了很多。本文是关于使用Arduino的非接触式数字转速表。也可以使用相同的电路控制电动机的速度。RPM和所有其他信息都显示在16×2 LCD屏幕上。使用Arduino的数字转速表的电路图如下所示。

电路图。

阿杜伊诺转速表
RPM传感器。

红外光电晶体管和红外LED构成传感器。红外光电晶体管是一种只对红外波有响应的光电晶体管。红外光电晶体管的使用避免了来自环境的其他光干扰。光电晶体管和红外二极管并排排列。电阻器R2限制通过红外二极管的电流。反射带粘在旋转物体(轴、盘或风扇)上,与传感器对齐。我用了一个9V/100mA的冷却风扇。传感器和反光条之间的间隙必须小于1cm。当反射带经过传感器前面时,红外波被反射回光电晶体管。此时,光电晶体管的导电率更高,因此R3(68K电阻器)两端的电压在此时迅速升高。结果将是如下所示的光电晶体管发射极波形。RPM可以通过计算给定时间间隔内向上发射的次数来确定。

转速表电路计算转速。

Arduino用于计算转速并将其显示在LCD屏幕上。光电晶体管的发射极连接到arduino的中断0(数字引脚2)。arduino中断配置为上升沿触发。因此,发射器波形中的每个向上发射都会中断。给定时间内发生的中断次数通过使用中断服务例程增加变量来计算。使用millis()函数确定te计数周期内经过的时间。函数的作用是:返回arduino板打开后经过的毫秒数。在计数周期之前和之后调用millis()函数,并取其差值,即可得出计数周期中经过的时间。(中断次数/时间(毫秒)*60000将给出每分钟的转数(RPM)。

控制电机的速度。

使用电位计控制电动机速度的规定也包括在电路中。晶体管Q1用于驱动电动机。其基座通过电流限制电阻器R1连接到Arduino的PWM引脚9。速度控制壶R4的刮水器连接到Arduino的Anlog销A0。使用anlogread函数将该引脚处的电压转换为0和1023之间的值。然后,该值除以四个以将其拟合到0到25​​5范围内。然后使用anlogwrite函数将此值写入PWM引脚9。结果将是引脚9的方波,其占空比与使用模拟函数写入的值成比例。例如,如果值为255,占空比将是100%,如果该值为127,占空比将为50%。D1是自由轮二极管,C1是噪声旁路电容器(DE耦合器)。 The rpm and duty cycle are displayed on the LCD screen using the standard LiquidCrystal library. Read this article:将LCD连接到Arduino. 使用arduino的数字转速表的完整程序如下所示。

程序。

#include 液晶LCD(12,11,6,5,4,3);int pwm = 9;int pot = a0;浮标值= 0;百分比;float rev = 0;int rpm;int oldtime = 0;算法;void ISR()//中断服务例程{Rev ++; } void setup() { lcd.begin(16,2); //initialize LCD attachInterrupt(0,isr,RISING); //attaching the interrupt } void loop() { delay(1000); detachInterrupt(0); //detaches the interrupt time=millis()-oldtime; //finds the time rpm=(rev/time)*60000; //calculates rpm oldtime=millis(); //saves the current time rev=0; value=analogRead(pot); //reads the speed control POT value=value/4; analogWrite(pwm,value); //sets the desired speed percent=(value/255)*100; //finds the duty cycle % lcd.clear(); lcd.setCursor(0,0); lcd.print("___TACHOMETER___"); lcd.setCursor(0,1); lcd.print(rpm); lcd.print(" RPM"); lcd.print(" "); lcd.print(percent); lcd.print("%"); attachInterrupt(0,isr,RISING); }

笔记。

  • arduino板可通过外部电源插座使用9V电源供电。
  • 电路的某些部分的5V可以从Arduino板上的5V源点击。
  • 我使用的风扇额定电压为9V/100mA。晶体管2N2222只能处理高达800mA的电流。选择负载时请记住这一点。
  • 使用的LCD模块为JHD162A。
  • POT R5可用于调整LCD显示器的对比度。首先连接时,LCD可能不会显示任何内容。调整R5,直到得到显示。R5雨刮器处的最佳电压在0.4至1V之间。
  • 红外光电晶体管和红外二极管均取自LTH-1550光电中断器模块。
  • 光晶体管的侧表面必须使用带掩模。
  • 传感器装置如下图所示。

Arduino转速表传感器

作者

10.评论

  1. 哈里

    左或右这太棒了

  2. Karan Patel.

    这对联合国来说是一个非常重要的知识

  3. chrsman63

    你的项目是惊人的,它的工作很好。

    现在,我想删除电位计,我想添加一个“坡道”选项。
    我将值“value=analogRead(pot);//读取速度控制pot”替换为“value=50”延迟(3000);代码还可以。
    现在我可以添加另一个值(例如=250)和另一个延迟时间(即6000),编译器传递代码,但rpm指示器不读取中断。

    你能帮助我吗?

  4. 纳伦德兰

    我做了连接,并有一个串行输出..但是有一些奇怪的值(负数阳性)..

  5. 肯·卡门

    嘿,谢谢,无论如何我都认为该代码欣赏了帮助!

  6. 肯·卡门

    I like this tachometer circuit but don’t need motor drive ,just the tachometer I know how to eliminate the hardware but not sure what to eliminate on the code ..don’t want percent displayed on lcd ,,can I just eliminate lcd.print(percent) at the end of code?

  7. amit.

    这个arduino是什么意思??
    哪个微控制器,使用多少个引脚和多少k?

    • Shiharan Choudhury.

      Arduino有Atmel Atmega 8/16 / 32P-PU取决于所使用的模型。这些天Arduino板配有Atmega 328P-PU

  8. 桑杰·库马尔

    这件事真的很努力吗?
    有没有人试试这个?
    整个电路的成本是多少?

    • 掠夺

      当然它是Work.i在测试后发布此电路。实际上,这里的所有8051 / Arduino项目都经过测试

Baidu