Cómo amplificar la señal de un fototransistor TCRT5000

Estoy tratando de leer la señal IR de mi medidor de potencia Itron C1S . Dispone de un emisor que se enciende durante 10 ms cada Wh de consumo.

Esta pregunta se basa en mi pregunta anterior: use una fotorresistencia para leer un LED IR de un medidor de energía Itron . conecté el transistor

Lo conecté, pero nunca obtengo ninguna respuesta... parece que el fototransistor no es lo suficientemente preciso... ¿Hay alguna forma de amplificarlo?

aquí está mi conexión (tenga en cuenta que estoy usando el fototransistor TCRT5000 , no el de la imagen):

ingrese la descripción de la imagen aquí

mi código funciona bien y la conexión funciona si coloco un reflector encima del emisor (¡y si lo conecto!).

Aquí está mi código hasta ahora:

#include <SPI.h>
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <Temboo.h>
#include "TembooAccount.h" // Contains Temboo account information

byte ethernetMACAddress[] = ETHERNET_SHIELD_MAC;
EthernetClient client;


// Energy meter ini
int inputPulse= 8;
int StateOld = 0;

int PowerMeterSimPin = 4;
int PowerMeterSimCounter = 0;
int PowerMeterSimCounterOn = 0;
boolean PowerMeterOnStatus = false;


boolean myState = false;

unsigned long diffTime_ms, startTime, p_w;






void setup() {
  Serial.begin(9600);

  // For debugging, wait until the serial console is connected.
  //delay(4000);
  //while(!Serial);
  /*
  Serial.print("DHCP:");
  if (Ethernet.begin(ethernetMACAddress) == 0) {
    Serial.println("FAIL");
    while(true);
  }
  Serial.println("OK");
  */
  delay(5000);


  pinMode(inputPulse,INPUT);
  pinMode(PowerMeterSimPin,OUTPUT);
  digitalWrite(PowerMeterSimPin, LOW);


  Serial.println("Setup complete.\n");
}

void loop() {


  int state = digitalRead(inputPulse);
  unsigned long now = millis();

  // simulate the power meter: 
  // each 5 sec, consume 1 Wh. 

  /*PowerMeterSimCounter++;

  if (PowerMeterSimCounter >= 5*1000){
    PowerMeterSimCounterOn = 0;
    PowerMeterSimCounter = 0;
    PowerMeterOnStatus = true;
    digitalWrite(PowerMeterSimPin, HIGH);
    Serial.println("Meter is on");

  }


  if (PowerMeterOnStatus){
    PowerMeterSimCounterOn++;
    if(PowerMeterSimCounterOn >= 10){
      PowerMeterSimCounterOn = 0;
      digitalWrite(PowerMeterSimPin, LOW);
      Serial.println("Meter is off");
      PowerMeterOnStatus = false;
    }
  }
  */
  diffTime_ms = now - startTime;

  // detect rising edge of IR detector
  if ((state == true) && (StateOld == false))
  {
    // new start Time
    startTime = now;
    StateOld = true;

    // we know the energy is 1Wh = 3600 Ws
    // calculate the power as p = E/dt
    p_w = 3600UL*1000UL/diffTime_ms;

    Serial.print("Time[ms]; ");
    Serial.println(diffTime_ms);
    Serial.print("Power[W]: ");
    Serial.println(p_w);
    Serial.print("Energy[Wh]: ");
    Serial.println(1);
    if (myState){
      digitalWrite(PowerMeterSimPin, LOW);
      myState = false;
    }else{
      digitalWrite(PowerMeterSimPin, HIGH);
      myState = true;
    }

    /*


      TembooChoreo CreateObjectChoreo(client);

      // Invoke the Temboo client
      CreateObjectChoreo.begin();

      // Set Temboo account credentials
      CreateObjectChoreo.setAccountName(TEMBOO_ACCOUNT);
      CreateObjectChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME);
      CreateObjectChoreo.setAppKey(TEMBOO_APP_KEY);

      // Set profile to use for execution
      CreateObjectChoreo.setProfile("EnergyMeter");

      // Set Choreo inputs
      String ObjectContentsValue = "{\"value_Wh\":1}";
      CreateObjectChoreo.addInput("ObjectContents", ObjectContentsValue);

      // Identify the Choreo to run
      CreateObjectChoreo.setChoreo("/Library/Parse/Objects/CreateObject");

      // Run the Choreo; when results are available, print them to serial
      CreateObjectChoreo.run();

      while(CreateObjectChoreo.available()) {
        char c = CreateObjectChoreo.read();
        Serial.print(c);
      }
      CreateObjectChoreo.close();
    */
    // don't want to read short pulses as 3600*1000/100 = 36 kW


  }
  if ((diffTime_ms>100)&& (state == false))
    {
      StateOld = false;
    }
  delay(1);
}

(tenga en cuenta que las cosas de temboo están comentadas)

NOTA: De acuerdo con la Guía de referencia técnica de Itron, el medidor tiene un LED infrarrojo:Guía de referencia técnica de Itron: captura de pantalla

ACTUALIZACIÓN: Según lo recomendado por tman, realicé una lectura durante un período prolongado del valor analógico del medidor. Aquí están los resultados:ingrese la descripción de la imagen aquí

Como se puede ver, tenemos algún efecto del sol. Ignora eso. Como puede ver, la señal salta entre 1013 y 970 casi todo el tiempo (ruido) y algunas veces baja a alrededor de 870. No estoy seguro si es cuando el LED del medidor está encendido. Debería ser de 10 ms, y no estoy seguro de cuánto tiempo hay entre las mediciones (¿no debería ser alrededor de 2 ms?). Mido con la misma configuración y este código:

#include <SD.h>
const int chipSelect = 4;
void setup()
{
  Serial.begin(9600);
  pinMode(10, OUTPUT);
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    return;
  }
}

void loop()
{
  String dataString = "";
   int sensor = analogRead(A0);
    dataString += String(sensor);
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
  }  
  else {
    // do nothing
  } 
  delay(1);
}

¿Es correcto usar más de 1 fototransistor (conectado en paralelo) para amplificar la cantidad de luz recolectada?

¿El emisor Itron es IR o es luz visible?
Debería ser IR. ver mi edición, adjunto una imagen de la Guía de referencia técnica. Lamentablemente, no hay más información técnica sobre el LED en sí.
Simplemente eché un vistazo a su código, pero ¿qué le parece leer el valor analógico y ver qué rangos obtiene para un estado bajo y un estado alto para el LED?
buen punto... Lo intentaré.
@tman Actualicé la pregunta con los resultados de mis mediciones. lamentablemente, solo generó más preguntas... dígame, por favor, lo que piensa.
@otmezger, ¿dónde puedo leer sobre el Centron IR LED? Me gustaría comprobarlo para estar seguro. Mi siguiente pensamiento es un filtro para eliminar el ruido... ya que sabe que la señal que busca no debería ser tan mala y podría implementarse con software o hardware.
aquí está la guía técnica: scribd.com/doc/90311312/1482163-201106090057150 no hay mucha información sobre el IR allí, aunque
@otmezger ¿su receptor está expuesto a otra luz? ¿Sería posible hacer este experimento nuevamente con una pajilla pintada con aerosol o algo para eliminar todas las demás luces, excepto el medidor? Si no es así, tendrá que filtrar un poco... comparta los datos sin procesar y veré qué puedo hacer para un filtro de software.
Dios mío... Me di cuenta de que esto es totalmente inútil. El medidor está en un recipiente de vidrio y me acabo de dar cuenta de que la luz infrarroja no atraviesa el vidrio. por lo tanto, es inútil tratar de leer un LED IR que se encuentra dentro con cualquier cosa que se encuentre fuera del vidrio. :-(

Respuestas (1)

De hecho, he hecho esto antes y descubrí que un solo fototransistor no amplificado no es suficiente. Hice algunas mediciones de las corrientes de luz y oscuridad y obtuve el circuito que se muestra a continuación para producir una señal digital limpia y agradable (no usé un ADC). Tenga en cuenta que simplemente usé piezas que ya tenía a mano: el uso de transistores 2N2222 no es crítico.

esquemático

simular este circuito : esquema creado con CircuitLab

En mi caso particular, monté el fototransistor IR en la tapa de un bolígrafo barato y usé una ventosa para fijarlo temporalmente en la parte superior del medidor (por supuesto, debe tener cuidado de no dañar el medidor) . Uno puede simplemente acumular pulsos de Wh y calcular el uso de energía, por supuesto, pero también es posible medir el tiempo entre pulsos y determinar la demanda (en vatios).

Una vez que todo esté ensamblado, las matemáticas se pueden verificar usando una bombilla incandescente. Sucedió que tenía una bombilla de 100 W y, sin nadie más en casa, anoté la demanda con la bombilla apagada y luego nuevamente con ella encendida. En mi caso, había precisamente una diferencia de 100W, por lo que estaba claro que todo funcionaba como estaba diseñado.

Gracias. Lo primero que creo que tengo que hacer es oscurecer el medidor. Está colocado en el exterior con luz directa y esto hace demasiado ruido. Lo cubriré con una cubierta y luego probaré tu circuito. gracias.