Hola amigos, este es video colaborativo entre varios canales de youtube de electrónica, la temática propuesta es el desarrollo de herramientas de laboratorio e instrumentos de medición, particularmente he creado un dispositivo que permite medir la corriente y potencia consumida por cualquier artefacto eléctrico que tengamos en nuestra hogar, oficina e industria.
Lo interesante de este dispositivo es que la medición de la corriente la podemos hacer sin tener que abrir el circuito, porque el sensor sct013-30 es muy similar a una pinza ampirométrica.
Hay que tener en cuenta que sólo se debe pasar uno de los cables para hacer la medición, porque si pasamos los dos conductores obtendremos una lectura errónea.
Circuito
El circuito es muy simple de montar, debemos montar el escudo ethernet arriba de un arduino uno, también podemos usar un arduino mega pero hay que hacer una leve modificación al código, por favor observar los comentarios en el código fuente, para ver que lineas se deben comentar y des comentar.
Vamos ha usar el display sh1106 para visualizar en todo momento la corriente consumida y la potencia. El LM358 es un amplificador operacional, cuya función es la rectificación de la onda alterna que genera el sensor sct-013-30, esta onda no es apta para el pin analógico A0 del arduino, porque este pin soporta tensiones que van desde 0 a 5 voltios y la tensión que puede entregar el sensor de corriente va de +/- 1 voltio.
El semi ciclo negativo puede dañar nuestro arduino, por lo que debemos eliminarlo, esto lo podríamos conseguir con diodos rectificadores pero los diodos de silicio provocan una caída de tensión de 0.7 voltios y los de germanio de 0.6 voltios, esto es demasiado para la señal que nos entrega el sensor de corriente sct0-013-30, así que vamos a usar un amplificador operacional el LM358 en su configuración como seguidor de tensión.
Cuya cofiguración es la siguiente
Y diagrama eléctrico es muy simple
Colocaremos una de las puntas del osciloscopio en el pin 3 del LM358 y veremos una onda alterna que entrega el sensor de corriente, la otra punta va ir al pin 1 y 2 del amplificador operacional, ya podemos apreciar que se ha rectificado y sólo pasa el semi ciclo positivo, pero hay una parte de la onda que se pierde, esto no es problema porque el arduino mediante un calculo(teniendo en cuenta que la onda es simétrica) compensará esta falta de información, para lograr obtener los valores correctos de la corriente consumida por el artefacto a medir.
Como podemos observar en el circuito, el mismo arduino provee de alimentación de 5 voltios al amplificador operacional y al display oled.
Código fuente
El código está comentado en la mayoría de sus lineas, por favor leer detenidamente, para una fácil comprensión del mismo.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
#include "U8glib.h"//libreriapara el control del display #include "ThingSpeak.h"//Librería para subir datos a thingspeak #define USE_ETHERNET_SHIELD//Definimos el uso de un escudo ethernet #include <SPI.h> #include <Ethernet.h>//Libreía para el control del escucudo ethernet byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};//dirección mac que vamos a usar con nuesctro escudo eth EthernetClient client; // Inicializa la biblioteca del servidor Ethernet // (el puerto 80 es el predeterminado para HTTP): EthernetServer server(80); U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI // Se habilita esta linea según el display a a usar en este caso el driver SH1106 float intencidad;//=corriente(); //Corriente eficaz (A) float sensor; float potencia; unsigned long myChannelNumber = 1111111;//id del canal thingspeak const char * myWriteAPIKey = "xxxxxxxxxxx";//key de escritura unsigned long interval=15000; // Definimos el el tiempo que debemos esperar antes de subir un nuevo dato unsigned long previousMillis=0; long retardo2=millis(); //EthernetClient client; void setup() { Serial.begin(9600);//velocidad de seteo del puerto serial analogReference(INTERNAL);//Configura la tensión de referencia utilizada para la entrada analógica 1.1 voltios //analogReference(INTERNAL1V1); //si usamos Arduino Mega Ethernet.begin(mac);//seta la dirección mac ThingSpeak.begin(client); Serial.println(Ethernet.localIP());//imprime la dirección ip obtenida por la placa eth } void loop() { float ondac=0; long retardo=millis(); int s=0; while(millis()-retardo<1000)//Duración de un segundo { //-------Ecuaciones para el calculo de la intencidad y potencia sensor = analogRead(A0) * (1.115 / 1023.0);////voltaje del sensor(se puede cambiar el valor para lograr mayor presisción) intencidad=sensor*30.0; //corriente=sensor*(30A/1V) ondac=ondac+sq(intencidad);//Sumatoria de Cuadrados/ sq-->cuadrado de un número s=s+1; delay(1); } ondac=ondac*2;//Para compensar los cuadrados de los semiciclos negativos. intencidad=sqrt((ondac)/s); //ecuación del RMS sqrt-->raiz cuadrada potencia=intencidad*220.0; // P=IV (Watts) cualculo de la potencia Serial.print("Corriente: "); Serial.print(intencidad,4); Serial.print(" Amperes, Potencia: "); Serial.print(potencia,4); Serial.println(" Watts"); //--------Sube los datos thinspeak.com------------- unsigned long currentMillis = millis(); // grab current time //Compruebe si ha transcurrido el intervalo de 15 segundos if ((unsigned long)(currentMillis - previousMillis) >= interval) { //Sube al canal de thinspeak el valor de la potencia ThingSpeak.writeField(myChannelNumber, 1, potencia, myWriteAPIKey); previousMillis = millis(); } //----Crea un servidor web donde se muestra el valor de la intencidad y potencia cada 3 segundos--------- EthernetClient client = server.available(); if (client) { Serial.println("new client"); boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // La conexión se cerrará una vez completada la respuesta client.println("Refresh: 3"); // Actualizar la página automáticamente cada 3 segundos client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.print("Corriente: "); client.print(intencidad, 4); client.println(" Potencia: "); client.print(potencia, 4); client.println("<br />"); client.println("</html>"); break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } delay(1); client.stop(); Serial.println("client disconnected"); } //--------Muestra en la pantalla los valores obtenidos de intencidad y potencia----------------- u8g.firstPage(); do { draw();//Llama a la función draw } while( u8g.nextPage() ); // Reconstruir la imagen después de un tiempo delay(50); } void draw(void) { //Los comandos gráficos para volver a dibujar la pantalla completa deben colocarse aquí u8g.setFont(u8g_font_unifont); u8g.setPrintPos(0, 20); u8g.print("Int:"); u8g.print(intencidad,4); u8g.print("A"); u8g.setPrintPos(0, 40); u8g.print("Pot:"); u8g.print(potencia,4); u8g.print("W"); } |
Recuerden que tienen que crear un canal en el cloud de www.thingspeak.com donde obtendrán datos del Id del canal y la Api de escritura con estos datos ya pueden ir al código fuente y cambiar esos datos.
Materiales
Arduino uno
Podemos usar el arduino uno o el arduino mega, pero observen el código fuente poque hay que hacer una leve modificación, al mismo según el arduino a usar. Nuestro arduino es el cerebro de todo el proyecto es quien se encargará de tomar lecturas del sensor y procesar estas señales para poder verlas en el display, el terminal serial, el control del escudo ethernet, y proveerá de la alimentación a todo el circuito.

