19
Einführung in die Arduino Programmierung am Beispiel eines Roboters [email protected]

Einführung in die Arduino Programmierung am Beispiel · PDF file1. Was ist Arduino - Definition einer Hardware- und Software Plattform - Open Source - Hardware: - Mikrocontroller

Embed Size (px)

Citation preview

Einführungin die

Arduino Programmierungam Beispiel eines

[email protected]

1. Was ist Arduino- Definition einer Hardware- und Software Plattform- Open Source- Hardware:

- Mikrocontroller ( zB Atmel AVR aus mega Serie)- analoge- und digitale Ein- und Ausgänge- serielle Schnittstelle zum Programmieren- Spannungsquelle USB (5V) oder extern 7-12V- Bootloader vorhanden- Programmierung direkt ohne externen Programmierer (USB)- Beispielboards: UNO, DUE, Leonardo, Nano, Mega 2560 R3

- Software- eigene integrierte IDE in Java- Code Editor- gcc Compiler - C / C++

- https://de.wikipedia.org/wiki/Arduino_(Plattform)

2. Arduino UNO R3- CPU: Atmega328P- 5V- 8bit- 16MHz- USB- 14 Digital I/O ( 6 PWM)- 6 Analoge Input Pins- 20mA DC I/O- 50mA DC für 3.3V Pin- 32KB Flash (0,5 Bootloader)- 2KB SRAM- 1KB EEPROM- 68.8mm x 53.4mm L/B

https://www.arduino.cc/en/Main/arduinoBoardUnoATmega328P

14x Digital I/O (6x PWM)

6x analoge Input / digital I/O

USB to Serial Converter

3. IDE- www.arduino.cc/en/Main/Software- Download Packet für Linux, MAC

Windows- IDE entpacken- starten- Arduino über USB anschliessen- Unter Tools->Board Arduino UNO

auswählen- Unter Tools->Port Anschluß auswählen- Unter Sketch->Include Library können

Bibliotheken hinzugefügt / nachinstalliert werden

Compilieren hochladen öffnen speichern

4. Programmstruktur

void setup(){// einmalig beim Start ausgeführter Code

} void loop(){

// ständig ausgeführter Code nach Setup()}

// Code nur zur Veranschaulichung// void main() {// setup();// while (1) loop();//}

void setup() { // initialize digital pin 13 as // an output. pinMode(13, OUTPUT);}

// the loop function runs over and over again forevervoid loop() { digitalWrite(13, HIGH); // turn the LED on (HIGH is the // voltage level) delay(1000); // wait for a second digitalWrite(13, LOW); // turn the LED off by making // the voltage LOW delay(1000); // wait for a second}

- File->Examples->Basic->Blink

- lässt LED auf Arduino UNO R3 Board blinken

5. Beispielprogramm

6. Debuggen- IDE: Tools-Serial Monitor- Ausgabe mit Serial.print(...)

Int counter = 0;

void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600);}

void loop() { // print out to serial monitor Serial.print(“Counter: “); Serial.println(counter); counter++; delay(1000); }

7.1 Motorshield - Hardware

- Ansteuerung von Motoren mit H-Brücke wegen Strombedarf- Adafruit Motorshield L293D: https://learn.adafruit.com/adafruit-motor-shield/library-install

- 4 H-Brücken mit je 0,6A (Spitze 1,2A)- 4 bidirktionale DC Motoren- 2 Schrittmotoren- 2 Servos

- Bibliothek AFMotor https://github.com/adafruit/Adafruit-Motor-Shield-library/zipball/master- 2x Getriebemotoren mit passendem 67mm Rad zB GM9 (Watterott.com)

7.2 Motorshield - Software#include <AFMotor.h>

class MyMotor {public: MyMotor(int number) : motor(number), currentSpeed(0) { } void setSpeed(int speed) { currentSpeed = speed; if (speed >= 0){ motor.setSpeed(speed); motor.run(FORWARD); } else { motor.setSpeed(-speed); motor.run(BACKWARD); } } void stop() { setSpeed(0); } void forward() { setSpeed(255); } void backward(){ setSpeed(-255);}private: AF_DCMotor motor; int currentSpeed;};MyMotor leftMotor(1), rightMotor(3);

8.1 Ultraschallsensor - Hardware

GNDEchoTrigVCC

- Aukru 4-Pin HC-SR04 Ultraschallsensor

- A0 : trig- A1: Echo- VCC: +5V

- Bibliothek: https://code.google.com/p/arduino-new-ping/downloads/detail?name=NewPing_v1.5.zip&can=2&q

8.2 Ultraschallsensor - Software#include <NewPing.h>class DistanceSensor{public: DistanceSensor(int triggerPin,int echoPin,int maxDistance) : maxDistance(maxDistance),sensor(triggerPin,echoPin,maxDistance) { } unsigned int getDistance() { int distance = sensor.ping_cm(); if ( distance <= 0 ) return maxDistance; return distance; }private: unsigned int maxDistance; NewPing sensor;};

// analoge Pins A0-A5 können auch digital verwendet werden// heissen dann 14-19DistanceSensor distanceSensor(14,15,200);

9.1 Servomotor - Hardware

- Servomotor SG90 Tower Pro - Anschluss direkt an Motor Shield Servo 1

- gelb → minus- rot → Plus- braun → Signal

- Bibliothek Servo.h in Arduino IDE enthalten

9.2 Servomotor - Software#include <Servo.h>class MyServo{public: MyServo() {} void init(){

// Pin 9 ist Servo 1 auf dem Shield servoMotor.attach(9); } void lookForward() { servoMotor.write(90); } void lookLeft() { servoMotor.write(60); } void lookRight() { servoMotor.write(120); }private: Servo servoMotor;};MyServo servoMotor;

10.1 Zusammenbau - Sensor

1. Servomotorhalterung mit doppelseitigem Klebeband befestigt

2. Sensor auf Servo befestigen

3. Servo mit doppelseitigem Klebeband an 4xAA batteriehalterung befestigen

10.2 Zusammenbau - Motoren

1. doppelseitiges Klebeband an die Motoren

2. Motoren auf die 4xAA Batteriehalterung kleben. Motoren sollten parallel sein und eine durchgehend gerade Achse haben

3. Arduino mit Motorshield auf die Motoren mit doppelseitigem Klebeband befestigen

11.1 Robotersteuerung - Zustände

Moving

Turn

Stop

ObstacleNo Obstacle

11.2 Robotersteuerung - SW void loop() { if ( stopped() )

return; unsigned long currentTime = millis(); int distance = distanceSensor.getDistance() ; if ( doneRunning( currentTime ) )

stop(); else if ( moving() ) { if ( obstacleAhead( distance ) ) turn( currentTime ); } else if ( turning() ) { if ( doneTurning( currentTime, distance ) ) move(); } }

12. Links

- www.arduino.cc

- www.arduino.cc/en/Main/arduinoBoardUno

- de.wikipedia.org/wiki/Arduino_(Plattform)

- github.com/adafruit/Adafruit-Motor-Shield-library/zipball/master

- code.google.com/p/arduino-new-ping/downloads/detail?name=NewPing_v1.5.zip&can=2&q

- itzwieseltal.wordpress.com

- itzwieseltal.wordpress.com/2015/08/13/simpler-arduino-roboter/

- www.youtube.com/watch?v=I5vKAYMB4Xo