









| |
Roboter mit Arduino Uno gesteuert
Testentwicklung

Kurzes Ablauf-Diagramm:

Einfacher Test-Sketch für die
automatische Hinderniserkennung in C++:
//Robi_19
// mit Ausweichfunktion
// mit Frontlicht und Rücklicht rechts/links getrennt
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Ultrasonic.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define TRIGGER_PIN 12
#define ECHO_PIN 13
#define NUMBER_BUFFERS 3
#define BUFFER_SIZE 3
#define BUFFER_01 0
#define BUFFER_02 1
#define BUFFER_03 2
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
bool disableSD = false;
int piep=8;//Beeper an Pin 9
int RLichtLinks=7; // LED Rücklicht links
int RLichtRechts=6; // LED Rücklicht rechts
int FLichtLinks=5; // LED Frontlicht links
int FLichtRechts=4; // LED Frontlicht rechts
const int motorPinLinks = 9;
const int motorPinRechts=10;
int Speed = 250; //Geschwindigkeit Motor (max. 255)
int j,i;
void setup()
{
pinMode(motorPinLinks, OUTPUT);
pinMode(motorPinRechts, OUTPUT);
// Serial.begin(9600);
pinMode(piep,OUTPUT);
pinMode(FLichtLinks,OUTPUT); // Frontlicht links
pinMode(FLichtRechts,OUTPUT);// Frontlicht rechts
pinMode(RLichtLinks,OUTPUT); // Rücklicht links
pinMode(RLichtRechts,OUTPUT);// Rücklicht rechts
lcd.begin();
lcd.backlight();
lcd.home();
lcd.print("Robi_19");
delay(1500);
lcd.clear();
if(!ultrasonic.sampleCreate(NUMBER_BUFFERS, BUFFER_SIZE, BUFFER_SIZE,
BUFFER_SIZE))
{
disableSD = true;
Serial.println("Could not allocate memory.");
}
digitalWrite(FLichtLinks,HIGH);
digitalWrite(FLichtRechts,HIGH);
delay(1000);
for (i=1;i<5;i++)
{
digitalWrite(FLichtLinks,LOW);
digitalWrite(FLichtRechts,HIGH);
delay(400);
digitalWrite(FLichtLinks,HIGH);
digitalWrite(FLichtRechts,LOW);
delay(600);
}
for (i=1;i<5;i++)
{
digitalWrite(FLichtLinks,LOW);
delay(100);
digitalWrite(FLichtLinks,HIGH);
delay(100);
}
delay(1000);
digitalWrite(FLichtLinks,HIGH);
digitalWrite(FLichtRechts,HIGH);
delay(2000);
}
void loop()
{
float cmMsec;
float msStdDev, cmStdDev;
long microsec = ultrasonic.timing();
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Abstand: ");
lcd.print(cmMsec);
if(cmMsec<40)
{
digitalWrite(motorPinRechts, LOW); digitalWrite(RLichtRechts,LOW);
digitalWrite(motorPinLinks, LOW); digitalWrite(RLichtLinks,LOW);
digitalWrite(piep,HIGH);delay(50);digitalWrite(piep,LOW);
digitalWrite(piep,HIGH);delay(50);digitalWrite(piep,LOW);
delay(1000);
analogWrite(motorPinLinks, Speed); digitalWrite(RLichtLinks,HIGH);
delay(700);
analogWrite(motorPinRechts, Speed); digitalWrite(RLichtRechts,HIGH);
analogWrite(motorPinLinks, Speed); digitalWrite(RLichtLinks,HIGH);
}
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Grosse Fahrt! ");
analogWrite(motorPinRechts, Speed); digitalWrite(RLichtRechts,HIGH);
analogWrite(motorPinLinks, Speed); digitalWrite(RLichtLinks,HIGH);
}
}
Ende Testsketch
Das eine Frontlicht ferngesteuert
eingeschaltet , das andere ausgeschaltet.
Die Scheinwerfer sind LED´s in LED-Fassungen
und der Reflektor ist der obere Teil der Sektkorken ;-))

Definieren der Codes für die Fernsteuerung und
Belegung für den Robi:

Seite 6: Hier der Test-Sketch für die
Fernsteuerungs-Version:
/*Robi_FS_27
mit Ausweichfunktion und Fernsteuerung
mit Frontlicht und Rücklicht rechts/links getrennt und beep
1 = 16 738 455 = FF6897 HEX
2 = 16 750 695
3 = 16 756 815
4 = 16 724 175
5 = 16 718 055
6 = 16 743 045
7 = 16 716 015
8 = 16 726 215
9 = 16 734 885
0 = 16 730 805
Ok = 16 712 445
Oben= 16 736 925
Unten= 16 754 775
Rechts= 16 761 405
Links= 16 720 605
* = 16 728 765
# = 16 732 845
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Ultrasonic.h>
#include <IRremote.h>
// Fernsteuerung:
int RECV_PIN = 11; // Fernsteuerung-Pin S
long k;
IRrecv irrecv(RECV_PIN);
decode_results results;
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define TRIGGER_PIN 12
#define ECHO_PIN 13
#define NUMBER_BUFFERS 3
#define BUFFER_SIZE 3
#define BUFFER_01 0
#define BUFFER_02 1
#define BUFFER_03 2
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
bool disableSD = false;
int piep=8;//Beeper an Pin 9
int RLichtLinks=7; // LED Rücklicht links
int RLichtRechts=6; // LED Rücklicht rechts
int FLichtLinks=5; // LED Frontlicht links
int FLichtRechts=4; // LED Frontlicht rechts
const int motorPinLinks = 9;
const int motorPinRechts=10;
int Speed = 250; //Geschwindigkeit Motor (max. 255)
int j;
long i;
void setup()
{
pinMode(motorPinLinks, OUTPUT);
pinMode(motorPinRechts, OUTPUT);
pinMode(piep,OUTPUT);
pinMode(FLichtLinks,OUTPUT); // Frontlicht links
pinMode(FLichtRechts,OUTPUT);// Frontlicht rechts
pinMode(RLichtLinks,OUTPUT); // Rücklicht links
pinMode(RLichtRechts,OUTPUT);// Rücklicht rechts
Serial.begin(9600);
Serial.println("Robi_FS_27");Serial.println();
irrecv.enableIRIn(); // Start the receiver
Speed=255;
lcd.begin();
lcd.backlight();
lcd.home();
lcd.print("Robi_FS_27");
delay(1500);
//lcd.clear();
if(!ultrasonic.sampleCreate(NUMBER_BUFFERS, BUFFER_SIZE,
BUFFER_SIZE, BUFFER_SIZE))
{
disableSD = true;
Serial.println("Could not allocate memory.");
}
}
void loop()
{
Serial.print(i);Serial.print(" Anfang loop ");
Serial.print(irrecv.decode(&results));
if (irrecv.decode(&results))
{
i=results.value, DEC;
Serial.print ("i = "); Serial.print(i);
Serial.print(" = ");Serial.println(results.value, DEC);
if(i==16712445)
{
Serial.print("Start, alles ein -ok-");Serial.println(i);
digitalWrite(FLichtLinks, HIGH); digitalWrite(FLichtRechts, HIGH);
digitalWrite(RLichtLinks, HIGH); digitalWrite(RLichtRechts, HIGH);
digitalWrite(motorPinLinks, HIGH); digitalWrite(motorPinRechts, HIGH);
lcd.setCursor(0, 0); lcd.print(" alles ein ");
}
if(i==16738455)
{
Serial.print("F links ein -1-");Serial.println(i);
digitalWrite(FLichtLinks, HIGH);
lcd.setCursor(0, 0); lcd.print("Licht links ein ");
}
if(i==16750695)
{
Serial.print("Antrieb l+r aus -2- ");Serial.println(i);
digitalWrite(motorPinLinks, LOW);digitalWrite(motorPinRechts, LOW);
lcd.setCursor(0, 0); lcd.print("Motor r+l aus ");
}
if(i==16756815)
{
Serial.print("F rechts ein -3-");Serial.println(i);
digitalWrite(FLichtRechts, HIGH);
lcd.setCursor(0, 0); lcd.print("Licht rechts ein ");
}
if(i==16724175)
{
Serial.print("F links aus -4-"); Serial.println(i);
digitalWrite(FLichtLinks, LOW);
lcd.setCursor(0, 0); lcd.print("Licht links aus ");
}
if(i==16718055)
{
Serial.print("F links aus -5-"); Serial.println(i);
lcd.setCursor(0, 0); lcd.print("nichts ");
}
if(i==16743045)
{
Serial.print("F rechts aus -6-");Serial.println(i);
digitalWrite(FLichtRechts, LOW);
lcd.setCursor(0, 0); lcd.print("Licht rechts aus ");
}
if(i==16716015)
{
Serial.print("R links ein -7-");Serial.println(i);
digitalWrite(RLichtLinks, HIGH);
lcd.setCursor(0, 0); lcd.print("R.Licht links ein ");
}
if(i==16726215)
{
Serial.print("beep -8-");Serial.println(i);
digitalWrite(piep,HIGH);delay(200); digitalWrite(piep,LOW);
lcd.setCursor(0, 0); lcd.print(" beep ");
}
if(i==16734885)
{
Serial.print(" R rechts ein -9-");Serial.println(i);
digitalWrite(RLichtRechts, HIGH);
lcd.setCursor(0, 0); lcd.print("R.Licht rechts ein ");
}
if(i==16720605)
{
Serial.print("nach links drehen -links-");Serial.println(i);
//nach links drehen = Motor links = 0
analogWrite(motorPinLinks, 0);delay(500);
analogWrite(motorPinLinks, Speed);
analogWrite(motorPinRechts, Speed);
lcd.setCursor(0, 0); lcd.print("nach links drehen ");
}
if(i==16761405)
{ Serial.print("nach rechts drehen -rechts-");Serial.println(i);
//nach rechts drehen = Motor rechts = 0
analogWrite(motorPinRechts, 0);delay(500);
analogWrite(motorPinRechts, Speed);
analogWrite(motorPinLinks, Speed);
lcd.setCursor(0, 0); lcd.print("nach rechts drehen ");
}
if(i==16736925)
{
Serial.print("schneller -rauf- ");Serial.print(i);
Speed=Speed+50;
Serial.print("Speed: ");Serial.println(Speed);
analogWrite(motorPinLinks, Speed);analogWrite(motorPinRechts,Speed);
}
if(i==16754775)
{
Serial.print("langsamer -runter- ");Serial.print(i);
Speed=Speed-50;
Serial.print("Speed: ");Serial.println(Speed);
analogWrite(motorPinLinks, Speed); analogWrite(motorPinRechts,Speed);
}
if(i==16730805)
{
Serial.print("alles aus -0- ");Serial.println(i);
digitalWrite(motorPinLinks, LOW);
digitalWrite(motorPinRechts, LOW);
digitalWrite(FLichtLinks,LOW);
digitalWrite(FLichtRechts,LOW);
digitalWrite(RLichtLinks,LOW);
digitalWrite(RLichtRechts,LOW);
lcd.setCursor(0, 0); lcd.print(" alles aus ");
}
digitalWrite(piep,HIGH);delay(200); digitalWrite(piep,LOW);
delay(50); irrecv.resume(); // Receive the next value
}
float cmMsec;
float msStdDev, cmStdDev;
long microsec = ultrasonic.timing();
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
if (cmMsec<=40)
{
Serial.print("alles aus -0- ");Serial.println(i);
digitalWrite(motorPinLinks, LOW); digitalWrite(motorPinRechts, LOW);
digitalWrite(FLichtLinks,LOW); digitalWrite(FLichtRechts,LOW);
digitalWrite(RLichtLinks,LOW); digitalWrite(RLichtRechts,LOW);
lcd.setCursor(0, 0); lcd.print("Stop, da Hindenis ");
}
lcd.setCursor(0, 1);
lcd.print(cmMsec,0);
lcd.print(" cm ");
Serial.print(cmMsec); Serial.println(" Ende loop ");
}
Ende Robi_FS_27 .... es muß noch viel am Sketch
gefeilt werden!
|