Framtiden för automatiska självgående schackbräden
cpp
#include
// Definiera stegmotorer
#define MOTOR_X_STEP 2 // Steg för X-motorn
#define MOTOR_X_DIR 3 // Riktning för X-motorn
#define MOTOR_Y_STEP 4 // Steg för Y-motorn
#define MOTOR_Y_DIR 5 // Riktning för Y-motorn
// Skapa stegmotorinstanser
AccelStepper stepperX(1, MOTOR_X_STEP, MOTOR_X_DIR);
AccelStepper stepperY(1, MOTOR_Y_STEP, MOTOR_Y_DIR);
// Definiera magnetens pin
#define MAGNET_PIN 8
// Mappning av kvadratadress till positioner
int squareGrid[8][8][2] = {
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}, {7, 0}},
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}, {7, 1}},
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}, {7, 2}},
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}, {7, 3}},
{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}, {7, 4}},
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}, {7, 5}},
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}, {7, 6}},
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}, {7, 7}},
};
// Initialposition
int currentX = 0;
int currentY = 0;
// Setup-funktionen
void setup() {
Serial.begin(9600);
pinMode(MAGNET_PIN, OUTPUT);
// Stegmotorinställning
stepperX.setMaxSpeed(200);
stepperY.setMaxSpeed(200);
}
// Huvudloopen
void loop() {
if (Serial.available() > 0) {
String input = Serial.readStringUntil('n');
moveToSquare(input);
}
}
// Funktion för att flytta pjäsen till en given kvadratadress
void moveToSquare(String square) {
// Översätt adressen till lämplig position
int targetX = square.charAt(0) - 'A'; // Rörelser för kolumn (A-H)
int targetY = square.charAt(1) - '1'; // Rörelser för rad (1-8)
// Beräkna steg för varje motor
int stepsX = (targetX - currentX) * 100; // 100 steg per rutor
int stepsY = (targetY - currentY) * 100; // 100 steg per rutor
// Flytta motorerna till slutpositionen
stepperX.move(stepsX);
stepperY.move(stepsY);
// Om det behövs, justera motorerna i nollställningsläge
stepperX.setCurrentPosition(0);
stepperY.setCurrentPosition(0);
// Slå på magneten
digitalWrite(MAGNET_PIN, HIGH);
stepperX.runToPosition();
stepperY.runToPosition();
// Utan magnet, flytta det till nästa ruta
// Simultan rörelse för att säkerställa korrekt positionering
digitalWrite(MAGNET_PIN, LOW);
// Spara nuvarande position
currentX = targetX;
currentY = targetY;
}
### Förklaring av koden
1. Stegmotorer: Koden använder två *AccelStepper* instanser för att hantera stegmotorerna för X och Y rörelsen. De definierade pin-nummer kopplas till motorer och möjliggör kontroll av rörelser.
2. Nollställning och rörelse: När pjäsen flyttas, ställs motorerna till noll och flyttar sedan till målrutan. Detta säkerställer att pjäserna kan flyttas effektivt utan att collidera.
3. Magnetkontroll: Elektromagneten aktiveras när pjäsen ska flyttas och stängs av när rörelsen är klar, vilket säkerställer att pjäsen kan lyftas och placeras korrekt.
4. Serial kommunikation: Koden läser in en kvadratadress (till exempel "B4") via Serial Monitor och översätter den till steg som trappar motorerna till rätt position.
Denna kod kan vidareutvecklas och justeras för att passa specifika krav, och också inkludera mer komplexa rörelser och strategiska drag i schackspelet.
Tack för att du läste vår artikel, du kan se alla artiklar i våra webbkartor eller i Sitemaps
Tyckte du att den här artikeln var användbar? Framtiden för automatiska självgående schackbräden Du kan se mer här NanoPi.Tack för att du läser innehållet i Maker Electronics
Leave a Reply
Se mer relaterat innehåll