GorillaBot — шустрый Arduino-робот счетырьмя ногами, каждая из которых приводится в движение при помощи двух сервомашинок (Tower Pro MG90S).
Мозг робота — контроллер Arduino Nano, позволяет управлять роботом по радиоканалу (NRF24L01) или работаться в автономном режиме, когда робот удерживает заданный курс (с помощью магнитометра — QMC5883L GY-273) и использует бортовой ультразвуковой датчик расстояния (HC-SR04).
Код робота — GorillaBot_Controlller___Autonomous.ino
//Libraries needed
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <VarSpeedServo.h>
#include <QMC5883L.h>
#include <Wire.h>
#include <NewPing.h>
//Magnometer(digital compass)
QMC5883L compass;
//Servos needed
VarSpeedServo myservoFRONTFRONTLEFT;
VarSpeedServo myservoFRONTBACKLEFT;
VarSpeedServo myservoFRONTFRONTRIGHT;
VarSpeedServo myservoFRONTBACKRIGHT;
VarSpeedServo myservoBACKFRONTLEFT;
VarSpeedServo myservoBACKBACKLEFT;
VarSpeedServo myservoBACKFRONTRIGHT;
VarSpeedServo myservoBACKBACKRIGHT;
// Radio protocole needed:
RF24 radio(9, 10); // Create a Radio
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
int message[9]; // 9 different messages to receive
// name of messages received
int xAxis;
int yAxis;
int buttonUp;
int buttonRight;
int buttonDown;
int buttonLeft;
int buttonE;
int buttonF;
int buttonJoystick;
//Joystick button counter settings (to tell us if autonomous mode is activated/deactivated)
int buttonJoystickPushCounter = 0;
// Step counter for autonomous mode
int StepCounter = 0;
// Left Right conters for autonomous mode
int LeftCounter = 0;
int RightCounter = 0;
// Orientation values to calculate
int Orientation = 0;
int OrientationError = 0;
int OrientationErrorR = 0;
int OrientationErrorL = 0;
//Array for storing orientation
byte dataArrayF[1];
byte dataArrayB[1];
byte dataArrayL[1];
byte dataArrayR[1];
int arrayIndexF = 0;
int arrayIndexB = 0;
int arrayIndexL = 0;
int arrayIndexR = 0;
void setup()
{
// Attach servos to pins
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTLEFT.write(180);
myservoFRONTBACKLEFT.write(0);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(0);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(180);
delay(1000);
// detach servos to avoid jitter on power up
myservoFRONTFRONTLEFT.detach();
myservoFRONTBACKLEFT.detach();
myservoFRONTFRONTRIGHT.detach();
myservoFRONTBACKRIGHT.detach();
myservoBACKFRONTLEFT.detach();
myservoBACKBACKLEFT.detach();
myservoBACKFRONTRIGHT.detach();
myservoBACKBACKRIGHT.detach();
// Serial begin for debugging in serial monitor
Serial.begin(9600);
// Magnometer (digital compass) settings
Wire.begin();
compass.init();
compass.setSamplingRate(50);
// Radio settings
radio.begin();
radio.setChannel(101);
radio.setPALevel(RF24_PA_HIGH);
radio.setDataRate( RF24_250KBPS ) ;
radio.openReadingPipe(1,pipe);
}
void loop()
{
radio.startListening();
while( radio.available() )
{
radio.read( message, sizeof(message) );
// Define messages received while radio available
xAxis = message[0];
yAxis = message[1];
buttonUp = message[2];
buttonRight = message[3];
buttonDown = message[4];
buttonLeft = message[5];
buttonE = message[6];
buttonF = message[7];
buttonJoystick = message[8];
radio.stopListening();
// Write what messages are received in serial monitor for debugging
Serial.print( " X: ");
Serial.print(xAxis);
Serial.print( " Y: ");
Serial.print(yAxis);
Serial.print( " UP: ");
Serial.print(buttonUp);
Serial.print( " RIGHT: ");
Serial.print(buttonRight);
Serial.print( " DOWN: ");
Serial.print(buttonDown);
Serial.print( " LEFT: ");
Serial.print(buttonLeft);
Serial.print( " JOYSTICK: ");
Serial.print(buttonJoystick);
Serial.print( " JPC: ");
Serial.print(buttonJoystickPushCounter);
Orientation = compass.readHeading();
Orientation = map(Orientation, 0, 360, 0, 255);
OrientationError = dataArrayF[arrayIndexF] - Orientation;
if (OrientationError < -127.5)
{
OrientationError += 255;
}
if (OrientationError > 127.5)
{
OrientationError -= 255;
}
if (OrientationError < 0)
{
OrientationErrorR = OrientationError * -1;
}
if (OrientationError >= 0)
{
OrientationErrorL = OrientationError;
}
////////////////Manual Commands////////////
// BUTTON UP
if(buttonUp == 0)
{
dataArrayF[arrayIndexF] = Orientation;
}
// BUTTON DOWN
if (buttonDown == 0)
{
RobotSitBack();
delay(2000);
RobotSitForward();
delay(500);
RobotSitBack();
delay(500);
RobotSitForward();
delay(500);
RobotSitBack();
delay(500);
RobotSitForward();
delay(500);
RobotSitBack();
delay(500);
RobotStop();
RobotStrut();
RobotStrut();
RobotStop();
RobotTilt4Corners();
RobotTilt4Corners();
RobotStop();
Robotlie();
}
//BUTTON RIGHT
if(buttonRight == 0)
{
dataArrayR[arrayIndexR] = OrientationErrorR;
}
//BUTTON LEFT
if(buttonLeft == 0)
{
dataArrayL[arrayIndexL] = OrientationErrorL;
}
// JOYSTICK CENTER
if (xAxis > 490 && xAxis < 530 && yAxis > 490 && yAxis < 530 && (buttonJoystickPushCounter == 0 || buttonJoystickPushCounter >= 2))
{
RobotStop();
}
//JOYSTICK FORWARD
if (xAxis > 300 && xAxis < 700 && yAxis > 1018 && yAxis <= 1023 && (buttonJoystickPushCounter == 0 || buttonJoystickPushCounter >= 2))
{
RobotForward();
}
//JOYSTICK BACKWARD
if (xAxis > 300 && xAxis < 700 && yAxis >= 0 && yAxis < 5 && (buttonJoystickPushCounter == 0 || buttonJoystickPushCounter >= 2))
{
RobotBackward();
}
//JOYSTICK LEFT
if (xAxis >= 0 && xAxis < 5 && yAxis > 300 && yAxis < 700 && (buttonJoystickPushCounter == 0 || buttonJoystickPushCounter >= 2))
{
RobotLeft();
}
//JOYSTICK RIGHT
if (xAxis > 1017 && xAxis <= 1023 && yAxis > 300 && yAxis < 700 && (buttonJoystickPushCounter == 0 || buttonJoystickPushCounter >= 2))
{
RobotRight();
}
////////////////Autonomous Commands////////////
// JOYSTICK BUTTON AUTONOMOUS START
if ((buttonJoystick == 0)&&(buttonJoystickPushCounter == 0))
{
buttonJoystickPushCounter++;
LeftCounter = 0;
RightCounter = 0;
StepCounter = 0;
RobotForward();
RobotForward();
StepCounter++;
StepCounter++;
buttonJoystick = 1;
}
// JOYSTICK BUTTON AUTONOMOUS STOP
if ((buttonJoystick == 0)&&(buttonJoystickPushCounter == 1))
{
RobotStop();
buttonJoystickPushCounter = 0;
delay(3000);
}
if(buttonJoystickPushCounter == 1)
{
if(StepCounter <= 16)
{
if ((OrientationError <= dataArrayL[arrayIndexL]) && (OrientationError >= (dataArrayR[arrayIndexR]*-1)))
{
RobotForward();
StepCounter++;
}
if (OrientationError > dataArrayL[arrayIndexL])
{
RobotRight();
}
if (OrientationError < (dataArrayR[arrayIndexR]*-1))
{
RobotLeft();
}
}
else
{
RobotStop();
RobotSitBack();
delay(2000);
RobotSitForward();
delay(500);
RobotSitBack();
delay(500);
RobotSitForward();
delay(500);
RobotSitBack();
delay(500);
RobotSitForward();
delay(500);
RobotSitBack();
delay(500);
RobotStop();
RobotStrut();
RobotStrut();
RobotStop();
RobotTilt4Corners();
RobotTilt4Corners();
RobotStop();
Robotlie();
buttonJoystickPushCounter = 0;
}
}
Serial.print(" Orientation: ");
Serial.print(Orientation);
Serial.print(" OrientationError: ");
Serial.print(OrientationError);
Serial.print(" F: ");
Serial.print(dataArrayF[arrayIndexF]);
Serial.print(" L: ");
Serial.print(dataArrayL[arrayIndexL]);
Serial.print(" R: ");
Serial.print(dataArrayR[arrayIndexR]);
Serial.println(" ");
}
}
void RobotStop()
{
myservoFRONTFRONTLEFT.write(170);
myservoFRONTBACKLEFT.write(10);
myservoFRONTFRONTRIGHT.write(10);
myservoFRONTBACKRIGHT.write(170);
myservoBACKFRONTLEFT.write(170);
myservoBACKBACKLEFT.write(10);
myservoBACKFRONTRIGHT.write(10);
myservoBACKBACKRIGHT.write(170);
delay(400);
// detach servos
myservoFRONTFRONTLEFT.detach();
myservoFRONTBACKLEFT.detach();
myservoFRONTFRONTRIGHT.detach();
myservoFRONTBACKRIGHT.detach();
myservoBACKFRONTLEFT.detach();
myservoBACKBACKLEFT.detach();
myservoBACKFRONTRIGHT.detach();
myservoBACKBACKRIGHT.detach();
}
void RobotForward()
{
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTLEFT.write(90);
myservoFRONTBACKLEFT.write(135);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoBACKFRONTRIGHT.write(90);
myservoBACKBACKRIGHT.write(45);
delay(75);
myservoFRONTFRONTLEFT.write(45);
myservoFRONTBACKLEFT.write(0);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoBACKFRONTRIGHT.write(135);
myservoBACKBACKRIGHT.write(180);
delay(75);
myservoFRONTFRONTLEFT.write(120);
myservoFRONTBACKLEFT.write(0);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoBACKFRONTRIGHT.write(60);
myservoBACKBACKRIGHT.write(180);
delay(75);
myservoFRONTFRONTLEFT.write(180);//
myservoFRONTBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(90);
myservoFRONTBACKRIGHT.write(45);
myservoBACKFRONTLEFT.write(90);
myservoBACKBACKLEFT.write(135);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
delay(75);
myservoFRONTFRONTLEFT.write(180);//
myservoFRONTBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(135);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTLEFT.write(45);
myservoBACKBACKLEFT.write(0);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
delay(75);
myservoFRONTFRONTLEFT.write(180);//
myservoFRONTBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(60);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTLEFT.write(120);
myservoBACKBACKLEFT.write(0);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
delay(75);
}
void RobotBackward()
{
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTLEFT.write(45);
myservoFRONTBACKLEFT.write(90);
myservoFRONTFRONTRIGHT.write(45);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTLEFT.write(135);
myservoBACKBACKLEFT.write(0);
myservoBACKFRONTRIGHT.write(135);
myservoBACKBACKRIGHT.write(90);
delay(75);
myservoFRONTFRONTLEFT.write(180);
myservoFRONTBACKLEFT.write(135);
myservoFRONTFRONTRIGHT.write(45);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTLEFT.write(135);
myservoBACKBACKLEFT.write(0);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(45);
delay(75);
myservoFRONTFRONTLEFT.write(180);
myservoFRONTBACKLEFT.write(60);
myservoFRONTFRONTRIGHT.write(45);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTLEFT.write(135);
myservoBACKBACKLEFT.write(0);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(120);
delay(75);
myservoFRONTFRONTLEFT.write(135);//
myservoFRONTBACKLEFT.write(0);
myservoFRONTFRONTRIGHT.write(135);
myservoFRONTBACKRIGHT.write(90);
myservoBACKFRONTLEFT.write(45);
myservoBACKBACKLEFT.write(90);
myservoBACKFRONTRIGHT.write(45);
myservoBACKBACKRIGHT.write(180);
delay(75);
myservoFRONTFRONTLEFT.write(135);//
myservoFRONTBACKLEFT.write(0);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(45);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(135);
myservoBACKFRONTRIGHT.write(45);
myservoBACKBACKRIGHT.write(180);
delay(75);
myservoFRONTFRONTLEFT.write(135);//
myservoFRONTBACKLEFT.write(0);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(120);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(60);
myservoBACKFRONTRIGHT.write(45);
myservoBACKBACKRIGHT.write(180);
delay(75);
}
void RobotLeft()
{
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTRIGHT.write(90);
myservoBACKBACKRIGHT.write(45);
myservoFRONTFRONTLEFT.write(45);
myservoFRONTBACKLEFT.write(90);
myservoBACKFRONTLEFT.write(135);
myservoBACKBACKLEFT.write(0);
delay(75);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTRIGHT.write(135);
myservoBACKBACKRIGHT.write(180);
myservoFRONTFRONTLEFT.write(180);
myservoFRONTBACKLEFT.write(135);
myservoBACKFRONTLEFT.write(135);
myservoBACKBACKLEFT.write(0);
delay(75);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTRIGHT.write(60);
myservoBACKBACKRIGHT.write(180);
myservoFRONTFRONTLEFT.write(180);
myservoFRONTBACKLEFT.write(60);;
myservoBACKFRONTLEFT.write(135);
myservoBACKBACKLEFT.write(0);
delay(75);
myservoFRONTFRONTRIGHT.write(90);
myservoFRONTBACKRIGHT.write(45);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
myservoFRONTFRONTLEFT.write(135);//
myservoFRONTBACKLEFT.write(0);
myservoBACKFRONTLEFT.write(45);
myservoBACKBACKLEFT.write(90);
delay(75);
myservoFRONTFRONTRIGHT.write(135);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
myservoFRONTFRONTLEFT.write(135);//
myservoFRONTBACKLEFT.write(0);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(135);
delay(75);
myservoFRONTFRONTRIGHT.write(60);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
myservoFRONTFRONTLEFT.write(135);//
myservoFRONTBACKLEFT.write(0);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(60);
delay(75);
}
void RobotRight()
{
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTLEFT.write(90);
myservoFRONTBACKLEFT.write(135);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(45);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTRIGHT.write(135);
myservoBACKBACKRIGHT.write(90);
delay(75);
myservoFRONTFRONTLEFT.write(45);
myservoFRONTBACKLEFT.write(0);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(45);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(45);
delay(75);
myservoFRONTFRONTLEFT.write(120);
myservoFRONTBACKLEFT.write(0);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(45);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(120);
delay(75);
myservoFRONTFRONTLEFT.write(180);//
myservoFRONTBACKLEFT.write(45);
myservoBACKFRONTLEFT.write(90);
myservoBACKBACKLEFT.write(135);
myservoFRONTFRONTRIGHT.write(135);
myservoFRONTBACKRIGHT.write(90);
myservoBACKFRONTRIGHT.write(45);
myservoBACKBACKRIGHT.write(180);
delay(75);
myservoFRONTFRONTLEFT.write(180);//
myservoFRONTBACKLEFT.write(45);
myservoBACKFRONTLEFT.write(45);
myservoBACKBACKLEFT.write(0);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(45);
myservoBACKFRONTRIGHT.write(45);
myservoBACKBACKRIGHT.write(180);
delay(75);
myservoFRONTFRONTLEFT.write(180);//
myservoFRONTBACKLEFT.write(45);
myservoBACKFRONTLEFT.write(120);
myservoBACKBACKLEFT.write(0);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(120);
myservoBACKFRONTRIGHT.write(45);
myservoBACKBACKRIGHT.write(180);
delay(75);
}
void RobotStrut()
{
// Attach servos to pins
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTLEFT.write(180); //INITIAL START
myservoFRONTBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
delay(150);
myservoFRONTFRONTLEFT.write(90);
myservoFRONTBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoBACKFRONTRIGHT.write(90);
myservoBACKBACKRIGHT.write(135);
delay(150);
myservoFRONTFRONTLEFT.write(135);
myservoFRONTBACKLEFT.write(0);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoBACKFRONTRIGHT.write(45);
myservoBACKBACKRIGHT.write(180);
delay(150);
myservoFRONTFRONTLEFT.write(180); //INITIAL START
myservoFRONTBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(0);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTLEFT.write(180);
myservoBACKBACKLEFT.write(45);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
delay(150);
myservoFRONTFRONTLEFT.write(180);
myservoFRONTBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(90);
myservoFRONTBACKRIGHT.write(135);
myservoBACKFRONTLEFT.write(90);
myservoBACKBACKLEFT.write(45);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
delay(150);
myservoFRONTFRONTLEFT.write(180);
myservoFRONTBACKLEFT.write(45);
myservoFRONTFRONTRIGHT.write(45);
myservoFRONTBACKRIGHT.write(180);
myservoBACKFRONTLEFT.write(135);
myservoBACKBACKLEFT.write(0);
myservoBACKFRONTRIGHT.write(0);
myservoBACKBACKRIGHT.write(135);
delay(150);
}
void RobotTilt4Corners()
{
int SpeedTiltCorners = 25;
// Attach servos to pins
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTLEFT.write(125,SpeedTiltCorners);
myservoFRONTBACKLEFT.write(55,SpeedTiltCorners);
myservoFRONTFRONTRIGHT.write(45,SpeedTiltCorners);
myservoFRONTBACKRIGHT.write(135,SpeedTiltCorners);
myservoBACKFRONTLEFT.write(135,SpeedTiltCorners);
myservoBACKBACKLEFT.write(45,SpeedTiltCorners);
myservoBACKFRONTRIGHT.write(0,SpeedTiltCorners);
myservoBACKBACKRIGHT.write(180,SpeedTiltCorners);
delay(500);
myservoFRONTFRONTLEFT.write(135,SpeedTiltCorners);
myservoFRONTBACKLEFT.write(45,SpeedTiltCorners);
myservoFRONTFRONTRIGHT.write(55,SpeedTiltCorners);
myservoFRONTBACKRIGHT.write(125,SpeedTiltCorners);
myservoBACKFRONTLEFT.write(180,SpeedTiltCorners);
myservoBACKBACKLEFT.write(0,SpeedTiltCorners);
myservoBACKFRONTRIGHT.write(45,SpeedTiltCorners);
myservoBACKBACKRIGHT.write(135,SpeedTiltCorners);
delay(500);
myservoFRONTFRONTLEFT.write(180,SpeedTiltCorners);
myservoFRONTBACKLEFT.write(0,SpeedTiltCorners);
myservoFRONTFRONTRIGHT.write(45,SpeedTiltCorners);
myservoFRONTBACKRIGHT.write(135,SpeedTiltCorners);
myservoBACKFRONTLEFT.write(135,SpeedTiltCorners);
myservoBACKBACKLEFT.write(45,SpeedTiltCorners);
myservoBACKFRONTRIGHT.write(55,SpeedTiltCorners);
myservoBACKBACKRIGHT.write(125,SpeedTiltCorners);
delay(500);
myservoFRONTFRONTLEFT.write(135,SpeedTiltCorners);
myservoFRONTBACKLEFT.write(45,SpeedTiltCorners);
myservoFRONTFRONTRIGHT.write(0,SpeedTiltCorners);
myservoFRONTBACKRIGHT.write(180,SpeedTiltCorners);
myservoBACKFRONTLEFT.write(125,SpeedTiltCorners);
myservoBACKBACKLEFT.write(55,SpeedTiltCorners);
myservoBACKFRONTRIGHT.write(45,SpeedTiltCorners);
myservoBACKBACKRIGHT.write(135,SpeedTiltCorners);
delay(500);
}
void Robotlie()
{
int Speedlie = 20;
// Attach servos to pins
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTLEFT.write(90,Speedlie);
myservoFRONTBACKLEFT.write(90,Speedlie);
myservoFRONTFRONTRIGHT.write(90,Speedlie);
myservoFRONTBACKRIGHT.write(90,Speedlie);
myservoBACKFRONTLEFT.write(90,Speedlie);
myservoBACKBACKLEFT.write(90,Speedlie);
myservoBACKFRONTRIGHT.write(90,Speedlie);
myservoBACKBACKRIGHT.write(90,Speedlie);
delay(2500);
// detach servos
myservoFRONTFRONTLEFT.detach();
myservoFRONTBACKLEFT.detach();
myservoFRONTFRONTRIGHT.detach();
myservoFRONTBACKRIGHT.detach();
myservoBACKFRONTLEFT.detach();
myservoBACKBACKLEFT.detach();
myservoBACKFRONTRIGHT.detach();
myservoBACKBACKRIGHT.detach();
}
void RobotSitBack()
{
int SpeedSitBack = 150;
// Attach servos to pins
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTLEFT.write(180,SpeedSitBack);
myservoFRONTBACKLEFT.write(0,SpeedSitBack);
myservoFRONTFRONTRIGHT.write(0,SpeedSitBack);
myservoFRONTBACKRIGHT.write(180,SpeedSitBack);
myservoBACKFRONTLEFT.write(45,SpeedSitBack);
myservoBACKBACKLEFT.write(135,SpeedSitBack);
myservoBACKFRONTRIGHT.write(135,SpeedSitBack);
myservoBACKBACKRIGHT.write(45,SpeedSitBack);
}
void RobotSitForward()
{
int SpeedSitForward = 150;
// Attach servos to pins
myservoFRONTFRONTLEFT.attach(4); //3
myservoFRONTBACKLEFT.attach(5); //4
myservoFRONTFRONTRIGHT.attach(17); //10
myservoFRONTBACKRIGHT.attach(16); //9
myservoBACKFRONTLEFT.attach(6); //5
myservoBACKBACKLEFT.attach(7); //6
myservoBACKFRONTRIGHT.attach(15); //8
myservoBACKBACKRIGHT.attach(14); //7
myservoFRONTFRONTLEFT.write(45,SpeedSitForward);
myservoFRONTBACKLEFT.write(135,SpeedSitForward);
myservoFRONTFRONTRIGHT.write(135,SpeedSitForward);
myservoFRONTBACKRIGHT.write(45,SpeedSitForward);
myservoBACKFRONTLEFT.write(180,SpeedSitForward);
myservoBACKBACKLEFT.write(0,SpeedSitForward);
myservoBACKFRONTRIGHT.write(0,SpeedSitForward);
myservoBACKBACKRIGHT.write(180,SpeedSitForward);
}
Ссылки
GorillaBot the 3D Printed Arduino Autonomous Sprint Quadruped Robot
По теме
Baby Cheetah - маленький четвероногий робот на Arduino
Свой spotmini для 3D-печати
DoggoBot - четвероногий робот-собака на Arduino
OpenCat - робот-кот на Arduino и Raspberry Pi
Mini serval - робот-кот на Arduino
Четвероногий робот полностью изготовленный из картона
Такие разные шагающие роботы на базе Arduino!
Galatea - робот-четырёхног на Arduino!
