La configuración que tienes en mente parece estar bien, aparte del hecho de que no estoy seguro de para qué quieres usar el amplificador operacional. ¿Quizás quiso decir un transistor para desacoplar la salida de Arduino de la fuente de 12 voltios?
Un PID en Arduino será lo suficientemente bueno para la aplicación.
Ahora, sobre el uso del sensor Hall, mi respuesta se vuelve larga.
Si va a utilizar imanes como objeto de levitación, puede implementar un sensor Hall en lugar de uno ultrasónico. Pero a medida que señala, ¿cómo sabe si está leyendo el campo correcto? Los campos magnéticos no están etiquetados.
Te ofrezco una manera (poco avanzada, pero bastante genial de jugar) de lidiar con esto: compensación de perturbaciones .
- Monte la configuración, con bobinas y una forma de controlar su voltaje (puede usar un potenciómetro lineal en Arduino)
- Encuentre una posición donde colocar el sensor Hall ( colóquelo donde sea lo más sensible posible al campo de sus imanes, y el menos sensible al campo de la bobina )
- Sin tener el imán en la configuración, asigne las lecturas del sensor Hall a la entrada de voltaje a la bobina. Ahora sabe exactamente qué campo magnético generan las bobinas en cada punto de ajuste de voltaje.
- Los campos magnéticos se suman de manera lineal, por lo que simplemente puede restar el campo de 'perturbación' esperado de las lecturas del sensor Hall, y tiene su lectura limpia
Solo preste atención al hecho de que instantáneamente el voltaje puede fluctuar mucho más que la corriente. La corriente es de paso bajo naturalmente por la bobina . Entonces, alternativamente, puede promediar las lecturas de voltaje para la resta, o simplemente asumir que el voltaje sea constante porque la corriente no cambiará mucho una vez que los imanes estén cerca de la posición de estado estable (especialmente en caso de que su objeto magnético y la posición de su sensor no cambiará)
Por fin, sobre el uso del sensor de Hall y la linealidad: un modelo lineal debería ser suficiente. Pero debe ser un modelo linealizado alrededor del punto de ajuste de altura de su objeto . El campo magnético es muy no lineal (en su caso, cambia con la tercera potencia de distancia, creo).
De forma alternativa, puede asignar las lecturas proporcionadas por el sensor Hall a la posición del imán (con la bobina apagada). Así que puedes saltarte el complejo modelado de campos magnéticos.
Para todas las asignaciones (tablas de consulta) en Arduino, debería poder la función MultiMap .
Disfruta de la buena opción de configuración.