Este proyecto de arduino para niños resulta apropiado para aquellos hogares que cuentan con una impresora 3D, de ahí que se requiera además la ayuda y supervisión de un adulto.

¿Qué se necesita?

  • Una placa de arduino Nano R3 (también puedas usar UNO R3)
  • Un electroimán de 12V y 25 mm de diámetro
  • Un imán
  • Un sensor de efecto Hall 49E
  • Un transistor Darlington de alta energía
  • Una resistencia de 1k ohm
  • Un diodo de alta corriente 1N4007
  • 2 pilas de 12V y 1A
  • Una protoboard (o placa de pruebas)
  • 2 interruptores de botón de 12 mm
  • Varios cables de conexión

¿Cómo se construye?

Comenzamos conectando una de las pilas a los pines GND y VIN de la placa de arduino y uniendo el sensor de efecto Hall a la misma a través de los pines 5V, GND y 1.

Ahora agarramos la segunda pila, llevamos el polo negativo al pin GND de la placa de arduino y conectamos el polo positivo al electroimán. El electroimán a su vez estará conectado al diodo y al transistor Darlington mediante la salida C. Utilizaremos la entrada B del transistor para conectar la corriente a la resistencia y ésta a su vez al pin 5 del arduino. Por su parte llevaremos a tierra el pin E del transistor.

Ya sólo queda colocar los interruptores. Los polos positivos los unimos a los pines 7 y 8 y los negativos, a la corriente GND.

CÓDIGO

Código para el juguete de levitación magnética con Arduino.
Fácil (sin PID)


int  anaPin  =  1 ;    // Arduino Analogic Pin 1; 
int  digPin  =  5 ;    // Arduino Digital Pin 5; 
int  subPin  =  7 ;    // Arduino Digital Pin 7;
int  addPin  =  8 ;    // Arduino Digital Pin 8; 
// 
int      anaVal  =  0 ;    // Valor de lectura analógica (sensor Hall); 
digVal 
booleano  = 0 ; // Valor de escritura digital (electroimán);      
// 
int  levVal  =  228 ;    // Valor Poit de levitación; 
int  dlyVal  =  250 ;    // Valor de retardo Micro segundos; 
// ------------------------------------------------ --------- | 
void  setup () 
{ 
// Inicialización de Levitator Begin; De serie .
   
   comenzar ( 57600 ); 
De serie . println ( "Levitador por JSyA" ); De serie . println ( "Iniciando ..." ); // Configuración del modo de trabajo de pines digitales; pinMode ( digPin , OUTPUT ); pinMode ( subPin , INPUT_PULLUP ); pinMode ( addPin , INPUT_PULLUP ); // Levitator initialization End; De serie . println ( "Iniciado" ); }
   
  
// ------------------------------------------------ --------- | 
void  loop ()  
{ 
// Hall Sensor Read (intensidad del campo magnético); anaVal = analogRead ( anaPin ); // Aumenta el valor del punto de levitación; if ( digitalRead ( addPin ) == LOW ) { levVal ++ ; value_log (); retraso ( 250 ); } // Disminuye el valor del punto de levitación; if ( digitalRead ( subPin ) ==
   
  
      LOW) 
   {
      levVal--;
      value_log();
      delay(250);
   }
   // Check the Levitation Point;
   if (anaVal < levVal) 
   {
      digVal = LOW;
   }
   else // if (anaVal > levVal) 
   {
      digVal = HIGH;
   }
   //
   // Turn ON/OFF The Electromagnet;
   // With Base on Sensor Value and the Levitation Point;
   digitalWrite(digPin, digVal);
   delayMicroseconds(dlyVal);
}
//---------------------------------------------------------|
void value_log()
// Analogic/Digital/Levitation Values Print;
{
   // Show the Hall Sensor Value;
   Serial.print("anaVal=[");
   Serial.print(anaVal); 
   Serial.print("]-");
   // Show the Electromagnet state On=1/Off=0;
   Serial.print("digVal=[");
   De serie . print ( digVal ); 
De serie . print ( "] -" ); // Muestra el valor del punto de levitación; De serie . print ( "levVal = [" ); De serie . imprimir ( levVal ); De serie . println ( "];" ); } // =============================================== ========== |
   
   
 

Código para el juguete de levitación magnética con Arduino.
Hard (versión PID)

 
int  anaPin  =  1 ;    // Pin 1 analógico Arduino 
int  digPin  =  5 ;    // Arduino Digital Pin 5 
int  subPin  =  7 ;    // Arduino Digital Pin 7
int  addPin  =  8 ;    // Arduino Digital Pin 8 
// 
int  anaVal  =  0 ;    // Analogic Valie 
int  digVal  =  0 ;    // Valor digital 
// 
int  levVal  =  262 ;  // Valor de levitación 
int  dlyVal  =  10 ;   // Valor de retraso 
// 
float  timVal  =  0 ;  // Valor de tiempo 
// -------------------------------------------- ------------- | 
// Valores PID 
float  setpoint  =  0; 
flotan  measured_value  =  0 ; 
salida 
flotante  = 0 ;   
flotante  integral  =  0 ; 
derivada 
flotante  = 0 ;   
error de 
flotación  = 0 ;   
flotante  anterior_error  =  0 ; 
flotador  dt  =  0.1 ; 
flotación  Kp  =  1.0 ; 
flotador  Ki  =  0.1 ; 
flotador  Kd  =  0.01 ;
// ------------------------------------------------ --------- | 
void  setup () 
{ 
// Inicialización de Levitator Begin; De serie . comenzar ( 57600 ); De serie . println ( "Levitador por JSyA" ); De serie . println ( "Iniciando ..." ); // Configuración del modo de trabajo de pines digitales; pinMode ( digPin , OUTPUT ); pinMode ( addPin , INPUT_PULLUP ); pinMode ( subPin , INPUT_PULLUP
   
   
    
    ); 
// timVal = millis (); punto de ajuste = levVal ; // Levitator initialization End; De serie . println ( "Iniciado" ); } // ----------------------------------------------- ---------- | void loop () // PID { // Hall Sensor Read (Intensidad de campo magnético); anaVal = analogRead ( anaPin ); Cálculos // PID measured_value = anaval ; error = punto de ajuste - valor_medido
   
   
       ; 
integral = integral + error * dt ; derivada = ( error - error_ previo ) / dt ; salida = ( - Kp * error ) + ( - Ki * integral ) + ( - Kd * derivada ); anterior_error = error ; // Configuración del valor final digVal + = output ;
         
     
     
   // Comprueba el valor del punto de levitación; 
if ( digVal < 0 ) digVal = 0 ; if ( digVal > 255 ) digVal = 255 ; // Aumenta / disminuye el valor de Electromagnet; // 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 (); //} // Aumenta el valor del punto de levitación; Si
       

   
    ( 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 () 
//  Valores analógicos / digitales / levitación  Print ;  
{ 
// Muestra el valor del sensor Hall; De serie . print ( "anaVal = [" ); De serie . imprimir ( anaVal ); De serie . print ( "] -" ); // Muestra el estado del electroimán On = 1 / Off = 0; De serie . print ( "digVal = [" ); De serie . print ( digVal ); De serie .
   
   
   print ( "] -" ); 
// Muestra el valor del punto de levitación; De serie . print ( "punto de ajuste = [" ); De serie . imprimir ( punto de ajuste ); De serie . println ( "];" ); } // =============================================== ========== |
   
https://blog.juguetronica.com/

One thought on “Un levitador magnético”

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *