Compare commits

...

4 Commits

Author SHA1 Message Date
Loic Delattre 01b969206e Merge branch 'develop' 2023-04-24 12:07:58 +02:00
Loic Delattre 37f3672d20 control angle z 2023-04-24 12:07:41 +02:00
Loic Delattre 45e1357b3f reading gyro values 2023-04-24 10:43:04 +02:00
Loic Delattre 20e87d0eb9 gyro start 2023-04-24 10:17:27 +02:00
3 changed files with 96 additions and 1 deletions

74
control/control.ino Normal file
View File

@ -0,0 +1,74 @@
#include <MeMCore.h>
#include <Wire.h>
MeDCMotor _rightMotor(10);
MeDCMotor _leftMotor(9);
MeUltrasonicSensor mySensor(2);
MeGyro myGyro;
// Vars to change setup
double Kp = -5.0;
double target = 90;
// robot characteristics
double _wheelDiameter = 6.0; //cm
double _distanceBetweenWheels = 11.5; //cm
int _basicMotorSpeed = 100;
// position, baseline...
double _thetaCurrent = 0.0;
double _thetaBaseline = 0.0;
double error = 0.0; // in deg
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
_leftMotor.run(0);
_rightMotor.run(0);
myGyro.begin();
delay(2000);
myGyro.update();
_thetaBaseline = myGyro.getAngleZ();
}
void loop() {
// put your main code here, to run repeatedly:
error = target - _thetaCurrent;
//Serial.println(error);
if (error > 0.1){
adjustAngle(error, _distanceBetweenWheels, _wheelDiameter, Kp);
}
myGyro.update();
_thetaCurrent = myGyro.getAngleZ() - _thetaBaseline;
error = target - _thetaCurrent;
}
void getMoving(double speedMove, int dirRight, int dirLeft){
//if direction 1 -1 forward
_leftMotor.run(dirLeft*speedMove);
_rightMotor.run(dirRight*speedMove);
}
void getTurning(double speedMove, int dir){
//if dir = -1, turn right
getMoving(speedMove, dir, dir);
}
void adjustAngle(double error, double _distanceBetweenWheels, double _wheelDiameter, double Kp){
double v = 0.0;
double w = Kp * error;
double leftWheelSpeed = v / (_wheelDiameter/2) - _distanceBetweenWheels * w / (_wheelDiameter) ;
double rightWheelSpeed = v / (_wheelDiameter/2) + _distanceBetweenWheels * w / (_wheelDiameter) ;
if (leftWheelSpeed > 250)
leftWheelSpeed = 250;
if (rightWheelSpeed > 250)
rightWheelSpeed = 250;
_leftMotor.run(leftWheelSpeed);
_rightMotor.run(-rightWheelSpeed);
}

21
gyro/gyro.ino Normal file
View File

@ -0,0 +1,21 @@
#include <MeMCore.h>
#include <Wire.h>
MeGyro myGyro;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
myGyro.begin();
//myGyro.setpin();
}
void loop() {
// put your main code here, to run repeatedly:
myGyro.update();
Serial.print("Z axis gyro ");
Serial.println(myGyro.getAngleZ());
Serial.print("Y axis gyro ");
Serial.println(myGyro.getAngleY());
}

View File

@ -17,7 +17,7 @@ void setup() {
void loop() {
// put your main code here, to run repeatedly:
getMoving(150, 1, -1, 500);
if (mySensor.distanceCm()< 20){
if (mySensor.distanceCm()< 25){
_leftMotor.stop();
_rightMotor.stop();
valTurn = (int) random(0, 2)*2-1;