Vous êtes sur la page 1sur 3

INSTRUMENTO: OPTICAL TACHOMETER

O princpio bem simples: Um LED emite luz que polariza ou no um foto transistor. O modelo que dispomos o HOA1877-2 que contm ambos dispositivos em um s encapsulamento. Devemos inserir resistores de polarizao (externos) de modo a manter a polarizao em uma faixa segura conforme a figura:

Figura 1 - Circuito do sensor

Para dimensionar os resistores, devemos observar no datasheet a corrente mxima suportada pelo LED e pelo coletor do transistor ademais de verificar que a potncia dissipada nos dispositivos est tambm em uma zona segura. No nosso caso, temos os seguintes dados: Imx_led = 75mW/1.6V = 45 mA. Pmx_led = 75mW Imx_tra = 30mA Pmx_tra = 75mW

Escolhemos ento trabalhar em uma faixa segura: I_led = 10 mA. Imx_tra = 1 mA

Desse modo as resistncias teriam que ser (para alimentao de 0-5V): R_led = (5-1)/I_led = 400 Ohms. R_tra = 5/I_tra = 1000 Ohms.

H quedas maiores que as consideradas no LED (1V) e entre coletor e emissor do transistor (0V), mas o arredondamento torna o clculo mais conservador (e mais simples). cmodo manter a resistncia no coletor do transistor mais alta para que a corrente circulante seja menor, o arduino no necessita drenar corrente para medir a tenso em suas portas. Desse modo podemos usar resistores na casa de dezenas de Ohms ou at maiores. Por

comodidade (eram os resistores que eu tinha e atendiam minimamente nossos requisitos), usei no teste R_led = 560 Ohms e R_tra = 33 KOhms.

A programao do arduino proposta : /* * Optical Tachometer * * Uses an IR LED and IR phototransistor to implement an optical tachometer. * 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 */ volatile byte rpmcount; unsigned int rpm; unsigned long timeold; void rpm_fun() { //Each rotation, this interrupt function is run twice, so take that into consideration for //calculating RPM //Update count rpmcount++; } void setup() { //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); Serial.begin(9600); 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 = 1000/(millis() - timeold); rpm = rpmcount*60*rpm;

timeold = millis(); Serial.println(rpm); rpmcount = 0; //Restart the interrupt processing attachInterrupt(0, rpm_fun, FALLING); }

Ateno para tipo de variveis operando (unsigned, long, int) e para o fato de termos o clculo de RPM em duas etapas. Se fizssemos em uma daria erro, pois 60000*rpmcounter um nmero maior que o suportado pelo tipo int e isso ocasionaria um overflow.

CDIGO TESTADO CIRCUITO TESTADO

Vous aimerez peut-être aussi