Primeste livrare gratuita la toate ordinele peste 20 de lire!

Arduino RPM Counter Folosind un senzor optic

Arduino RPM Counter Folosind un senzor optic

Construirea unui contor RPM (revoluții pe minut) este un proiect clasic și util Arduino. Acest ghid te plimba prin crearea unui tahometru optic folosind un LED IR, un fototransisor IR și un ecran LCD 16×2. Rezultatul este un contor RPM simplu, precis, potrivit pentru motoare, ventilatoare, sau elice.


Prezentare generală a proiectului

Acest contor RPM Arduino funcționează prin întreruperea unei raze infraroșu cu un obiect rotativ (cum ar fi o elice). Fiecare întrerupere este detectată de către Arduino, numărată și transformată într-o valoare RPM care este afișată pe un ecran LCD.

Caracteristici cheie:

  • Măsurarea RPM în timp real

  • Detectoare optică (fără contact)

  • Ieșire LCD pentru citire ușoară

  • Componente simple și ieftine


Lista pieselor

Veţi avea nevoie de următoarele componente:

  • 1 × tabla Arduino

  • 1 × 16×2 ecran LCD (HD44780 compatibil)

  • 1 × 10k

  • 1 × 10k

  • 1 × IR LED

  • 1 × fototransmițător IR

  • Fire de jumper


Instrucțiuni de cablare

Urmați cu atenție acești pași pentru a asambla circuitul. Fiecare subsecţiune explică exact unde ar trebui să meargă fiecare fir pentru a evita confuzia.

  1. Distribuția energiei

    • Conectează Arduino 5V pin la placa de pâine șină pozitivă.

    • Conectează Arduino PIN GND la placa de pâine șine terestre.

    • Asigurați-vă că toate componentele (LCD, potențiometru, LED IR și fototransistor) împart acest teren comun.

  2. Conexiuni LCD și potentiometru (16×2 Paralel LCD)

    • Pin LCD 1 (VSS) → Sol

    • Pin LCD 2 (VDD) → 5V

    • Pin LCD 3 (VO) → Pixul de mijloc al 10k potențiometru

      • Pioneze laterale cu potentiometru → 5V și Ground (utilizate pentru ajustarea contrastului LCD)

    • Pin LCD 4 (RS) → Arduino PIN digital 7

    • Pin LCD 5 (RW) → Ground (Set LCD de scris)

    • Pin LCD 6 (E) → Arduino PIN digital 8

    • Pin LCD 11 (D4) → Arduino PIN digital 9

    • Pin LCD 12 (D5) → Arduino PIN digital 10

    • Pin LCD 13 (D6) → Arduino PIN digital 11

    • Pin LCD 14 (D7) → Arduino PIN digital 12

    • LCD Lumina din spate

      • Pin 15 (A) → 5V printr-un rezistor

      • Pin 16 (K) → Sol

  3. LED IR (Transmitter)

    • Anodă (conducere mai lungă) → Arduino PIN digital 13

    • Catode (mai scurt plumb) → Sol

    • LED-ul IR rămâne pornit continuu pentru a emite o undă infraroșu spre fototransisor.

  4. Fototranzistor IR (Receiver)

    • Colecționar (cu plumb mai scurt) → Arduino PIN digital 2

    • Emițător (mai mult plumb) → Sol

    • Poziţionaţi fototranzistorul direct cu faţa spre LED-ul IR, astfel încât fasciculul să fie întrerupt de obiectul rotativ.

  5. Controale finale

    • Asigură toate conexiunile la sol sunt comune.

    • Verificaţi numerele pinilor înainte de alimentarea circuitului.

    • Reglați potențiometrul până când textul este vizibil în mod clar pe LCD.

Sfat: PIN-ul digital 2 este utilizat deoarece suportă intreruperi hardware, permițând Arduino să numere cu precizie întreruperile fasciculelor și să calculeze RPM în mod fiabil.


Codul Arduino

Încărcați următoarea schiță pe tabla Arduino:

/*
 * Optical Tachometer
 *
 * Uses an IR LED and IR phototransistor to implement an optical tachometer.
 * The IR LED is connected to pin 13 and runs continuously.
 * Digital pin 2 (interrupt 0) is connected to the IR detector.
 */

#include 

int ledPin = 13;                // IR LED connected to digital pin 13
volatile byte rpmcount;
unsigned int rpm;
unsigned long timeold;

// Initialize the LCD with the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void rpm_fun() {
  // This interrupt runs every time the IR beam is cut
  rpmcount++;
}

void setup() {
  lcd.begin(16, 2);             // Initialize the LCD

  // Attach interrupt to digital pin 2 (interrupt 0)
  attachInterrupt(0, rpm_fun, FALLING);

  // Turn on IR LED
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);

  rpmcount = 0;
  rpm = 0;
  timeold = 0;
}

void loop() {
  // Update RPM every second
  delay(1000);

  // Temporarily stop interrupts during calculation
  detachInterrupt(0);

  rpm = 30 * 1000 / (millis() - timeold) * rpmcount;
  timeold = millis();
  rpmcount = 0;

  // Display RPM on LCD
  lcd.clear();
  lcd.print("RPM=");
  lcd.print(rpm);

  // Re-enable interrupt
  attachInterrupt(0, rpm_fun, FALLING);
}

Înțelegerea calculului RPM

Acest proiect presupune două întreruperi per revoluție, cum ar fi atunci când se utilizează un motor cu o elice cu două lame.

De aceea, calculul RPM utilizează această formulă:

rpm = 30 * 1000 / (millis() - timeold) * rpmcount;

Ajustare pentru configurare

  • O întrerupere per revoluţie:
    Înlocuiește 30 cu 60

  • Alte lame sau marcaje:
    Divide 60 prin numărul de întreruperi per rotație completă și actualizarea formulei în consecință.

Această flexibilitate vă permite să adaptați proiectul la diferite motoare și obiecte rotative.


Note finale

  • Asigurați-vă că LED-ul IR și fototransistorul sunt aliniate corespunzător pentru citiri fiabile.

  • Utilizați banda reflectorizantă sau un disc slotted pentru întreruperea mai consecventă a fasciculului.

  • Acest proiect poate fi extins prin logarea datelor RPM sau adăugarea de rezultate seriale.


Eşti gata să construieşti?

Acest contor RPM Arduino este o fundație mare pentru proiecte de control motor, robotică, și diagnostice mecanice. Adună componentele, încarcă codul şi începe să măsori RPM cu încredere.

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.

Lasă un comentariu