Escudo ethernet
Nuestro escudo ethernet será necesario, para subir datos a thingspeak.com y también para mostrar datos en nuestra red local, sólo debemos abrir algún navegador web y escribir la ip que allá asignado nuestro router, eso lo podemos ver en el terminal serial. Una de las mejoras que se hará a futuro es agregar esta información en el display.
Sensor SCT013-30
Este sensor nos permite realizar medidas en un rango de hasta 30A. Este modelo tiene una resistencia de carga interna( a diferencia del sct-013-100 que debemos agregarle un resistor de 20 ohm), entregándonos una salida de voltaje de +/-1 voltio. La relación es de 30A–>+/-1V

Transformador de corriente de núcleo dividido
Especificaciones
Display Oled sh1106
Se trata de un módulo de pantalla OLED monocromática DE 128×64 puntos con interface I2C .Que presenta varias ventajas en comparación con pantallas LCD, y podemos destacar su alto brillo, un muy buen contraste, un ángulo de visión más amplio, y bajo consumo de energía. ES compatible con Arduino Rasberry Pi y micro controladores PIC entre otros. Trabaja con niveles lógicos de 3.3V a 5V tiene un angulo de visión mayor a los 160 grados. el Tamaño de la pantalla es de 1,3 pulgadas. Se alimenta con un voltaje de 3.3V a 5V Se lo puede usar en aplicaciones como relojes inteligentes, MP3, termómetros, instrumentos, y proyectos varios, etc.

