Projeto Levitador Magnético com Arduino Nano: Guia de Peças e Ligação
Componentes e Materiais
| Componente | Quantidade | Observações |
|---|---|---|
| Arduino Nano R3 | 1 | Pode usar qualquer Arduino, mas o shield é feito para Nano. |
| Eletroímã 12V 25mm diâmetro | 1 | |
| Sensor Hall Linear 49E | 1 | Não use sensor Hall switch (chave). |
| Transistor Darlington High Power | 1 | TIP 120 |
| Resistor 1k ohm | 1 | |
| Diodo 1N4007 Alta Tensão/Corrente | 1 | |
| Fonte 12V 1A | 1 | |
| Protoboard (genérica) | 1 | |
| Chave Pushbutton 12mm SparkFun | 2 | |
| Jumpers (genéricos) | 1 |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Levitador magnético com Arduino.
Você pode imprimir o corpo em 3D ou não.
Modelo 3D: https://www.thingiverse.com/thing:1392023
- Fácil de imprimir e montar (apenas cola, sem parafusos).
- Basta instalar o firmware (Levitator.ino) na placa Arduino.
- Não precisa de computador, apenas fonte 12V após instalar firmware.
- Use as chaves para ajustar posição do ímã permanente.
- Use o monitor serial do Arduino para ver o valor correto para seu caso.
- Pode fixar o valor correto no código do seu brinquedo.
Pode usar protoboard ou fazer sua própria placa (shield Arduino Nano).
Placa PCB: https://www.thingiverse.com/thing:1392530

Ou compre pronto: https://oshpark.com/shared_projects/kxH3Ak1b

Atenção:
- Coloque o sensor Hall na ponta inferior (top_sensor.stl) - veja imagens.
- Para funcionar corretamente, o sensor Hall deve estar a pelo menos 5mm do eletroímã.
- Pode usar outro sensor Hall linear (não use sensor Hall switch).
- Use ímãs permanentes de neodímio (não funciona com ímãs comuns).
- Objetos pesados são mais estáveis.

Veja minhas montagens no Thingiverse para mais detalhes e dicas.
Levitador 3D Impresso: https://www.thingiverse.com/make:201394
Shield para Arduino Nano: https://www.thingiverse.com/make:201420
É simples.
Código
Levitator.ino (Versão Simples - Sem PID)
//=========================================================|
// Ekobots Innovation Ltda - www.ekobots.com.br |
// Juan Sirgado y Antico - www.jsya.com.br |
//---------------------------------------------------------|
// Programa Levitador Magnético - 2016/02/06 |
// Todos os direitos reservados 2016 |
//=========================================================|
int anaPin = 1; // Pino Analógico 1 do Arduino
int digPin = 5; // Pino Digital 5
int subPin = 7; // Pino Digital 7
int addPin = 8; // Pino Digital 8
int anaVal = 0; // Valor Leitura Analógica (Sensor Hall)
boolean digVal = 0; // Valor Escrita Digital (Eletroímã)
int levVal = 228; // Valor Ponto de Levitação
int dlyVal = 250; // Valor Delay Microssegundos
void setup() {
Serial.begin(57600);
Serial.println("Levitator by JSyA");
Serial.println("Starting...");
pinMode(digPin, OUTPUT);
pinMode(subPin, INPUT_PULLUP);
pinMode(addPin, INPUT_PULLUP);
Serial.println("Started.");
}
void loop() {
anaVal = analogRead(anaPin);
if (digitalRead(addPin) == LOW) {
levVal++;
value_log();
delay(250);
}
if (digitalRead(subPin) == LOW) {
levVal--;
value_log();
delay(250);
}
if (anaVal < levVal) {
digVal = LOW;
} else {
digVal = HIGH;
}
digitalWrite(digPin, digVal);
delayMicroseconds(dlyVal);
}
void value_log() {
Serial.print("anaVal=["); Serial.print(anaVal); Serial.print("]-");
Serial.print("digVal=["); Serial.print(digVal); Serial.print("]-");
Serial.print("levVal=["); Serial.print(levVal); Serial.println("];");
}
//=========================================================|
Levitator_PID.ino (Versão Avançada - Com 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;
int digPin = 5;
int subPin = 7;
int addPin = 8;
int anaVal = 0;
int digVal = 0;
int levVal = 262;
int dlyVal = 10;
float timVal = 0;
// Valores PID
float setpoint = 0;
float measured_value = 0;
float output = 0;
float integral = 0;
float derivative = 0;
float error = 0;
float previous_error = 0;
float dt = 0.1;
float Kp = 1.0;
float Ki = 0.1;
float Kd = 0.01;
void setup() {
Serial.begin(57600);
Serial.println("Levitator by JSyA");
Serial.println("Starting...");
pinMode(digPin, OUTPUT);
pinMode(addPin, INPUT_PULLUP);
pinMode(subPin, INPUT_PULLUP);
setpoint = levVal;
Serial.println("Started.");
}
void loop() {
anaVal = analogRead(anaPin);
// Cálculos PID
measured_value = anaVal;
error = setpoint - measured_value;
integral = integral + error * dt;
derivative = (error - previous_error) / dt;
output = (-Kp * error) + (-Ki * integral) + (-Kd * derivative);
previous_error = error;
digVal += output;
if (digVal < 0) digVal = 0;
if (digVal > 255) digVal = 255;
analogWrite(digPin, digVal);
// Ajuste de setpoint via botões
if (digitalRead(addPin) == LOW) {
setpoint++;
value_log();
delay(250);
}
if (digitalRead(subPin) == LOW) {
setpoint--;
value_log();
delay(250);
}
delayMicroseconds(dlyVal);
}
void value_log() {
Serial.print("anaVal=["); Serial.print(anaVal); Serial.print("]-");
Serial.print("digVal=["); Serial.print(digVal); Serial.print("]-");
Serial.print("setpoint=["); Serial.print(setpoint); Serial.println("];");
}
//=========================================================|
Esquemáticos
Fritzing IDE

Processo de manufatura
- Construa um Relógio Retrô Numitron com Arduino: Simples, Confiável e Eficiente
- Sensor K30 CO₂: Monitoramento de Qualidade do Ar Interno em Tempo Real
- Facilitando Comunicação Surdo-Cego com 1Sheeld e Arduino
- Mealheiro Inteligente: Controlar Aceitador de Moedas com Arduino Nano
- Controlar um LED via Bluetooth com Arduino – Guia DIY Simples
- Integrando Sensor de Impressão Digital Capacitivo DFRobot com Arduino ou ESP8266
- Projeto HMI Interativo com Nextion, Arduino Mega e Sensores
- Braço Robótico 6 GDL Controlado por Nunchuk com Arduino Mega
- Levitação Magnética Repulsiva com Arduino: Circuito Simples e Guia DIY
- Medição Precisa de Radiação Solar com Arduino UNO e Ethernet Shield