{"id":10207,"date":"2026-05-05T17:14:55","date_gmt":"2026-05-05T15:14:55","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=10207"},"modified":"2026-05-05T17:14:57","modified_gmt":"2026-05-05T15:14:57","slug":"levitador-magnetico","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/","title":{"rendered":"Levitador Magn\u00e9tico"},"content":{"rendered":"\n<p>En este post se describe el dise\u00f1o, implementaci\u00f3n y puesta en marcha de un sistema de levitaci\u00f3n magn\u00e9tica basado en control electr\u00f3nico. El objetivo principal del proyecto es lograr la suspensi\u00f3n estable de un im\u00e1n mediante la regulaci\u00f3n del campo magn\u00e9tico generado por un electroim\u00e1n. Para ello, se ha desarrollado un sistema que integra sensores, electr\u00f3nica de potencia y un controlador digital, permitiendo no solo el funcionamiento del levitador, sino tambi\u00e9n su ajuste y an\u00e1lisis experimental. A lo largo de esta memoria se detallan tanto las decisiones de dise\u00f1o como el comportamiento del sistema.<\/p>\n\n\n\n<p>A continuaci\u00f3n, se listan los componentes del sistema para tenerlos como referencia y poder seguir las explicaciones de qu\u00e9 papel juega cada uno dentro del proyecto:<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-grid wp-container-core-group-is-layout-9649a0d9 wp-block-group-is-layout-grid\">\n<p>U1 = Arduino Nano<\/p>\n\n\n\n<p>U2 = LM2596 (buck 12V -&gt; 7.5V)<\/p>\n\n\n\n<p>U3 = TC4427 (driver MOSFET)<\/p>\n\n\n\n<p>U4 = IRLZ44N (MOSFET N)<\/p>\n\n\n\n<p>U5 = Pantalla OLED I2C (SDA, SCL, GND, VCC)<\/p>\n\n\n\n<p>U6 = SS495A (sensor Hall anal\u00f3gico)<\/p>\n\n\n\n<p>B1 = Bot\u00f3n<\/p>\n\n\n\n<p>L1 = Bobina \/ electroim\u00e1n<\/p>\n\n\n\n<p>D1 = SB5100<\/p>\n\n\n\n<p>R1 = 10 ohm<\/p>\n\n\n\n<p>R2 = 47 kohm<\/p>\n\n\n\n<p>C1 = 100 nF<\/p>\n\n\n\n<p>C2 = 100 nF<\/p>\n\n\n\n<p>C3 = 10 uF<\/p>\n\n\n\n<p>C4 = 1000 uF<\/p>\n\n\n\n<p>C5 = 100 uF<\/p>\n\n\n\n<p>C6 = 100 nF<\/p>\n\n\n\n<p>P1 = Potenci\u00f3metro Setpoint<\/p>\n\n\n\n<p>P2 = Potenci\u00f3metro PwmBase<\/p>\n\n\n\n<p>P3 = Potenci\u00f3metro Kd<\/p>\n<\/div>\n\n\n\n<p>En primer lugar, la alimentaci\u00f3n del sistema parte de una fuente de 12 V, necesaria para energizar la bobina (L1), que es el elemento actuador encargado de generar el campo magn\u00e9tico. Esta tensi\u00f3n es acondicionada mediante un convertidor reductor <strong>LM2596 (U2)<\/strong>, el cual transforma los 12 V a aproximadamente 7.5 V para alimentar al <strong>Arduino Nano (U1)<\/strong> a trav\u00e9s de su pin VIN. Este m\u00f3dulo permite una conversi\u00f3n eficiente y estable, reduciendo disipaci\u00f3n t\u00e9rmica respecto a reguladores lineales. Para estabilizar la l\u00ednea de entrada se utiliza el condensador <strong>C4 (1000 \u00b5F)<\/strong>, que filtra variaciones bruscas de corriente generadas por la bobina. A su vez, los condensadores <strong>C5 (100 \u00b5F)<\/strong> y <strong>C6 (100 nF)<\/strong> se encargan del desacople en la l\u00ednea de 5 V del Arduino, eliminando ruido de baja y alta frecuencia respectivamente.<\/p>\n\n\n\n<p>La medici\u00f3n de posici\u00f3n se realiza mediante el sensor Hall anal\u00f3gico <strong>SS495A (U6)<\/strong>, el cual entrega una tensi\u00f3n proporcional al campo magn\u00e9tico detectado. Este componente es clave para cerrar el lazo de control, ya que permite conocer la posici\u00f3n del objeto levitado. Su salida se conecta a la entrada anal\u00f3gica A0 del Arduino. El condensador <strong>C1 (100 nF)<\/strong> se incorpora como desacople local para reducir ruido en la se\u00f1al del sensor, mejorando la estabilidad de la medici\u00f3n.<\/p>\n\n\n\n<p>El procesamiento y control del sistema lo realiza el <strong>Arduino Nano (U1)<\/strong>, que ejecuta el algoritmo de control. Para ajustar los par\u00e1metros del controlador, se incluyen tres potenci\u00f3metros: <strong>P1 (Setpoint)<\/strong> permite definir la posici\u00f3n deseada de levitaci\u00f3n, <strong>P2 (PWM Base)<\/strong> establece una corriente base en la bobina, y <strong>P3 (Kd)<\/strong> ajusta c\u00f3mo de fuerte es la correcci\u00f3n que aplica controlador. Estos potenci\u00f3metros funcionan como divisores de tensi\u00f3n entre 5 V y GND, entregando valores anal\u00f3gicos a las entradas A1, A2 y A3 del microcontrolador. Adem\u00e1s, se incorpora un <strong>bot\u00f3n (B1)<\/strong> conectado al pin digital D5, para encender y apagar el levitador sin desconectar el sistema.<\/p>\n\n\n\n<p>Para la visualizaci\u00f3n de variables del sistema ajustadas mediante los potenci\u00f3metros se utiliza una <strong>pantalla OLED (U5)<\/strong> con interfaz I\u00b2C, conectada a los pines SDA (A4) y SCL (A5).<\/p>\n\n\n\n<p>La etapa de potencia es la encargada de manejar la corriente de la bobina. El Arduino genera una se\u00f1al PWM que es aplicada al <strong>driver TC4427 (U3)<\/strong>, el cual act\u00faa como adaptador de potencia, proporcionando la corriente necesaria para conmutar r\u00e1pidamente el MOSFET. Este driver es esencial para asegurar tiempos de conmutaci\u00f3n r\u00e1pidos y evitar p\u00e9rdidas en el transistor. Los capacitores <strong>C2 (100 nF)<\/strong> y <strong>C3 (10 \u00b5F)<\/strong> se utilizan para desacoplar la alimentaci\u00f3n del driver, garantizando estabilidad durante la conmutaci\u00f3n.<\/p>\n\n\n\n<p>El elemento de conmutaci\u00f3n principal es el <strong>MOSFET IRLZ44N (U4)<\/strong>, que controla la corriente que circula por la bobina. Este transistor se elige por su baja resistencia en conducci\u00f3n y capacidad de ser manejado a nivel l\u00f3gico, es decir que con voltajes relativamente bajos de entorno a 5V es capaz de funcionar a pleno rendimiento. La resistencia <strong>R1 (10 \u03a9)<\/strong> se coloca en serie con la compuerta para limitar la corriente de carga y evitar oscilaciones, mientras que <strong>R2 (47 k\u03a9)<\/strong> asegura que el MOSFET permanezca apagado en ausencia de se\u00f1al.<\/p>\n\n\n\n<p>Finalmente, se elige el diodo Schottky <strong>SB5100 (D1)<\/strong> como componente para proteger al MOSFET frente a los picos de tensi\u00f3n generados por la naturaleza inductiva de la bobina al interrumpir la corriente. Sin este componente, podr\u00edan producirse da\u00f1os severos en el transistor. Va impl\u00edcito que al ser un Schottky es adecuado para funcionar altas velocidades de conmutaci\u00f3n, proporcionando un margen muy amplio. En conjunto, todos estos elementos permiten implementar un sistema de control robusto, donde la medici\u00f3n precisa, el procesamiento digital y la conmutaci\u00f3n eficiente de potencia trabajan de forma integrada para lograr la levitaci\u00f3n estable del objeto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Esquema de conexiones<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"634\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20-1024x634.png\" alt=\"\" class=\"wp-image-10208\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20-1024x634.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20-300x186.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20-768x475.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20.png 1144w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Conexiones en formato netlist:<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-grid wp-container-core-group-is-layout-9649a0d9 wp-block-group-is-layout-grid\">\n<p># Alimentaci\u00f3n de entrada<\/p>\n\n\n\n<p>NET_12V_IN:<\/p>\n\n\n\n<p>&nbsp; U2.VIN+<\/p>\n\n\n\n<p>&nbsp; L1.1<\/p>\n\n\n\n<p>&nbsp; D1.K<\/p>\n\n\n\n<p>&nbsp; U3.VDD<\/p>\n\n\n\n<p>&nbsp; C4.+<\/p>\n\n\n\n<p>NET_GND:<\/p>\n\n\n\n<p>&nbsp; U1.GND<\/p>\n\n\n\n<p>&nbsp; U2.VIN-<\/p>\n\n\n\n<p>&nbsp; U3.GND<\/p>\n\n\n\n<p>&nbsp; U4.S<\/p>\n\n\n\n<p>&nbsp; U5.GND<\/p>\n\n\n\n<p>&nbsp; U6.GND<\/p>\n\n\n\n<p>&nbsp; B1.2<\/p>\n\n\n\n<p>&nbsp; P1.1<\/p>\n\n\n\n<p>&nbsp; P2.1<\/p>\n\n\n\n<p>&nbsp; P3.1<\/p>\n\n\n\n<p>&nbsp; R2.2<\/p>\n\n\n\n<p>&nbsp; C1.2<\/p>\n\n\n\n<p>&nbsp; C2.2<\/p>\n\n\n\n<p>&nbsp; C3.-<\/p>\n\n\n\n<p>&nbsp; C4.-<\/p>\n\n\n\n<p>&nbsp; C5.-<\/p>\n\n\n\n<p>&nbsp; C6.2<\/p>\n\n\n\n<p># Salida del buck<\/p>\n\n\n\n<p>NET_7V5:<\/p>\n\n\n\n<p>&nbsp; <a>U2.VOUT<\/a>+<\/p>\n\n\n\n<p>&nbsp; U1.VIN<\/p>\n\n\n\n<p>&nbsp; C5.+<\/p>\n\n\n\n<p>&nbsp; C6.1<\/p>\n\n\n\n<p># Alimentaci\u00f3n 5V l\u00f3gica<\/p>\n\n\n\n<p>NET_5V:<\/p>\n\n\n\n<p>&nbsp; U1.5V<\/p>\n\n\n\n<p>&nbsp; U6.VCC<\/p>\n\n\n\n<p>&nbsp; U5.VCC<\/p>\n\n\n\n<p>&nbsp; P1.3<\/p>\n\n\n\n<p>&nbsp; P2.3<\/p>\n\n\n\n<p>&nbsp; P3.3<\/p>\n\n\n\n<p>&nbsp; C1.1<\/p>\n\n\n\n<p># Sensor Hall<\/p>\n\n\n\n<p>NET_HALL_OUT:<\/p>\n\n\n\n<p>&nbsp; U6.OUT<\/p>\n\n\n\n<p>&nbsp; U1.A0<\/p>\n\n\n\n<p># Pantalla OLED I2C<\/p>\n\n\n\n<p>NET_I2C_SDA:<\/p>\n\n\n\n<p>&nbsp; U5.SDA<\/p>\n\n\n\n<p>&nbsp; U1.A4<\/p>\n\n\n\n<p>NET_I2C_SCL:<\/p>\n\n\n\n<p>&nbsp; U5.SCL<\/p>\n\n\n\n<p>&nbsp; U1.A5<\/p>\n\n\n\n<p># Potenci\u00f3metros<\/p>\n\n\n\n<p>NET_P1_WIPER:<\/p>\n\n\n\n<p>&nbsp; P1.2<\/p>\n\n\n\n<p>&nbsp; U1.A1<\/p>\n\n\n\n<p>NET_P2_WIPER:<\/p>\n\n\n\n<p>&nbsp; P2.2<\/p>\n\n\n\n<p>&nbsp; U1.A2<\/p>\n\n\n\n<p>NET_P3_WIPER:<\/p>\n\n\n\n<p>&nbsp; P3.2<\/p>\n\n\n\n<p>&nbsp; U1.A3<\/p>\n\n\n\n<p># Bot\u00f3n<\/p>\n\n\n\n<p>NET_BUTTON:<\/p>\n\n\n\n<p>&nbsp; B1.1<\/p>\n\n\n\n<p>&nbsp; U1.D5<\/p>\n\n\n\n<p># Control hacia driver<\/p>\n\n\n\n<p>NET_PWM_CTRL:<\/p>\n\n\n\n<p>&nbsp; U1.D9<\/p>\n\n\n\n<p>&nbsp; U3.INA<\/p>\n\n\n\n<p># Salida driver a compuerta MOSFET<\/p>\n\n\n\n<p>NET_GATE_DRIVE:<\/p>\n\n\n\n<p>&nbsp; U3.OUTA<\/p>\n\n\n\n<p>&nbsp; R1.1<\/p>\n\n\n\n<p>NET_GATE:<\/p>\n\n\n\n<p>&nbsp; R1.2<\/p>\n\n\n\n<p>&nbsp; U4.G<\/p>\n\n\n\n<p>&nbsp; R2.1<\/p>\n\n\n\n<p># Etapa de potencia<\/p>\n\n\n\n<p>NET_DRAIN:<\/p>\n\n\n\n<p>&nbsp; U4.D<\/p>\n\n\n\n<p>&nbsp; L1.2<\/p>\n\n\n\n<p>&nbsp; D1.A<\/p>\n\n\n\n<p># Desacoples del TC4427<\/p>\n\n\n\n<p>NET_TC4427_DECOUPLED_VDD:<\/p>\n\n\n\n<p>&nbsp; U3.VDD<\/p>\n\n\n\n<p>&nbsp; C2.1<\/p>\n\n\n\n<p>&nbsp; C3.+<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Ajuste y validaci\u00f3n experimental<\/h2>\n\n\n\n<p>El siguiente paso consisti\u00f3 en la validaci\u00f3n experimental del sistema. Inicialmente, se desarrollaron programas b\u00e1sicos con el objetivo de verificar el correcto funcionamiento individual de cada bloque: lectura del sensor Hall, generaci\u00f3n de se\u00f1al PWM, respuesta del driver y conmutaci\u00f3n del MOSFET. Tras confirmar que todos los elementos operaban correctamente, se procedi\u00f3 a implementar versiones m\u00e1s avanzadas del software orientadas a la calibraci\u00f3n del sistema. Este proceso implic\u00f3 ajustar progresivamente los par\u00e1metros de control y analizar la respuesta del levitador bajo distintas condiciones, con el fin de obtener un comportamiento estable y repetible.<\/p>\n\n\n\n<p>CALIBRACI\u00d3N:<\/p>\n\n\n\n<p>Para caracterizar el sistema y comprender su comportamiento, se realizaron m\u00faltiples pruebas experimentales tomando un total de 1000 muestras por cada condici\u00f3n evaluada. En una primera etapa, se analiz\u00f3 la respuesta del sensor Hall con PWM igual a 0, es decir, sin acci\u00f3n del electroim\u00e1n, lo que permiti\u00f3 establecer una relaci\u00f3n base entre la distancia y la se\u00f1al medida. Los resultados muestran una respuesta altamente estable, con variaciones pico a pico muy reducidas (entre 2 y 3 unidades), lo que confirma la buena calidad de la medici\u00f3n y la baja influencia del ruido en el sistema.<\/p>\n\n\n\n<p>Posteriormente, se realizaron ensayos fijando la distancia y variando el valor del PWM. Estos experimentos permitieron observar c\u00f3mo el campo magn\u00e9tico generado por la bobina afecta directamente la lectura del sensor. A medida que aumenta el PWM, la se\u00f1al media disminuye, lo cual es coherente con el incremento del campo magn\u00e9tico que compensa el peso del objeto. Sin embargo, tambi\u00e9n se observa un aumento significativo en la variaci\u00f3n pico a pico, lo que indica una mayor inestabilidad del sistema a medida que se incrementa la acci\u00f3n del actuador.<\/p>\n\n\n\n<p>Un aspecto clave identificado durante las pruebas es la existencia de umbrales de inestabilidad. Por ejemplo, a una distancia de 18.4 mm, el sistema permanece estable hasta aproximadamente PWM = 40, mientras que a PWM = 60 el objeto se vuelve inestable y \u201csale disparado\u201d. Este comportamiento se repite a otras distancias, como en 24.8 mm, donde el sistema tolera hasta PWM = 80 antes de volverse inestable. Esto evidencia la naturaleza altamente no lineal del sistema y la necesidad de un ajuste cuidadoso de los par\u00e1metros de control.<\/p>\n\n\n\n<p>En conjunto, estos ensayos permitieron no solo validar el funcionamiento del sistema, sino tambi\u00e9n obtener datos fundamentales para la implementaci\u00f3n del control. La construcci\u00f3n de estas tablas experimentales resulta esencial para comprender las zonas de operaci\u00f3n estable, identificar l\u00edmites f\u00edsicos del sistema y ajustar correctamente los par\u00e1metros del controlador, sentando as\u00ed las bases para lograr una levitaci\u00f3n precisa y estable.<\/p>\n\n\n\n<p>Tablas de calibraci\u00f3n:<\/p>\n\n\n\n<p>Muestras de cada prueba = 1000<\/p>\n\n\n\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n\n\n\n<p>PWM = 0<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"318\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-21.png\" alt=\"\" class=\"wp-image-10209\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-21.png 908w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-21-300x105.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-21-768x269.png 768w\" sizes=\"auto, (max-width: 908px) 100vw, 908px\" \/><\/figure>\n\n\n\n<p>Distancia fija = 18.4 mm<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"906\" height=\"252\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-22.png\" alt=\"\" class=\"wp-image-10210\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-22.png 906w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-22-300x83.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-22-768x214.png 768w\" sizes=\"auto, (max-width: 906px) 100vw, 906px\" \/><\/figure>\n\n\n\n<p>Distancia fija = 24.8 mm<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"911\" height=\"231\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-25.png\" alt=\"\" class=\"wp-image-10213\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-25.png 911w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-25-300x76.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-25-768x195.png 768w\" sizes=\"auto, (max-width: 911px) 100vw, 911px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digo<\/h2>\n\n\n\n<p>#include &lt;Wire.h&gt;<\/p>\n\n\n\n<p>#include &lt;Adafruit_GFX.h&gt;<\/p>\n\n\n\n<p>#include &lt;Adafruit_SH110X.h&gt;<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;PINES<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>const int HALL_PIN &nbsp; &nbsp;= A0;<\/p>\n\n\n\n<p>const int POT_SP_PIN &nbsp;= A1;<\/p>\n\n\n\n<p>const int POT_PWR_PIN = A2;<\/p>\n\n\n\n<p>const int POT_STB_PIN = A3;<\/p>\n\n\n\n<p>const int BUTTON_PIN &nbsp;= 5;<\/p>\n\n\n\n<p>const int PWM_PIN &nbsp; &nbsp; = 9;<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;OLED<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>Adafruit_SH1106G display(128, 64, &amp;Wire, -1);<\/p>\n\n\n\n<p>const uint8_t OLED_ADDR = 0x3C;<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;CONSTANTES<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>const int HALL_OVERSAMPLE = 8;<\/p>\n\n\n\n<p>const int POT_OVERSAMPLE = 4;<\/p>\n\n\n\n<p>const unsigned long CONTROL_PERIOD_US = 2000;<\/p>\n\n\n\n<p>const unsigned long UI_PERIOD_MS &nbsp; &nbsp; &nbsp;= 200;<\/p>\n\n\n\n<p>const unsigned long POT_PERIOD_MS &nbsp; &nbsp; = 40;<\/p>\n\n\n\n<p>const int HALL_MIN_SAFE = 20;<\/p>\n\n\n\n<p>const int HALL_MAX_SAFE = 490;<\/p>\n\n\n\n<p>const int PWM_MIN = 0;<\/p>\n\n\n\n<p>const int PWM_MAX = 180;<\/p>\n\n\n\n<p>const float MAX_STEP = 4.0;<\/p>\n\n\n\n<p>const float HALL_ALPHA &nbsp; &nbsp;= 0.22;<\/p>\n\n\n\n<p>const float KP = 0.33;<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;ESTADO DEL CONTROL<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>float hallFilt = 0.0;<\/p>\n\n\n\n<p>float hallPrev = 0.0;<\/p>\n\n\n\n<p>float setpoint = 365.0;<\/p>\n\n\n\n<p>float setpointFilt = 365.0;<\/p>\n\n\n\n<p>float Kd = 9.0;<\/p>\n\n\n\n<p>float pwmBase = 90.0;<\/p>\n\n\n\n<p>float pwmCmd &nbsp;= 0.0;<\/p>\n\n\n\n<p>bool armed = false;<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;BOT\u00d3N<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>bool lastButtonState = HIGH;<\/p>\n\n\n\n<p>unsigned long lastDebounceMs = 0;<\/p>\n\n\n\n<p>const unsigned long DEBOUNCE_MS = 40;<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;TIEMPOS<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>unsigned long lastControlUs = 0;<\/p>\n\n\n\n<p>unsigned long lastUiMs = 0;<\/p>\n\n\n\n<p>unsigned long lastPotMs = 0;<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;UI CACHE<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>int potSpRaw &nbsp;= 0;<\/p>\n\n\n\n<p>int potPwrRaw = 0;<\/p>\n\n\n\n<p>int potStbRaw = 0;<\/p>\n\n\n\n<p>int lastArmed &nbsp;= -1;<\/p>\n\n\n\n<p>int lastSp &nbsp; &nbsp; = -1;<\/p>\n\n\n\n<p>int lastPwmB &nbsp; = -1;<\/p>\n\n\n\n<p>int lastKd10 &nbsp; = -1;<\/p>\n\n\n\n<p>bool forceRedraw = true;<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;UTILIDADES<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>int readAnalogAvg(int pin, int n) {<\/p>\n\n\n\n<p>&nbsp; unsigned long acc = 0;<\/p>\n\n\n\n<p>&nbsp; for (int i = 0; i &lt; n; i++) acc += analogRead(pin);<\/p>\n\n\n\n<p>&nbsp; return acc \/ n;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;CONTROL<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>void disarmControl() {<\/p>\n\n\n\n<p>&nbsp; armed = false;<\/p>\n\n\n\n<p>&nbsp; pwmCmd = 0;<\/p>\n\n\n\n<p>&nbsp; analogWrite(PWM_PIN, 0);<\/p>\n\n\n\n<p>&nbsp; forceRedraw = true;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>void armControl() {<\/p>\n\n\n\n<p>&nbsp; if (hallFilt &gt;= HALL_MIN_SAFE &amp;&amp; hallFilt &lt;= HALL_MAX_SAFE){<\/p>\n\n\n\n<p>&nbsp; &nbsp; armed = true;<\/p>\n\n\n\n<p>&nbsp; &nbsp; pwmCmd = pwmBase;<\/p>\n\n\n\n<p>&nbsp; &nbsp; hallPrev = hallFilt;<\/p>\n\n\n\n<p>&nbsp; &nbsp; forceRedraw = true;<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>void updateControl() {<\/p>\n\n\n\n<p>&nbsp; int hallRaw = readAnalogAvg(HALL_PIN,HALL_OVERSAMPLE);<\/p>\n\n\n\n<p>&nbsp; hallFilt = (1.0 &#8211; HALL_ALPHA) * hallFilt + HALL_ALPHA * hallRaw;<\/p>\n\n\n\n<p>&nbsp; if (!armed) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; analogWrite(PWM_PIN, 0);<\/p>\n\n\n\n<p>&nbsp; }else if(hallFilt &gt;= &nbsp;HALL_MIN_SAFE &amp;&amp; hallFilt &lt;= HALL_MAX_SAFE){<\/p>\n\n\n\n<p>&nbsp; &nbsp; float error = hallFilt &#8211; setpoint;<\/p>\n\n\n\n<p>&nbsp; &nbsp; float vel &nbsp; = hallFilt &#8211; hallPrev;<\/p>\n\n\n\n<p>&nbsp; &nbsp; float target = pwmBase + KP * error + Kd * vel;<\/p>\n\n\n\n<p>&nbsp; &nbsp; target = constrain(target, PWM_MIN, PWM_MAX);<\/p>\n\n\n\n<p>&nbsp; &nbsp; float delta = constrain(target &#8211; pwmCmd, -MAX_STEP, MAX_STEP);<\/p>\n\n\n\n<p>&nbsp; &nbsp; pwmCmd = constrain(pwmCmd + delta, PWM_MIN, PWM_MAX);<\/p>\n\n\n\n<p>&nbsp; &nbsp; analogWrite(PWM_PIN, (int)(pwmCmd + 0.5f));<\/p>\n\n\n\n<p>&nbsp; }else{<\/p>\n\n\n\n<p>&nbsp; &nbsp; disarmControl();<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; hallPrev = hallFilt;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;POTENCI\u00d3METROS<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>void updatePots() {<\/p>\n\n\n\n<p>&nbsp; potSpRaw &nbsp;= readAnalogAvg(POT_SP_PIN, POT_OVERSAMPLE);<\/p>\n\n\n\n<p>&nbsp; potPwrRaw = readAnalogAvg(POT_PWR_PIN, POT_OVERSAMPLE);<\/p>\n\n\n\n<p>&nbsp; potStbRaw = readAnalogAvg(POT_STB_PIN, POT_OVERSAMPLE);<\/p>\n\n\n\n<p>&nbsp; float sp = map(potSpRaw, 0, 1023, 3000, 4200) \/ 10.0;<\/p>\n\n\n\n<p>&nbsp; setpointFilt = 0.6 * setpointFilt + 0.4 * sp;<\/p>\n\n\n\n<p>&nbsp; setpoint = setpointFilt;<\/p>\n\n\n\n<p>&nbsp; pwmBase = map(potPwrRaw, 0, 1023, 850, 1000) \/ 10.0;<\/p>\n\n\n\n<p>&nbsp; Kd &nbsp; &nbsp; &nbsp;= map(potStbRaw, 0, 1023, 80, 105) \/ 10.0;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;BOT\u00d3N<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>bool buttonPressed() {<\/p>\n\n\n\n<p>&nbsp; bool pressed = (digitalRead(BUTTON_PIN) == LOW);<\/p>\n\n\n\n<p>&nbsp; bool result = false;<\/p>\n\n\n\n<p>&nbsp; if (pressed &amp;&amp; !lastButtonState &amp;&amp; (millis() &#8211; lastDebounceMs &gt; DEBOUNCE_MS)) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; lastDebounceMs = millis();<\/p>\n\n\n\n<p>&nbsp; &nbsp; result = true;<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; lastButtonState = pressed;<\/p>\n\n\n\n<p>&nbsp; return result;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;UI<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>void drawBar(int x, int y, int w, int h, int value) {<\/p>\n\n\n\n<p>&nbsp; int fill = map(value, 0, 1023, 0, w);<\/p>\n\n\n\n<p>&nbsp; fill = constrain(fill, 0, w);<\/p>\n\n\n\n<p>&nbsp; display.drawRect(x, y, w, h, SH110X_WHITE);<\/p>\n\n\n\n<p>&nbsp; if (fill &gt; 2)<\/p>\n\n\n\n<p>&nbsp; &nbsp; display.fillRect(x + 1, y + 1, fill &#8211; 2, h &#8211; 2, SH110X_WHITE);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>bool uiNeedsRedraw() {<\/p>\n\n\n\n<p>&nbsp; return (forceRedraw || lastArmed != armed || lastSp != (int)setpoint<\/p>\n\n\n\n<p>&nbsp; || lastPwmB != (int)pwmBase || lastKd10 != (int)(Kd * 10));<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>void drawUI() {<\/p>\n\n\n\n<p>&nbsp; display.clearDisplay();<\/p>\n\n\n\n<p>&nbsp; display.setTextSize(1);<\/p>\n\n\n\n<p>&nbsp; display.setTextColor(SH110X_WHITE);<\/p>\n\n\n\n<p>&nbsp; display.setCursor(0, 0);<\/p>\n\n\n\n<p>&nbsp; display.print(armed ? F(\u00abON\u00bb) : F(\u00abOFF\u00bb));<\/p>\n\n\n\n<p>&nbsp; display.setCursor(40, 0);<\/p>\n\n\n\n<p>&nbsp; display.print(armed ? F(\u00abNOT EDITABLE\u00bb) : F(\u00abEDITABLE\u00bb));<\/p>\n\n\n\n<p>&nbsp; display.setCursor(0, 14);<\/p>\n\n\n\n<p>&nbsp; display.print(F(\u00abP1 SP \u00ab));<\/p>\n\n\n\n<p>&nbsp; display.print((int)setpoint);<\/p>\n\n\n\n<p>&nbsp; drawBar(64, 14, 60, 8, potSpRaw);<\/p>\n\n\n\n<p>&nbsp; display.setCursor(0, 30);<\/p>\n\n\n\n<p>&nbsp; display.print(F(\u00abP2 PB \u00ab));<\/p>\n\n\n\n<p>&nbsp; display.print((int)pwmBase);<\/p>\n\n\n\n<p>&nbsp; drawBar(64, 30, 60, 8, potPwrRaw);<\/p>\n\n\n\n<p>&nbsp; display.setCursor(0, 46);<\/p>\n\n\n\n<p>&nbsp; display.print(F(\u00abP3 KD \u00ab));<\/p>\n\n\n\n<p>&nbsp; display.print(Kd, 1);<\/p>\n\n\n\n<p>&nbsp; drawBar(64, 46, 60, 8, potStbRaw);<\/p>\n\n\n\n<p>&nbsp; display.display();<\/p>\n\n\n\n<p>&nbsp; lastArmed = armed;<\/p>\n\n\n\n<p>&nbsp; lastSp = (int)setpoint;<\/p>\n\n\n\n<p>&nbsp; lastPwmB = (int)pwmBase;<\/p>\n\n\n\n<p>&nbsp; lastKd10 = (int)(Kd * 10);<\/p>\n\n\n\n<p>&nbsp; forceRedraw = false;<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;SETUP<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>void setup() {<\/p>\n\n\n\n<p>&nbsp; pinMode(BUTTON_PIN, INPUT_PULLUP);<\/p>\n\n\n\n<p>&nbsp; pinMode(PWM_PIN, OUTPUT);<\/p>\n\n\n\n<p>&nbsp; analogWrite(PWM_PIN, 0);<\/p>\n\n\n\n<p>&nbsp; Wire.begin();<\/p>\n\n\n\n<p>&nbsp; display.begin(OLED_ADDR, true);<\/p>\n\n\n\n<p>&nbsp; hallFilt = readAnalogAvg(HALL_PIN,HALL_OVERSAMPLE);<\/p>\n\n\n\n<p>&nbsp; hallPrev = hallFilt;<\/p>\n\n\n\n<p>&nbsp; updatePots();<\/p>\n\n\n\n<p>&nbsp; drawUI();<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>\/* =========================================================<\/p>\n\n\n\n<p>&nbsp; &nbsp;LOOP<\/p>\n\n\n\n<p>&nbsp; &nbsp;========================================================= *\/<\/p>\n\n\n\n<p>void loop() {<\/p>\n\n\n\n<p>&nbsp; if (buttonPressed()) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; armed ? disarmControl() : armControl();<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; unsigned long nowUs = micros();<\/p>\n\n\n\n<p>&nbsp; if (nowUs &#8211; lastControlUs &gt;= CONTROL_PERIOD_US) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; lastControlUs += CONTROL_PERIOD_US;<\/p>\n\n\n\n<p>&nbsp; &nbsp; updateControl();<\/p>\n\n\n\n<p>&nbsp; }<\/p>\n\n\n\n<p>&nbsp; unsigned long nowMs = millis();<\/p>\n\n\n\n<p>&nbsp; if (!armed){<\/p>\n\n\n\n<p>&nbsp; &nbsp; if(nowMs &#8211; lastPotMs &gt;= POT_PERIOD_MS){<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; lastPotMs = nowMs;<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; updatePots();<\/p>\n\n\n\n<p>&nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; &nbsp; if(nowMs &#8211; lastUiMs &gt;= UI_PERIOD_MS){<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; lastUiMs = nowMs;<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; if (uiNeedsRedraw()) drawUI();<\/p>\n\n\n\n<p>&nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; }else if(forceRedraw) drawUI();<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Problemas encontrados<\/h2>\n\n\n\n<p>-Elegir los componentes adecuados para el proyecto. Al final, se ha sobreestimado la cantidad de componentes necesarios.<\/p>\n\n\n\n<p>-La protoboard no era la plataforma adecuada para nuestro HW, ya que no era lo suficientemente estable para las exigencias del sistema, por lo que hemos tenido que pasar a soldadura.<\/p>\n\n\n\n<p>&#8211; Una vez montado todo ha habido que resoldar algunas piezas varias veces hasta dar con el punto<\/p>\n\n\n\n<p>&#8211; Una vez todo soldado y montado ha habido que estar varios d\u00edas enteros hasta conseguir las configuraciones correctas y optimas de los par\u00e1metros para mantener el sistema funcional y estable a lo largo del tiempo.<\/p>\n\n\n\n<p>&#8211; La subestimaci\u00f3n de la dificultad del proyecto ha llevado a invertir tiempo extra en perfeccionarlo, aunque no ha supuesto en una extensi\u00f3n respecto al periodo de entrega.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Costes y materiales<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Material<\/td><td>Precio total<\/td><td>Cantidad<\/td><td>Precio unidad(euros)<\/td><\/tr><tr><td>Bobina<\/td><td>22.59<\/td><td>1<\/td><td>22.59<\/td><\/tr><tr><td>Placa Nano<\/td><td>12.99<\/td><td>2<\/td><td>6.495<\/td><\/tr><tr><td>Cargador 12.6V<\/td><td>15.59<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>Regulador de Voltaje lm2596s<\/td><td>7.99<\/td><td>3<\/td><td>2.663<\/td><\/tr><tr><td>Jack DC Hembra Switch(Alimentaci\u00f3n)<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>Sensor Efecto Campo SS495A<\/td><td>19.80<\/td><td>2<\/td><td>9.90<\/td><\/tr><tr><td>MOSFET IRLZ44N<\/td><td>7.65<\/td><td>5<\/td><td>1.53<\/td><\/tr><tr><td>Controlador MOSFET TC4427<\/td><td>4.59<\/td><td>3<\/td><td>1.53<\/td><\/tr><tr><td>Diodo Schottky de potencia SB5100<\/td><td>3.25<\/td><td>10<\/td><td>0.325<\/td><\/tr><tr><td>Condensadores de cer\u00e1mica multicapa (MLCC), con alimentaci\u00f3n K104K15X7RF5UL2<\/td><td>1.80<\/td><td>20<\/td><td>0.09<\/td><\/tr><tr><td>Condensadores de cer\u00e1mica multicapa (MLCC), con alimentaci\u00f3n 1C10X7R104K100B<\/td><td>2.14<\/td><td>20<\/td><td>0.107<\/td><\/tr><tr><td>4 IMAN DISCO NEODIMIO 19X3MM 10KG 81875840<\/td><td>8.09<\/td><td>1<\/td><td>8.09<\/td><\/tr><tr><td>Placa de soldadura EPLZON \u00abx2.05\u00bb y 3.5 \u00abx2.0 5\u00bb &nbsp;<\/td><td>10.99<\/td><td>1<\/td><td>10.99<\/td><\/tr><tr><td>Pantalla LCD OLED<\/td><td>13.99<\/td><td>2<\/td><td>6.995<\/td><\/tr><tr><td>Potenci\u00f3metro B5K B10K B20K B50K B100K Ohm GTIWUNG<\/td><td>8.99<\/td><td>1 kit de 20 pot.<\/td><td>8.99<\/td><\/tr><tr><td>MASILLA MADERA AL AGUA<\/td><td>3.05 &nbsp;<\/td><td>1<\/td><td>3.05<\/td><\/tr><tr><td>SPRAY MATE ECONOMICO 400ML NEGRO<\/td><td>3.42 &nbsp;<\/td><td>1<\/td><td>3.42<\/td><\/tr><tr><td>Total<\/td><td>146.92<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este post se describe el dise\u00f1o, implementaci\u00f3n y puesta en marcha de un sistema de levitaci\u00f3n magn\u00e9tica basado en control electr\u00f3nico. El objetivo principal del proyecto es lograr la suspensi\u00f3n estable de un&#46;&#46;&#46;<\/p>\n","protected":false},"author":339,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-10207","post","type-post","status-publish","format-standard","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>Levitador Magn\u00e9tico - 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\/levitador-magnetico\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Levitador Magn\u00e9tico - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"En este post se describe el dise\u00f1o, implementaci\u00f3n y puesta en marcha de un sistema de levitaci\u00f3n magn\u00e9tica basado en control electr\u00f3nico. El objetivo principal del proyecto es lograr la suspensi\u00f3n estable de un&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-05T15:14:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-05T15:14:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1144\" \/>\n\t<meta property=\"og:image:height\" content=\"708\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"seytrmo2526g11\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"seytrmo2526g11\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 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\\\/levitador-magnetico\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/\"},\"author\":{\"name\":\"seytrmo2526g11\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/81c530ecb884e2e4726d884c4a760520\"},\"headline\":\"Levitador Magn\u00e9tico\",\"datePublished\":\"2026-05-05T15:14:55+00:00\",\"dateModified\":\"2026-05-05T15:14:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/\"},\"wordCount\":2694,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/image-20-1024x634.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/\",\"name\":\"Levitador Magn\u00e9tico - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/image-20-1024x634.png\",\"datePublished\":\"2026-05-05T15:14:55+00:00\",\"dateModified\":\"2026-05-05T15:14:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/image-20.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/image-20.png\",\"width\":1144,\"height\":708},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/levitador-magnetico\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Levitador Magn\u00e9tico\"}]},{\"@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\\\/81c530ecb884e2e4726d884c4a760520\",\"name\":\"seytrmo2526g11\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/47b400bc18d05fd940b103852d34595659f09704af155d590ec88b6715087037?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/47b400bc18d05fd940b103852d34595659f09704af155d590ec88b6715087037?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/47b400bc18d05fd940b103852d34595659f09704af155d590ec88b6715087037?s=96&d=mm&r=g\",\"caption\":\"seytrmo2526g11\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/seytrmo2526g11\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Levitador Magn\u00e9tico - 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\/levitador-magnetico\/","og_locale":"es_ES","og_type":"article","og_title":"Levitador Magn\u00e9tico - Proyectos con Arduino.","og_description":"En este post se describe el dise\u00f1o, implementaci\u00f3n y puesta en marcha de un sistema de levitaci\u00f3n magn\u00e9tica basado en control electr\u00f3nico. El objetivo principal del proyecto es lograr la suspensi\u00f3n estable de un&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2026-05-05T15:14:55+00:00","article_modified_time":"2026-05-05T15:14:57+00:00","og_image":[{"width":1144,"height":708,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20.png","type":"image\/png"}],"author":"seytrmo2526g11","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"seytrmo2526g11","Tiempo de lectura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/"},"author":{"name":"seytrmo2526g11","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/81c530ecb884e2e4726d884c4a760520"},"headline":"Levitador Magn\u00e9tico","datePublished":"2026-05-05T15:14:55+00:00","dateModified":"2026-05-05T15:14:57+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/"},"wordCount":2694,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20-1024x634.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/","name":"Levitador Magn\u00e9tico - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20-1024x634.png","datePublished":"2026-05-05T15:14:55+00:00","dateModified":"2026-05-05T15:14:57+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-20.png","width":1144,"height":708},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/levitador-magnetico\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Levitador Magn\u00e9tico"}]},{"@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\/81c530ecb884e2e4726d884c4a760520","name":"seytrmo2526g11","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/47b400bc18d05fd940b103852d34595659f09704af155d590ec88b6715087037?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/47b400bc18d05fd940b103852d34595659f09704af155d590ec88b6715087037?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/47b400bc18d05fd940b103852d34595659f09704af155d590ec88b6715087037?s=96&d=mm&r=g","caption":"seytrmo2526g11"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/seytrmo2526g11\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/10207","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\/339"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=10207"}],"version-history":[{"count":1,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/10207\/revisions"}],"predecessor-version":[{"id":10214,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/10207\/revisions\/10214"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=10207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=10207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=10207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}