domingo, 28 de fevereiro de 2016

Contator de rpm com arduino.

Fala povo que aqui acompanha o meu blog, no post anterior mostrei uma montagem que testa os sensores emissor e receptor de if numa programação simples. Agora vou mostrar como se faz um contator de rpm com arduino numa programação simples também.

Para isso monte sua pcb conforme está na figura:

Atente-se que nem sempre o display lcd vem na ordem exata de montagem. Se voce comprar o display lcd original pra arduino, ele vira nessa configuração, mas um "piratão" que foi o que eu usei, veio em outra configuração.

Aqui esta a configuração de um display original

Se voce ler nas entrelinhas que as posições sao invertidas, só brincar de batalha naval e "cruzar" as posições, caso contrario monte conforme esta desciminado na primeira imagem.

Bom, a parte de hardware montada e testado os sensores se acompanhou meu posta anterior, vamos ao que interessa :):):)

Este código eu removi de um site americano

-----
/*
 * Optical Tachometer
 *
 * Uses an IR LED and IR phototransistor to implement an optical tachometer.
 * The IR LED is connected to pin 13 and ran continually.
 * Pin 2 (interrupt 0) is connected across the IR detector.
 *
 * Code based on: www.instructables.com/id/Arduino-Based-Optical-Tachometer/
 * Coded by: arduinoprojects101.com
 */

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

// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void rpm_fun()
 {
   //Each rotation, this interrupt function is run twice, so take that into consideration for 
   //calculating RPM
   //Update count
      rpmcount++;
 }

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

   //Interrupt 0 is digital pin 2, so that is where the IR detector is connected
   //Triggers on FALLING (change from HIGH to LOW)
   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);
   //Don't process interrupts during calculations
   detachInterrupt(0);
   //Note that this would be 60*1000/(millis() - timeold)*rpmcount if the interrupt
   //happened once per revolution instead of twice. Other multiples could be used
   //for multi-bladed propellers or fans
   rpm = 30*1000/(millis() - timeold)*rpmcount;
   timeold = millis();
   rpmcount = 0;

   //Print out result to lcd
   lcd.clear();
   lcd.print("RPM=");
   lcd.print(rpm);

   //Restart the interrupt processing
   attachInterrupt(0, rpm_fun, FALLING);
  }
-------------

E pelo meu vídeo ele funciona super bem.

Para montagem os leds emissor e receptor, 1 resistor de 10k ohms, um potenciometro de 10 k linear, um display lcd, um arduino e bastante fios para os jumpers, além das protoboards e um motorzinho pra testar e claro.
Em breve postarei o vídeo, aguardem...

Como prometido, eis o vídeo:

Nenhum comentário: