So verstärken Sie das Signal eines TCRT5000-Fototransistors

Ich versuche, das IR-Signal von meinem Itron C1S- Leistungsmesser zu lesen. Es hat einen Emitter, der für 10 ms pro Wh Verbrauch aufleuchtet.

Diese Frage basiert auf meiner vorherigen Frage: Verwenden Sie einen Fotowiderstand, um eine IR-LED von einem Itron-Energiezähler zu lesen . Ich habe den Transistor angeschlossen

Ich habe es angeschlossen, aber ich bekomme nie eine Antwort ... es scheint, dass der Fototransistor nicht präzise genug ist ... Gibt es eine Möglichkeit, es zu verstärken?

Hier ist meine Verbindung (beachten Sie, dass ich den Fototransistor TCRT5000 verwende , nicht den auf dem Bild):

Geben Sie hier die Bildbeschreibung ein

Mein Code funktioniert gut und die Verbindung funktioniert, wenn ich einen Reflektor oben auf den Emitter stecke (und wenn ich ihn verbinde!).

Hier mein bisheriger Code:

#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);
}

(Beachten Sie, dass das Temboo-Zeug auskommentiert ist)

HINWEIS: Gemäß dem technischen Referenzhandbuch von Itron verfügt das Messgerät über eine Infrarot-LED:Itron Technisches Referenzhandbuch – Screenshot

UPDATE: Wie von tman empfohlen, habe ich über einen längeren Zeitraum eine Ablesung des Analogwerts des Zählers durchgeführt. Hier sind die Ergebnisse:Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, haben wir einen Einfluss der Sonne. Ignoriere das. Wie Sie sehen können, springt das Signal fast die ganze Zeit zwischen 1013 und 970 (Rauschen) und manchmal geht es auf etwa 870 zurück. Ich bin mir nicht sicher, ob dies der Fall ist, wenn die LED des Messgeräts leuchtet. Es sollten 10 ms sein, und ich bin mir nicht sicher, wie viel Zeit zwischen den Messungen liegt (sollten es nicht ungefähr 2 ms sein?). Ich messe mit dem gleichen Setup und diesem Code:

#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);
}

Ist es richtig, mehr als 1 Fototransistor (parallel geschaltet) zu verwenden, um die gesammelte Lichtmenge zu verstärken?

Ist der Itron-Emitter IR oder sichtbares Licht?
Es sollte IR sein. Siehe meine Bearbeitung, ich habe ein Bild des technischen Referenzhandbuchs angehängt. Leider gibt es keine weiteren technischen Informationen über die LED selbst.
Ich habe nur Ihren Code durchgesehen, aber wie wäre es, wenn Sie den Analogwert lesen und sehen, welche Bereiche Sie für einen niedrigen Zustand und einen hohen Zustand für die LED erhalten.
Guter Punkt ... Ich werde es versuchen.
@tman Ich habe die Frage mit meinen Messergebnissen aktualisiert. Leider hat es nur noch mehr Fragen aufgeworfen ... Sagen Sie mir bitte, was Sie denken.
@otmezger wo kann ich über die Centron IR LED lesen? Ich würde es gerne überprüfen, um sicherzugehen. Mein nächster Gedanke ist ein Filter zum Entfernen des Rauschens ... da Sie wissen, dass das Signal, nach dem Sie suchen, nicht allzu schlecht sein sollte und mit Software oder Hardware implementiert werden könnte.
Hier ist die technische Anleitung: scribd.com/doc/90311312/1482163-201106090057150 dort gibt es jedoch nicht viele Informationen über die IR
@otmezger ist Ihr Empfänger anderem Licht ausgesetzt? Wäre es möglich, dieses Experiment mit einem sprühlackierten Strohhalm oder etwas zu wiederholen, um alles andere Licht außer dem Messgerät zu entfernen? Wenn nicht, müssen Sie etwas filtern ... teilen Sie die Rohdaten und ich werde sehen, was ich für einen Softwarefilter tun kann.
Oh je ... Mir wurde klar, dass dies völlig hoffnungslos ist. Das Messgerät befindet sich in einem Glasbehälter, und ich habe gerade festgestellt, dass Infrarotlicht kein Glas durchdringt. Es ist also sinnlos zu versuchen, eine IR-LED im Inneren zu lesen, wenn etwas außerhalb des Glases sitzt. :-(

Antworten (1)

Ich habe das tatsächlich schon einmal gemacht und festgestellt, dass ein einzelner unverstärkter Fototransistor nicht ausreicht. Ich habe einige Licht- und Dunkelströme gemessen und bin auf die unten gezeigte Schaltung gekommen, um ein schönes, sauberes digitales Signal zu erzeugen (ich habe keinen ADC verwendet). Beachten Sie, dass ich zufällig Teile verwendet habe, die ich bereits zur Hand hatte - die Verwendung von 2N2222-Transistoren ist nicht kritisch.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

In meinem speziellen Fall habe ich den IR-Fototransistor in der Kappe eines billigen Kugelschreibers montiert und mit einem Saugnapf vorübergehend oben am Messgerät befestigt (Sie müssen natürlich darauf achten, das Messgerät nicht zu beschädigen). . Man kann natürlich einfach Wh-Pulse akkumulieren und den Energieverbrauch berechnen, aber es ist auch möglich, die Zeit zwischen den Pulsen zu messen und den Bedarf (in Watt) zu bestimmen.

Sobald das alles zusammengebaut ist, kann die Mathematik mit einer Glühbirne überprüft werden. Ich hatte zufällig eine 100-W-Birne und da niemand sonst zu Hause war, bemerkte ich die Nachfrage mit ausgeschalteter und dann wieder eingeschalteter Glühbirne. In meinem Fall gab es genau 100 W Unterschied, sodass klar war, dass alles wie vorgesehen funktionierte.

Danke. Zuerst denke ich, dass ich tun muss, um das Messgerät abzudunkeln. Es steht draußen bei direktem Licht und das macht zu viel Lärm. Ich werde eine Abdeckung darüber legen und dann Ihre Schaltung ausprobieren. Danke.