Arduino Nano Magneet Levitatie Project: Onderdelen & Bedradingshandleiding
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| Arduino Nano R3 | 1 | Je kunt elke Arduino gebruiken, maar de shield is gemaakt voor de Nano. |
| Elektromagneet 12V 25mm diameter | 1 | |
| Lineaire Halleffectsensor 49E | 1 | Gebruik GEEN Halleffectschakelaar. |
| Darlington High Power Transistor | 1 | TIP 120 |
| Weerstand 1k ohm | 1 | |
| 1N4007 – Hoge Spanning, Hoge Stroom Diode | 1 | |
| Voeding 12V 1A | 1 | |
| Breadboard (generic) | 1 | |
| SparkFun Drukknopschakelaar 12mm | 2 | |
| Jumper draden (generic) | 1 |
Apps en online diensten
- Arduino IDE
Over dit project
Levitator met Arduino.
Je kunt de behuizing 3D-printen of niet.
https://www.thingiverse.com/thing:1392023
- Makkelijk te printen en monteren (alleen wat lijm, geen schroeven).
- Installeer gewoon de firmware (Levitator.ino) in het Arduino-bord.
- Geen computer nodig, alleen de 12V voeding, na installatie van de firmware.
- Gebruik de schakelaars om de permanente magneetpositie aan te passen.
- Gebruik de Arduino Serial Monitor om de correcte waarde voor jou te zien.
- Je kunt de correcte waarde hardcoden in je speelgoed.
Je kunt een experimenteerprint of een eigen printplaat maken (Arduino Nano).
https://www.thingiverse.com/thing:1392530

Of koop er een:
https://oshpark.com/shared_projects/kxH3Ak1b

Let op:
- Plaats de hallsensor in de bodem van de punt (top_sensor.stl) zie de afbeeldingen;
- Om correct te werken, moet de halleffectsensor minimaal 5mm afstand hebben van de elektromagneet;
- Je kunt andere lineaire hallsensoren gebruiken (gebruik GEEN halsensor schakelaar);
- Gebruik neodymium permanente magneten (het werkt niet met gewone magneten);
- Zwaardere objecten zijn stabieler;

Bekijk mijn makes op Thingiverse voor meer details en tips.
Levitator 3D Geprint:
https://www.thingiverse.com/make:201394
Shield voor Arduino Nano:
https://www.thingiverse.com/make:201420
Dat is makkelijk.
Code
Levitator.ino
Code voor Magneet Levitatie speelgoed met Arduino.
Makkelijk (Geen PID)
//=========================================================|
// Ekobots Innovation Ltda - www.ekobots.com.br |
// Juan Sirgado y Antico - www.jsya.com.br |
//---------------------------------------------------------|
// Program Magnetic Levitator - 2016/02/06 |
// All rights reserved 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; // Analogic Read(Hall Sensor) Value;
boolean digVal = 0; // Digital Write(Electromagnet) Value;
// int levVal = 228; // Levitation Poit Value;
int dlyVal = 250; // Delay Value Micro Seconds;
//---------------------------------------------------------|
void setup() {
// Levitator initialization Begin;
Serial.begin(57600);
Serial.println("Levitator by JSyA");
Serial.println("Starting...");
// Digital Pins Work Mode Setup;
pinMode(digPin, OUTPUT);
pinMode(subPin, INPUT_PULLUP);
pinMode(addPin, INPUT_PULLUP);
// Levitator initialization End;
Serial.println("Started.");
}
//---------------------------------------------------------|
void loop() {
// Hall Sensor Read (Magnetic Field Intensity);
anaVal = analogRead(anaPin);
// Increase The Value Of Levitation Point;
if (digitalRead(addPin) == LOW) {
levVal++;
value_log();
delay(250);
}
// Decrease The Value Of Levitation Point;
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=[");
Serial.print(digVal);
Serial.print("]-");
// Show the Levitation Point Value;
Serial.print("levVal=[");
Serial.print(levVal);
Serial.println("];");
}
//=========================================================|
Levitator_PID.ino
Code voor Magneet Levitatie speelgoed met Arduino.
Moeilijk (PID-versie)
//=========================================================|
// Ekobots Innovation Ltda - www.ekobots.com.br |
// Juan Sirgado y Antico - www.jsya.com.br |
//---------------------------------------------------------|
// Program Magnetic Levitator PID - 2016/10/06 |
// All rights reserved 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; // Analogic Valie
int digVal = 0; // Digital Value
// int levVal = 262; // Levitation Value
int dlyVal = 10; // Delay Value
// float timVal = 0; // Time Value
//---------------------------------------------------------|
// PID Values
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() {
// Levitator initialization Begin;
Serial.begin(57600);
Serial.println("Levitator by JSyA");
Serial.println("Starting...");
// Digital Pins Work Mode Setup;
pinMode(digPin, OUTPUT);
pinMode(addPin, INPUT_PULLUP);
pinMode(subPin, INPUT_PULLUP);
// timVal = millis();
setpoint = levVal;
// Levitator initialization End;
Serial.println("Started.");
}
//---------------------------------------------------------|
void loop() // PID
{
// Hall Sensor Read (Magnetic Field Intensity);
anaVal = analogRead(anaPin);
// PID calculations
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;
// Final value setup
digVal += output;
// Check the value for levitation point;
if (digVal < 0) digVal=0;
if (digVal > 255) digVal=255;
// Increase/Decrease the value for Electromagnet;
// With Base on Sensor Value and the Levitation Point;
analogWrite(digPin, digVal);
// Show log values for debug;
// if((millis()-timVal) > 500)
// {
// value_log();
// timVal = millis();
// }
// Increase The Value Of Levitation Point;
if (digitalRead(addPin) == LOW) {
setpoint++;
value_log();
delay(250);
}
if (digitalRead(subPin) == LOW) {
setpoint--;
value_log();
delay(250);
}
// Time between electromagnet state changes;
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=[");
Serial.print(digVal);
Serial.print("]-");
// Show the Levitation Point Value;
Serial.print("setpoint=[");
Serial.print(setpoint);
Serial.println("];");
}
//=========================================================|
Schema's
Fritzing IDE
Productieproces
- Bouw een retro Numitron-klok met Arduino: Eenvoudig, betrouwbaar en energiezuinig
- K30 CO2-sensor: Real-time binnenluchtkwaliteitmonitoring met Arduino
- Communicatie voor doofblinden vergemakkelijken met 1Sheeld en Arduino
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Een DFRobot Capacitieve Vingerafdruksensor integreren met Arduino of ESP8266
- Interactief Nextion HMI-weerstation met Arduino Mega en sensoren
- Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
- Arduino-gebaseerde Afstotende Magnetische Levitatie: Eenvoudige Schakeling & DIY Handleiding
- Accurate zonnestralingsmeting met Arduino UNO en Ethernet Shield
- Compact Arduino Radarsysteem met HC-SR04 Ultrasonische Sensor & 1.8" Display