Reakčná hra pre dvoch hráčov – Arduino Uno
Reakčná hra pre dvoch hráčov na arduino UNO.
Cílem projektu Smart Car, je Arduino platforma a dva krokové motory, které se řídí podle ultrazvukového senzoru.Pokud senzor detekuje překážku ve stanovené vzdálenosti, Arduino provede odpovídající akci, například zastaví vozítko nebo změní jeho směr, aby se vyhnulo kolizi. Tento projekt umožní studentům a nadšencům získat praktické zkušenosti s programováním, řízením motorů a prací se senzory v reálných podmínkách, čímž přispěje k rozvoji jejich znalostí v oblasti robotiky a automatizace.
#include <AccelStepper.h>
// Definice pinů pro krokové motory
#define motor1Pin1 2
#define motor1Pin2 3
#define motor1Pin3 4
#define motor1Pin4 5
#define motor2Pin1 6
#define motor2Pin2 7
#define motor2Pin3 8
#define motor2Pin4 9
// Definice pinů pro ultrazvukový senzor
#define trigPin 10
#define echoPin 11
// Rychlost a akcelerace motorů
#define MOTOR_SPEED 900 // Rychlost motorů (v krocích za sekundu)
#define MOTOR_ACCEL 200 // Akcelerace motorů
// Definice vzdálenosti překážky (v cm)
#define OBSTACLE_DISTANCE 4
// Inicializace motorů
AccelStepper motor1(AccelStepper::FULL4WIRE, motor1Pin1, motor1Pin2, motor1Pin3, motor1Pin4);
AccelStepper motor2(AccelStepper::FULL4WIRE, motor2Pin1, motor2Pin2, motor2Pin3, motor2Pin4);
// Funkce pro měření vzdálenosti pomocí ultrazvukového senzoru
long measureDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2; // Převod na centimetry
return distance;
}
// Nastavení pro krokové motory
void setupMotors() {
motor1.setMaxSpeed(MOTOR_SPEED);
motor1.setAcceleration(MOTOR_ACCEL);
motor1.moveTo(-10000); // Pohyb dopředu
motor2.setMaxSpeed(MOTOR_SPEED);
motor2.setAcceleration(MOTOR_ACCEL);
motor2.moveTo(10000); // Pohyb dopředu
}
void setup() {
// Inicializace motorů a senzorů
setupMotors();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
// Měření vzdálenosti
long distance = measureDistance();
Serial.println(distance);
// Pokud je před překážkou, popojeď dozadu a otoč se
if (distance < OBSTACLE_DISTANCE) {
// Zastavení motorů
motor1.stop();
motor2.stop();
// Krátký pohyb dozadu
motor1.move(-600);
motor2.move(-600);
while (motor1.distanceToGo() != 0 || motor2.distanceToGo() != 0) {
motor1.run();
motor2.run();
}
// Otočení o X stupňů (přibližně, podle krokového motoru uprav kroky)
motor1.move(50); // Jeden motor jede dopředu
motor2.move(-50); // Druhý motor jede dozadu
while (motor1.distanceToGo() != 0 || motor2.distanceToGo() != 0) {
motor1.run();
motor2.run();
}
// Po otočení se zase rozjedeme dopředu
motor1.moveTo(10000);
motor2.moveTo(10000);
}
// Normální jízda dopředu
motor1.run();
motor2.run();
}
Reakčná hra pre dvoch hráčov na arduino UNO.
Po prvních pokusech s moduly CC1101 433.92Mhz jsem se po čase rozhodl si vyzkoušet napsat program na jednoduché ovládání led diody tak aby jeden modul pravidelně vysílal hodnoty které se na druhém modulu vyhodnotí a tento pak bude pravidelně blikat led diodou. Po tomto programu a jeho odzkoušení jsem se rozhodl si napsat další program na zjištění číselných hodnot tlačítek na dálkovém ovladači pro bezdrátové zásuvky 433Mhz, a tyto pak ovládat dalším napsaným programem na zapínání a vypínání zásuvky. Pro ovládání jsem použil Arduino Nano které jsem pro testování osadil do Arduino IO shieldu, pro komunikaci mezi Arduino a modulem CC1101 jsem použit 8 – kanálový obousměrný převodník logických úrovní (5V – 3.3V) a pro napájení celé sestavy jsem použil vyrobený napájecí zdroj s výstupním napětím 8V pro napájení Arduino Nano, 5V a 3.3V pro napájení převodníku a modulu CC1101. Uvedené přípravky rozšiřují zapojení uveřejněná v [1].