mirror of
https://gitlab.dit.htwk-leipzig.de/phillip.kuehne/dezibot.git
synced 2025-05-21 20:11:46 +02:00
first working example of IMU Based Motioncorrection
This commit is contained in:
parent
aba3c7d559
commit
e03bde591d
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,112 @@
|
|||||||
|
#include "Dezibot.h"
|
||||||
|
#define interval 30
|
||||||
|
Dezibot dezibot = Dezibot();
|
||||||
|
#define maxDuty 160
|
||||||
|
#define minDuty 90
|
||||||
|
#define baseDuty 110
|
||||||
|
void setup() {
|
||||||
|
// put your setup code here, to run once:
|
||||||
|
dezibot.begin();
|
||||||
|
Serial.begin(115200);
|
||||||
|
//dezibot.motion.move();
|
||||||
|
//analogWrite(11, 2000);
|
||||||
|
//analogWrite(12, 2000);
|
||||||
|
}
|
||||||
|
uint8_t leftDuty= baseDuty;
|
||||||
|
uint8_t rightDuty = baseDuty;
|
||||||
|
unsigned long previous = millis();
|
||||||
|
unsigned long current = millis();
|
||||||
|
long averageZRotation = 0;
|
||||||
|
long averageXAccel = 0;
|
||||||
|
int left=0;
|
||||||
|
int right=0;
|
||||||
|
int resultcounter = 0;
|
||||||
|
void loop() {
|
||||||
|
// put your main code here, to run repeatedly:
|
||||||
|
current = millis();
|
||||||
|
IMUResult result = dezibot.motionDetection.getRotation();
|
||||||
|
averageXAccel += dezibot.motionDetection.getAcceleration().x;
|
||||||
|
averageZRotation += result.z;
|
||||||
|
//Serial.println(result.z);
|
||||||
|
if (result.z > 100){
|
||||||
|
right++;
|
||||||
|
} else if(result.z < -100) {
|
||||||
|
left++;
|
||||||
|
}
|
||||||
|
resultcounter++;
|
||||||
|
if ((current - previous) > interval){
|
||||||
|
Serial.println("=============================================");
|
||||||
|
previous = current;
|
||||||
|
averageZRotation = averageZRotation / resultcounter;
|
||||||
|
averageXAccel = averageXAccel / resultcounter;
|
||||||
|
Serial.print("Z:");
|
||||||
|
Serial.println(averageZRotation);
|
||||||
|
dezibot.display.clearDisplay();
|
||||||
|
dezibot.display.setCursor(0, 0);
|
||||||
|
dezibot.display.setTextColor(WHITE);
|
||||||
|
dezibot.display.setTextSize(2); // Draw 2X-scale text
|
||||||
|
dezibot.display.println(averageZRotation);
|
||||||
|
dezibot.display.print(left);
|
||||||
|
dezibot.display.print(" ");
|
||||||
|
dezibot.display.println(right);
|
||||||
|
Serial.println("=============================================");
|
||||||
|
/*if(averageZRotation < -20){
|
||||||
|
//turns right
|
||||||
|
if((rightDuty < maxDuty || leftDuty <= minDuty) && rightDuty<255){
|
||||||
|
rightDuty++;
|
||||||
|
} else{
|
||||||
|
leftDuty--;
|
||||||
|
}
|
||||||
|
} else if(averageZRotation > 20){
|
||||||
|
//turns left
|
||||||
|
if(leftDuty < maxDuty || rightDuty <= minDuty && leftDuty<255){
|
||||||
|
leftDuty++;
|
||||||
|
} else {
|
||||||
|
rightDuty--;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
if(left>right){ //rotates anticlock
|
||||||
|
leftDuty++;
|
||||||
|
rightDuty--;
|
||||||
|
/*if(abs(leftDuty-baseDuty)<abs(rightDuty-baseDuty)){
|
||||||
|
rightDuty--;
|
||||||
|
} else{
|
||||||
|
leftDuty++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (leftDuty == maxDuty){
|
||||||
|
rightDuty -= 5;
|
||||||
|
leftDuty -= 1;
|
||||||
|
}else {
|
||||||
|
leftDuty++;
|
||||||
|
}*/
|
||||||
|
} else if((left-right)<0){
|
||||||
|
leftDuty--;
|
||||||
|
rightDuty++;
|
||||||
|
/*if(abs(leftDuty-baseDuty)>abs(rightDuty-baseDuty)){
|
||||||
|
rightDuty++;
|
||||||
|
} else{
|
||||||
|
leftDuty--;
|
||||||
|
}
|
||||||
|
if( leftDuty == minDuty){
|
||||||
|
rightDuty += 5;
|
||||||
|
leftDuty += 1;
|
||||||
|
} else{
|
||||||
|
leftDuty--;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
analogWrite(12,leftDuty);
|
||||||
|
analogWrite(11, rightDuty);
|
||||||
|
|
||||||
|
dezibot.display.println(leftDuty);
|
||||||
|
dezibot.display.println(rightDuty);
|
||||||
|
dezibot.display.display();
|
||||||
|
|
||||||
|
|
||||||
|
averageZRotation = 0;
|
||||||
|
averageXAccel = 0;
|
||||||
|
resultcounter = 0;
|
||||||
|
left = 0;
|
||||||
|
right = 0;
|
||||||
|
}
|
||||||
|
}
|
@ -12,11 +12,15 @@
|
|||||||
|
|
||||||
#include "Dezibot.h"
|
#include "Dezibot.h"
|
||||||
|
|
||||||
Dezibot::Dezibot():multiColorLight(),motionDetection(){
|
Dezibot::Dezibot():multiColorLight(),motionDetection(),display(128, 64, &Wire, -1){
|
||||||
|
|
||||||
};
|
};
|
||||||
void Dezibot::begin(void) {
|
void Dezibot::begin(void) {
|
||||||
motion.begin();
|
motion.begin();
|
||||||
multiColorLight.begin();
|
multiColorLight.begin();
|
||||||
motionDetection.begin();
|
motionDetection.begin();
|
||||||
|
Wire.begin(1,2);
|
||||||
|
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
|
||||||
|
display.clearDisplay();
|
||||||
|
display.display();
|
||||||
};
|
};
|
||||||
|
@ -16,6 +16,9 @@
|
|||||||
#include "colorDetection/ColorDetection.h"
|
#include "colorDetection/ColorDetection.h"
|
||||||
#include "multiColorLight/MultiColorLight.h"
|
#include "multiColorLight/MultiColorLight.h"
|
||||||
#include "motionDetection/MotionDetection.h"
|
#include "motionDetection/MotionDetection.h"
|
||||||
|
#include "Arduino.h"
|
||||||
|
#include "Wire.h"
|
||||||
|
#include "Adafruit_SSD1306.h"
|
||||||
|
|
||||||
class Dezibot {
|
class Dezibot {
|
||||||
protected:
|
protected:
|
||||||
@ -27,7 +30,9 @@ public:
|
|||||||
ColorDetection colorDetection;
|
ColorDetection colorDetection;
|
||||||
MultiColorLight multiColorLight;
|
MultiColorLight multiColorLight;
|
||||||
MotionDetection motionDetection;
|
MotionDetection motionDetection;
|
||||||
|
//temporary, display component is not implemented yet
|
||||||
|
Adafruit_SSD1306 display;
|
||||||
|
|
||||||
void begin(void);
|
void begin(void);
|
||||||
/*
|
/*
|
||||||
Display display
|
Display display
|
||||||
|
Loading…
x
Reference in New Issue
Block a user