Arduino RPM Counter Gamit ang Optical Sensor
Ang pagbuo ng RPM (revolutions per minute) counter ay isang klasikong at kapaki-pakinabang na proyekto sa Arduino. Gagabayan ka ng gabay na ito sa paggawa ng isang optical tachometer gamit ang IR LED, IR phototransistor, at 16×2 LCD display. Ang resulta ay isang simple at tumpak na RPM counter na angkop para sa mga motor, fan, o propeller.
Pangkalahatang-ideya ng Proyekto
Gumagana ang Arduino RPM counter na ito sa pamamagitan ng pagputol ng infrared beam ng isang umiikot na bagay (tulad ng propeller). Ang bawat pagputol ay nade-detect ng Arduino, binibilang, at kino-convert sa isang RPM value na ipinapakita sa LCD screen.
Mga Pangunahing Tampok:
-
Real-time na pagsukat ng RPM
-
Optical (non-contact) sensing
-
LCD output para sa madaling pagbasa
-
Simple at murang mga bahagi
Listahan ng mga Bahagi
Kakailanganin mo ang mga sumusunod na bahagi:
-
1 × Arduino board
-
1 × 16×2 LCD display (HD44780 compatible)
-
1 × 10kΩ potentiometer (LCD contrast control)
-
1 × 10kΩ resistor
-
1 × IR LED
-
1 × IR phototransistor
-
Jumper wires
Mga Tagubilin sa Pag-wire
Sundin ang mga hakbang na ito nang maingat upang buuin ang circuit. Ang bawat sub-seksyon ay nagpapaliwanag kung saan dapat mapunta ang bawat wire upang maiwasan ang kalituhan.
-
Pamamahagi ng Kuryente
-
Ikonekta ang Arduino 5V pin sa breadboard positive rail.
-
Ikonekta ang Arduino GND pin sa breadboard ground rail.
-
Siguraduhing ang lahat ng bahagi (LCD, potentiometer, IR LED, at phototransistor) ay may parehong common ground.
-
-
Mga Koneksyon ng LCD at Potentiometer (16×2 Parallel LCD)
-
LCD Pin 1 (VSS) → Ground
-
LCD Pin 2 (VDD) → 5V
-
LCD Pin 3 (VO) → Gitnang pin ng 10kΩ potentiometer
-
Mga gilid na pin ng Potentiometer → 5V at Ground (ginagamit upang ayusin ang LCD contrast)
-
-
LCD Pin 4 (RS) → Arduino digital pin 7
-
LCD Pin 5 (RW) → Ground (LCD naka-set sa write mode)
-
LCD Pin 6 (E) → Arduino digital pin 8
-
LCD Pin 11 (D4) → Arduino digital pin 9
-
LCD Pin 12 (D5) → Arduino digital pin 10
-
LCD Pin 13 (D6) → Arduino digital pin 11
-
LCD Pin 14 (D7) → Arduino digital pin 12
-
LCD Backlight
-
Pin 15 (A) → 5V sa pamamagitan ng resistor
-
Pin 16 (K) → Ground
-
-
-
IR LED (Transmitter)
-
Anode (mas mahabang lead) → Arduino digital pin 13
-
Cathode (mas maikling lead) → Ground
-
Ang IR LED ay patuloy na nakabukas upang maglabas ng infrared beam patungo sa phototransistor.
-
-
IR Phototransistor (Receiver)
-
Collector (mas maikling lead) → Arduino digital pin 2
-
Emitter (mas mahabang lead) → Ground
-
Ilagay ang phototransistor na direktang nakaharap sa IR LED upang ang beam ay maputol ng umiikot na bagay.
-
-
Mga Huling Pagsusuri
-
Siguraduhing ang lahat ng ground connections ay common.
-
Doble-tsikin ang mga pin number bago paganahin ang circuit.
-
Ayusin ang potentiometer hanggang sa malinaw na makita ang teksto sa LCD.
-
Tip: Ang Digital pin 2 ay ginagamit dahil sinusuportahan nito ang hardware interrupts, na nagpapahintulot sa Arduino na tumpak na bilangin ang mga pagputol ng beam at kalkulahin ang RPM nang maaasahan.
Arduino Code
I-upload ang sumusunod na sketch sa iyong Arduino board:
/*
* Optical Tachometer
*
* Gumagamit ng IR LED at IR phototransistor upang ipatupad ang isang optical tachometer.
* Ang IR LED ay konektado sa pin 13 at patuloy na tumatakbo.
* Ang Digital pin 2 (interrupt 0) ay konektado sa IR detector.
*/
#include
int ledPin = 13; // IR LED konektado sa digital pin 13
volatile byte rpmcount;
unsigned int rpm;
unsigned long timeold;
// I-initialize ang LCD gamit ang mga interface pin
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void rpm_fun() {
// Ang interrupt na ito ay tumatakbo sa bawat pagputol ng IR beam
rpmcount++;
}
void setup() {
lcd.begin(16, 2); // I-initialize ang LCD
// Ikabit ang interrupt sa digital pin 2 (interrupt 0)
attachInterrupt(0, rpm_fun, FALLING);
// Buksan ang IR LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
rpmcount = 0;
rpm = 0;
timeold = 0;
}
void loop() {
// I-update ang RPM bawat segundo
delay(1000);
// Pansamantalang ihinto ang mga interrupt habang nagkakalkula
detachInterrupt(0);
rpm = 30 * 1000 / (millis() - timeold) * rpmcount;
timeold = millis();
rpmcount = 0;
// Ipakita ang RPM sa LCD
lcd.clear();
lcd.print("RPM=");
lcd.print(rpm);
// Muling paganahin ang interrupt
attachInterrupt(0, rpm_fun, FALLING);
}
Pag-unawa sa Kalkulasyon ng RPM
Ipinapalagay ng proyektong ito ang dalawang pagputol bawat rebolusyon, tulad ng kapag gumagamit ng motor na may two-blade propeller.
Kaya naman ang pormula sa pagkalkula ng RPM ay:
rpm = 30 * 1000 / (millis() - timeold) * rpmcount;
Pag-aayos para sa Iyong Setup
-
Isang pagputol bawat rebolusyon:
Palitan ang30ng60 -
Mas maraming blades o marka:
Hatiin ang60sa bilang ng mga pagputol bawat buong rebolusyon at i-update ang pormula nang naaayon.
Ang kakayahang umangkop na ito ay nagpapahintulot sa iyo na i-angkop ang proyekto sa iba't ibang mga motor at umiikot na bagay.
Mga Huling Paalala
-
Siguraduhing maayos ang pagkakahanay ng IR LED at phototransistor para sa maaasahang mga sukat.
-
Gumamit ng reflective tape o slotted disk para sa mas pare-parehong pagputol ng beam.
-
Maaaring palawakin ang proyektong ito sa pamamagitan ng pag-log ng RPM data o pagdaragdag ng serial output.
Handa nang Buuin?
Ang Arduino RPM counter na ito ay isang mahusay na pundasyon para sa mga proyekto sa pagkontrol ng motor, robotics, at mechanical diagnostics. Buuin ang mga bahagi, i-upload ang code, at simulan ang pagsukat ng RPM nang may kumpiyansa.