Ik heb ondertussen een tweede versie gemaakt met geïntegreerde grondsensoren, die niet meer in hoeken vastzit en uitgerust is met een automatisch calibratieprogramma. Echter, er moeten nog enkele dingen verholpen worden voordat ik het programma op het web zet.
Het programma kan je zo in je robot programmeren. Zet wel de jumper JP2 op 5v zodat de robot niet te snel rijdt, indien je echter wilt dat hij sneller gaat, verplaats dan de jumper en verander dan de Threshold waardes TIME, TIME2 en TIME3 res. in 750, 300 en 1250.
Programma Antibotsbot:
#include <dwengoBoard.h>
#include <dwengoConfig.h>
#include <dwengoSensorModule.h>
#include <dwengoMotor.h>
#include <dwengoDelay.h>
#include <dwengoLCD.h>
#define MAX_SPEED 1023 //Min., max. en snelheid bij achteruit rijden.
#define AVE_SPEED 0
#define BACK_SPEED 700
#define THRESHOLD 6 //Threshold zijkant en midden.
#define THRESHOLDMID 4
#define TIME 1000 //Delay voor koerswijziging.
#define TIME2 500
#define TIME3 1750
#define SAFE 50 //Delay tegen overbelasting motoren.
void main(void) {
int LS, RS, MID; // variables for sensors
initBoard();
initLCD();
initMotor();
backlightOn();
initSensorModule();
powerLongRange(FALSE); //Lange afstand sensor af.
appendStringToLCD("Press button C");
while (SW_C != PRESSED) {
delay_ms(10);
}
while(TRUE) {
//Voorprogramma.
MID = readSensor(OS6, DIFF_MODE); //Definitie en lezen sensor midden.
RS = readSensor(OS5, DIFF_MODE); //Definitie en lezen sensoren zijkant.
LS = readSensor(OS7, DIFF_MODE);
//LCDprogramma.
clearLCD();
printStringToLCD("LS:", 0, 0); //Scrijf LS:" op de eerste lijn.
appendIntToLCD(LS); //Lees sensor rechts.
printStringToLCD("RS:", 0, 9); //Scrijf "RS:" op de eerste lijn.
appendIntToLCD(RS); //Lees sensor links.
printStringToLCD("MID:", 1, 0); //Scrijf "MID:" op de tweede lijn.
appendIntToLCD(MID); //Lees sensor midden.
//Hoofdprogramma.
if ((LS > THRESHOLD)) {
if ((MID > THRESHOLDMID)) {
stopMotors();
delay_ms(SAFE);
setSpeedMotor1(-MAX_SPEED);
setSpeedMotor2(MAX_SPEED);
delay_ms(TIME2);
setSpeedMotor1(0);
delay_ms(TIME3);
stopMotors();
}
else {
setSpeedMotor2(-AVE_SPEED);
delay_ms(TIME);
}
}
else {
if ((RS > THRESHOLD)) {
if ((MID > THRESHOLDMID)) {
stopMotors();
delay_ms(SAFE);
setSpeedMotor1(-MAX_SPEED);
setSpeedMotor2(MAX_SPEED);
delay_ms(TIME2);
setSpeedMotor2(0);
delay_ms(TIME3);
stopMotors();
}
else {
setSpeedMotor1(AVE_SPEED);
delay_ms(TIME);
}
}
else {
delay_ms(SAFE);
setSpeedMotor1(MAX_SPEED);
setSpeedMotor2(-MAX_SPEED);
}
}
//Einde hoofdprogramma.
}
}
Je kan de robot aan de hand van het terrein nog wat meer "tunen" d.m.v. het veranderen van de Threshold-waardes. Ik ben momenteel bezig met een verbetering van het programma, zodat hij geen probleem meer heeft met de hoeken. Ook de integratie van een kompas staat op het programma. Ideeën zijn altijd welkom!
Geen opmerkingen:
Een reactie posten