Levitação magnética com Arduino
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
Aplicativos e serviços online
|
Sobre este projeto
Levitator com Arduino.
Você pode imprimir o corpo em 3D ou não.
https://www.thingiverse.com/thing:1392023
- Fácil de imprimir e montar (apenas um pouco de cola, sem parafusos).
- Basta instalar o firmware (Levitator.ino) na placa arduino.
- Não precisa de um computador, apenas a fonte de alimentação 12V, após instalar o firmware.
- Use os interruptores para ajustar a posição do ímã permanente.
- Use o monitor serial arduino para ver o valor correto para você.
- Você pode codificar o valor correto em seu brinquedo.
Você pode usar um protoboard ou fazer sua placa (Arduino Nano).
http://www.thingiverse.com/thing:1392530
Ou apenas compre um:
https://oshpark.com/shared_projects/kxH3Ak1b
Atenção:
- Coloque o sensor hall na parte inferior da ponta (top_sensor.stl) veja as imagens;
- Para funcionar corretamente, o sensor de efeito Hall deve estar a pelo menos 5 mm de distância do eletromagnético;
- Você pode usar outro sensor linear hall (não use a chave do sensor hall );
- Use ímãs permanentes de neodímio (não funcionará com ímãs comuns);
- Objetos pesados são mais estáveis;
Veja minhas marcas no Thingiverse para mais detalhes e dicas.
Levitator 3D impresso:
https://www.thingiverse.com/make:201394
Shield para Arduino Nano:
https://www.thingiverse.com/make:201420
Isso é fácil.
Código
- Levitator.ino
- Levitator_PID.ino
Levitator.ino Arduino
Código para brinquedo de levitação magnética com Arduino.Fácil (Sem PID)
// ===========================================================| // Ekobots Innovation Ltda - www.ekobots.com.br | // Juan Sirgado y Antico - www.jsya.com.br | // - -------------------------------------------------- ------ | // Programa Levitator Magnético - 2016/02/06 | // Todos os direitos reservados 2016 | // =================================================================| 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 da leitura analógica (sensor Hall); booleano digVal =0; // Valor de gravação digital (eletroímã); // int levVal =228; // Valor do ponto de levitação; int dlyVal =250; // Atraso Value Micro Seconds; // ----------------------------------------- ---------------- | void setup () {// Início da inicialização do Levitator; Serial.begin (57600); Serial.println ("Levitator por JSyA"); Serial.println ("Iniciando ..."); // Configuração do modo de trabalho dos pinos digitais; pinMode (digPin, OUTPUT); pinMode (subPin, INPUT_PULLUP); pinMode (addPin, INPUT_PULLUP); // Inicialização do Levitator End; Serial.println ("Iniciado.");} // ------------------------------------- -------------------- | void loop () {// Leitura do sensor Hall (intensidade do campo magnético); anaVal =analogRead (anaPin); // Aumenta o valor do ponto de levitação; if (digitalRead (addPin) ==LOW) {levVal ++; value_log (); atraso (250); } // Diminui o valor do ponto de levitação; if (digitalRead (subPin) ==LOW) {levVal--; value_log (); atraso (250); } // Verifique o ponto de levitação; if (anaVallevVal) {digVal =HIGH; } // // LIGA / DESLIGA o eletroímã; // Com base no valor do sensor e no ponto de levitação; digitalWrite (digPin, digVal); delayMicroseconds (dlyVal);} // ------------------------------------------ --------------- | void value_log () // Impressão analógica / digital / valores de levitação; {// Mostra o valor do sensor Hall; Serial.print ("anaVal =["); Serial.print (anaVal); Serial.print ("] -"); // Mostra o estado do eletroímã On =1 / Off =0; Serial.print ("digVal =["); Serial.print (digVal); Serial.print ("] -"); // Mostra o valor do ponto de levitação; Serial.print ("levVal =["); Serial.print (levVal); Serial.println ("];");} // ===============================================================|
Levitator_PID.ino Arduino
Código para brinquedo de levitação magnética com Arduino.Difícil (versão 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 os direitos reservados 2016 | // ===============================================================| int anaPin =1; // Arduino Analogic Pin 1int digPin =5; // Arduino Digital Pin 5int subPin =7; // Arduino Digital Pin 7int addPin =8; // Arduino Digital Pin 8 // int anaVal =0; // Valieint analógico digVal =0; // Valor digital // int levVal =262; // Levitation Valueint dlyVal =10; // Delay Value // float timVal =0; // Valor do tempo//-------------------------------------------- ------------- | // Valores PID; ponto de ajuste flutuante =0; valor flutuante medido =0; saída flutuante =0; integral flutuante =0; derivada flutuante =0; erro flutuante =0; flutuante anterior_error =0; flutuante dt =0,1; flutuante Kp =1,0; flutuante Ki =0,1; flutuante Kd =0,01; // -------------------------- ------------------------------- | void setup () {// Início da inicialização do Levitator; Serial.begin (57600); Serial.println ("Levitator por JSyA"); Serial.println ("Iniciando ..."); // Configuração do modo de trabalho dos pinos digitais; pinMode (digPin, OUTPUT); pinMode (addPin, INPUT_PULLUP); pinMode (subPin, INPUT_PULLUP); // timVal =millis (); setpoint =levVal; // Inicialização do Levitator End; Serial.println ("Iniciado.");} // ------------------------------------- -------------------- | void loop () // PID {// Leitura do sensor Hall (intensidade do campo magnético); anaVal =analogRead (anaPin); // Cálculos de PID medidos_value =anaVal; erro =ponto de ajuste - valor_medido; integral =integral + erro * dt; derivada =(erro - erro_ anterior) / dt; saída =(-Kp * erro) + (-Ki * integral) + (-Kd * derivado); erro_ anterior =erro; // Configuração do valor final digVal + =output; // Verifique o valor do ponto de levitação; if (digVal <0) digVal =0; if (digVal> 255) digVal =255; // Aumenta / Diminui o valor do Eletroímã; // Com base no valor do sensor e no ponto de levitação; analogWrite (digPin, digVal); // Mostrar valores de log para depuração; // if ((millis () - timVal)> 500) // {// value_log (); // timVal =millis (); //} // Aumentar o valor do ponto de levitação; if (digitalRead (addPin) ==LOW) {setpoint ++; value_log (); atraso (250); } if (digitalRead (subPin) ==LOW) {setpoint--; value_log (); atraso (250); } // Tempo entre as mudanças de estado do eletroímã; delayMicroseconds (dlyVal);} // ------------------------------------------ --------------- | void value_log () // Impressão analógica / digital / valores de levitação; {// Mostra o valor do sensor Hall; Serial.print ("anaVal =["); Serial.print (anaVal); Serial.print ("] -"); // Mostra o estado do eletroímã On =1 / Off =0; Serial.print ("digVal =["); Serial.print (digVal); Serial.print ("] -"); // Mostra o valor do ponto de levitação; Serial.print ("setpoint =["); Serial.print (ponto de ajuste); Serial.println ("];");} // ===============================================================|
Esquemas
IDE FritzingProcesso de manufatura
- DIY mais simples relógio IV9 Numitron com Arduino
- Monitoramento de CO2 com Sensor K30
- Comunicação para surdos-cegos com 1Sheeld / Arduino
- Aceitar moeda de controle com Arduino
- Arduino com Bluetooth para controlar um LED!
- Sensor capacitivo de impressão digital com um Arduino ou ESP8266
- Brincando com Nextion Display
- Braço robótico controlado por Nunchuk (com Arduino)
- Levitação eletromagnética repulsiva Arduino
- Medindo a radiação solar com Arduino