Teneriffa genießen

Home
Wetter
Wandern
GPS-Navigation
Fotografieren
Rezepte
Monarch
Interessantes
Familie privat
Arduino
Vulkanausbruch

Nach oben
Roboter
Pozo

Nach oben

 

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!