{"id":9551,"date":"2025-12-19T17:25:32","date_gmt":"2025-12-19T16:25:32","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=9551"},"modified":"2025-12-19T17:25:34","modified_gmt":"2025-12-19T16:25:34","slug":"brujula-digital-con-arduino-grupo-15","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/","title":{"rendered":"Br\u00fajula digital con Arduino. Grupo 15"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"298\" height=\"298\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj.png\" alt=\"\" class=\"wp-image-9598\" style=\"width:364px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj.png 298w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj-150x150.png 150w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj-80x80.png 80w\" sizes=\"auto, (max-width: 298px) 100vw, 298px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Explicaci\u00f3n del proyecto<\/strong><\/h1>\n\n\n\n<p>Dentro del \u00e1mbito del dise\u00f1o de sistemas empotrados, la integraci\u00f3n de sensores capaces de proporcionar una informaci\u00f3n fiable acerca del entorno es importante para garantizar un buen funcionamiento de dispositivos m\u00f3viles o inteligentes. Entre ellos, hemos visto la br\u00fajula digital como un componente clave para la orientaci\u00f3n de un sistema respecto al campo magn\u00e9tico terrestre.<\/p>\n\n\n\n<p>Ese ha sido el motivo por el que nos hemos decantado en elegir este proyecto. El uso de la br\u00fajula digital resulta especialmente relevante en distintas aplicaciones hoy en d\u00eda y en donde el rumbo y la orientaci\u00f3n espacial es b\u00e1sica en el rendimiento global de dispositivos como robots, sistemas de navegaci\u00f3n o drones, por enumerar algunos casos.<\/p>\n\n\n\n<p>Los objetivos principales del proyecto son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Analizar el funcionamiento de una br\u00fajula digital.<\/li>\n\n\n\n<li>Dise\u00f1o e implementaci\u00f3n de un sistema empotrado que muestre el rumbo del dispositivo.<\/li>\n\n\n\n<li>Integrar el sensor con un microcontrolador y desarrollar el software necesario para lectura y tratamiento.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Reparto de tareas<\/strong><\/h1>\n\n\n\n<p>El reparto de tareas ha sido de manera equitativa conjunta. El tiempo empleado en el proyecto supera las 30 horas debido a los problemas que nos hemos encontrado.<\/p>\n\n\n\n<p>En primer lugar, nos reunimos y hablamos sobre los materiales y herramientas necesarias para construir la br\u00fajula digital. Despu\u00e9s comenzamos a quedar varios d\u00edas donde vimos primero la parte hardware y luego todo el software del proyecto. La mayor parte del tiempo de la reuni\u00f3n fue dedicado a la parte hardware. Nos reunimos en nueve ocasiones en una sala de la biblioteca de la URJC.<\/p>\n\n\n\n<p>En l\u00edneas generales, el proyecto se ha dividido en 2 tareas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Montaje del hardware (montaje del circuito)<\/li>\n\n\n\n<li>El desarrollo del software (c\u00f3digo Arduino)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Materiales y coste<\/strong><\/h1>\n\n\n<p>A continuaci\u00f3n, se muestran la relaci\u00f3n de los materiales principales (figuras 1 a 4) empleados en el proyecto con su foto, nombre y modelo. Posteriormente establecemos un presupuesto con el coste de todos los materiales empleados.<\/p>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"278\" height=\"286\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/ARDUINO-UNO.png\" alt=\"\" class=\"wp-image-9556\" \/><figcaption class=\"wp-element-caption\">Figura 1. Arduino UNO<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"333\" height=\"305\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/HMC5883L.png\" alt=\"\" class=\"wp-image-9557\" style=\"aspect-ratio:1.0919040721068727;width:276px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/HMC5883L.png 333w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/HMC5883L-300x275.png 300w\" sizes=\"auto, (max-width: 333px) 100vw, 333px\" \/><figcaption class=\"wp-element-caption\">Figura 2.HCM5883L<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"342\" height=\"298\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/MPU6050.png\" alt=\"\" class=\"wp-image-9558\" style=\"aspect-ratio:1.1476907460666554;width:282px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/MPU6050.png 342w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/MPU6050-300x261.png 300w\" sizes=\"auto, (max-width: 342px) 100vw, 342px\" \/><figcaption class=\"wp-element-caption\">Figura 3. MPU6500<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"392\" height=\"286\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/PANTALLA-OLED.png\" alt=\"\" class=\"wp-image-9559\" style=\"aspect-ratio:1.3707086614173227;width:282px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/PANTALLA-OLED.png 392w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/PANTALLA-OLED-300x219.png 300w\" sizes=\"auto, (max-width: 392px) 100vw, 392px\" \/><figcaption class=\"wp-element-caption\">Figura 4. Pantalla TFT<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Adicionalmente, hemos necesitado un bot\u00f3n con el fin de cambiar los diferentes datos que aparecen en pantalla. El bot\u00f3n ha sido proporcionado por un alumno del grupo. Adem\u00e1s, hemos usado una cubierta de cart\u00f3n para colocar y ensamblar todos los componentes del circuito.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><em>Presupuesto<\/em><\/strong><\/h2>\n\n\n\n<p>A continuaci\u00f3n, se muestra en la tabla 1 una recopilaci\u00f3n del coste en \u20ac de todos los materiales empleados en el proyecto. Aquellos materiales cuyo coste es 0\u20ac han sido proporcionados por la Universidad Rey Juan Carlos mediante un kit laboratorio y otros componentes han sido proporcionados por un alumno de grupo. El total del coste de los materiales ha sido de 16,56\u20ac. Los materiales con coste se han comprado por internet.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Material<\/strong><strong><\/strong><\/td><td><strong>Cantidad<\/strong><strong><\/strong><\/td><td><strong>Coste total (\u20ac)<\/strong><strong><\/strong> <strong>&nbsp;<\/strong><\/td><\/tr><tr><td>Arduino UNO<\/td><td>1<\/td><td>0 (proporcionado por la universidad)<\/td><\/tr><tr><td>HMC5883L<\/td><td>4<\/td><td>12,21 (3,05\u20ac\/ud)<\/td><\/tr><tr><td>Pantalla TFT<\/td><td>1<\/td><td>2,93<\/td><\/tr><tr><td>MPU6500<\/td><td>1<\/td><td>1,42<\/td><\/tr><tr><td>Bot\u00f3n<\/td><td>1<\/td><td>0 (proporcionado por un alumno del grupo)<\/td><\/tr><tr><td>Cables<\/td><td>40<\/td><td>0 (proporcionado por la universidad)<\/td><\/tr><tr><td>Carcasa cart\u00f3n<\/td><td>1<\/td><td>0 (proporcionado por alumno del grupo)<\/td><\/tr><tr><td><strong>Total<\/strong><strong><\/strong><\/td><td>&nbsp;<\/td><td><strong>16,56\u20ac<\/strong><strong><\/strong><\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">                                                 Tabla 1. Coste de materiales <\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Herramientas utilizadas<\/strong><\/h1>\n\n\n\n<p>En cuanto a las herramientas utilizadas, aparecen descritas en la tabla 2. Hemos utilizado un soldador para soldar las patas del componente <em>HMC5883L<\/em> y varias bridas para sujetar los cables del circuito. Por \u00faltimo, una Powerbank para dar corriente de manera r\u00e1pida y efectiva a la br\u00fajula ha sido proporcionada por un alumno del grupo.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Herramientas<\/strong><\/td><td><strong>Uso<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Soldador<\/strong><strong><\/strong><\/td><td>Soldar patas HMC5883L<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Bridas<\/strong><\/td><td>Sujetar cables del circuito<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>PowerBank<\/strong><strong><\/strong><\/td><td>Dar corriente al sistema empotrado<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">                                              Tabla 2. Herramientas utilizadas<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Implementaci\u00f3n del proyecto<\/strong><\/h1>\n\n\n<p>Durante los primeros d\u00edas empezamos a ver c\u00f3mo se usaba la pantalla TFT<strong>,<\/strong> ya que era algo nuevo para nosotros. Seguidamente, nos pusimos con el primer sensor o magnet\u00f3metro <em>HMC5883L, <\/em><em>aprendiendo c\u00f3mo se utilizaba, su calibrado y su conexi\u00f3n a la pantalla TFT. Este sensor mide la fuerza del campo magn\u00e9tico de la Tierra. <\/em><\/p>\n<p>Tras la conexi\u00f3n del <em>HMC5883L <\/em><em>con la pantalla, implementamos en el circuito el <\/em>aceler\u00f3metro MPU6050, sensor que mide la inclinaci\u00f3n (pitch y roll) de la br\u00fajula. Despu\u00e9s, probamos su funcionamiento y recogida de datos. Por \u00faltimo, unificamos los dos sensores para que la br\u00fajula digital funcione correctamente. Finalmente ensamblamos el circuito en la carcasa o caja de cart\u00f3n.<\/p>\n<p>En las figura 5 vemos el circuito de Arduino con la placa y sus componentes. En la figura 6 vemos\u00a0una imagen del circuito usando el programa Wokwi.com<\/p>\n<p>Y por \u00faltimo vemos en la figura 7 la br\u00fajula digital dentro de la cubierta de cart\u00f3n.<\/p>\n<p>&nbsp;<\/p>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"346\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/brujula-1.png\" alt=\"\" class=\"wp-image-9599\" style=\"width:480px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/brujula-1.png 550w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/brujula-1-300x189.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><figcaption class=\"wp-element-caption\">                            Figura 5. Montaje del circuito sin la cubierta de cart\u00f3n.<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"778\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/image-1.png\" alt=\"\" class=\"wp-image-9554\" style=\"aspect-ratio:1.138853361508091;width:378px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/image-1.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/image-1-300x263.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/image-1-768x674.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">                                        Figura 6. Circuito de Arduino en Wokwi.com.<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"298\" height=\"298\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj-1.png\" alt=\"\" class=\"wp-image-9713\" style=\"width:334px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj-1.png 298w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj-1-150x150.png 150w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj-1-80x80.png 80w\" sizes=\"auto, (max-width: 298px) 100vw, 298px\" \/><figcaption class=\"wp-element-caption\">Figura 7. Br\u00fajula digital con cubierta de cart\u00f3n<\/figcaption><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>C\u00f3digos del proyecto<\/strong><\/h1>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;El c\u00f3digo software para Arduino del proyecto es el que aparece a continuaci\u00f3n. En \u00e9l, podemos observar funciones para poder recolectar los datos de los sensores, funciones para dibujar los componentes est\u00e1ticos de la pantalla, como el c\u00edrculo de la br\u00fajula, puntos cardinales, etc. y una funci\u00f3n para dibujar din\u00e1micamente la flecha de la br\u00fajula considerando los datos de los sensores.<\/p>\n\n\n\n<p>#include &lt;Adafruit_GFX.h&gt;<\/p>\n\n\n\n<p>#include &lt;Adafruit_ST7735.h&gt;<\/p>\n\n\n\n<p>#include &lt;Wire.h&gt;<\/p>\n\n\n\n<p>#include &lt;MPU6500_WE.h&gt;<\/p>\n\n\n\n<p>#include &lt;Adafruit_QMC5883P.h&gt;<\/p>\n\n\n\n<p>\/\/PINES<\/p>\n\n\n\n<p>#define TFT_CS&nbsp;&nbsp;&nbsp; 10<\/p>\n\n\n\n<p>#define TFT_RST&nbsp;&nbsp; 9<\/p>\n\n\n\n<p>#define TFT_DC&nbsp;&nbsp;&nbsp; 8<\/p>\n\n\n\n<p>#define BUTTON_PIN 7<\/p>\n\n\n\n<p>Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);<\/p>\n\n\n\n<p>#define BLACK&nbsp;&nbsp; ST77XX_BLACK<\/p>\n\n\n\n<p>#define WHITE&nbsp;&nbsp; ST77XX_WHITE<\/p>\n\n\n\n<p>#define RED&nbsp;&nbsp;&nbsp;&nbsp; ST77XX_RED<\/p>\n\n\n\n<p>#define SCREEN_WIDTH 128<\/p>\n\n\n\n<p>#define SCREEN_HEIGHT 160<\/p>\n\n\n\n<p>#define CENTER_X (SCREEN_WIDTH \/ 2)<\/p>\n\n\n\n<p>#define CENTER_Y (SCREEN_HEIGHT \/ 2)<\/p>\n\n\n\n<p>#define RADIUS 51<\/p>\n\n\n\n<p><strong>int<\/strong> displayMode = <strong>0<\/strong>;<\/p>\n\n\n\n<p><strong>int<\/strong> buttonState = <strong>HIGH<\/strong>;<\/p>\n\n\n\n<p><strong>int<\/strong> lastButtonState = <strong>HIGH<\/strong>;<\/p>\n\n\n\n<p>MPU6500_WE mpu = MPU6500_WE(<strong>0x69<\/strong>);<\/p>\n\n\n\n<p>Adafruit_QMC5883P brujula;<\/p>\n\n\n\n<p><strong>float<\/strong> currentHeading = <strong>0<\/strong>;<\/p>\n\n\n\n<p><strong>float<\/strong> previousHeading = <strong>-1<\/strong>;<\/p>\n\n\n\n<p><strong>float<\/strong> currentPitch = <strong>0<\/strong>;<\/p>\n\n\n\n<p><strong>float<\/strong> currentRoll = <strong>0<\/strong>;<\/p>\n\n\n\n<p>\/\/FUNCIONES PARA DIBUJAR LOS PTOS CARD.<\/p>\n\n\n\n<p><strong>void<\/strong> <strong>drawCardinalPoint<\/strong>(<strong>const<\/strong> <strong>char<\/strong>* <strong>text<\/strong>, <strong>int<\/strong> angle, <strong>int<\/strong> radius, <strong>uint16_t<\/strong> color){<\/p>\n\n\n\n<p>&nbsp; <strong>float<\/strong> rad = (angle<strong>-90<\/strong>)*PI\/<strong>180.0<\/strong>;<\/p>\n\n\n\n<p>&nbsp; <strong>int<\/strong> textX = CENTER_X + (radius+<strong>5<\/strong>)*<strong>cos<\/strong>(rad);<\/p>\n\n\n\n<p>&nbsp; <strong>int<\/strong> textY = CENTER_Y + (radius+<strong>5<\/strong>)*<strong>sin<\/strong>(rad);<\/p>\n\n\n\n<p>&nbsp; <strong>int16_t<\/strong> x1,y1; <strong>uint16_t<\/strong> w,h;<\/p>\n\n\n\n<p>&nbsp; tft.getTextBounds(<strong>text<\/strong>,<strong>0<\/strong>,<strong>0<\/strong>,&amp;x1,&amp;y1,&amp;w,&amp;h);<\/p>\n\n\n\n<p>&nbsp; tft.<strong>setCursor<\/strong>(textX-w\/<strong>2<\/strong>,textY-h\/<strong>2<\/strong>);<\/p>\n\n\n\n<p>&nbsp; tft.setTextColor(color);<\/p>\n\n\n\n<p>&nbsp; tft.<strong>setTextSize<\/strong>(<strong>1<\/strong>);<\/p>\n\n\n\n<p>&nbsp; tft.<strong>print<\/strong>(<strong>text<\/strong>);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>void<\/strong> <strong>drawStaticCompass<\/strong>(){<\/p>\n\n\n\n<p>&nbsp; tft.drawCircle(CENTER_X,CENTER_Y,RADIUS,WHITE);<\/p>\n\n\n\n<p>&nbsp; drawCardinalPoint(\u00abN\u00bb,<strong>0<\/strong>,RADIUS, RED);<\/p>\n\n\n\n<p>&nbsp; drawCardinalPoint(\u00abNE\u00bb,<strong>45<\/strong>,RADIUS+<strong>3<\/strong>, WHITE);<\/p>\n\n\n\n<p>&nbsp; drawCardinalPoint(\u00abE\u00bb,<strong>90<\/strong>,RADIUS+<strong>2<\/strong>, WHITE);<\/p>\n\n\n\n<p>&nbsp; drawCardinalPoint(\u00abSE\u00bb,<strong>135<\/strong>,RADIUS+<strong>5<\/strong>, WHITE);<\/p>\n\n\n\n<p>&nbsp; drawCardinalPoint(\u00abS\u00bb,<strong>180<\/strong>,RADIUS+<strong>2<\/strong>, WHITE);<\/p>\n\n\n\n<p>&nbsp; drawCardinalPoint(\u00abSO\u00bb,<strong>225<\/strong>,RADIUS+<strong>4<\/strong>, WHITE);<\/p>\n\n\n\n<p>&nbsp; drawCardinalPoint(\u00abO\u00bb,<strong>270<\/strong>,RADIUS, WHITE);<\/p>\n\n\n\n<p>&nbsp; drawCardinalPoint(\u00abNO\u00bb,<strong>315<\/strong>,RADIUS+<strong>2<\/strong>, WHITE);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/\/FLECHA y ACTUALIZACION<\/p>\n\n\n\n<p><strong>void<\/strong> <strong>drawArrow<\/strong>(<strong>float<\/strong> heading, <strong>int<\/strong> length, <strong>uint16_t<\/strong> color){<\/p>\n\n\n\n<p>&nbsp; <strong>float<\/strong> rad = (heading<strong>-90<\/strong>)*PI\/<strong>180.0<\/strong>;<\/p>\n\n\n\n<p>&nbsp; <strong>int<\/strong> x2 = CENTER_X + length*<strong>cos<\/strong>(rad);<\/p>\n\n\n\n<p>&nbsp; <strong>int<\/strong> y2 = CENTER_Y + length*<strong>sin<\/strong>(rad);<\/p>\n\n\n\n<p>&nbsp; tft.drawLine(CENTER_X,CENTER_Y,x2,y2,color);<\/p>\n\n\n\n<p>&nbsp; <strong>int<\/strong> offset_x = round(<strong>sin<\/strong>(rad));<\/p>\n\n\n\n<p>&nbsp; <strong>int<\/strong> offset_y = round(<strong>cos<\/strong>(rad));<\/p>\n\n\n\n<p>&nbsp; tft.drawLine(CENTER_X+offset_x,CENTER_Y-offset_y,x2+offset_x,y2-offset_y,color);<\/p>\n\n\n\n<p>&nbsp; tft.drawLine(CENTER_X-offset_x,CENTER_Y+offset_y,x2-offset_x,y2+offset_y,color);<\/p>\n\n\n\n<p>&nbsp; tft.fillCircle(CENTER_X,CENTER_Y,<strong>2<\/strong>,WHITE);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>void<\/strong> <strong>updateCompassArrow<\/strong>(<strong>float<\/strong> heading){<\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong>(<strong>abs<\/strong>(heading-previousHeading)&gt;<strong>1<\/strong> || previousHeading==<strong>-1<\/strong>){<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>if<\/strong>(previousHeading!=<strong>-1<\/strong>){<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; drawArrow(previousHeading,RADIUS<strong>-5<\/strong>,BLACK);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; drawArrow(heading,RADIUS<strong>-5<\/strong>,RED);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; previousHeading = heading;<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/\/BOTON<\/p>\n\n\n\n<p><strong>void<\/strong> <strong>handleButton<\/strong>(){<\/p>\n\n\n\n<p>&nbsp; buttonState = <strong>digitalRead<\/strong>(BUTTON_PIN);<\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong>(lastButtonState == <strong>HIGH<\/strong> &amp;&amp; buttonState == <strong>LOW<\/strong>){<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; displayMode = <strong>1<\/strong> &#8211; displayMode; \/\/ Cambia modo solo una vez por pulsaci\u00f3n<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; lastButtonState = buttonState;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/\/<\/p>\n\n\n\n<p><strong>void<\/strong> <strong>updateDisplayData<\/strong>(<strong>float<\/strong> heading, <strong>float<\/strong> pitch, <strong>float<\/strong> roll, <strong>int<\/strong> mode){<\/p>\n\n\n\n<p>&nbsp; tft.fillRect(<strong>0<\/strong>,<strong>0<\/strong>,SCREEN_WIDTH,<strong>20<\/strong>,BLACK);<\/p>\n\n\n\n<p>&nbsp; tft.setTextColor(WHITE);<\/p>\n\n\n\n<p>&nbsp; tft.<strong>setTextSize<\/strong>(<strong>1<\/strong>);<\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong>(mode==<strong>0<\/strong>){<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>setCursor<\/strong>(<strong>5<\/strong>,<strong>5<\/strong>);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>print<\/strong>(\u00abRUMBO: \u00ab);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>print<\/strong>(heading,<strong>0<\/strong>);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>write<\/strong>((<strong>char<\/strong>)<strong>248<\/strong>);<\/p>\n\n\n\n<p>&nbsp; }<strong>else<\/strong>{<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>setCursor<\/strong>(<strong>5<\/strong>,<strong>5<\/strong>);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>print<\/strong>(\u00abPITCH:\u00bb);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>print<\/strong>(pitch,<strong>0<\/strong>);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>write<\/strong>((<strong>char<\/strong>)<strong>248<\/strong>);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>setCursor<\/strong>(<strong>65<\/strong>,<strong>5<\/strong>);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>print<\/strong>(\u00abROLL:\u00bb);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>print<\/strong>(roll,<strong>0<\/strong>);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>write<\/strong>((<strong>char<\/strong>)<strong>248<\/strong>);<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/\/MPU<\/p>\n\n\n\n<p><strong>void<\/strong> <strong>readMPUAngles<\/strong>(){<\/p>\n\n\n\n<p>&nbsp; xyzFloat acc = mpu.getGValues();<\/p>\n\n\n\n<p>&nbsp; currentRoll = atan2(acc.y, acc.z);<\/p>\n\n\n\n<p>&nbsp; <strong>float<\/strong> acc_sq = <strong>sqrt<\/strong>(acc.y*acc.y + acc.z*acc.z);<\/p>\n\n\n\n<p>&nbsp; currentPitch = atan2(-acc.x, acc_sq);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/\/ CALCULO RUMBO<\/p>\n\n\n\n<p><strong>float<\/strong> <strong>getMagneticHeading<\/strong>(){<\/p>\n\n\n\n<p>&nbsp; <strong>float<\/strong> mx, my, mz;<\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong>(brujula.getGaussField(&amp;mx,&amp;my,&amp;mz)){<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>float<\/strong> sinPitch = <strong>sin<\/strong>(currentPitch);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>float<\/strong> cosPitch = <strong>cos<\/strong>(currentPitch);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>float<\/strong> sinRoll&nbsp; = <strong>sin<\/strong>(currentRoll);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>float<\/strong> cosRoll&nbsp; = <strong>cos<\/strong>(currentRoll);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>float<\/strong> Xh = mx * cosPitch + mz * sinPitch;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>float<\/strong> Yh = mx * sinRoll * sinPitch + my * cosRoll &#8211; mz * sinRoll * cosPitch;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>float<\/strong> heading = atan2(Xh, -Yh) * <strong>180.0<\/strong>\/PI;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>if<\/strong>(heading &lt; <strong>0<\/strong>) heading += <strong>360<\/strong>;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>return<\/strong> heading;<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; <strong>return<\/strong> previousHeading;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/\/SET UP Y LOOPEO<\/p>\n\n\n\n<p><strong>void<\/strong> setup(){<\/p>\n\n\n\n<p>&nbsp; <strong>pinMode<\/strong>(BUTTON_PIN, <strong>INPUT_PULLUP<\/strong>);<\/p>\n\n\n\n<p>&nbsp; tft.initR(INITR_BLACKTAB);<\/p>\n\n\n\n<p>&nbsp; tft.setRotation(<strong>0<\/strong>);<\/p>\n\n\n\n<p>&nbsp; tft.fillScreen(BLACK);<\/p>\n\n\n\n<p>&nbsp; <strong>Wire<\/strong>.<strong>begin<\/strong>();<\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong>(!brujula.<strong>begin<\/strong>()){<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.setTextColor(RED);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>setCursor<\/strong>(<strong>0<\/strong>,<strong>5<\/strong>);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>print<\/strong>(\u00abError QMC5883P\u00bb);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>while<\/strong>(<strong>1<\/strong>) <strong>delay<\/strong>(<strong>100<\/strong>);<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; brujula.<strong>setMode<\/strong>(QMC5883P_MODE_CONTINUOUS);<\/p>\n\n\n\n<p>&nbsp; brujula.setODR(QMC5883P_ODR_50HZ);<\/p>\n\n\n\n<p>&nbsp; brujula.setOSR(QMC5883P_OSR_4);<\/p>\n\n\n\n<p>&nbsp; brujula.setDSR(QMC5883P_DSR_2);<\/p>\n\n\n\n<p>&nbsp; brujula.setRange(QMC5883P_RANGE_8G);<\/p>\n\n\n\n<p>&nbsp; brujula.setSetResetMode(QMC5883P_SETRESET_ON);<\/p>\n\n\n\n<p>&nbsp; <strong>if<\/strong>(!mpu.init()){<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.setTextColor(RED);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>setCursor<\/strong>(<strong>0<\/strong>,<strong>15<\/strong>);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; tft.<strong>print<\/strong>(\u00abError MPU6500\u00bb);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; <strong>while<\/strong>(<strong>1<\/strong>) <strong>delay<\/strong>(<strong>100<\/strong>);<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; drawStaticCompass();<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>void<\/strong> loop(){<\/p>\n\n\n\n<p>&nbsp; handleButton();<\/p>\n\n\n\n<p>&nbsp; readMPUAngles();<\/p>\n\n\n\n<p>&nbsp; \/\/ La flecha de la br\u00fajula siempre se actualiza<\/p>\n\n\n\n<p>&nbsp; currentHeading = getMagneticHeading();<\/p>\n\n\n\n<p>&nbsp; updateCompassArrow(currentHeading);<\/p>\n\n\n\n<p>&nbsp; \/\/ Datos num\u00e9ricos seg\u00fan el modo<\/p>\n\n\n\n<p>&nbsp; updateDisplayData(currentHeading,currentPitch*<strong>180<\/strong>\/PI,currentRoll*<strong>180<\/strong>\/PI,displayMode);<\/p>\n\n\n\n<p>&nbsp; <strong>delay<\/strong>(<strong>50<\/strong>);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<hr class=\"wp-block-separator aligncenter has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Casos de uso<\/strong><\/h1>\n\n\n\n<p>Algunos de los casos de uso de una br\u00fajula digital en sistemas empotrados son los siguientes.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PANTALLA<\/strong>: Muestra la br\u00fajula con sus puntos cardinales y los grados.<\/li>\n<\/ul>\n\n\n\n<p><em>La pantalla del sistema se encarga de mostrar de forma visual la br\u00fajula digital, incluyendo los puntos cardinales y los grados correspondientes al rumbo actual. Gracias a esta visualizaci\u00f3n, el usuario puede conocer en todo momento la orientaci\u00f3n del dispositivo de manera clara e intuitiva.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>BOT\u00d3N<\/strong>: Cambia de modo de muestreo de rumbo con el pitch y roll.<\/li>\n<\/ul>\n\n\n\n<p><em>El sistema tambi\u00e9n incorpora un bot\u00f3n que permite cambiar el modo de muestreo del rumbo, teniendo en cuenta los valores de pitch y roll. Esta funcionalidad es importante, ya que permite adaptar la medici\u00f3n de la orientaci\u00f3n cuando el dispositivo se encuentra inclinado, mejorando la precisi\u00f3n de los datos mostrados<\/em>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SENSOR HMC5883L<\/strong>: Mide los campos magn\u00e9ticos en 3 ejes y determina el norte.<\/li>\n<\/ul>\n\n\n\n<p><br><em>El sensor HMC5883L, mide los campos magn\u00e9ticos en los tres ejes espaciales y permite determinar la direcci\u00f3n del norte magn\u00e9tico. Este sensor es fundamental para el funcionamiento de la br\u00fajula digital, ya que proporciona los datos b\u00e1sicos de orientaci\u00f3n.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SENSOR MPU6500<\/strong>: Mide la inclinaci\u00f3n y gracias a este compensa los datos para que siga mostrando el norte.<\/li>\n<\/ul>\n\n\n\n<p><em>&nbsp;El sensor MPU6500, es el encargado de medir la inclinaci\u00f3n del dispositivo. Gracias a los datos de este sensor, es posible compensar las mediciones del campo magn\u00e9tico, asegurando que la br\u00fajula contin\u00fae mostrando correctamente el norte incluso cuando el sistema no se encuentra en posici\u00f3n horizontal<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Problemas y soluciones encontradas<\/strong><\/h1>\n\n\n\n<p>Para elaborar una br\u00fajula compacta con un dise\u00f1o reducido y limpio nos hemos encontrado varios problemas.<\/p>\n\n\n\n<p>-El primero de ellos fue la sensibilidad del sensor HMC5883L para detectar campos magn\u00e9ticos, al ser el campo terrestre muy d\u00e9bil, cualquier interferencia (componentes electr\u00f3nicos, imanes, otros dispositivos) cambiaba el funcionamiento de la br\u00fajula. Cubrimos la br\u00fajula con una caja de cart\u00f3n para evitar interferencias electromagn\u00e9ticas producidas por la corriente el\u00e9ctrica de los cables de conexi\u00f3n.<\/p>\n\n\n\n<p>-Pantalla sin br\u00fajula centrada. Se ajust\u00f3 con funciones matem\u00e1ticas (aparece en el c\u00f3digo en las funciones de dibujo).<\/p>\n\n\n\n<p>-El output del sensor HMC5883L no mostraba datos, el problema fue un sensor defectuoso, por lo que tuvimos que comprar varios sensores m\u00e1s y comprobamos su funcionamiento.<\/p>\n\n\n\n<p>-Adem\u00e1s, uno de los problemas principales al que nos hemos enfrentado es que, con cualquier m\u00ednimo movimiento en los cables y conexiones, la br\u00fajula dejaba de funcionar. Esto nos pasaba todas las veces que nos reun\u00edamos. Lo hemos intentado solucionar a\u00f1adiendo varias bridas a las conexiones del circuito.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusi\u00f3n<\/h1>\n\n\n\n<p>El desarrollo de la br\u00fajula digital con Arduino ha permitido comprender de manera pr\u00e1ctica la integraci\u00f3n de sensores en sistemas empotrados, combinando hardware y software para obtener datos de orientaci\u00f3n (rumbo, pitch y roll) de forma fiable. El proyecto ha servido para unir conceptos te\u00f3ricos de electr\u00f3nica, se\u00f1ales y sistemas en tiempo real.<\/p>\n\n\n\n<p>Este proyecto demuestra que es posible implementar soluciones funcionales con un coste reducido (16,56 \u20ac), lo que refuerza la viabilidad econ\u00f3mica y la utilidad de este tipo de dispositivos para aplicaciones en rob\u00f3tica, navegaci\u00f3n y dom\u00f3tica. A pesar de los avances, se identificaron limitaciones y problemas importantes: alta sensibilidad del magnet\u00f3metro a interferencias, fragilidad en las conexiones de los sensores y necesidad de calibraci\u00f3n precisa. Estas dificultades resaltan la importancia de un dise\u00f1o robusto y t\u00e9cnicas de compensaci\u00f3n en entornos y aplicaciones reales.<\/p>\n\n\n\n<p>En definitiva, el proyecto no solo cumpli\u00f3 los objetivos planteados, sino que tambi\u00e9n nos proporcion\u00f3 un aprendizaje (a base de errores cometidos y soluciones buscadas) sobre la interacci\u00f3n entre sensores y programaci\u00f3n.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>V\u00eddeos explicativos del proyecto<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Primera prueba de pantalla<\/h2>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"720\" style=\"aspect-ratio: 1280 \/ 720;\" width=\"1280\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/Primera-prueba-pantalla-1-1.mp4\"><\/video><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Prueba del HMC5883L<\/h2>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"720\" style=\"aspect-ratio: 1280 \/ 720;\" width=\"1280\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/Pruba-hmc-1.mp4\"><\/video><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Implementaci\u00f3n MPU6050<\/h2>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"480\" style=\"aspect-ratio: 848 \/ 480;\" width=\"848\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/implementacionmpu-1.mp4\"><\/video><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Pruebas con im\u00e1n<\/h2>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"480\" style=\"aspect-ratio: 848 \/ 480;\" width=\"848\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/pruebaiman-1.mp4\"><\/video><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Primeras pruebas ensamblando en la caja<\/h2>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"848\" style=\"aspect-ratio: 480 \/ 848;\" width=\"480\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/ensamble-caja-1.mp4\"><\/video><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Explicaci\u00f3n del proyecto Dentro del \u00e1mbito del dise\u00f1o de sistemas empotrados, la integraci\u00f3n de sensores capaces de proporcionar una informaci\u00f3n fiable acerca del entorno es importante para garantizar un buen funcionamiento de dispositivos m\u00f3viles&#46;&#46;&#46;<\/p>\n","protected":false},"author":312,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-9551","post","type-post","status-publish","format-standard","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Br\u00fajula digital con Arduino. Grupo 15 - 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\/brujula-digital-con-arduino-grupo-15\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Br\u00fajula digital con Arduino. Grupo 15 - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Explicaci\u00f3n del proyecto Dentro del \u00e1mbito del dise\u00f1o de sistemas empotrados, la integraci\u00f3n de sensores capaces de proporcionar una informaci\u00f3n fiable acerca del entorno es importante para garantizar un buen funcionamiento de dispositivos m\u00f3viles&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-19T16:25:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-19T16:25:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj.png\" \/>\n\t<meta property=\"og:image:width\" content=\"298\" \/>\n\t<meta property=\"og:image:height\" content=\"298\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"dse2526g15\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"dse2526g15\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 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\\\/brujula-digital-con-arduino-grupo-15\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/\"},\"author\":{\"name\":\"dse2526g15\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/220d60cdfab06bb228493b194ef0f815\"},\"headline\":\"Br\u00fajula digital con Arduino. Grupo 15\",\"datePublished\":\"2025-12-19T16:25:32+00:00\",\"dateModified\":\"2025-12-19T16:25:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/\"},\"wordCount\":2383,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2025\\\/12\\\/bruj.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/\",\"name\":\"Br\u00fajula digital con Arduino. Grupo 15 - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2025\\\/12\\\/bruj.png\",\"datePublished\":\"2025-12-19T16:25:32+00:00\",\"dateModified\":\"2025-12-19T16:25:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2025\\\/12\\\/bruj.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2025\\\/12\\\/bruj.png\",\"width\":298,\"height\":298},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/brujula-digital-con-arduino-grupo-15\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Br\u00fajula digital con Arduino. Grupo 15\"}]},{\"@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\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/220d60cdfab06bb228493b194ef0f815\",\"name\":\"dse2526g15\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb11063090ed09fd8562712bb97dd0c1acb321d321b084937fb0f24d4f002ad?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb11063090ed09fd8562712bb97dd0c1acb321d321b084937fb0f24d4f002ad?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb11063090ed09fd8562712bb97dd0c1acb321d321b084937fb0f24d4f002ad?s=96&d=mm&r=g\",\"caption\":\"dse2526g15\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/dse2526g15\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Br\u00fajula digital con Arduino. Grupo 15 - 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\/brujula-digital-con-arduino-grupo-15\/","og_locale":"es_ES","og_type":"article","og_title":"Br\u00fajula digital con Arduino. Grupo 15 - Proyectos con Arduino.","og_description":"Explicaci\u00f3n del proyecto Dentro del \u00e1mbito del dise\u00f1o de sistemas empotrados, la integraci\u00f3n de sensores capaces de proporcionar una informaci\u00f3n fiable acerca del entorno es importante para garantizar un buen funcionamiento de dispositivos m\u00f3viles&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2025-12-19T16:25:32+00:00","article_modified_time":"2025-12-19T16:25:34+00:00","og_image":[{"width":298,"height":298,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj.png","type":"image\/png"}],"author":"dse2526g15","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"dse2526g15","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/"},"author":{"name":"dse2526g15","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/220d60cdfab06bb228493b194ef0f815"},"headline":"Br\u00fajula digital con Arduino. Grupo 15","datePublished":"2025-12-19T16:25:32+00:00","dateModified":"2025-12-19T16:25:34+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/"},"wordCount":2383,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/","name":"Br\u00fajula digital con Arduino. Grupo 15 - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj.png","datePublished":"2025-12-19T16:25:32+00:00","dateModified":"2025-12-19T16:25:34+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2025\/12\/bruj.png","width":298,"height":298},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/brujula-digital-con-arduino-grupo-15\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Br\u00fajula digital con Arduino. Grupo 15"}]},{"@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":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/220d60cdfab06bb228493b194ef0f815","name":"dse2526g15","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/bbb11063090ed09fd8562712bb97dd0c1acb321d321b084937fb0f24d4f002ad?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbb11063090ed09fd8562712bb97dd0c1acb321d321b084937fb0f24d4f002ad?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbb11063090ed09fd8562712bb97dd0c1acb321d321b084937fb0f24d4f002ad?s=96&d=mm&r=g","caption":"dse2526g15"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/dse2526g15\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9551","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\/312"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=9551"}],"version-history":[{"count":3,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9551\/revisions"}],"predecessor-version":[{"id":9726,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9551\/revisions\/9726"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=9551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=9551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=9551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}