Auto corazzata funzionante con Arduino
Già da qualche tempo pensavo di costruire qualcosa con Arduino ma non sapevo cosa, però alla fine mi è venuta un idea: costruire un carro armato con Arduino.
Costruire il carro armato non è stato facile: per prima cosa dovevo trovare una base dove collocare la scheda Arduino e gli altri componenti così ho modificato una vecchia macchina telecomandata (di quelle che si trovano al supermercato) così però più che un carro armato è un auto corazzata, in modo che vi si potesse alloggiare la breadboard di Arduino.
Successivamente dovevo realizzare il circuito, dopo una settimana di prove sono riuscito a completare il circuito e il codice, il circuito elettrico in se era semplice, è stato il codice a complicare le cose, perché volevo rendere le funzioni di Arduino tutte wireless usando un sensore ad infrarossi.
Alla fine ho creato il circuito nella breadboard, collegato tutti i componenti e costruito una corazza di cartone (non mi è venuta molto bene).
Questa auto corazzata ha diverse funzioni: la torretta è girevole grazie uno stepper motor alimentato dalle batterie della macchina che ho modificato, il cannone si può alzare e abbassare grazie ad un servomotore tutto questo tramite infrarossi questi componenti sono alimentati da una batteria 9V.
Invece la macchina che ho modificato poteva muoversi tramite il telecomando originale anche se non essendo di qualità non si muoveva molto bene.
Il codice di Arduino
#include <IRremote.h>
#include <Stepper.h>
const int stepsPerRevolution = 2038;
Stepper myStepper = Stepper(stepsPerRevolution, 7, 5, 6, 4);
IRrecv energen(11);
decode_results results;
#include <Servo.h>
Servo RJservo;
const int SERVO_PIN = 8;
int angle =90;
int angleStep =5;
const int ANGLE_CENTRE =90;
void setup() {
Serial.begin(9600);
energen.enableIRIn();
RJservo.attach(SERVO_PIN);
}
void loop() {
if (energen.decode(&results)) {
Serial.println(results.value, DEC);
energen.resume();
}
while(results.value == 16753245){
myStepper.setSpeed(5);
myStepper.step(stepsPerRevolution - 2000);
results.value = 0;
delay(100);
}
while(results.value == 16736925){
myStepper.setSpeed(5);
myStepper.step(-stepsPerRevolution + 2000);
results.value = 0;
delay(100);
}
{
while(results.value == 16720605){
if (angle > 45 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
RJservo.write(angle);
Serial.print("Moved to: ");
Serial.print(angle);
Serial.println(" degree");
}
}
results.value = 0;
delay(100);
}
while(results.value == 16761405){
if (angle >= 0 && angle <= 135) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
RJservo.write(angle);
Serial.print("Moved to: ");
Serial.print(angle);
Serial.println(" degree");
}
}
results.value = 0;
delay(100);
}
if(results.value == 16712445)
{
angle = ANGLE_CENTRE;
RJservo.write(angle);
}
}
}
Io penso che questo progetto è stato molto difficile da realizzare ma penso che alla fine abbia ottenuto un buon risultato alla fine.