diff --git a/Roboter Auto Workshop/Workshop 1 - Fahren/Einfuehrung/einfuehrung/einfuehrung.ino b/Roboter Auto Workshop/Workshop 1 - Fahren/Einfuehrung/einfuehrung/einfuehrung.ino new file mode 100755 index 0000000..deeb68b --- /dev/null +++ b/Roboter Auto Workshop/Workshop 1 - Fahren/Einfuehrung/einfuehrung/einfuehrung.ino @@ -0,0 +1,27 @@ + +//define L298n module IO Pin +#define ENA 5 +#define ENB 6 +#define IN1 7 +#define IN2 8 +#define IN3 9 +#define IN4 11 + +// Fahre vorwaerts +void forward(){ + // Hier Code einfuegen +} + +// Fahre rueckwaerts +void backward(){ + // Hier Code einfuegen +} + +void setup() { + // initialisiere hier dein AUTO +} + +void loop() { + // fuege hier den Quellcode ein der wiederholt ausgefuehrt wird + +} diff --git "a/Roboter Auto Workshop/Workshop 1 - Fahren/RobotCarEinf\303\274hrung.odp" "b/Roboter Auto Workshop/Workshop 1 - Fahren/RobotCarEinf\303\274hrung.odp" new file mode 100755 index 0000000..bbe4dde Binary files /dev/null and "b/Roboter Auto Workshop/Workshop 1 - Fahren/RobotCarEinf\303\274hrung.odp" differ diff --git a/Roboter Auto Workshop/Workshop 1 - Fahren/einfuehrung_final/einfuehrung_final.ino b/Roboter Auto Workshop/Workshop 1 - Fahren/einfuehrung_final/einfuehrung_final.ino new file mode 100755 index 0000000..6683ee8 --- /dev/null +++ b/Roboter Auto Workshop/Workshop 1 - Fahren/einfuehrung_final/einfuehrung_final.ino @@ -0,0 +1,54 @@ + +//define L298n module IO Pin +#define ENA 5 +#define ENB 6 +#define IN1 7 +#define IN2 8 +#define IN3 9 +#define IN4 11 + +// Fahre vorwaerts +void forward(){ + digitalWrite(ENA,HIGH); //enable L298n A channel + digitalWrite(ENB,HIGH); //enable L298n B channel + digitalWrite(IN1,HIGH); //set IN1 hight level + digitalWrite(IN2,LOW); //set IN2 low level + digitalWrite(IN3,LOW); //set IN3 low level + digitalWrite(IN4,HIGH); //set IN4 hight level +} + +// Fahre rueckwaerts +void backward(){ + digitalWrite(ENA,HIGH); + digitalWrite(ENB,HIGH); + digitalWrite(IN1,LOW); + digitalWrite(IN2,HIGH); + digitalWrite(IN3,HIGH); + digitalWrite(IN4,LOW); +} + +void setup() { + // initialisiere hier dein AUTO + + // Vorbereitung zur Ansteuerung der Raeder + pinMode(IN1,OUTPUT); + pinMode(IN2,OUTPUT); + pinMode(IN3,OUTPUT); + pinMode(IN4,OUTPUT); + pinMode(ENA,OUTPUT); + pinMode(ENB,OUTPUT); +} + +void loop() { + // fuege hier den Quellcode ein der wiederholt ausgefuehrt wird + + // fahre vorwaerts + forward(); + // warte 0.5 Sekunden + delay(500); + + // fahre rueckwaerts + backward(); + // warte 0.5 Sekunden + delay(500); +} diff --git a/Roboter Auto Workshop/Workshop 2 - Ultrasonic/RobotCarUltrasonic.odp b/Roboter Auto Workshop/Workshop 2 - Ultrasonic/RobotCarUltrasonic.odp new file mode 100755 index 0000000..72fd33c Binary files /dev/null and b/Roboter Auto Workshop/Workshop 2 - Ultrasonic/RobotCarUltrasonic.odp differ diff --git a/Roboter Auto Workshop/Workshop 2 - Ultrasonic/Ultrasonic/Ultrasonic.ino b/Roboter Auto Workshop/Workshop 2 - Ultrasonic/Ultrasonic/Ultrasonic.ino new file mode 100755 index 0000000..c043cf1 --- /dev/null +++ b/Roboter Auto Workshop/Workshop 2 - Ultrasonic/Ultrasonic/Ultrasonic.ino @@ -0,0 +1,54 @@ + +//define L298n module IO Pin +#define ENA 5 +#define ENB 6 +#define IN1 7 +#define IN2 8 +#define IN3 9 +#define IN4 11 + +int Echo = A4; +int Trig = A5; + +// Fahre vorwaerts +void forward(){ + analogWrite(ENA,128); //enable L298n A channel + analogWrite(ENB,128); //enable L298n B channel + digitalWrite(IN1,HIGH); //set IN1 hight level + digitalWrite(IN2,LOW); //set IN2 low level + digitalWrite(IN3,LOW); //set IN3 low level + digitalWrite(IN4,HIGH); //set IN4 hight level +} + +// Fahre rueckwaerts +void backward(){ + digitalWrite(ENA,HIGH); + digitalWrite(ENB,HIGH); + digitalWrite(IN1,LOW); + digitalWrite(IN2,HIGH); + digitalWrite(IN3,HIGH); + digitalWrite(IN4,LOW); +} + +void setup() { + + // Vorbereitung zur Ansteuerung der Raeder + pinMode(IN1,OUTPUT); + pinMode(IN2,OUTPUT); + pinMode(IN3,OUTPUT); + pinMode(IN4,OUTPUT); + pinMode(ENA,OUTPUT); + pinMode(ENB,OUTPUT); +} + +void stop() { + digitalWrite(ENA, LOW); + digitalWrite(ENB, LOW); + Serial.println("Stop!"); +} + +int Distance_test() { +} + +void loop() { +} diff --git a/Roboter Auto Workshop/Workshop 2 - Ultrasonic/UltrasonicCollisonAv/UltrasonicCollisonAv.ino b/Roboter Auto Workshop/Workshop 2 - Ultrasonic/UltrasonicCollisonAv/UltrasonicCollisonAv.ino new file mode 100755 index 0000000..78189bf --- /dev/null +++ b/Roboter Auto Workshop/Workshop 2 - Ultrasonic/UltrasonicCollisonAv/UltrasonicCollisonAv.ino @@ -0,0 +1,132 @@ + +#include +Servo myservo; +int rightDistance = 0, leftDistance = 0, middleDistance = 0; +//define L298n module IO Pin +#define ENA 5 +#define ENB 6 +#define IN1 7 +#define IN2 8 +#define IN3 9 +#define IN4 11 +#define carSpeed 150 + + +int Echo = A4; +int Trig = A5; + +// Fahre vorwaerts +void forward(){ + analogWrite(ENA,carSpeed); //enable L298n A channel + analogWrite(ENB,carSpeed); //enable L298n B channel + digitalWrite(IN1,HIGH); //set IN1 hight level + digitalWrite(IN2,LOW); //set IN2 low level + digitalWrite(IN3,LOW); //set IN3 low level + digitalWrite(IN4,HIGH); //set IN4 hight level +} + +void left() { + analogWrite(ENA, carSpeed); + analogWrite(ENB, carSpeed); + digitalWrite(IN1, LOW); + digitalWrite(IN2, HIGH); + digitalWrite(IN3, LOW); + digitalWrite(IN4, HIGH); + Serial.println("Left"); +} + +void right() { + analogWrite(ENA, carSpeed); + analogWrite(ENB, carSpeed); + digitalWrite(IN1, HIGH); + digitalWrite(IN2, LOW); + digitalWrite(IN3, HIGH); + digitalWrite(IN4, LOW); + Serial.println("Right"); +} +// Fahre rueckwaerts +void backward(){ + analogWrite(ENA, carSpeed); + analogWrite(ENB, carSpeed); + digitalWrite(IN1,LOW); + digitalWrite(IN2,HIGH); + digitalWrite(IN3,HIGH); + digitalWrite(IN4,LOW); +} + +void setup() { + myservo.attach(3); + pinMode(Echo, INPUT); + pinMode(Trig, OUTPUT); + + // Vorbereitung zur Ansteuerung der Raeder + pinMode(IN1,OUTPUT); + pinMode(IN2,OUTPUT); + pinMode(IN3,OUTPUT); + pinMode(IN4,OUTPUT); + pinMode(ENA,OUTPUT); + pinMode(ENB,OUTPUT); +} + +void stop() { + digitalWrite(ENA, LOW); + digitalWrite(ENB, LOW); + Serial.println("Stop!"); +} + + +//Ultrasonic distance measurement Sub function +int Distance_test() { + digitalWrite(Trig, LOW); + delayMicroseconds(2); + digitalWrite(Trig, HIGH); + delayMicroseconds(20); + digitalWrite(Trig, LOW); + float Fdistance = pulseIn(Echo, HIGH); + Fdistance= Fdistance / 58; + return (int)Fdistance; +} + +void loop() { + myservo.write(90); //setservo position according to scaled value + delay(100); + middleDistance = Distance_test(); + + if(middleDistance <= 20) { + stop(); + delay(500); + myservo.write(40); + delay(1000); + rightDistance = Distance_test(); + + delay(500); + myservo.write(90); + delay(1000); + myservo.write(140); + delay(1000); + leftDistance = Distance_test(); + + delay(500); + myservo.write(90); + delay(1000); + if(rightDistance > leftDistance) { + right(); + delay(180); + } + else if(rightDistance < leftDistance) { + left(); + delay(180); + } + else if((rightDistance <= 20) || (leftDistance <= 20)) { + backward(); + delay(180); + } + else { + forward(); + } + } + else { + forward(); + } +} + diff --git a/Roboter Auto Workshop/Workshop 2 - Ultrasonic/Ultrasonic_final/Ultrasonic_final.ino b/Roboter Auto Workshop/Workshop 2 - Ultrasonic/Ultrasonic_final/Ultrasonic_final.ino new file mode 100755 index 0000000..e11406f --- /dev/null +++ b/Roboter Auto Workshop/Workshop 2 - Ultrasonic/Ultrasonic_final/Ultrasonic_final.ino @@ -0,0 +1,75 @@ + +//define L298n module IO Pin +#define ENA 5 +#define ENB 6 +#define IN1 7 +#define IN2 8 +#define IN3 9 +#define IN4 11 + + +int Echo = A4; +int Trig = A5; + +// Fahre vorwaerts +void forward(){ + analogWrite(ENA,128); //enable L298n A channel + analogWrite(ENB,128); //enable L298n B channel + digitalWrite(IN1,HIGH); //set IN1 hight level + digitalWrite(IN2,LOW); //set IN2 low level + digitalWrite(IN3,LOW); //set IN3 low level + digitalWrite(IN4,HIGH); //set IN4 hight level +} + +// Fahre rueckwaerts +void backward(){ + digitalWrite(ENA,HIGH); + digitalWrite(ENB,HIGH); + digitalWrite(IN1,LOW); + digitalWrite(IN2,HIGH); + digitalWrite(IN3,HIGH); + digitalWrite(IN4,LOW); +} + +void setup() { + pinMode(Echo, INPUT); + pinMode(Trig, OUTPUT); + + // Vorbereitung zur Ansteuerung der Raeder + pinMode(IN1,OUTPUT); + pinMode(IN2,OUTPUT); + pinMode(IN3,OUTPUT); + pinMode(IN4,OUTPUT); + pinMode(ENA,OUTPUT); + pinMode(ENB,OUTPUT); +} + +void stop() { + digitalWrite(ENA, LOW); + digitalWrite(ENB, LOW); + Serial.println("Stop!"); +} + + +//Ultrasonic distance measurement Sub function +int Distance_test() { + digitalWrite(Trig, LOW); + delayMicroseconds(2); + digitalWrite(Trig, HIGH); + delayMicroseconds(20); + digitalWrite(Trig, LOW); + float Fdistance = pulseIn(Echo, HIGH); + Fdistance= Fdistance / 58; + return (int)Fdistance; +} + +void loop() { + int dist = Distance_test(); + if (dist < 10){ + backward(); + } else if (dist < 20) { + stop(); + }else{ + forward(); + } +} diff --git a/Roboter Auto Workshop/readme.md b/Roboter Auto Workshop/readme.md new file mode 100644 index 0000000..ec71be3 --- /dev/null +++ b/Roboter Auto Workshop/readme.md @@ -0,0 +1,35 @@ +# Roboter Auto Workshop + + +## Notes +Dieser Workshop wird mit dem ELEGOO Smart Robot Car Kit V3.0 Uno ausgeführt. +In dem Kit befinden sich ein UNO R3, ein Ultraschallsensor, ein Line Tracking Modul, ein Bluetooth Modul und ein Infrarotsensor mit Fernbedienung. +Auf der Elegoo-Website gibt es einen Download-Link für das Kit in dem man eine Übersicht zum Auto, die Bauanleitung und Beispielcode für 5 Lessons in verschiedenen Sprachen findet: +- https://www.elegoo.com/download/ +Außerdem gibt es die Elegoo Bluetooth App für iOS und Android mit der Befehle an den Roboter über Bluetooth gesendet werden können: +- https://itunes.apple.com/us/app/elegoo-ble-tool/id1195318538?mt=8 +- https://play.google.com/store/apps/details?id=com.femtoapp.rootsence.bleutils + +## Workshops +Bei der Reihenfolge der einzelnen Workshops haben wir uns ungefähr an den Projekten die Elegoo für das Robot Car Kit vorschlägt orientiert. In jedem Teil können einzelne Code-Teile schon vorgegeben und manche Funktionen in einer Präsentation gezeigt werden damit der Code abgetippt werden kann. Mit diesen Teilen kann dann herumexperimentiert werden. + +### 1 - Einführung (und ggf. Arduino IDE Installation) +Hier können die Kinder den Roboter einfache Bewegungen wie vorwärts/rückwärts und links/rechts fahren lassen. Dazu werden das Arduino IDE Setup und Konzept (setup(), loop()) vorgestellt. Eventuell kann man auf einem USB-Stick noch zusätzlich den Arduino IDE-Download mitbringen um die Installation zu erleichtern: +- https://www.arduino.cc/en/Main/Software + +### 2 - Ultraschallsensor +Im zweiten Teil wird der Ultraschallsensor des Roboter Autos genutzt um Kollisionen mit Hindernissen zu vermeiden. Dazu muss erst einmal der Servo gesteuert werden um den Sensor geradeaus, links oder rechts auszurichten. Anschließend kann ein Puls gesendet und empfangen werden und über eine einfache (vorgegebene) Funktion mit dem empfangenen Signal die Entfernung ausgerechnet werden. +Erst einmal soll der Roboter einfach vor einer Wand stoppen, anschließend kann ein einfaches "Labyrinth" (zum Beispiel aus Stühlen) aufgebaut werden aus dem der Roboter herausfinden muss. + +### 3 - Serielle Schnittstelle nutzen +Der Roboter kann auch genutzt werden um Nachrichten über die serielle Schnittstellt zu senden oder zu empfangen. Dazu werden einfache print-Befehle eingeführt und der serielle Monitor in der Arduino IDE gezeigt. Das kann auch später bei der Bluetooth-/Infrarotsteuerung helfen. + +### 4 - Steuerung über die Infrarot-Fernbedienung +Erst einmal werden Signale über die Infrarot-Fernbedienung gesendet die als HEX-Code vom Roboter interpretiert werden. Wenn die Tastenbelegung dem jeweiligen Code zugeordnet worden ist können diese Befehle dann als vorwärts/rückwärts/abbiegen-Befehle genutzt werden um den Roboter fernzusteuern. + +### 5 - Linienverfolgung +Dafür wird erst einmal das schwarze Tape (im Kit enthalten) auf einem weißen Papier genutzt um zu gucken wie sich die Ausgabe des Liniensensors ändert wenn schwarz oder weiß wahrgenommen wird. Dann kann man eine etwas kompliziertere Form auf einen Tisch kleben (um einen helleren Hintergrund zu haben) der die Roboter folgen müssen. + +### Verschiedene +- GPS-Projekt: Verbindung des Roboters mit einem GPS-Modul um ihn über die Angabe von GPS-Daten fahren zu lassen +- BLE-App: Steuerung des Roboters über die BLE-App, funktioniert relativ selbsterklärend, allerdings ist die Verbindung zum Roboter manchmal etwas aufwendiger und muss jedes mal neu erfolgen wenn das Programm neu geladen wurde.