Levitación magnética con Arduino
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Levitador con Arduino.
Puedes imprimir el cuerpo en 3D o no.
https://www.thingiverse.com/thing:1392023
- Fácil de imprimir y montar (solo un poco de pegamento, sin tornillos).
- Simplemente instale el firmware (Levitator.ino) en la placa arduino.
- No necesita una computadora, solo la fuente de alimentación de 12V, después de instalar el firmware.
- Utilice los interruptores para ajustar la posición del imán permanente.
- Utilice el monitor serial arduino para ver el valor correcto para usted.
- Puede codificar el valor correcto en su juguete.
Puedes usar un protoboard o hacer tu placa (Arduino Nano).
http://www.thingiverse.com/thing:1392530
O simplemente compre uno:
https://oshpark.com/shared_projects/kxH3Ak1b
Atención:
- Coloque el sensor de pasillo en la parte inferior de la punta (top_sensor.stl) vea las imágenes;
- Para que funcione correctamente, el sensor de efecto Hall debe estar al menos a 5 mm de distancia del electromagnético;
- Puede utilizar otro sensor de pasillo lineal (no utilice el interruptor del sensor de pasillo );
- Utilice imanes permanentes de neodimio (no funcionará con imanes comunes);
- Los objetos pesados son más estables;
Consulta mis marcas en Thingiverse para obtener más detalles y consejos.
Levitador impreso en 3D:
https://www.thingiverse.com/make:201394
Escudo para Arduino Nano:
https://www.thingiverse.com/make:201420
Eso es fácil.
Código
- Levitator.ino
- Levitator_PID.ino
Levitator.ino Arduino
Código para juguete de levitación magnética con Arduino.Fácil (sin PID)
// =======================================================| // Ekobots Innovation Ltda - www.ekobots.com.br | // Juan Sirgado y Antico - www.jsya.com.br | // - -------------------------------------------------- ------ | // Programa Levitador Magnético - 2016/02/06 | // Todos los derechos reservados 2016 | // =========================================================| int anaPin =1; // Pin analógico Arduino 1; int digPin =5; // Pin 5 de Arduino Digital; int subPin =7; // Pin digital Arduino 7; int addPin =8; // Pin digital Arduino 8; // int anaVal =0; // Valor de lectura analógica (sensor Hall); booleano digVal =0; // Valor de escritura digital (electroimán); // int levVal =228; // Valor de Poit de levitación; int dlyVal =250; // Valor de retardo en microsegundos; // ----------------------------------------- ---------------- | void setup () {// Inicio de inicialización del Levitador; Serial.begin (57600); Serial.println ("Levitator por JSyA"); Serial.println ("Iniciando ..."); // Configuración del modo de trabajo de los pines digitales; pinMode (digPin, SALIDA); pinMode (subPin, INPUT_PULLUP); pinMode (addPin, INPUT_PULLUP); // Finalización de inicialización del levitador; Serial.println ("Iniciado");} // ------------------------------------- -------------------- | void loop () {// Lectura del sensor Hall (intensidad del campo magnético); anaVal =analogRead (anaPin); // Incrementar el valor del punto de levitación; if (digitalRead (addPin) ==BAJO) {levVal ++; value_log (); retraso (250); } // Disminuir el valor del punto de levitación; if (digitalRead (subPin) ==LOW) {levVal--; value_log (); retraso (250); } // Comprueba el punto de levitación; if (anaVallevVal) {digVal =HIGH; } // // Enciende / apaga el electroimán; // Con base en el valor del sensor y el punto de levitación; escritura digital (digPin, digVal); delayMicroseconds (dlyVal);} // ------------------------------------------ --------------- | void value_log () // Impresión de valores analógicos / digitales / de levitación; {// Muestra el valor del sensor Hall; Serial.print ("anaVal =["); Serial.print (anaVal); Serial.print ("] -"); // Muestra el estado del electroimán On =1 / Off =0; Serial.print ("digVal =["); Serial.print (digVal); Serial.print ("] -"); // Muestra el valor del punto de levitación; Serial.print ("levVal =["); Serial.print (levVal); Serial.println ("];");} // =========================================================|
Levitator_PID.ino Arduino
Código para juguete de levitación magnética con Arduino.Hard (versión PID)
// =======================================================| // Ekobots Innovation Ltda - www.ekobots.com.br | // Juan Sirgado y Antico - www.jsya.com.br | // - -------------------------------------------------- ------ | // Programa Levitador Magnético PID - 2016/10/06 | // Todos los derechos reservados 2016 | // =========================================================| int anaPin =1; // Pin analógico Arduino 1int digPin =5; // Pin digital Arduino 5int subPin =7; // Pin digital Arduino 7int addPin =8; // Pin digital Arduino 8 // int anaVal =0; // Valieint analógico digVal =0; // Valor digital // int levVal =262; // Valor de levitaciónint dlyVal =10; // Valor de retardo // float timVal =0; // Valor del tiempo//-------------------------------------------- ------------- | // Valores PID punto de ajuste flotante =0; valor_medido flotante =0; salida flotante =0; integral flotante =0; derivada flotante =0; error flotante =0; error flotante anterior =0; flotar dt =0.1; flotar Kp =1.0; flotar Ki =0.1; flotar Kd =0.01; // -------------------------- ------------------------------- | void setup () {// Inicio de inicialización de Levitator; Serial.begin (57600); Serial.println ("Levitator por JSyA"); Serial.println ("Iniciando ..."); // Configuración del modo de trabajo de los pines digitales; pinMode (digPin, SALIDA); pinMode (addPin, INPUT_PULLUP); pinMode (subPin, INPUT_PULLUP); // timVal =millis (); setpoint =levVal; // Finalización de inicialización del levitador; Serial.println ("Iniciado");} // ------------------------------------- -------------------- | bucle vacío () // PID {// Lectura del sensor Hall (intensidad del campo magnético); anaVal =analogRead (anaPin); // Cálculos de PID valor_medido =anaVal; error =setpoint - valor_medido; integral =integral + error * dt; derivative =(error - error_anterior) / dt; salida =(-Kp * error) + (-Ki * integral) + (-Kd * derivada); previous_error =error; // Configuración del valor final digVal + =salida; // Verifica el valor del punto de levitación; si (digVal <0) digVal =0; si (digVal> 255) digVal =255; // Aumentar / Disminuir el valor de Electroimán; // Con base en el valor del sensor y el punto de levitación; analogWrite (digPin, digVal); // Mostrar valores de registro para depuración; // if ((millis () - timVal)> 500) // {// value_log (); // timVal =millis (); //} // Incrementar el valor del punto de levitación; if (digitalRead (addPin) ==LOW) {setpoint ++; value_log (); retraso (250); } if (digitalRead (subPin) ==LOW) {setpoint--; value_log (); retraso (250); } // Tiempo entre cambios de estado del electroimán; delayMicroseconds (dlyVal);} // ------------------------------------------ --------------- | void value_log () // Impresión de valores analógicos / digitales / de levitación; {// Muestra el valor del sensor Hall; Serial.print ("anaVal =["); Serial.print (anaVal); Serial.print ("] -"); // Muestra el estado del electroimán On =1 / Off =0; Serial.print ("digVal =["); Serial.print (digVal); Serial.print ("] -"); // Muestra el valor del punto de levitación; Serial.print ("setpoint =["); Serial.print (punto de ajuste); Serial.println ("];");} // =========================================================|
Esquemas
Fritzing IDEProceso de manufactura
- El reloj IV9 Numitron más simple de bricolaje con Arduino
- Monitoreo de CO2 con sensor K30
- Comunicación para personas sordociegas con 1Sheeld / Arduino
- Controlar el aceptador de monedas con Arduino
- ¡Arduino con Bluetooth para controlar un LED!
- Sensor capacitivo de huellas dactilares con Arduino o ESP8266
- Jugando con Nextion Display
- Brazo robótico controlado por Nunchuk (con Arduino)
- Levitación electromagnética repulsiva Arduino
- Medición de la radiación solar con Arduino
- Mini radar con Arduino