《電子技術應用》
您所在的位置:首頁 > MEMS|傳感技術 > 其他 > 用IR傳感器和Arduino制作一個數字轉速計(附代碼)

用IR傳感器和Arduino制作一個數字轉速計(附代碼)

2022-08-31
來源:電子發(fā)燒友
關鍵詞: Arduino BOM表 傳感器

  本項目采用IR傳感器Arduino開發(fā)板制作了一個數字轉速計,以RPM為單位測量馬達的轉數。項目黑簡單,只需將IR傳感器和Arduino板子與16*2 LCD連接即可。

  BOM表及電路圖

  本轉速計可連續(xù)計數5秒。項目BOM表如下:

  Arduino UNO開發(fā)板 x1

  16*2 LCD模塊 x1

  IR傳感器模塊(含發(fā)射和接收) x1

  輕觸開關(Reset開關) x1

  面包板 x1

  連接線 x1

  BOM表中,IR傳感器擔當測速功能,該模塊組合了一對發(fā)射器和接收器,可測量任何旋轉物體。當我們按下開始健后,IR傳感器的發(fā)射器發(fā)射的IR光線被反射后被IR接收器接收,其輸出的脈沖信號被Arduino控制器檢測。

 pYYBAGMG1oyAdu7AAABGGirr35U299.png

  IR傳感器由一個IR LED和一個IR光電管組成,工作波長0.75-3μm。這里的IR光電管與用來測量IR輻射量的普通光電二極管不同,其作用是將IR光線反射回去,由IR接收器處理。IR接收器根據接收的IR光線的強度,根據特定算法得出被測物體的轉速。項目使用的IR傳感器特征如下:

  1. 工作電壓:3.0–5.0V

  2. 探測距離:2–30cm(可通過電位器調節(jié))

  3. 電流消耗:23mA(3.3V);43mA(5.0V)

  4. 動態(tài)輸出電平:檢測到物體時輸出“低”電平邏輯

  5. 板載障礙物LED指示器

  本項目的接線稍稍復雜,具體電路圖說明如下:

  LCD引腳 1, 3 ,5 ,16 ——— GND

  LCD引腳 2, 15————— VCC (+5V)

  LCD引腳 4 —————— – Arduino引腳 D7

  LCD引腳 6 —————— – Arduino引腳 D6

  LCD引腳 11 ——————- Arduino引腳 D5

  LCD引腳 12 ——————- Arduino引腳 D4

  LCD引腳 13 ——————- Arduino引腳 D3

  LCD引腳 14 ——————- Arduino引腳 D2

  IR傳感器模塊引腳 -GND —— GND

  IR傳感器模塊引腳 +VCC —— VCC

  IR傳感器模塊引腳 OUT — Arduino引腳D9

  輕觸開關端子 ————- Arduino引腳D12

  輕觸開關端子 ————-GND

  poYBAGMG1o2AUpdUAAKto3LeIP0595.png

  本轉速計以RPM為單位測量風扇馬達的轉速,計算公式為:RPM= 轉數 x 12 / 物體

  這里的“物體”數值為每個風扇包含的葉片數目。

  上傳Arduino代碼

  本項目的代碼較簡單。如果上述電路連接妥當,將這些代碼上傳到裝有Arduino IDE的電腦上,就可以開始測度了。

poYBAGMG1o2AF2LbAAP2FYHNWOQ838.png

  #include

  LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

  #define sensor 9

  #define start 12

  int delay1()

  {

  //unsigned int long k;

  int i,j;

  unsigned int count=0;

  for(i=0;i<1000;i++)

  {

  for(j=0;j<1000;j++)

  {

  if(digitalRead(sensor))

  {

  count++;

  while(digitalRead(sensor));

  }

  }

  }

  return count;

  }

  void setup()

  {

  pinMode(sensor, INPUT);

  pinMode(start, INPUT);

  pinMode(2, OUTPUT);

  lcd.begin(16, 2);

  lcd.print(“ Tachometer”);

  delay(2000);

  digitalWrite(start, HIGH);

  }

  void loop()

  {

  unsigned int time=0,RPM=0;

  lcd.clear();

  lcd.print(“ Please Press ”);

  lcd.setCursor(0,1);

  lcd.print(“Button to Start ”);

  while(digitalRead(start));

  lcd.clear();

  lcd.print(“Reading RPM……”);

  time=delay1();

  lcd.clear();

  lcd.print(“Please Wait……”);

  RPM=(time*12)/3;

  delay(2000);

  lcd.clear();

  lcd.print(“RPM=”);

  lcd.print(RPM);

  delay(5000);

  }

  如果上傳代碼后LCD不顯示計數數據,先檢查Arduino和LCD模組的連接是否可靠,也可聯系本文作者或硬之城技術人員。



更多信息可以來這里獲取==>>電子技術應用-AET<<  

mmexport1621241704608.jpg

本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。