{"id":3124,"date":"2015-10-08T00:05:28","date_gmt":"2015-10-07T22:05:28","guid":{"rendered":"http:\/\/www.diarioelectronicohoy.com\/blog\/?p=3124"},"modified":"2019-06-13T19:23:49","modified_gmt":"2019-06-13T17:23:49","slug":"voltimetro-digital-con-arduino","status":"publish","type":"post","link":"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino","title":{"rendered":"Volt\u00edmetro Digital con Arduino."},"content":{"rendered":"<h5 style=\"text-align: center;\">Volt\u00edmetro con LCD.<\/h5>\n<div align=\"right\"><strong style=\"color: #000080; margin-top: -4px;\">Creado por V. Garc\u00eda. En Sept. 2015.<\/strong><\/div>\n<h3>Introducci\u00f3n.<\/h3>\n<p style=\"text-align: justify;\">Una vez m\u00e1s asumimos que usted tiene un conocimiento b\u00e1sico adecuado de electr\u00f3nica, de los circuitos digitales y c\u00f3mo utilizar un Arduino. Ya que el aprendizaje de la electr\u00f3nica consiste en un proceso paso a paso, que comprende tanto el trabajo con los circuitos electr\u00f3nicos como la programaci\u00f3n. Vamos a necesitar los siguientes componentes:<\/p>\n<div align=\"center\">\n<table border=\"1\" width=\"48%\">\n<tbody>\n<tr>\n<td align=\"center\" width=\"30%\" height=\"1\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/res1m\" rel=\"attachment wp-att-3135\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3135\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/res1m-.gif\" alt=\"res1m-\" width=\"92\" height=\"41\" \/><\/a><\/td>\n<td colspan=\"2\" align=\"center\" width=\"30%\" height=\"1\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/res100k\" rel=\"attachment wp-att-3134\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3134\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/res100k-.gif\" alt=\"res100k-\" width=\"102\" height=\"45\" \/><\/a><\/td>\n<td align=\"center\" width=\"30%\" height=\"1\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/arduino-2\" rel=\"attachment wp-att-3137\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3137\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/arduino.jpg\" alt=\"arduino\" width=\"100\" height=\"75\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" align=\"center\" width=\"45%\" height=\"1\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/fuente-multiple\/lcd2004a\" rel=\"attachment wp-att-2867\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2867\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2013\/12\/lcd2004a.jpg\" alt=\"lcd2004a\" width=\"182\" height=\"142\" \/><\/a><\/td>\n<td align=\"center\" width=\"23%\" height=\"1\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/placa_perforada_tiras-2\" rel=\"attachment wp-att-3139\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3139\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/placa_perforada_tiras.jpg\" alt=\"placa_perforada_tiras\" width=\"182\" height=\"142\" \/><\/a><\/td>\n<td align=\"center\" width=\"22%\" height=\"1\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/tester-ice680r_\" rel=\"attachment wp-att-3132\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3132\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/tester-ice680r_-300x290.jpg\" alt=\"tester-ice680r_\" width=\"89\" height=\"86\" \/><\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center;\">Fig. 1<\/p>\n<\/div>\n<p style=\"text-align: justify;\">Una fuente de alimentaci\u00f3n que muestre la tensi\u00f3n y la corriente que consume un circuito bajo prueba es sin duda una fuente que nos proporciona unos datos a\u00f1adidos que hace m\u00e1s f\u00e1cil nuestro trabajo, lo cual no quiere decir que si no dispone de estos instrumentos no sea una fuente de calidad, en absoluto. Naturalmente que en el caso de disponer de estos elementos de medida, resulta m\u00e1s completa y compensa la diferencia de coste. As\u00ed que, este es el motivo de este art\u00edculo. Se trata de disponer de una pantalla de bajo costo que no muestre la tensi\u00f3n que esta entregando la fuente de alimentaci\u00f3n y adem\u00e1s si nos muestra la corriente que consume el circuito, mucho mejor y m\u00e1s completa.<\/p>\n<p style=\"text-align: justify;\">En otro art\u00edculo que realic\u00e9 dec\u00eda: \u00abActualmente, gracias a las nuevas tecnolog\u00edas, tomar una muestra de la tensi\u00f3n en un punto de un circuito, casi no influye en el funcionamiento de \u00e9ste, ya que la alta impedancia de los circuitos que utilizamos nos hacen f\u00e1cil este cometido.\u00bb<\/p>\n<p style=\"text-align: justify;\">Un volt\u00edmetro mide la tensi\u00f3n entre dos puntos de un circuito, y con la electr\u00f3nica digital actual, podemos realizar un verdadero volt\u00edmetro que podemos instalar en nuestra fuente de alimentaci\u00f3n. Los volt\u00edmetros digitales funcionan mediante la conversi\u00f3n del valor anal\u00f3gico le\u00eddo, a un valor digital mediante un convertidor anal\u00f3gico a digital (ADC). Nosotros vamos a utilizar un Arduino t\u00edpico tiene varios de estos convertidores en \u00e9l, con una precisi\u00f3n que ser\u00e1 suficiente para este cometido, en este tutorial veremos c\u00f3mo leer voltajes de entradas anal\u00f3gicas en Arduino y construir un volt\u00edmetro que mide voltajes (DC) en corriente continua.<\/p>\n<p style=\"text-align: justify;\">Por supuesto que lo que nos interesa es medir los par\u00e1metros que se generan en la fuente ajustable. Para ser sincero he dudado en qu\u00e9 tipo de pantalla utilizar, ya que una pantalla del tipo Nokia-5110, quedaba peque\u00f1a para aplicar en una fuente de alimentaci\u00f3n que generalmente est\u00e1 de forma est\u00e1tica en el laboratorio y por lo tanto quiz\u00e1s el tipo Nokia estar\u00eda mejor para un volt\u00edmetro port\u00e1til. Por eso vamos a utilizar una pantalla del tipo LCD de 2 l\u00edneas o en mi caso una de 4 l\u00edneas como es el LCD2004A que en la actualidad al igual que aquella es muy com\u00fan.<\/p>\n<h3>El esquema.<\/h3>\n<p style=\"text-align: justify;\">El esquema es muy sencillo, ya que se reduce a un divisor de tensi\u00f3n b\u00e1sico el cual constituir\u00e1 en si mismo la impedancia de entrada y cuya salida es la tensi\u00f3n que aplicaremos a un pin anal\u00f3gico. El esquema muestra el divisor ya que el resto no tiene relevancia.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/voltimetro\" rel=\"attachment wp-att-3129\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3129\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/voltimetro-300x194.gif\" alt=\"voltimetro\" width=\"300\" height=\"194\" \/><\/a>Fig.\u00a02<\/p>\n<p style=\"text-align: justify;\">Del esquema podemos extraer unos conceptos importantes para el caso:<\/p>\n<ul style=\"padding-left: 80px;\">\n<li>El divisor de tensi\u00f3n<\/li>\n<li>Impedancia de entrada<\/li>\n<li>Protecci\u00f3n de entrada<\/li>\n<\/ul>\n<h3>Circuito Divisor Tensi\u00f3n.<\/h3>\n<p style=\"text-align: justify;\">Las entradas anal\u00f3gicas de un Arduino pueden medir hasta 5V (cuando se utiliza la tensi\u00f3n de referencia anal\u00f3gica incorporada). Incluso cuando s\u00f3lo se conecta a un circuito de 5V, debe utilizar las resistencias para ayudar a proteger el Arduino de cortocircuitos o sobrecargas de tensi\u00f3n inesperadas.<\/p>\n<p style=\"text-align: justify;\">Se trata de un sencillo circuito divisor de tensi\u00f3n que consta de dos resistencias (R1 y R2) en serie que, se encargan de dividir el voltaje de entrada, para adaptarlo a la ventana de tensiones que pueden leer las entradas anal\u00f3gicas del Arduino (5V).<\/p>\n<p style=\"text-align: justify;\">El divisor entrega una tensi\u00f3n al pin anal\u00f3gico de Arduino que \u00e9ste convierte en un formato digital que puede ser procesada por el microcontrolador. En este caso, la tensi\u00f3n entrada despu\u00e9s de pasar por el divisor de tensi\u00f3n descrito (R1 y R2), se aplica al pin A0 (usted puede utilizar otro pin).<\/p>\n<p style=\"text-align: justify;\">El circuito con los valores mostrados para R1 de 1M\u03a9 en serie con R2 de 100K\u03a9 representa\u00a0una impedancia de entrada de 1M\u03a9 + 100k\u03a9 = 1&#8217;1M, que reduciendo es\u00a0= 11, factor de divisi\u00f3n que\u00a0es adecuado para la medici\u00f3n de voltajes de DC hasta aproximadamente 55V.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/voltimetro03\" rel=\"attachment wp-att-3130\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-3130\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/voltimetro03-300x234.gif\" alt=\"voltimetro03\" width=\"257\" height=\"181\" \/><\/a>Fig.\u00a03<\/p>\n<p style=\"text-align: justify;\">El circuito mostrado divide el voltaje de entrada conectado al pin an\u00e1logo Arduino, equivalente a la tensi\u00f3n de entrada dividido por 11, por lo tanto el m\u00e1ximo es de 55V \u00f7 11 = 5V, por seguridad daremos un margen y podemos decir que es un volt\u00edmetro para un margen de 0-30V DC.<\/p>\n<p><!--\n\n\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/voltimetro03\" rel=\"attachment wp-att-3130\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/voltimetro03-300x234.gif\" alt=\"voltimetro03\" width=\"257\" height=\"181\" class=\"aligncenter size-medium wp-image-3130\" \/><\/a>Fig.\u00a03\n\n\n<p style=\"text-align: justify;\">En la imagen anterior\u00a0los valores\u00a0del divisor de voltaje lo he modificado por\u00a0dos motivos, uno es por\u00a0mayor seguridad y otro porque\u00a0considero que una impedancia de 110K\u03a9 en nuestro caso, es adecuado, de modo que con el condensador cer\u00e1mico ser\u00e1 suficiente a nivel hardware, usted puede modificar estos valores, que refleja en\u00a0la parte del software, eso lo abordamos a continuaci\u00f3n.<\/p>\n\n\n--><\/p>\n<h3>Principios de funcionamiento.<\/h3>\n<h4>Impedancia de entrada.<\/h4>\n<p style=\"text-align: justify;\">Si un volt\u00edmetro tiene una baja impedancia de entrada baja, digamos 10k\u03a9 y se est\u00e1 midiendo un voltaje a extremos de una resistencia de 10k\u03a9, el mult\u00edmetro est\u00e1 cambiando efectivamente el valor de la resistencia a 5K\u03a9 ( ya que dos resistencias de 10k\u03a9 en paralelo = resistencia 5k\u03a9). Por consiguiente, el volt\u00edmetro ha cambiado los par\u00e1metros del circuito, y realmente, est\u00e1 leyendo una tensi\u00f3n err\u00f3nea.\u00a0Esas dos resistencias forman un divisor de potencial que se utiliza para bajar el voltaje que se mide a un nivel que Arduino pueda leer, adem\u00e1s de ser la impedancia de entrada.<\/p>\n<p style=\"text-align: justify;\">Un conjunto mult\u00edmetro digital para medir voltaje DC t\u00edpicamente tendr\u00e1 una impedancia de entrada de 10M\u03a9 o superior. Esto significa que la resistencia entre las dos sondas o terminales del mult\u00edmetro es de 10M\u03a9 o m\u00e1s.<\/p>\n<p style=\"text-align: justify;\">As\u00ed pues, es deseable una alta impedancia de entrada para un volt\u00edmetro (o mult\u00edmetro en la escala de voltaje). Cuanto mayor impedancia de entrada, menos probable es que el mult\u00edmetro influya o cambie lo que esta midiendo del circuito. Al medir (con un mult\u00edmetro que tiene una impedancia de entrada de 10 millones de ohmios) el voltaje a extremos de un componente en un circuito, es el mismo que la conexi\u00f3n de una resistencia de 10M\u03a9 en paralelo con el circuito;\u00a0no influye.<\/p>\n<p style=\"text-align: justify;\">As\u00ed que, queremos una alta impedancia de entrada en nuestro circuito divisor de tensi\u00f3n, y\u00a0que la impedancia de este \u00abvolt\u00edmetro\u00bb no vaya a influir en el circuito que se est\u00e9 bajo prueba.<\/p>\n<p style=\"text-align: justify;\">Sin embargo, como regla general, un dispositivo de alta impedancia de entrada ser\u00e1 generalmente propenso a recoger m\u00e1s ruido o interferencias (EMI) que un dispositivo de baja impedancia de entrada, por ese motivo se debe adaptar un filtro de paso alto.<\/p>\n<p style=\"text-align: left;\">La f\u00f3rmula para calcular los valores en un divisor de tensi\u00f3n\u00a0es:<\/p>\n<pre style=\"padding-left: 30px;\">Vout = (R2 \/ (R1 + R2)) * Vin<\/pre>\n<p style=\"text-align: justify;\">Por lo tanto, puesto\u00a0que Arduino admite un Vmax de 5V en sus entradas anal\u00f3gicas, si el divisor est\u00e1 funcionando correctamente, entonces el <em>Vout<\/em> ser\u00e1 de un m\u00e1ximo de 5V, y para poder calcular la tensi\u00f3n m\u00e1xima de entrada al circuito usaremos:<\/p>\n<pre style=\"padding-left: 30px;\">Vmax = 5,0 \/ (R2 \/ (R1 + R2))<\/pre>\n<p style=\"text-align: justify;\"><strong>Nota:<\/strong> Si utiliza resistencias de valores diferentes de los sugeridos aqu\u00ed, debe recordar de ajustar los valores de R1 y R2 en el boceto, las resistencias deben ser del 1% de precisi\u00f3n si es posible o mejor. Usted puede ver una variaci\u00f3n de esta expresi\u00f3n utilizada en la rutina de <em>setup()<\/em> del programa.<\/p>\n<h4>Volt\u00edmetro con Arduino<\/h4>\n<p><strong>Utilizando el monitor Serial para mostrar los valores.<\/strong><br \/>\n<!-- file=\"download.txt\" --><\/p>\n<pre lang=\"arduino\" file=\"download.txt\">\/\/\r\n\/\/ Voltimetro_dc.ino\r\n\/\/ hispavila.com\r\n\/\/ Construcci\u00f3n de un volt\u00edmetro DC con Arduino\r\n\/\/ 20.09.2015\r\n\/\/ Utiliza el monitor Serial para mostrar los valores.\r\n\/\/\r\n\r\nfloat v1 = 4.98; \/\/ valor real de la alimentacion de Arduino, Vcc\r\nfloat r1 = 1000000; \/\/ 1M\r\nfloat r2 = 100000; \/\/ 100K\r\n\r\nvoid setup() {\r\nSerial.begin(9600);\r\nSerial.println(\"--------------------\");\r\nSerial.println(\"DC VOLTMETER\");\r\nSerial.print(\"Maximum Voltage: \");\r\nSerial.print((int)(v1 \/ (r2 \/ (r1 + r2))));\r\nSerial.println(\"V\");\r\nSerial.println(\"--------------------\");\r\nSerial.println(\"\"); \r\ndelay(2000);\r\n}\r\n\r\nvoid loop() {\r\nfloat v = (analogRead(0) * v1) \/ 1024.0;\r\nfloat v2 = v \/ (r2 \/ (r1 + r2));\r\n\r\nSerial.print(\"V: \");\r\nSerial.println(v2);\r\ndelay(10);\r\n}<\/pre>\n<p style=\"text-align: justify;\">Con todos los c\u00e1lculos completados, suba el c\u00f3digo al Arduino y ya puede ver en el monitor el resultado. El valor <strong>v1<\/strong> ahora representa la tensi\u00f3n real medida por el circuito, que se env\u00eda a la pantalla. Deber\u00eda ver algo parecido a la imagen siguiente.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/monitor_voltimetro\" rel=\"attachment wp-att-3145\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-3145\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/monitor_voltimetro-300x250.gif\" alt=\"monitor_voltimetro\" width=\"300\" height=\"250\" \/><\/a>Fig.\u00a04<\/p>\n<p style=\"text-align: justify;\">Por supuesto que los valores de tensi\u00f3n que muestra, est\u00e1n cambiando de un modo que no se ajusta a lo que desear\u00edamos. Cuando esto ocurre es debido en principio a unos motivos que debemos tener en cuenta: uno es debido al ADC que tiene Arduino por lo que no podemos hacer demasiadas cosas (tambi\u00e9n existe el factor \u00b11 d\u00edgito), otro motivo son las interferencias, para eso podemos dotar de un condensador cer\u00e1mico de 10nf a 100nf, y otro motivo que si abordaremos m\u00e1s adelante, es dotar de un filtro de soft que tienda a reducir estos indeseados cambios.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/sec3b1al_continua\" rel=\"attachment wp-att-3142\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3142 alignnone\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/sec3b1al_continua.png\" alt=\"sec3b1al_continua\" width=\"150\" height=\"113\" \/><\/a> <a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/ruido\" rel=\"attachment wp-att-3143\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3143 alignnone\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/ruido.png\" alt=\"ruido\" width=\"150\" height=\"79\" \/><br \/>\n<\/a>Ideal \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Fig. 5\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Ruido<\/p>\n<p style=\"text-align: justify;\">Con el mencionado condensador reduciremos en parte los picos que se aprecian en la imagen anterior. De momento vamos a tener en cuenta los factores que debemos conocer y podemos abordar.<\/p>\n<h4>Precauciones.<\/h4>\n<p style=\"text-align: justify;\">Debemos tener en cuenta\u00a0como\u00a0alimentamos el Arduino, con bater\u00edas o por cable USB, es decir, si lo est\u00e1 por bater\u00edas u otra fuente aislada o por una\u00a0una fuente a\u00a0red, en cuyo caso, ambos deben compartir las tierras, lo que se llama masa com\u00fan (GND) o una conexi\u00f3n a 0V con el circuito bajo prueba. Si la conexi\u00f3n de GND del Arduino se conecta a cualquier otra parte del circuito bajo prueba excepto GND, entonces esto es lo mismo que hacer un cortocircuito de ese punto del circuito a GND.<\/p>\n<p style=\"text-align: justify;\">El GND del Arduino es como el cable negativo o com\u00fan (COM) de un mult\u00edmetro, algo que se debe considerar para ser conectado permanentemente al GND del circuito bajo prueba por seguridad, a menos que el Arduino o el circuito bajo prueba est\u00e9 completamente aislado y \u00abflotante\u00bb.<\/p>\n<h4>Protecci\u00f3n de entrada.<\/h4>\n<p style=\"text-align: justify;\">Los valores de resistencia en el diagrama del circuito anterior proporcionan cierta protecci\u00f3n contra sobretensi\u00f3n en la medici\u00f3n de voltajes bajos como 5V, 9V o 12V. As\u00ed que, si accidentalmente se mide una tensi\u00f3n de digamos 30V, no va a estallar el pin de entrada anal\u00f3gica de Arduino.<\/p>\n<p style=\"text-align: justify;\">Cualquier tensi\u00f3n superior a aproximadamente 55V puede da\u00f1ar el Arduino. El punto de la red de resistencias divisoras conectada a la patilla anal\u00f3gica del Arduino es equivalente a la tensi\u00f3n de entrada dividido por 11, por lo que 55V \u00f7 11 = 5V. En otras palabras, cuando se miden 55V, el pin anal\u00f3gico de Arduino estar\u00e1 en su m\u00e1ximo voltaje de 5V.<\/p>\n<p style=\"text-align: justify;\">Proporcionar esta protecci\u00f3n b\u00e1sica a\u00a0sobrecarga de tensi\u00f3n es a expensas de no usar el rango completo del ADC de 10-bit de entrada anal\u00f3gica si solamente se van a medir voltajes inferiores, pero todav\u00eda se pueden medir los cambios de alrededor de 0.054V.\u00a0Tener en cuenta que\u00a0en el circuito, no se muestra ninguna otra protecci\u00f3n para los picos de tensi\u00f3n, tensi\u00f3n inversa o voltajes superiores a 55V.<\/p>\n<p style=\"text-align: justify;\">Como se ha mencionado, vamos a procurar un modo de reducir el salto de los valores, por lo que vamos a introducir una suma de valores y sacaremos la media para utilizar este valor como valor de lectura. Este es el programa que usaremos.<\/p>\n<h4>Lector de tensi\u00f3n.<\/h4>\n<p><strong>Lector de tensi\u00f3n, volt\u00edmetro versi\u00f3n 2.<\/strong><br \/>\n<!-- file=\"download.txt\" --><\/p>\n<pre lang=\"arduino\" file=\"download.txt\">\/\/ n\u00famero de muestras anal\u00f3gicas a tomar para la lectura\r\n#define NUM_SAMPLES 20\r\n\r\nint sum = 0;                    \/\/ suma de muestras hechas\r\nunsigned char sample_count = 0; \/\/ numero de la muestra\r\nfloat voltage = 0.0;            \/\/ voltaje calculado\r\n\r\nvoid setup()\r\n{\r\n    Serial.begin(9600);\r\n}\r\n\r\nvoid loop()\r\n{\r\n    \/\/ tomar un n\u00famero de muestras anal\u00f3gicas y sumarlas\r\n    while (sample_count &lt; NUM_SAMPLES) {\r\n        sum += analogRead(A0);\r\n        sample_count++;\r\n        delay(10);\r\n    }\r\n    \/\/ calcular la tensi\u00f3n de utilizar 5,0 para una tensi\u00f3n 5.0V \r\n    \/\/ ADC de referencia\r\n    \/\/ 5.015V es la tensi\u00f3n de referencia calibrada\r\n\r\n    voltage = ((float)sum \/ (float)NUM_SAMPLES * 5.015) \/ 1024.0;\r\n    \/\/ Envia voltaje para su visualizaci\u00f3n en tensi\u00f3n Serial Monitor \r\n    \/\/ multiplicado por 11 cuando se utiliza divisor de tensi\u00f3n que \r\n    \/\/ divide por 11.\r\n    \/\/ 11.132 es el valor calibrado del divisi\u00f3n de tensi\u00f3n\r\n \r\n    Serial.print(voltage * 11.132);\r\n    Serial.println (\" V\");\r\n    sample_count = 0;\r\n    sum = 0;\r\n}<\/pre>\n<h4>C\u00f3mo funciona el C\u00f3digo.<\/h4>\n<p style=\"text-align: justify;\">Para medir la tensi\u00f3n en la rutina <em>loop()<\/em>, utilizamos la funci\u00f3n anal\u00f3gica <em>analogRead(0)<\/em>, para leer la entrada \u00a0anal\u00f3gica 0 en este caso. El valor que nos devuelve, es un entero dentro del rango de 0 a 1023, por dicho motivo lo debemos ajustar en la ventana de 0 a 5 que, es el margen de Arduino. Dicho valor le\u00eddo lo multiplicamos por el nivel real de alimentaci\u00f3n y lo dividimos por 1024.<\/p>\n<p style=\"text-align: justify;\">Para una mayor precisi\u00f3n, se\u00a0toman diez muestras anal\u00f3gicas usando el siguiente c\u00f3digo:<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #008000;\">while (sample_count &lt;NUM_SAMPLES) {<\/span><br \/>\n<span style=\"color: #008000;\"> suma + = analogRead (A0);<\/span><br \/>\n<span style=\"color: #008000;\"> sample_count ++; \u00a0\/\/ incrementa la cuenta<\/span><br \/>\n<span style=\"color: #008000;\">}<\/span><\/p>\n<p style=\"text-align: justify;\">El total de los 10 valores sumados, se almacenan en la variable <em>suma<\/em>. La variable de <em>sample_count<\/em> sigue la pista del n\u00famero de muestras. Ambas variables se restablecen despu\u00e9s de calcular y mostrar la tensi\u00f3n:<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #008000;\">sample_count = 0;<\/span><br \/>\n<span style=\"color: #008000;\">suma = 0; <\/span><\/p>\n<p style=\"text-align: justify;\">El n\u00famero de muestras tomadas puede ser cambiado en la parte superior del boceto, en: <strong>#define NUM_SAMPLES 10<\/strong>. Sin embargo, no haga este valor demasiado alto o la suma de dichas muestras ser\u00e1 demasiado grande para caber en la variable <em>suma<\/em>.<\/p>\n<p>La tensi\u00f3n la calculamos de la siguiente forma:<\/p>\n<p style=\"text-align: justify; padding-left: 30px;\"><span style=\"color: #008000;\">voltaje = ((float) suma \/ (float) NUM_SAMPLES * 5.01) \/ 1024,0; <\/span><\/p>\n<p style=\"text-align: justify;\">Un valor de calibrado se utiliza en lugar de 5,01 en el boceto de arriba (la calibraci\u00f3n se detalla\u00a0m\u00e1s adelante).<\/p>\n<p style=\"text-align: justify;\">La suma de las 10 muestras se divide por 10 (NUM_SAMPLES) para obtener el valor medio.<\/p>\n<p style=\"text-align: justify;\">Si 5.0 es la tensi\u00f3n de referencia de 5V ADC. El valor\u00a01024.0 es el valor m\u00e1ximo que el ADC puede tener m\u00e1s 1 (1023 + 1 o sea, 2 a la potencia de 10 m\u00e1s 1) tambi\u00e9n se puede utilizar aqu\u00ed 1023.0. Esto calcula la tensi\u00f3n dividida, por ejemplo el voltaje en el pin A3.<\/p>\n<p style=\"text-align: justify;\">El voltaje real se calcula multiplicando la tensi\u00f3n le\u00edda, por el factor de divisi\u00f3n de la red del divisor de tensi\u00f3n (parece lioso), mejor con esta expresi\u00f3n:<\/p>\n<pre style=\"text-align: justify; padding-left: 30px;\">Serial.print (tensi\u00f3n * 11,0);<\/pre>\n<p style=\"text-align: justify;\">La l\u00ednea de c\u00f3digo anterior calcula la tensi\u00f3n real y luego la env\u00eda al puerto serie para mostrar en la ventana del monitor de serie. El boceto utiliza un valor calibrado en lugar de 11,0 como se muestra arriba.<\/p>\n<p style=\"text-align: justify;\">Tengamos en cuenta que por diferentes razones, se produce un error de medici\u00f3n en este medio de 1,5%.<\/p>\n<h3>Calibraci\u00f3n del circuito y Arduino.<\/h3>\n<p style=\"text-align: justify;\">Podr\u00edamos obtener un voltaje m\u00e1s preciso mediante el uso de un voltaje de referencia de precisi\u00f3n para el ADC y adem\u00e1s el uso de resistencias del 1% de tolerancia o mejores. Lo ideal ser\u00eda un ADC mayor de 10Bits, si est\u00e1 interesado en el tema, puede <a href=\"http:\/\/fuenteabierta.teubi.co\/2013\/04\/el-convertidor-analogo-digital-en.html\" target=\"_blank\" rel=\"noopener noreferrer\">visitar este sitio<\/a>.<\/p>\n<p style=\"text-align: justify;\">Veamos como\u00a0calibrar la tensi\u00f3n <em>ADC de referencia<\/em>.\u00a0Tenemos que\u00a0medir los 5V del regulador del Arduino (que se encuentra en el pin 5V de Arduino). Este voltaje se utiliza para la tensi\u00f3n de referencia ADC de forma predeterminada en Arduino.\u00a0Cada Arduino tiene un regulador de tensi\u00f3n es probable que\u00a0sea ligeramente diferente para cada Arduino, debe ser calibrado de forma individual. Ahora pongamos el valor real medido 4.976V en el boceto de la siguiente manera.<\/p>\n<pre style=\"text-align: justify; padding-left: 30px;\">voltaje = ((float) suma \/ (float) NUM_SAMPLES * 4.976) \/ 1024,0;<\/pre>\n<p style=\"text-align: justify;\">En el ejemplo anterior, el voltaje medido en el pin de 5V Arduino era 4.976V.<\/p>\n<p style=\"text-align: justify;\">Otra forma de obtener una lectura m\u00e1s precisa es calibrar el circuito. La calibraci\u00f3n se puede realizar midiendo el valor real de la tensi\u00f3n de referencia y los valores reales de las resistencias del divisor de tensi\u00f3n. Estos valores pueden entonces ser utilizados en los c\u00e1lculos en el c\u00f3digo del boceto Arduino.<\/p>\n<p style=\"text-align: justify;\">Conecte una fuente de alimentaci\u00f3n estable, tal como una bater\u00eda de 9V a trav\u00e9s de la red de resistencias R1 y R2. Mida el voltaje a extremos\u00a0de las dos resistencias en conectadas a la bater\u00eda, es decir, medir el voltaje de la bater\u00eda. Ahora, mida el voltaje a extremos del resistor (R2) de 100k\u03a9 es decir, entre el pin A0 (en Arduino) y GND.<\/p>\n<p style=\"text-align: justify;\">El factor divisor de tensi\u00f3n se calcula dividiendo la tensi\u00f3n tomada a extremos de R1\u00f7R2\u00a0por la tensi\u00f3n en A0 o sea:<\/p>\n<pre style=\"text-align: justify; padding-left: 30px;\">factor de divisi\u00f3n = tensi\u00f3n de entrada \u00f7 tensi\u00f3n de salida<\/pre>\n<p style=\"text-align: justify;\">Por ejemplo, si la entrada de voltaje medido es 10.02V y la salida (voltaje en el pin A0) es 0.91V, entonces el factor de divisi\u00f3n es:<\/p>\n<pre style=\"padding-left: 30px;\">10.02 \u00f7 0.91 = 11,011<\/pre>\n<p style=\"text-align: justify;\">Ahora, usaremos este valor en el c\u00f3digo del boceto Arduino:<\/p>\n<pre style=\"text-align: justify; padding-left: 30px;\">Serial.print (tensi\u00f3n * 11.011);<\/pre>\n<p style=\"text-align: justify;\">Si se utiliza la calibraci\u00f3n, luego se pueden utilizar resistencias de tolerancia 5%, para el divisor de tensi\u00f3n.<\/p>\n<p style=\"text-align: justify;\">Si cuando comparamos las lecturas de la pantalla LCD con las del Volt\u00edmetro digital de laboratorio, \u00e9stas no coinciden, no nos inquietemos, tomemos el mult\u00edmetro digital de precisi\u00f3n y comprobemos la alimentaci\u00f3n de 5V entre los pines 5V y GND de la placa Arduino. Podr\u00eda ser que debido al USB, nos de menos (por ejemplo 4.98V), en ese caso, sustituyamos dicho valor del Vout = (valor * 5.0) \/ 1024.0 en el c\u00f3digo del boceto (es decir, sustituir el valor 5.0, al de la lectura Vcc real, en este caso 4.98V). Adem\u00e1s, tratemos siempre de usar resistencias de precisi\u00f3n del 1% de tolerancia para las resistencias R1 y R2.<\/p>\n<pre style=\"text-align: justify; padding-left: 30px;\">float v1 = 4.98; \u00a0\/\/ valor real de la alimentaci\u00f3n de Arduino, y no 5V<\/pre>\n<p style=\"text-align: justify;\">Como ya se ha dicho, los valores de las resistencias (R1 y R2) en el diagrama del circuito, proporcionan cierta protecci\u00f3n contra sobretensiones y puede medir voltajes bajos. Tenga en cuenta que cualquier tensi\u00f3n de entrada superior a aproximadamente 55V podr\u00eda fre\u00edr el Arduino. Sin incorporar otro tipo de protecci\u00f3n en este circuito contra picos de tensi\u00f3n, tensiones inversas o voltajes m\u00e1s altos.<\/p>\n<h3>Mejorar el volt\u00edmetro.<\/h3>\n<p style=\"text-align: justify;\">El volt\u00edmetro que se ha presentado aqu\u00ed es muy b\u00e1sico lo cual da un amplio margen para mejoras, como pueden ser: varias escalas para diferentes alcances, a\u00f1adir una pantalla LCD que nos informe de los distintos valores de la tensi\u00f3n que est\u00e1 entregando en un momento dado, otra posibilidad es realizar el mismo proyecto en una pastilla m\u00e1s peque\u00f1a en lugar de usar el t\u00edpico Arduino.<\/p>\n<p style=\"text-align: justify;\">Como se ha dicho son varias las posibilidades de mejora, de modo que aqu\u00ed s\u00f3lo veremos alguna de esas opciones. Este es un ejemplo del c\u00f3digo que vamos a probar.<\/p>\n<h4>Volt\u00edmetro DC.<\/h4>\n<p style=\"text-align: justify;\"><strong>C\u00f3digo de ejemplo para visualizar el voltaje, versi\u00f3n 3.<\/strong><\/p>\n<p><!-- lang=\"cpp\" file=\"download.txt\" --><\/p>\n<pre lang=\"cpp\" file=\"download.txt\">\/\/\r\n\/\/ Voltimetro_dc.ino\r\n\/\/ hispavila.com\r\n\/\/ Construcci\u00f3n de un volt\u00edmetro Arduino DC\r\n\/\/ 20.09.2015\r\n\/\/\r\n\r\n\/\/ include the library code:\r\n#include &lt;LiquidCrystal.h&gt;  \/\/Fire up the library LiquidCrystal.h.\r\n\r\n\/\/ initializamos la librer\u00eda con los de pines de la interface \r\n\/\/LCD: (RS, E,D4,D5,D6,D7)\r\nLiquidCrystal lcd(7, 6, 5, 4, 3, 2); \/\/ \r\n\r\n#define NUMREADINGS 20 \/\/10 los valores para leer \r\n\r\nint readings[NUMREADINGS]; \/\/Las lecturas de la entrada anal\u00f3gica \r\nint index = 0; \/\/Indice de la lectura actual\r\nint total = 0; \/\/ lectura Total\r\nint average = 0; \/\/Media\r\n\r\nfloat vcc = 4.98; \/\/ valor real de la alimentacion de Arduino, Vcc\r\nfloat r1 = 1000000; \/\/ 1M\r\nfloat r2 = 100000; \/\/ 100K\r\n\r\nvoid setup() {\r\n Serial.begin(9600);\r\n { \r\n for (int i = 0; i &lt; NUMREADINGS; i++) \r\n  readings[i] = 0; \/\/Pone toda la matriz a 0 \r\n } \r\n lcd.begin(20, 4); \r\n Serial.println(\"--------------------\"); \r\n Serial.println(\"VOLTMETRO DC\"); \r\n Serial.print(\"Voltaje Maximo: \"); \r\n Serial.print((int)(vcc \/ (r2 \/ (r1 + r2)))); \r\n Serial.println(\"V\"); \r\n Serial.println(\"--------------------\"); \r\n Serial.println(\"\"); \r\n lcd.setCursor(2, 0); \/\/ \r\n lcd.print(\"Voltimetro DC\"); \r\n lcd.setCursor(0,1); \r\n lcd.print(\"09-2015 - Hispavila\"); \r\n lcd.setCursor(0,2); \r\n lcd.print(\"Voltmetro.ino\"); \r\n delay(2500); \r\n lcd.clear(); \r\n} \r\nvoid loop() { \r\n total -= readings[index]; \/\/Resta la \u00faltima lectura \r\n readings[index] = analogRead(0); \/\/Lee los valores de A0 y guarda en la matriz \r\n total += readings[index]; \/\/A\u00f1ade la lectura a total \r\n index ++; \/\/Incrementa el \u00edndice \r\n  if (index &gt;= NUMREADINGS)\r\n  index = 0; \/\/Al final de la matriz se restablecer\u00e1 el \u00edndice a 0 \r\n  average = total \/ NUMREADINGS; \/\/Calcula la media \r\n if (index &lt; =20) \/\/ para que no muestre los primeras lecturas\r\n  return(loop());\r\n \r\nfloat v1 = (average * vcc) \/ 1024.0;\r\nfloat v2 = v1 \/ (r2 \/ (r1 + r2));\r\n\r\nlcd.setCursor(0,0); \r\nlcd.print(\"Voltimetro \");\r\nlcd.print((int)(vcc \/ (r2 \/ (r1 + r2))));\r\nlcd.print(\"V max.\");\r\nlcd.setCursor(0,2); \/\/Col 0, fila 2 \r\nlcd.print(\"Voltios: \");\r\nlcd.print(v2); \r\nlcd.print(\" V\");\r\n\r\nSerial.print(\"V: \");\r\nSerial.println(v2);\r\n\r\ndelay(1500);\r\n}<\/pre>\n<p style=\"text-align: justify;\">Con este ejemplo se ha mejorado algunas cosas, como se describe en el propio listado. Un paso importante es haber puesto a 0 la matriz <em>readings[i]<\/em>, esto es una buena pr\u00e1ctica ya que asegura la igualdad de valores. Otro punto es que dentro del <em>loop()<\/em>, como indica el comentario, se ha reducido una lectura <em>total -= readings[index];<\/em> la \u00faltima del bucle. Y por \u00faltimo, se ha realizado un bucle de 20 pasos para reducir los molestos incrementos de las cuentas hasta que se estabilizan.<\/p>\n<p style=\"text-align: justify;\">En el p\u00e1rrafo anterior se han descrito unas mejoras que han servido para dar un aspecto m\u00e1s acabado a nuestro volt\u00edmetro. En los comentarios se da una idea del porque de cada rutina.<\/p>\n<div align=\"center\"><iframe loading=\"lazy\" width=\"420\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/-j-H61yGqSA\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><br \/>\nFig. 6<\/div>\n<h3>Volt\u00edmetro para AC.<\/h3>\n<p style=\"text-align: justify;\">Aunque no vamos a realizar un volt\u00edmetro para corriente alterna, si quiero dar una orientaci\u00f3n para los que est\u00e9n interesados en el tema. Para medir AC, en un volt\u00edmetro sin grandes pretensiones, como el estudiado m\u00e1s arriba, yo elegir\u00eda insertar un diodo entre la uni\u00f3n de las dos resistencias (\u00e1nodo) y el c\u00e1todo a la entrada de Arduino, con un condensador de bajo valor entre la entrada anal\u00f3gica y tierra, como se aprecia en la imagen que sigue:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/voltimetro-digital-con-arduino\/voltage-divider\" rel=\"attachment wp-att-3159\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3159\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2015\/10\/voltage-divider-300x209.gif\" alt=\"voltage-divider\" width=\"210\" height=\"149\" \/><\/a>Fig. 7<\/p>\n<p style=\"text-align: justify;\">Suponiendo que la impedancia de entrada es razonablemente alta, incluso un peque\u00f1o condensador de 10nF, permitir\u00eda que el pico de voltaje AC a trav\u00e9s del condensador pueda alcanzar la tierra. Utilice los c\u00e1lculos originales R1 \/ R2 para el rango de tensi\u00f3n apropiado, pero no se olvide de la ca\u00edda de tensi\u00f3n directa (<b>0.65V<\/b>) a trav\u00e9s del diodo. A ser posible, utilice un diodo Shottky para reducir esta a 0.3V, si est\u00e1 tratando bajos voltajes.<\/p>\n<p style=\"text-align: justify;\">Esto es todo por este momento, espero poder presentar una nuevo art\u00edculo m\u00e1s completo pronto.<\/p>\n<pre style=\"text-align: justify; color: #008000;\">Ay\u00fadenos a mantener la comunidad en lo positivo y \u00fatil.\r\n Sobre el tema, sea respetuoso con todas las edades y niveles \r\n con la habitual responsabilidad.\r\n Sea amable y no haga Spam - \u00a1Gracias!.<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Volt\u00edmetro con LCD. Creado por V. Garc\u00eda. En Sept. 2015. Introducci\u00f3n. Una vez m\u00e1s asumimos que usted tiene un conocimiento b\u00e1sico adecuado de electr\u00f3nica, de los circuitos digitales y c\u00f3mo utilizar un Arduino. Ya que el aprendizaje de la electr\u00f3nica consiste en un proceso paso a paso, que comprende tanto el trabajo con los circuitos [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":3178,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[22,15,277],"tags":[279],"class_list":["post-3124","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-microcontroladores","category-voltimetro-digital-con-arduino","tag-voltimetro-lcd-alimentacion"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/3124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/comments?post=3124"}],"version-history":[{"count":27,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/3124\/revisions"}],"predecessor-version":[{"id":4672,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/3124\/revisions\/4672"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media\/3178"}],"wp:attachment":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media?parent=3124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/categories?post=3124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/tags?post=3124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}