Hello All,
This bot is a real entertainment for my cat. Can resist to a bunch of paws better than little robots I built before.
The four legged allbot is unstable (with or without the cat) and I added 2 legs.
I kindly program it to move 3 legs at the same time.
frontLeft
rearLeft
middleRight
at the same time and opposite for the next step.
walk forward
walk backward
turn left
turn right
I will try a Infra Red sensor to track the cat in his basket.
Here is the program used, to be implemented with smartphone IR transmitter. It is in test mode.
kindest regards
===============================
#include <Servo.h> // The ALLBOT library needs the servo.h library
#include <ALLBOT.h> // Do not forget to include the ALLBOT library, download it from the manuals.velleman.eu website
ALLBOT BOT(12); // Number of motors
enum MotorName {
hancheAvantGauche,
hancheAvantDroite,
hancheMilieuDroite,
hancheMilieuGauche,
hancheArriereGauche,
hancheArriereDroite,
genouAvantGauche,
genouAvantDroite,
genouMilieuDroite,
genouMilieuGauche,
genouArriereGauche,
genouArriereDroite
};
int sounderPin = 13; // Declaring what pin the sounder on the VRSSM is connected to
int times; // Global variable that stores part the received IR command
int speedms; // Global variable that stores part the received IR command
int positionHancheAvantGauche=135;
int positionHancheAvantDroite=135;
int positionHancheArriereGauche=45;
int positionHancheArriereDroite=45;
int positionHancheMilieuGauche=90;
int positionHancheMilieuDroite=90;
int genouPoser=45;
int genouLever=65;
void setup() {
// NAME.attach(motorname, pin, init-angle, flipped, offset-angle);
BOT.attach(hancheAvantGauche, A1, positionHancheAvantGauche, 1, 0);
BOT.attach(hancheAvantDroite, A0, positionHancheAvantDroite, 0, 0);
BOT.attach(hancheArriereGauche, 9, positionHancheArriereGauche, 1, -2);
BOT.attach(hancheArriereDroite, 4, positionHancheArriereDroite, 0, 0);
BOT.attach(hancheMilieuGauche, A4, positionHancheMilieuGauche, 1, 0);
BOT.attach(hancheMilieuDroite, A5, positionHancheMilieuDroite, 0, 0);
BOT.attach(genouAvantGauche, 11, genouPoser, 1, 0);
BOT.attach(genouAvantDroite, 2, genouPoser, 0, 0);
BOT.attach(genouArriereGauche, 10, genouPoser, 1, 0);
BOT.attach(genouArriereDroite, 3, genouPoser, 0, 0);
BOT.attach(genouMilieuGauche, A3, genouPoser, 1, 0);
BOT.attach(genouMilieuDroite, A2, genouPoser, 0, 0);
// INIT sounder
pinMode(sounderPin, OUTPUT);
// Chirp for ready
chirp(1, 50);
chirp(1, 255);
chirp(3, 0);
}
void loop() {
// put your main code here, to run repeatedly:
//walkforward(steps,speedms,longueurPas)
//walkforward(3,50,10);
walkbackward(3,50,10);
//turnleft(3,50,10);
//turnright(3,50,10);
}
//--------------------------------------------------------------
void chirp(int beeps, int speedms){
for (int i = 0; i < beeps; i++){
for (int j = 0; j < 255; j++){
digitalWrite(sounderPin, HIGH);
delayMicroseconds((355-j)+ (speedms*2));
digitalWrite(sounderPin, LOW);
delayMicroseconds((355-j)+ (speedms*2));
}
delay(30);
}
}
void chirpi(int beeps, int speedms){
for (int i = 0; i < beeps; i++){
for (int j = 255; j > 0; j--){
digitalWrite(sounderPin, HIGH);
delayMicroseconds((355-j)+ (speedms*2));
digitalWrite(sounderPin, LOW);
delayMicroseconds((355-j)+ (speedms*2));
}
delay(30);
}
}
//--------------------------------------------------------------
//
// Le devant est là où se trouve l'USB
//
// 1 2 USB 3 4
// 5 6 7 8
// 9 10 11 12
//
// Les mouvements se font en trio. Pattes avant et arrière d'un côté et patte du milieu côté opposé
//
// Trio genoux A = pattes 1, 8 et 9
// Trio genoux B = pattes 4, 5 et 12
void trioGenouA(int hauteurGenou){
BOT.move(genouAvantGauche, hauteurGenou);
BOT.move(genouArriereGauche, hauteurGenou);
BOT.move(genouMilieuDroite, hauteurGenou);
BOT.animate(speedms);
}
void trioGenouB(int hauteurGenou){
BOT.move(genouAvantDroite, hauteurGenou);
BOT.move(genouArriereDroite, hauteurGenou);
BOT.move(genouMilieuGauche, hauteurGenou);
BOT.animate(speedms);
}
void walkforward(int steps, int speedms, int longueurPas){
bool passer=false;
for (int i = 0; i < steps; i++){
// on lève les pattes à la fin du script, donc si on commence le script, on les
// lève sinon non.
if(!passer){
// on leve les pattes 1, 8 et 9
trioGenouA(genouLever);
passer=true;
}
// on va chercher le pas avec les hanches 2, 7 et 10
BOT.move(hancheAvantGauche, positionHancheAvantGauche + longueurPas);
BOT.move(hancheArriereGauche, positionHancheArriereGauche + longueurPas);
BOT.move(hancheMilieuDroite, positionHancheMilieuDroite + longueurPas);
BOT.animate(speedms);
// on repose les pattes 1, 8 et 9
trioGenouA(genouPoser);
// on lève les pattes 4, 5 et 12
trioGenouB(genouLever);
// on ramène le premier pas
BOT.move(hancheAvantGauche, positionHancheAvantGauche);
BOT.move(hancheArriereGauche, positionHancheArriereGauche);
BOT.move(hancheMilieuDroite, positionHancheMilieuDroite);
BOT.animate(speedms);
// on va chercher le pas avec les hanches 3, 6 et 11
BOT.move(hancheAvantDroite, positionHancheAvantDroite + longueurPas);
BOT.move(hancheArriereDroite, positionHancheArriereDroite + longueurPas);
BOT.move(hancheMilieuGauche, positionHancheMilieuGauche + longueurPas);
BOT.animate(speedms);
// on repose les pattes 4, 5 et 12
trioGenouB(genouPoser);
// on leve les pattes 1, 8 et 9
trioGenouA(genouLever);
// on ramène le pas avec les hanches 3, 6 et 11
BOT.move(hancheAvantDroite, positionHancheAvantDroite);
BOT.move(hancheArriereDroite, positionHancheArriereDroite);
BOT.move(hancheMilieuGauche, positionHancheMilieuGauche);
BOT.animate(speedms);
}
}
//--------------------------------------------------------------
// 1 2 USB 3 4
// 5 6 7 8
// 9 10 11 12
void walkbackward(int steps, int speedms, int longueurPas){
bool passer=false;
for (int i = 0; i < steps; i++){
// on lève les pattes à la fin du script, donc si on commence le script, on les
// lève sinon non.
if(!passer){
// on leve les pattes 1, 8 et 9
trioGenouA(genouLever);
passer=true;
}
// on va chercher le pas avec les hanches 2, 7 et 10
BOT.move(hancheAvantGauche, positionHancheAvantGauche - longueurPas);
BOT.move(hancheArriereGauche, positionHancheArriereGauche - longueurPas);
BOT.move(hancheMilieuDroite, positionHancheMilieuDroite - longueurPas);
BOT.animate(speedms);
// on repose les pattes 1, 8 et 9
trioGenouA(genouPoser);
// on lève les pattes 4, 5 et 12
trioGenouB(genouLever);
// on ramène le premier pas
BOT.move(hancheAvantGauche, positionHancheAvantGauche);
BOT.move(hancheArriereGauche, positionHancheArriereGauche);
BOT.move(hancheMilieuDroite, positionHancheMilieuDroite);
BOT.animate(speedms);
// on va chercher le pas avec les hanches 3, 6 et 11
BOT.move(hancheAvantDroite, positionHancheAvantDroite - longueurPas);
BOT.move(hancheArriereDroite, positionHancheArriereDroite - longueurPas);
BOT.move(hancheMilieuGauche, positionHancheMilieuGauche - longueurPas);
BOT.animate(speedms);
// on repose les pattes 4, 5 et 12
trioGenouB(genouPoser);
// on leve les pattes 1, 8 et 9
trioGenouA(genouLever);
// on ramène le pas avec les hanches 3, 6 et 11
BOT.move(hancheAvantDroite, positionHancheAvantDroite);
BOT.move(hancheArriereDroite, positionHancheArriereDroite);
BOT.move(hancheMilieuGauche, positionHancheMilieuGauche);
BOT.animate(speedms);
}
}
//--------------------------------------------------------------
// 1 2 USB 3 4
// 5 6 7 8
// 9 10 11 12
void turnleft(int steps, int speedms, int longueurPas){
for (int i = 0; i < steps; i++){
// on leve les pattes 1, 8 et 9
trioGenouA(genouLever);
// on va chercher le pas avec les hanches 2, 7 et 10
BOT.move(hancheAvantGauche, positionHancheAvantGauche - longueurPas);
BOT.move(hancheArriereGauche, positionHancheArriereGauche - longueurPas);
BOT.move(hancheMilieuDroite, positionHancheMilieuDroite + longueurPas);
BOT.animate(speedms);
// on repose les pattes 1, 8 et 9
trioGenouA(genouPoser);
// on lève les pattes 4, 5 et 12
trioGenouB(genouLever);
// on ramène le premier pas
BOT.move(hancheAvantGauche, positionHancheAvantGauche);
BOT.move(hancheArriereGauche, positionHancheArriereGauche);
BOT.move(hancheMilieuDroite, positionHancheMilieuDroite);
BOT.animate(speedms);
// on va chercher le pas avec les hanches 3, 6 et 11
BOT.move(hancheAvantDroite, positionHancheAvantDroite + longueurPas);
BOT.move(hancheArriereDroite, positionHancheArriereDroite + longueurPas);
BOT.move(hancheMilieuGauche, positionHancheMilieuGauche - longueurPas);
BOT.animate(speedms);
// on repose les pattes 4, 5 et 12
trioGenouB(genouPoser);
// on ramène le pas avec les hanches 3, 6 et 11
BOT.move(hancheAvantDroite, positionHancheAvantDroite);
BOT.move(hancheArriereDroite, positionHancheArriereDroite);
BOT.move(hancheMilieuGauche, positionHancheMilieuGauche);
BOT.animate(speedms);
}
}
//--------------------------------------------------------------
// 1 2 USB 3 4
// 5 6 7 8
// 9 10 11 12
void turnright(int steps, int speedms, int longueurPas){
for (int i = 0; i < steps; i++){
// on leve les pattes 1, 8 et 9
trioGenouA(genouLever);
// on va chercher le pas avec les hanches 2, 7 et 10
BOT.move(hancheAvantGauche, positionHancheAvantGauche + longueurPas);
BOT.move(hancheArriereGauche, positionHancheArriereGauche + longueurPas);
BOT.move(hancheMilieuDroite, positionHancheMilieuDroite - longueurPas);
BOT.animate(speedms);
// on repose les pattes 1, 8 et 9
trioGenouA(genouPoser);
// on lève les pattes 4, 5 et 12
trioGenouB(genouLever);
// on ramène le premier pas
BOT.move(hancheAvantGauche, positionHancheAvantGauche);
BOT.move(hancheArriereGauche, positionHancheArriereGauche);
BOT.move(hancheMilieuDroite, positionHancheMilieuDroite);
BOT.animate(speedms);
// on va chercher le pas avec les hanches 3, 6 et 11
BOT.move(hancheAvantDroite, positionHancheAvantDroite - longueurPas);
BOT.move(hancheArriereDroite, positionHancheArriereDroite - longueurPas);
BOT.move(hancheMilieuGauche, positionHancheMilieuGauche + longueurPas);
BOT.animate(speedms);
// on repose les pattes 4, 5 et 12
trioGenouB(genouPoser);
// on ramène le pas avec les hanches 3, 6 et 11
BOT.move(hancheAvantDroite, positionHancheAvantDroite);
BOT.move(hancheArriereDroite, positionHancheArriereDroite);
BOT.move(hancheMilieuGauche, positionHancheMilieuGauche);
BOT.animate(speedms);
}
}