{"id":3145,"date":"2021-01-20T13:11:30","date_gmt":"2021-01-20T13:11:30","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=3145"},"modified":"2021-01-20T13:11:30","modified_gmt":"2021-01-20T13:11:30","slug":"robot-autobalanceado","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/","title":{"rendered":"Robot autobalanceado"},"content":{"rendered":"\n<ol class=\"wp-block-list\"><li>Introducci\u00f3n<\/li><\/ol>\n\n\n\n<p>Nuestro decisi\u00f3n de proyecto ha sido un robot autobalanceado, el objetivo es que la m\u00e1quina, sea capaz de mantener su posici\u00f3n erguida en equilibrio y estable sobre sus 2 ruedas. Para conseguir este objetivo hemos utilizado una IMU (Inertial Measurement Unit), un sensor que incorpora un giroscopio y un aceler\u00f3metro para medir los cambios de posici\u00f3n en el espacio del sistema y por tanto las rotaciones en los tres ejes que se puedan dar; el segundo componente, es un par de motores, para realizar los movimientos de ajuste en la vertical en caso de que el sistema empiece a \u201ccaer\u201d y mantener as\u00ed su equilibrio.&nbsp;<\/p>\n\n\n\n<p>Es una implementaci\u00f3n de un sistema de control con retroalimentaci\u00f3n, como los sistemas distribuidores de carga o estabilizadores. Siguen como principio de funcionamiento, el uso de los valores de entrada, para variar el valor de salida para alcanzar el objetivo.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\"><li>Implementaci\u00f3n<\/li><\/ol>\n\n\n\n<p>La implementaci\u00f3n requiere de varias partes esenciales para el funcionamiento:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>PID (Proportional Integral Derivative): Es una de las partes fundamentales para el sistema, se encarga de calcular el valor de salida usando el error entre la posici\u00f3n deseada y la medida como entrada. Para ello, el sistema de control PID, usa 3 variables: la Proporcional, que se multiplica al error, la Integrativa, que se multiplica al acumulado los errores anteriores y la Derivativa que se multiplica a la variaci\u00f3n del error. Todas ellas, se combinan para obtener la salida.<\/li><\/ul>\n\n\n\n<p>La primera, es la respuesta inmediata al error, la segunda es una reacci\u00f3n a la acumulacion del error y la tercera, contrarresta la velocidad del cambio, evita que las 2 anteriores sobre reaccionen a la entrada y en vez de corregir el error, creen otro opuesto.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Filtro complementario: Este m\u00f3dulo se va a encargar de filtrar los datos que genera la IMU para calcular el \u00e1ngulo; el objetivo es el procesado de los datos de la IMU para generar el \u00e1ngulo actual del sistema de la manera m\u00e1s precisa. Aprovecha la falta de ruido del giroscopio y la falta de deriva del aceler\u00f3metro y, contrarresta, la deriva a largo plazo del giroscopio y el alto ruido del aceler\u00f3metro.<\/li><li>Interrupciones: Las interrupciones son las encargadas de generar las salidas en el proyecto, en nuestro caso utilizaremos un par de motores. La idea ha sido generar interrupciones en intervalos variables dependiendo del \u00e1ngulo del sistema y la velocidad de rotaci\u00f3n, de esta forma se hace mover los motores paso a paso el n\u00famero de veces necesario para contrarrestar el movimiento y tratar de estabilizar el sistema.<\/li><\/ul>\n\n\n\n<p>Todas estas partes se juntan de forma que leeremos los datos de la IMU, los procesamos para sacar el peridodo de interrupciones y lo seteamos de forma que comiencen a generarse seg\u00fan sean necesarias y realizaremos espera activa para filtrar los datos no necesarios.<\/p>\n\n\n\n<p>Hardware:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Pieza<\/td><td>Cantidad<\/td><td>Precio (\u20ac\/unidad)<\/td><td>Descripci\u00f3n (si se precisa)<\/td><\/tr><tr><td>Motor paso a paso<\/td><td>2<\/td><td>5.12<\/td><td><\/td><\/tr><tr><td>Controlador Drv8825<\/td><td>2<\/td><td>2.40<\/td><td>(controladores de los motores)<\/td><\/tr><tr><td>Arduino NANO<\/td><td>1<\/td><td>4.66<\/td><td><\/td><\/tr><tr><td>rueda LEGO<\/td><td>2<\/td><td>2.99<\/td><td><\/td><\/tr><tr><td>buzzer&nbsp;<\/td><td>1<\/td><td>2.99<\/td><td><\/td><\/tr><tr><td>IMU (MPU 6050)<\/td><td>1<\/td><td>8.67<\/td><td><\/td><\/tr><tr><td>soporte<\/td><td>1<\/td><td>1.00<\/td><td>hemos usado una regla<\/td><\/tr><tr><td>bateria<\/td><td>1<\/td><td>8 pilas por 3.66<\/td><td>hemos usado 8 pilas con aluminio para hacer de bater\u00eda<\/td><\/tr><tr><td>breadboard<\/td><td>1<\/td><td>3.50<\/td><td>para el circuito<\/td><\/tr><tr><td>cables<\/td><td><\/td><td>120 cables con pines 6.99<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\"><li>Reparto de tareas<\/li><\/ol>\n\n\n\n<p>El reparto de tareas ha sido el siguiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Montura de hardware: Conjunto, organizamos d\u00edas para quedar f\u00edsicamente y realizar el proyecto.<\/li><li>Archivo principal(Self_Balancing_Robot_Project_Code.ino): Conjunto, exactamente igual que el punto anterior.<\/li><li>PID: Santiago Serrano Marco<\/li><li>Filtro complementario: Rodrigo Mart\u00ednez Ruiz<\/li><li>Extracci\u00f3n datos MPU: Rodrigo Mart\u00ednez Ruiz<\/li><li>Interrupciones: Alejandro Valtierra Ba\u00f1os<\/li><li>Memoria: Alejandro Valtierra Ba\u00f1os<\/li><li>V\u00eddeo: Santiago Serrano Marco<\/li><\/ul>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\"><li>Problemas y soluciones encontradas<\/li><\/ol>\n\n\n\n<ul class=\"wp-block-list\"><li>Interrupciones: Las interrupciones en Arduino base son mediante hardware, de modo que seleccionas uno de los pines y lo preparas de forma que si llega un flanco de subida o bajada (decisi\u00f3n tuya) genere una interrupci\u00f3n controlada por un handler. Como nuestro objetivo es generar interrupciones continuas se busc\u00f3 una forma de evitar tener que comer el tiempo de ejecuci\u00f3n poniendo salidas en un pin mediante el reloj; se encontr\u00f3 una librer\u00eda que genera interrupciones seg\u00fan el reloj y te permite establecer el periodo entre interrupciones.&nbsp;<\/li><li>Interrupciones: Otro de los problemas era la cantidad de tiempo gastado en interrupciones, lo que hac\u00eda que casi se gastase todo el tiempo en ellas en vez de programa, por tanto la soluci\u00f3n fue encontrar instrucciones at\u00f3micas que en el peor de los casos hacen que las interrupciones ocupen menos de un tercio del total de las instrucciones en arduino, y dado que se usa espera activa no se pierde pr\u00e1cticamente nada.<\/li><li>IMU: Al principio se pens\u00f3 que la IMU dar\u00eda los valores correctos en cada momento, pero resulta que comete errores, lo cual hizo la necesidad de crear la clase filtroComplementario con el objetivo de ajustar los errores y que no salieran \u00e1ngulos incorrectos para generar las interrupciones.<\/li><\/ul>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\"><li>C\u00f3digo<\/li><\/ol>\n\n\n\n<p>Para no llenar el documento de c\u00f3digo se adjunta en el zip y se har\u00e1 referencia a las funciones y su explicaci\u00f3n.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>filtroComplementario.h:<\/li><\/ul>\n\n\n\n<p>filtroComplementario(float escGyro, float escAcel): constructor.<\/p>\n\n\n\n<p>void setFiltroAcel (float x): set para el filtro de la aceleraci\u00f3n.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; void setFiltroPasa (float ratio): set para el filtro de el paso alto y el bajo.<\/p>\n\n\n\n<p>void filtraAcel (): se usa para evitar los valores del acelerometro in\u00fatiles dado que son muy sensibles<\/p>\n\n\n\n<p>void calcularAngulo(int8_t i): calculamos el nuevo \u00e1ngulo.<\/p>\n\n\n\n<p>void calcularAngulos(): simplemente llama a los tres calcularAngulo.<\/p>\n\n\n\n<p>void calcularPeriodo(): calcula el periodo al que deben producirse las interrupciones.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>pid.h:&nbsp;<\/li><\/ul>\n\n\n\n<p>pid (): es el constructor de la clase<\/p>\n\n\n\n<p>float calcularPID (float error): esta funci\u00f3n la utilizamos para calcular el valor exacto en base al error<\/p>\n\n\n\n<p>void calcularPeriodo(): Nos sirve para calcular el periodo al que se deben generar las interrupciones.<\/p>\n\n\n\n<p>void setPeriodo (uint32_t periodo): Funci\u00f3n set para el tPeriodo.<\/p>\n\n\n\n<p>void setVariables (float p, float i, float d): Funci\u00f3n para hacer set de las variables de los tres errores del PID ya explicados.<\/p>\n\n\n\n<p>float calcularP (float error): Calcular el error proporcional.<\/p>\n\n\n\n<p>float calcularI (float error): Calcular el error integral.<\/p>\n\n\n\n<p>float calcularD (float error): Calcular el error derivativo<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>I2Cdev.h: Es una librer\u00eda adicional requerida por la siguiente.<\/li><li>MPU6050.h: Usaremos esta librer\u00eda para sacar los valores de la IMU.<\/li><li>Self_Balancing_Robot_Project_Code.ino:<\/li><\/ul>\n\n\n\n<p>setup(): Inicializamos las variables, ponemos el modo de los pines, ponemos unos tiempos de espera para la preparaci\u00f3n indic\u00e1ndose con un buzzer, se comprueba que funcione la IMU e inicia el periodo para las interrupciones.<\/p>\n\n\n\n<p>loop(): Recogemos los valores de la IMU, los procesamos y generamos el nuevo periodo de interrupciones habiendo dicho la direcci\u00f3n de los motores, despu\u00e9s hacemos una espera activa para filtrar los valores antes de volver a leer los valores.<\/p>\n\n\n\n<p>interrupcion(): Es el handler de la interrupci\u00f3n, mantiene la salida de los motores durante 32 ciclos en alto y luego la para, lo suficiente para que den un paso.<\/p>\n\n\n\n<p>pitidos(): Sirve solo para dar tres pitidos cuando se la llame.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"6\"><li>Casos de uso<\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/dKplLC3xQ1BKLxkV6Ngp3rU4iFlgK-WvAM8kXFle6mATM8MfO4pwIDFkaJmP9ivluAFq_hVgtvd2L-DswxAuYv7xxpyJpsUdF5PH6W-vpSkXXzMrQ2hb84JW5v1C\" alt=\"\" width=\"425\" height=\"319\" \/><\/figure>\n\n\n\n<p>El robot se basa en la implementaci\u00f3n de un sistema de control retroalimentado, es una demostraci\u00f3n del mismo.<\/p>\n\n\n\n<p>La teor\u00eda dice que a diferencia de un sistema de control abierto, la actuaci\u00f3n del sistema se calcula respecto a lo solicitado y a la posici\u00f3n actual, en vez de solamente calcularla con respecto a lo solicitado.<\/p>\n\n\n\n<p>Nuestra implementaci\u00f3n de esta demostraci\u00f3n, es un robot autobalanceado, similar a un SEGWAY.<\/p>\n\n\n\n<p>Su funcionamiento comienza con los datos de la IMU que una vez son procesadas por el filtro complementario, nos dan el \u00e1ngulo de inclinaci\u00f3n actual del robot.&nbsp;<\/p>\n\n\n\n<p>Con este \u00e1ngulo se calcula la diferencia o error respecto al \u00e1ngulo deseado, que es para nosotros la posici\u00f3n de equilibrio. Si este error es mayor de 20\u00ba se considera que el robot no se puede recuperar y se apaga.&nbsp;<\/p>\n\n\n\n<p>Este error, es la entrada del pid que calcula la actuaci\u00f3n, Act\u00faa proporcionalmente respecto al error, si el error no mejora, aumenta el valor de la salida y si la velocidad de cambio del error es muy alta, act\u00faa contrariamente para conseguir que una vez llegado a su objetivo (error = 0) se mantenga all\u00ed y no cree un error opuesto. Ajustando el peso de todas estas correcciones, se consigue llegar a error 0 de la manera m\u00e1s r\u00e1pida posible.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Nuestro decisi\u00f3n de proyecto ha sido un robot autobalanceado, el objetivo es que la m\u00e1quina, sea capaz de mantener su posici\u00f3n erguida en equilibrio y estable sobre sus 2 ruedas. Para conseguir este&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":3157,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3145","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.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Robot autobalanceado - 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\/robot-autobalanceado\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Robot autobalanceado - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Introducci\u00f3n Nuestro decisi\u00f3n de proyecto ha sido un robot autobalanceado, el objetivo es que la m\u00e1quina, sea capaz de mantener su posici\u00f3n erguida en equilibrio y estable sobre sus 2 ruedas. Para conseguir este&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-20T13:11:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/robotAutobalanceado.png\" \/>\n\t<meta property=\"og:image:width\" content=\"537\" \/>\n\t<meta property=\"og:image:height\" content=\"651\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Administrador de la red\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Administrador de la red\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 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\\\/robot-autobalanceado\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/\"},\"author\":{\"name\":\"Administrador de la red\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/bdc38fea664f13638d2a51f4d2fc7211\"},\"headline\":\"Robot autobalanceado\",\"datePublished\":\"2021-01-20T13:11:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/\"},\"wordCount\":1422,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2021\\\/01\\\/robotAutobalanceado.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/\",\"name\":\"Robot autobalanceado - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2021\\\/01\\\/robotAutobalanceado.png\",\"datePublished\":\"2021-01-20T13:11:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2021\\\/01\\\/robotAutobalanceado.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2021\\\/01\\\/robotAutobalanceado.png\",\"width\":537,\"height\":651},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-autobalanceado\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Robot autobalanceado\"}]},{\"@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\\\/bdc38fea664f13638d2a51f4d2fc7211\",\"name\":\"Administrador de la red\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"caption\":\"Administrador de la red\"},\"sameAs\":[\"https:\\\/\\\/blogs.etsii.urjc.es\"],\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/etsiiadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Robot autobalanceado - 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\/robot-autobalanceado\/","og_locale":"es_ES","og_type":"article","og_title":"Robot autobalanceado - Proyectos con Arduino.","og_description":"Introducci\u00f3n Nuestro decisi\u00f3n de proyecto ha sido un robot autobalanceado, el objetivo es que la m\u00e1quina, sea capaz de mantener su posici\u00f3n erguida en equilibrio y estable sobre sus 2 ruedas. Para conseguir este&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2021-01-20T13:11:30+00:00","og_image":[{"width":537,"height":651,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/robotAutobalanceado.png","type":"image\/png"}],"author":"Administrador de la red","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Administrador de la red","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/"},"author":{"name":"Administrador de la red","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/bdc38fea664f13638d2a51f4d2fc7211"},"headline":"Robot autobalanceado","datePublished":"2021-01-20T13:11:30+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/"},"wordCount":1422,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/robotAutobalanceado.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/","name":"Robot autobalanceado - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/robotAutobalanceado.png","datePublished":"2021-01-20T13:11:30+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/robotAutobalanceado.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/robotAutobalanceado.png","width":537,"height":651},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-autobalanceado\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Robot autobalanceado"}]},{"@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\/bdc38fea664f13638d2a51f4d2fc7211","name":"Administrador de la red","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","caption":"Administrador de la red"},"sameAs":["https:\/\/blogs.etsii.urjc.es"],"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/etsiiadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/3145","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=3145"}],"version-history":[{"count":1,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/3145\/revisions"}],"predecessor-version":[{"id":3160,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/3145\/revisions\/3160"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/3157"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=3145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=3145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=3145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}