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):
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:
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:
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?
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.
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.
Enemigo de la máquina estatal
otmezger
hombre
otmezger
otmezger
hombre
otmezger
hombre
otmezger