Librería
Características
Interface: I2C(3.3V / 5V logic level)
Resolution: 128 x 64
Angle of view: >160 degree
Display color: Blue
Display size: 1.3 inch
Driver IC: SH1106
Power supply: DC 3.3V~5V
Operating temperature: -20~70’C
Application: smart watch, MP3, thermometer, instruments, DIY projects, etc.
Amplificador operacional LM358
Características:
-
- No. de amplificadores operacionales: 2
- No requiere fuente dual (Sin embargo con fuente sencilla no es posible que la salida obtenga voltajes negativos)
- Voltaje de alimentación: 3 V a 32 V fuente sencilla (±1.5 V a ±16 V fuente dual)
- Bajo consumo de potencia
- Ancho de banda típico: 0.7 MHz
- Compensado en frecuencia internamente
- Alta ganancia
- Compatible con todas las formas de lógica
- Encapsulado: DIP 8 pines

Hoja de datos
LM158-LM158A-LM258-LM258A-LM358-LM358A-LM2904-LM2904V_TI
LM258-LM358-LM358A-LM2904-LM2904A-LM2904V-NCV2904-NCV2904V_ON
PinOut Lm358

Ficha jack hembra
Debemos conectar el sensor al circuito, lo haremos a travéz de esta ficha jack hembra de 3/5
Cables dupont
Para la inter conexión de todo el circuito, se puede cambiar por cable telefónico que es más económico
Protoboard
Power Bank
Es opcional se puede alimentar directamente de una pc(el circuito está totalmente aislado) o fuente externa
Cable Usb
Este cable cumple dos funciones una es la programación del arduino y la otra la alimentación del mismo
Cable de red
Sólo si necesitamos que nuestro proyecto se conecte a Internet o red de area local
El circuito trabaja muy bien, quizá debamos hacer algunos ajustes mínimos en el código fuente, como se explica en el video más arriba. Recomiendo probar distintas marcar de amplificadores operacionales, no con todos tuve los mejores resultados, todas formas es un circuito integrado muy económico, si está dentro de las posibilidades, comprar más de uno de distintas marcas e ir probando.
Lista completa con todos los proyectos presentadas por otros youtubers
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagrama
SUSCRIBETE A NUESTROS BOLETINES, RECIBE EN TU CORREO LAS NOTICIAS MÁS DESTACADAS, SÓLO INGRESANDO TU CORREO ELECTRÓNICO
[wysija_form id=”1″]










Hola, soy nuevo intentando aprender, a este código que tengo que agregar para usar conexión WiFi con ESP8266.
Saludos y gracias
@jeims-diaz Hola en realidad habría que agragarle varias cosas, en un momento quice hacer este proyecto con el esp8266, pero el ADC no era muy bueno que digamos así que decidí hacerlo con arduino y una placa ethernet ya veré si más adelante lo hago con arduino y el esp8266, saludos
hola disculpa como quedaria el codigo si solo requiero medir con arduino la corriente, sin el servidor web y sin el display
@marcela-velastegui Hola más o menos debería quedar así
float intencidad;//=corriente(); //Corriente eficaz (A)
float sensor;
float potencia;
void setup() {
Serial.begin(9600);//velocidad de seteo del puerto serial
analogReference(INTERNAL);//Configura la tensión de referencia utilizada para la entrada analógica 1.1 voltios
//analogReference(INTERNAL1V1); //si usamos Arduino Mega
}
void loop() {
float ondac=0;
int s=0;
//——-Ecuaciones para el calculo de la intencidad y potencia
sensor = analogRead(A0) * (1.115 / 1023.0);////voltaje del sensor(se puede cambiar el valor para lograr mayor presisción)
intencidad=sensor*30.0; //corriente=sensor*(30A/1V)
ondac=ondac+sq(intencidad);//Sumatoria de Cuadrados/ sq–>cuadrado de un número
s=s+1;
ondac=ondac*2;//Para compensar los cuadrados de los semiciclos negativos.
intencidad=sqrt((ondac)/s); //ecuación del RMS sqrt–>raiz cuadrada
potencia=intencidad*220.0; // P=IV (Watts) cualculo de la potencia
Serial.print(“Corriente: “);
Serial.print(intencidad,4);
Serial.print(” Amperes, Potencia: “);
Serial.print(potencia,4);
Serial.println(” Watts”);
delay(1000);
}
Aunque pueden haber errores no he comprobado este código, saludos
Hola muy buen trabajo y tambien me gustaria saber como seria el codigo sin el servidor web y sin el display , saludos :)
excelente aporte. pregunta. este mismo circuito del lm358 se puede hacer para un sensor de 100A. solo habría que cambiar la programación en la parte de ajuste?
Hola
estoy usando el sensor de 100 A/1V (SCT013-000)
me podrias explicar como se calculan los valores de estas lineas, por favor?
sensor = analogRead(A0) * (1.115 / 1023.0);////voltaje del sensor(se puede cambiar el valor para lograr mayor presisción)
intencidad=sensor*30.0; //corriente=sensor*(30A/1V)