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):
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:
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:
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?
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.
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.
Feind der Staatsmaschine
otmezger
tman
otmezger
otmezger
tman
otmezger
tman
otmezger