{"id":5389,"date":"2022-05-13T11:10:53","date_gmt":"2022-05-13T09:10:53","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=5389"},"modified":"2022-06-06T10:04:18","modified_gmt":"2022-06-06T08:04:18","slug":"pecera-autoregulada","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/","title":{"rendered":"Pecera Autorregulada"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introducci\u00f3n <\/h2>\n\n\n\n<p>La libertad que se nos ha ofrecido para la realizaci\u00f3n de este proyecto ha sido ventajoso a la vez que complejo, pues hay incontables opciones a elegir a la hora de hacer un dise\u00f1o con Arduino por lo que decidirse por uno ha sido dif\u00edcil. Se nos ocurrieron miles de posibles modelos para construir, pero el que m\u00e1s interesante caus\u00f3 a todos los integrantes del grupo fue una casa dom\u00f3tica. Como primer proyecto decidimos que se trataba de algo muy completo y con dificultades para poder presentarlo en clase, por lo que decidimos hacer algo parecido pero en una versi\u00f3n mas manejable, es ah\u00ed cuando llegamos a una conclusi\u00f3n; una pecera autoregulada.<\/p>\n\n\n\n<p>Se tratar\u00eda de una pecera con distintas funcionalidades y con la posibilidad de poder personalizarla al gusto de quien lo posea. En un principio tendr\u00eda un dispensador de comida autom\u00e1tico, un sensor de temperatura sumergible, un sensor de nivel de agua y una mini bomba de agua para filtrar el agua.&nbsp;<\/p>\n\n\n\n<p>La metodolog\u00eda que hemos llevado a cabo a sido bastante intuitivo, pues al desconocer la mayor\u00eda de los componentes usados primero los hemos investigado individualmente con sus respectivos c\u00f3digos y posteriormente hemos juntado todo en la pecera. A continuaci\u00f3n detallaremos los materiales usados y el c\u00f3digo de cada uno respectivamente.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Materiales<\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Material<\/th><th class=\"has-text-align-center\" data-align=\"center\">Coste<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Placa Arduino Uni R3<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material <\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Protoboard<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material <\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Cables (Male to Male)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material <\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Sensor de temperatura para l\u00edquidos (DS18B20)<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,79\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Buzzer<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material <\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Sensor de nivel de agua<\/td><td class=\"has-text-align-center\" data-align=\"center\">3,93\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Servomotor<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,42\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Mini bomba de motor sumergible<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,93\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">LCD (16&#215;2) + I2C<\/td><td class=\"has-text-align-center\" data-align=\"center\">10\u20ac<\/td><\/tr><\/tbody><tfoot><tr><td class=\"has-text-align-center\" data-align=\"center\">Coste Total: <\/td><td class=\"has-text-align-center\" data-align=\"center\">20,07\u20ac<\/td><\/tr><\/tfoot><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Servomotor<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">     Hardware<\/h4>\n\n\n\n<p>Un <em>servomotor<\/em> o <em>servo<\/em> (Micro Servo 9g SG90 de Tower Pro) es un motor el\u00e9ctrico con dos&nbsp;caracter\u00edsticas.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Permite mantener una&nbsp;posici\u00f3n que indiquemos. El rango que alcanza este modelo es de 180\u00ba.&nbsp;<\/li><li>Permite controlar la velocidad de giro, podemos hacer que antes de que se mueva a la siguiente posici\u00f3n espere un tiempo.<\/li><\/ul>\n\n\n\n<p>Puede moverse con una resoluci\u00f3n m\u00e1xima de 1 grado, debido a la limitaci\u00f3n de la se\u00f1al PWM que es capaz de generar Arduino UNO. Funcionan con una se\u00f1al PWM,&nbsp;con un pulso de trabajo entre 1 ms y 2 ms y con un periodo de 20 ms (50 Hz), es decir, la velocidad m\u00e1xima a la que podemos cambiar de posici\u00f3n ser\u00e1 cada 20 ms. Tendr\u00e1 3 cables e ir\u00e1n de la siguiente manera; uno ir\u00e1 a tierra, otro a la alimentaci\u00f3n de 5 Voltios y el tercero a un pin PWM (en este caso el 3).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/sandorobotics.com\/wp-content\/uploads\/2018\/05\/towerpro-sg90-mini-servo-electronilab-04.jpg\" alt=\"\" width=\"317\" height=\"317\"\/><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"759\" height=\"431\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo1.png\" alt=\"\" class=\"wp-image-5455\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo1.png 759w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo1-300x170.png 300w\" sizes=\"auto, (max-width: 759px) 100vw, 759px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"668\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo2-e1652366047271.png\" alt=\"\" class=\"wp-image-5456\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo2-e1652366047271.png 703w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo2-e1652366047271-300x285.png 300w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\">     Software<\/h4>\n\n\n\n<p>Para poder controlar el servo desde Arduino tenemos que hacer uso de la librer\u00eda \u201cServo\u201d de la biblioteca del propio IDE.<\/p>\n\n\n\n<p>El c\u00f3digo necesario para poder girar el Servo de 0\u00ba a 180\u00ba (grado a grado) es la siguiente. De la librer\u00eda Servo.h&nbsp;hemos declarado un objeto o variable ServoMotor y hacemos uso de dos m\u00e9todos. Por un lado el \u201cattach()\u201d, para indicar en que pin tenemos conectado nuestro servo, y por otro lado el \u201cwrite()\u201d, donde indicamos en qu\u00e9 \u00e1ngulo queremos posicionar nuestro servomotor. En los bucles for se realizara el giro de 180\u00ba, para ello habr\u00e1 un delay de 15ms por cada grado que sume a su posici\u00f3n actual. Para hacer el giro m\u00e1s r\u00e1pido o lento se deber\u00e1 regular el delay de dentro del bucle. Finalmente en la demostraci\u00f3n individual se pone un delay de 2 segundos para comenzar de nuevo el giro.<\/p>\n\n\n\n<p>En la practica el delay seria de 43200000ms, es decir de 12h, que es el tiempo que debe transcurrir para alimentar a los peces.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>#include &lt;Servo.h&gt;\n\nServo ServoMotor;\n\nint pos = 0;\n\nvoid setup() {\n  Serial.begin(9600);\n  ServoMotor.attach (3); \n  ServoMotor.write(pos);\n}\n\nvoid loop() {\n  \n  for (pos = 0; pos &lt; 180; pos += 1) {\n    ServoMotor.write(pos);\n    delay(15); \n  }\n  for (pos = 180; pos &gt;= 1; pos -= 1) {\n    ServoMotor.write(pos);\n    delay(15); \n  }\n\n  delay(2000);\n}<\/code><\/pre>\n<\/div><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sensor de Nivel de Agua con Buzzer<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">     Hardware<\/h4>\n\n\n\n<p>Este sensor esta dise\u00f1ado para detectar agua, y es \u00fatil para detectar fugas de agua, lluvia, desbordamiento de un tanque, o simplemente para medir el nivel, presencia o volumen de agua.<\/p>\n\n\n\n<p>Este sensor tiene 3 pines:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>S (signal): Es el pin que proporciona una salida anal\u00f3gica. Por lo tanto usaremos el pin S como entrada anal\u00f3gica en el Arduino. El valor que da ser\u00e1 variable en funci\u00f3n de la superficie cubierta. El valor estar\u00e1 comprendido entre VCC y GND.<\/li><li>+ (VCC): Es el pin de alimentaci\u00f3n capaz de soportar entre 3,3V y 5V.<\/li><li>&#8211; (GND): Es el pin conectado a tierra.<\/li><\/ul>\n\n\n\n<p>En nuestro caso lo usaremos para saber cu\u00e1ndo se esta dando una fuga producido por alg\u00fan da\u00f1o en la pecera. De modo que colocaremos el sensor de nivel de agua rozando la superficie del agua, y en el momento en el que no detecte agua se emitir\u00e1 una alarma mediante un buzzer.<\/p>\n\n\n\n<p>El buzzer (Mono Enclosed Speaker) usado solamente dispone de dos pines; uno para conectarlo a un puerto no digital (no PWM), y otra para conectarlo a tierra.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1040\/8806\/products\/photo_OS-03446_SensorNivelAgua-Analogico_01_1500x.png?v=1598043132\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/image.jimcdn.com\/app\/cms\/image\/transf\/none\/path\/s20f2fdae3465e2c6\/image\/ia92b769dcaff885d\/version\/1617681850\/buzzer-piezoelectrico-zumbador-guatemala-electronica-electronico-buzzer-piezoelectrico.jpg\" alt=\"\"\/><\/figure>\n<\/div>\n<\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"461\" height=\"652\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorNv.png\" alt=\"\" class=\"wp-image-5459\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorNv.png 461w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorNv-212x300.png 212w\" sizes=\"auto, (max-width: 461px) 100vw, 461px\" \/><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">     Software<\/h4>\n\n\n\n<p>Para el uso de ambos dispositivos no es necesaria ninguna librer\u00eda adicional. Primero se declaran las variables y mediante la funci\u00f3n pinMode() se declara el sensor como entrada y el buzzer como salida. &nbsp;<\/p>\n\n\n\n<p>La funci\u00f3n de loop() estar\u00e1 comprobando constantemente que el sensor este detectando agua mediante la funci\u00f3n digitalRead(), de lo contrario cuando el sensor devuelva un LOW llamara a la funci\u00f3n sonarAlarma() donde se generara un tono de 500Hz durante 500ms y se detendr\u00e1 por otros 500ms. Debido a que no hay ning\u00fan delay el buzzer seguir\u00e1 emitiendo el mismo sonido hasta que el sensor vuelva detectar agua.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int sensorNv = 7;\nint buzzer = 8;\n\nint valorSensor;\n\nvoid setup() {\n  Serial.begin(9600);\n  pinMode(sensorNv, INPUT);\n  pinMode(buzzer, OUTPUT);\n}\n\nvoid loop() {\n  \n  if (digitalRead(sensorNv) == LOW) {\n    Serial.println (\"CUIDADO, esta perdindo agua.\");\n    sonarAlarma();\n  } else {\n    Serial.println (\"BIEN\");\n  }\n}\n\nvoid sonarAlarma() {\n  tone(buzzer, 500, 300);\n  delay(500);\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sensor de Temperatura Sumergible<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">     Hardware<\/h4>\n\n\n\n<p>El dispositivo que hemos usado para medir la temperatura del agua es el sensor de temperatura DS18B20. Este puede medir temperaturas desde -55\u00baC hasta los 125\u00baC, con una precisi\u00f3n de 0,5\u00ba. Es un sensor digital que utiliza el protocolo One-Wire, es decir, necesita solo un pin de datos para comunicarse y permite conectar m\u00e1s de un sensor en el mismo bus.<\/p>\n\n\n\n<p>Dispone de 3 pines:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>VDD: es la tensi\u00f3n de alimentaci\u00f3n puede soportar desde 3V a 5,5V<\/li><li>GND: es la toma de tierra<\/li><li>DQ: es el pin de datos por donde se recibir\u00e1n todos los datos en el protocolo One-Wire<\/li><\/ul>\n\n\n\n<p>Los pines VDD y GND se conectaran a sus valores respectivamente, sin embargo el pin DQ es m\u00e1s complejo. Para su montaje deberemos usar una resistencia pull-up para controlar el bus de comunicaciones, de esta forma, cuando el sensor conectados al bus One-Wire no env\u00ede datos, la l\u00ednea de datos ser\u00e1 igual a HIGH o la tensi\u00f3n que suministremos (en nuestro caso de 5V). En el momento que un sensor empieza a transmitir, la l\u00ednea cambia de estado y ya sabemos que hay un sensor transmitiendo datos. El valor de la resistencia depender\u00e1 de la longitud del cable, el mas optimo seria uno de 4,7K Ohms, pero al no disponer de este valor hemos usado uno de 330 Ohms.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pcboard.ca\/image\/cache\/catalog\/products\/ds18b20\/dallas-18b20-temperature-sensor-cable-pinout-800x800.jpg\" alt=\"\" width=\"336\" height=\"336\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"541\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorTmp1.png\" alt=\"\" class=\"wp-image-5461\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorTmp1.png 840w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorTmp1-300x193.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorTmp1-768x495.png 768w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"666\" height=\"439\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorTmp2-e1652368178467.png\" alt=\"\" class=\"wp-image-5462\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorTmp2-e1652368178467.png 666w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/SensorTmp2-e1652368178467-300x198.png 300w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p> <\/p>\n\n\n\n<p>Primero debemos incluir las librer\u00edas OneWire y DallasTemperature. El primero se puede encontrar en el Gestor de Librer\u00edas de Arduino, el segundo lo tendremos que buscar en GitHub.<\/p>\n\n\n\n<p>Mediante la variable pinDatosDQ indicaremos el pin donde estar\u00e1 conectado el sensor. En las posteriores dos lineas declaramos los objetos de las clases OneWire y DallasTemperature. Solo utilizaremos este \u00faltimo que es el que nos da acceso a los sensores de temperatura DS18B20. Usaremos el s\u00edmbolo &amp; para pasar la variable por referencia<\/p>\n\n\n\n<p>En la funci\u00f3n setup iniciamos el bus One-Wire llamando a la funci\u00f3n .begin(). En la funcion loop, llamamos a la funci\u00f3n .requestTemperatures() para enviar comandos para la toma de temoeratura. Una vez que el sensor ha recibido el comando, y ha tomado la temperatura en Celsius se solicitara la informaci\u00f3n con la funci\u00f3n .getTempCByIndex(indice_sensor). Al usar \u00fanicamente un sensor, el valor de las par\u00e9ntesis ser\u00e1 de 0, si de lo contrario tuvi\u00e9semos n sensores conectados en serie el valor seria de 0 a n-1.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;OneWire.h&gt;\n#include &lt;DallasTemperature.h&gt;\n\nint pinDatosDQ = 2;\n \nOneWire oneWireObjeto (pinDatosDQ);\nDallasTemperature sensorDS18B20 (&amp;oneWireObjeto);\n\nvoid setup() {\n    Serial.begin(9600);\n    sensorDS18B20.begin(); \n}\n\nvoid loop() {\n    sensorDS18B20.requestTemperatures();\n    Serial.print(\"Temperatura sensor: \");\n    Serial.print(sensorDS18B20.getTempCByIndex(0));\n    Serial.println(\"\u00ba C\");\n    delay(1000);\n} <\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mini Bomba de Agua<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">     Hardware<\/h4>\n\n\n\n<p>Una bomba de agua es un dispositivo capaz de generar un caudal de l\u00edquido usando energ\u00eda cin\u00e9tica. Para su funcionamiento dispone de 3 elementos b\u00e1sicos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Entrada: por donde se absorbe el l\u00edquido.<\/li><li>Motor+H\u00e9lice: el encargado de generar la energ\u00eda cin\u00e9tica<\/li><li>Salida: es la toma por donde saldr\u00e1 el l\u00edquido propulsado por la potencia generada<\/li><\/ul>\n\n\n\n<p>Nuestra idea para este dispositivo es el de filtraci\u00f3n de agua, por lo tanto no hemos querido usar un interruptor MOSFET para controlar su encendido ya que no se detendr\u00e1 en ning\u00fan momento, y por lo tanto no precisar\u00e1 de ning\u00fan c\u00f3digo, solamente de una fuente de alimentaci\u00f3n. \u00c9sta ser\u00e1 mediante los puertos GND y la entrada de 5V del Arduino.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.electrogeekshop.com\/wp-content\/uploads\/2020\/03\/mini-bomba-de-agua-sumergible-2lm-3v-6v-dc-arduino-D_NQ_NP_693618-MLA31356274168_072019-F.jpg\" alt=\"\" width=\"522\" height=\"282\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">LCD + I2C<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">     Hardware<\/h4>\n\n\n\n<p>Para poder mostrar los valores recogidos con el sensor de temperatura u otros mensajes usaremos una Pantalla de Cristal Liquido (LCD) 16&#215;02, es decir 16 columnas y 2 lineas. Dispone de 16 pines:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Un pin de selecci\u00f3n de registro (RS): que controla en qu\u00e9 parte de la memoria est\u00e1 escribiendo datos<\/li><li>Un pin de lectura\/escritura (R\/W)&nbsp;<\/li><li>Un pin Habilitar que permite escribir en los registros<\/li><li>8 pines de datos (D0 -D7)<\/li><li>Un pin display de contraste (Vo)<\/li><li>Un pin de fuente de alimentaci\u00f3n (+5V and GND)&nbsp;<\/li><li>Un LED para controlar la iluminaci\u00f3n del fondo<\/li><\/ul>\n\n\n\n<p>Para poder conectarlo al Arduino necesitar\u00edamos usar 6 pines digitales ademas de&nbsp; un potenciometro. Para hacerlo m\u00e1s simple y legible hemos usado un controlador I2C que es un expansor de entradas y salidas digitales, ademas lleva un potenciometro integrado para controlar el contrastar. Ya que tiene los pines ordenados, debemos soldarlo al propio LCD, por lo tanto habremos reducido los pines de datos de 6 a 2. El I2C proporciona 4 pines:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>2 pines de alimentaci\u00f3n; uno ser\u00e1 la toma a tierra y el otro conectado a los 5V.<\/li><li>2 pines SDA y SCL que estar\u00e1n conectados a los puertos anal\u00f3gicos A4 y A5 respectivamente.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/uelectronics.com\/wp-content\/uploads\/2017\/06\/AR0007-Display-LCD-16x2-4.jpg\" alt=\"\"\/><figcaption>LCD<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/imgaz.staticbg.com\/thumb\/large\/oaupload\/banggood\/images\/3E\/69\/28ad157c-29f6-4337-be6e-3e01b592512a.JPG\" alt=\"\"\/><figcaption>I2C<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/naylampmechatronics.com\/img\/cms\/Blog\/Tutorial%20LCD\/conexion%20Arduino%20y%20LCD1602.PNG\" alt=\"\"\/><figcaption>LCD sin I2C<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/naylampmechatronics.com\/img\/cms\/Blog\/LCD%20I2C\/conexion%20arduino%20y%20LCD%20I2C.PNG\" alt=\"\" width=\"378\" height=\"167\"\/><figcaption>LCD con I2C<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Primero debemos incluir las librer\u00edas LiquidCrystal_I2C y Wire (accesible desde el propio Arduino). Declararemos el objeto de LiquidCrystal_I2C, para ello necesitaremos conocer su modulo (esto se puede hacer desde un sketch), en nuestro caso el 0x27, y tambi\u00e9n deberemos definir las columnas y filas que contiene.<\/p>\n\n\n\n<p>En el setup usaremos la funci\u00f3n .init() para inicializar el modulo I2C y el LCD, y el .backlight() para encender la luz del fondo del LCD. El resto de funciones que se usaran son similares a las de la librer\u00eda incluida en el Arduino LiquidCrystal que son las siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>.clear(): Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda (0,0)<\/li><li>.setCursor(x,y): Posiciona el cursor del LCD en la posici\u00f3n indicada por columna y fila<\/li><li>.print(): Escribe un texto o mensaje en el LCD, similar a escribir en el Serial&nbsp;<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;LiquidCrystal_I2C.h&gt;\n#include &lt;Wire.h&gt;\n\nLiquidCrystal_I2C lcd(0x27,16,2);  \n\nlong tiempo;\n\nvoid setup() {\n  lcd.init();\n  lcd.backlight();\n}\n\nvoid loop() {\n  tiempo = millis()\/1000;\n  lcd.clear();\n  lcd.setCursor(0,0);\n  lcd.print(\"TIEMPO: \");\n  lcd.print(tiempo);\n  delay(1000);\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Problemas<\/h2>\n\n\n\n<p>El primer problema que hemos encontrado al realizar la practica ha sido el propio agua, pues cualquier contacto de esta con alg\u00fan dispositivo no sumergible podr\u00eda estropearlo o en el mejor de los casos esperar a que se secase para volver a utilizarlo.<\/p>\n\n\n\n<p>Por otro lado, debido a que los componentes usados no son del todo \u00f3ptimos, la durabilidad de estos ha supuesto problemas. Primeramente el sensor de nivel de agua la primera vez que lo usamos media, aunque no con mucha exactitud, el porcentaje del sensor que estaba cubierto por el agua, sin embargo con el uso se deterior\u00f3 y \u00fanicamente detectaba agua desde la mitad para arriba. Por lo que nos vimos obligados a cambiar el c\u00f3digo, pues en un principio estaba pensado para medir el porcentaje cubierto. En la versi\u00f3n final su funci\u00f3n es la detecci\u00f3n de agua. El sensor de temperatura tambi\u00e9n nos dio problemas, por un lado para encontrar las librer\u00edas precisas para poder usarlos, debido a que uno de ellos no se encontraba en la biblioteca de Arduino y algunas de GitHub estaban anticuadas. Y por otro lado conectarlo con Arduino tambi\u00e9n result\u00f3 dif\u00edcil, debido a que no se pod\u00eda conectar directamente al pin de entrada, sino que se necesitaba usar una resistencia pull-up. Finalmente, pese a que el d\u00eda de la presentaci\u00f3n pudimos hacer un a demostraci\u00f3n sin problemas, para el d\u00eda de la grabaci\u00f3n general del proyecto la mini bomba de agua dejo de funcionar, por lo tanto en la grabaci\u00f3n final la fuente no esta activada.<\/p>\n\n\n\n<p>Asimismo pensamos en la posibilidad de poder conectar la pecera al m\u00f3vil para poder controlar desde la distancia las funcionalidades de esta. No obstante tiene m\u00e1s complejidad de la que pueda aparentar.&nbsp; Buscamos servidores ya creados para poder entablar una conexi\u00f3n entre estas y nuestro Arduino, pudimos encontramos dos; Blynk y la nube de la propia organizaci\u00f3n Arduino. La primera de estas tenia variedad de opciones para establecer conexi\u00f3n entre el software y la placa. Una de ellas era por Bluetooth, pero al comprar un modulo HC-05 nos dimos cuenta que era incompatible con los dispositivos iOS, por lo tanto tuvimos que devolverlo, pues no dispon\u00edamos de dispositivos Android. Otra opci\u00f3n era la conexi\u00f3n de Serie, para ello hab\u00eda que descargarse una librer\u00eda el cual no estaba disponible en la propia biblioteca de Arduino y las de GitHub estaban anticuadas. La ultima opci\u00f3n era mediante conexi\u00f3n Wifi, sin embargo el Arduino Uno no dispone de esta funcionalidad integrada por lo que tendr\u00edamos que comprar un modulo Wifi, como ser\u00eda el ESP8266, no obstante se trata de otro microcontrolador, por lo que descartamos pues el objetivo del proyecto era familiarizarse con Arduino y este sal\u00eda de nuestro alcance. El segundo servidor era la Arduino IoT Cloud, pero encontramos el mismo problema; la necesidad de un shield Wifi. Pues por ahora, \u00fanicamente puede entablar conexi\u00f3n Wifi con los modelos MKR, Nano o Portenta.<\/p>\n\n\n\n<p>Finalmente vimos que al juntar todos los componentes hab\u00eda errores que individualmente no hab\u00edamos visto, por ejemplo el LCD dejaba de funcionar pasado un tiempo. Pensamos en la posibilidad de que el Arduino no pudiese proporcionar la alimentaci\u00f3n suficiente a todos los pines, pero finalmente llegamos a la conclusi\u00f3n de que el uso de un Delay al final del loop causaba interrupciones, por lo tanto cambiamos el c\u00f3digo del comedero para que funcionase con la funci\u00f3n millis().<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Casos de Uso<\/h2>\n\n\n\n<p>Dado que se trata de un dispositivo autoregulado, esto supone que necesita la interacci\u00f3n m\u00ednima posible. Por lo tanto no es preciso dise\u00f1ar un diagrama de estados pues los componentes de esta funci\u00f3n independientemente. A continuaci\u00f3n se muestran las funciones de la pecera: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Visualizar temperatura del agua<\/li><li>Visualizar se\u00f1al de alerta en caso de fuga<\/li><li>Filtrar agua<\/li><li>Dar de comer al pez <\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Si tuvi\u00e9semos la posibilidad de disponer de m\u00e1s fondos y tiempo, proponemos los siguientes cambios a a\u00f1adir para poder completar de personalizarlo.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>RTC: para controlar el tiempo exacto y poder mostrarlo en el LCD.<\/li><li>Sensor de pH: para medir con exactitud el pH de la pecera<\/li><li>Sensor de Electro Conductividad: Devuelve una respuesta anal\u00f3gica proporcional al nivel de sal que contiene el agua<\/li><li>Bomba de CO<sub>2<\/sub>: Ayuda con la fotos\u00edntesis de la flora que contiene la pecera<\/li><li>Lampara LED: para ambientar<\/li><li>Ventilador: Necesario para reducir la temperatura producido por la lampara o en verano. Estar\u00eda conectado al sensor de temperatura.<\/li><li>Calentador: Necesario para aumentar la temperatura y no se enfr\u00ede mediante la filtraci\u00f3n de agua y mantenerla constante durante la noche.<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digo Completo<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Servo.h&gt; \/\/Libreria del ServoMotor\n#include &lt;OneWire.h&gt; \/\/Libreria DS18B20\n#include &lt;DallasTemperature.h&gt; \/\/Libreria DS18B20\n#include &lt;LiquidCrystal_I2C.h&gt; \/\/Libreria LCD\n#include &lt;Wire.h&gt; \/\/Libreria LCD\n\nServo ServoMotor;\nLiquidCrystal_I2C LCD(0x27,16,2);  \n#define pinSensorTmp 2\n#define sensorNv 6\n#define buzzer 7\n\n\/\/ Instancia a las clases OneWire y DallasTemperature\nOneWire OWObjeto (pinSensorTmp);\nDallasTemperature DTSensorDS18B20 (&amp;OWObjeto);\n\nconst long TMPO_ALIMENTAR = 43200000; \/\/se alimenta a los peces cada 12 horas\n\nlong tiempo; \/\/contador millis\nlong tmpoAlimentar; \/\/contador para alimentar\nint pos = 0; \/\/posici\u00f3n del servoMotor\nint valorSensorNv; \/\/valor leido por el sensor de nivel\nint valorSensorTmp; \/\/valor leido por el sensor de temperatura\n\nvoid setup() {\n  Serial.begin(9600);\n  pinMode(sensorNv, INPUT);\n  pinMode(buzzer, OUTPUT);\n  DTSensorDS18B20.begin();\n  ServoMotor.attach (3);\n  ServoMotor.write(pos);\n  tmpoAlimentar = TMPO_ALIMENTAR;\n  LCD.init();\n  LCD.backlight();\n}\n\nvoid loop() {\n  \n  tiempo = millis();\n  if (digitalRead(sensorNv) == LOW) {\n    sonarAlarma();\n    LCD.clear();\n    LCD.setCursor(0, 0);\n    LCD.print(\"!CUIDADO FUGA!\");\n    Serial.println(\"\u00a1CUIDADO! Esta perdindo agua\");\n  } else {\n    LCD.clear();\n    recogerTemperatura (valorSensorTmp);\n  }\n\n  if (esHoraDeComer()) {\n    girarServoMotor();\n    tmpoAlimentar += TMPO_ALIMENTAR;\n  }\n  Serial.println (tiempo);\n}\n\nboolean esHoraDeComer() {\n  \/\/ sera true cuando el tiempo(millis) sea proximo (1s de diferencia) \n  \/\/ al tiempo establecido para alimentar (43200000*n) \n  \/\/ (n= las veces que se ha alimentado desde el inicio del programa)\n\n  if ((tiempo &lt;= tmpoAlimentar+1000) &amp;&amp; (tiempo &gt;= tmpoAlimentar-1000)){\n    return true;\n  } else {\n    return false;\n  }\n}\n\nvoid girarServoMotor() {\n  \/\/ Girar gradualmente de 0\u00ba a 180\u00ba\n  for (pos = 0; pos &lt; 180; pos += 1) {\n    ServoMotor.write(pos);\n    delay(15); \n  }\n  for (pos = 180; pos &gt;= 1; pos -= 1) {\n    ServoMotor.write(pos);\n    delay(15); \n  }\n}\n\nvoid sonarAlarma() {\n  \/\/generar tono de 523Hz durante 500ms, y detenerlo durante 500ms.\n  tone(buzzer, 500, 300);\n  delay(500);\n}\n\nvoid recogerTemperatura (int val) {\n  \/\/ Mandamos comandos para toma de temperatura a los sensores\n  DTSensorDS18B20.requestTemperatures();     \n\n  \/\/ Mostrar por el LCD\n  LCD.setCursor(0, 0);\n  LCD.print(\"Temperatura: \");\n  LCD.setCursor(0,1);\n  LCD.print(DTSensorDS18B20.getTempCByIndex(0));\n  LCD.print(\" C\");\n  \n  \/\/ Mostrar por el puerto Serial\n  Serial.print(\"Temperatura: \");\n  Serial.print(DTSensorDS18B20.getTempCByIndex(0));\n  Serial.println(\"\u00ba C\");\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Video Complementario<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Pecera Autoregulada\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/NEeJejpBXL8?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n La libertad que se nos ha ofrecido para la realizaci\u00f3n de este proyecto ha sido ventajoso a la vez que complejo, pues hay incontables opciones a elegir a la hora de hacer un&#46;&#46;&#46;<\/p>\n","protected":false},"author":26,"featured_media":5456,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-5389","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pecera Autorregulada - Proyectos con Arduino.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pecera Autorregulada - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Introducci\u00f3n La libertad que se nos ha ofrecido para la realizaci\u00f3n de este proyecto ha sido ventajoso a la vez que complejo, pues hay incontables opciones a elegir a la hora de hacer un&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-13T09:10:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-06T08:04:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo2-e1652366047271.png\" \/>\n\t<meta property=\"og:image:width\" content=\"703\" \/>\n\t<meta property=\"og:image:height\" content=\"668\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Pecera Autorregulada\",\"datePublished\":\"2022-05-13T09:10:53+00:00\",\"dateModified\":\"2022-06-06T08:04:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/\"},\"wordCount\":2652,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/Servo2-e1652366047271.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/\",\"name\":\"Pecera Autorregulada - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/Servo2-e1652366047271.png\",\"datePublished\":\"2022-05-13T09:10:53+00:00\",\"dateModified\":\"2022-06-06T08:04:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/Servo2-e1652366047271.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/Servo2-e1652366047271.png\",\"width\":703,\"height\":668},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/pecera-autoregulada\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pecera Autorregulada\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pecera Autorregulada - Proyectos con Arduino.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/","og_locale":"es_ES","og_type":"article","og_title":"Pecera Autorregulada - Proyectos con Arduino.","og_description":"Introducci\u00f3n La libertad que se nos ha ofrecido para la realizaci\u00f3n de este proyecto ha sido ventajoso a la vez que complejo, pues hay incontables opciones a elegir a la hora de hacer un&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2022-05-13T09:10:53+00:00","article_modified_time":"2022-06-06T08:04:18+00:00","og_image":[{"width":703,"height":668,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo2-e1652366047271.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"","Tiempo de lectura":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/"},"author":{"name":"","@id":""},"headline":"Pecera Autorregulada","datePublished":"2022-05-13T09:10:53+00:00","dateModified":"2022-06-06T08:04:18+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/"},"wordCount":2652,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo2-e1652366047271.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/","name":"Pecera Autorregulada - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo2-e1652366047271.png","datePublished":"2022-05-13T09:10:53+00:00","dateModified":"2022-06-06T08:04:18+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo2-e1652366047271.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/Servo2-e1652366047271.png","width":703,"height":668},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/pecera-autoregulada\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Pecera Autorregulada"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=5389"}],"version-history":[{"count":19,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5389\/revisions"}],"predecessor-version":[{"id":5816,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5389\/revisions\/5816"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/5456"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=5389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=5389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=5389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}