Aufgabenstellung
Für die Steuerung kabelloser Geräte (wie z.B. Elektromotoren) wird eine programmierbare, batteriebetriebene Lösung gesucht, die Eingabewerte von Sensoren annehmen und verarbeiten kann.
Ansatz
Durch die Verwendung des programmierbaren Arduino-Boards (arduino.cc) können Motoren mit niedriger Spannung bis zu 5 Volt betrieben werden.
Lösung
Projekt 1: Infrarotsensor
Projekt 2: Entfernungsmesser
Zusammenstellung des Roboters (Projekt 1)
Die folgenden Hardware-Komponenten werden benutzt:
- Tamiya Track&Wheel Set
- Tamiya Twin-Motor Gear Box (Motorkonfiguration: Type C)
- Platine DFRobotShop Rover
- Arduino Duemilanove; Prozessor ATMega 328
- integrierter Motorcontroller (besetzt Pins 5-8)
- USB Schnittstelle
- Battery-Fach
- Infrarotsensor: DFR0094
Zusammenstellung des Roboters (Projekt 2)
Die folgenden Hardware-Komponenten werden benutzt:
- Tamiya Track&Wheel Set
- Tamiya Twin-Motor Gear Box (Motorkonfiguration: Type C)
- Platine DFRobotShop Rover
- Arduino Duemilanove; Prozessor ATMega 328
- integrierter Motorcontroller (besetzt Pins 5-8)
- USB Schnittstelle
- Battery-Fach
- IR Range Sensor: SHARP GP2D12 IR Ranger Sensor
Verdrahtung des Roboters (Projekt 1)
Infrarotsensor:
- Arduino 5V wird an VCC des Sensors angeschlossen
- Arduino GND an Infrarotsensor GND
- D wird (hier in meinem Code) auf Digital Pin 11 gelegt
Die folgenden Software-Komponenten werden benutzt:
- IDE von Arduino CC
- Infrarot-Bibliothek: IRremote.h
Verdrahtung des Roboters (Projekt 2)
Infrarotsensor:
- Arduino 5V mit IR Ranger Sensor roter Draht verbinden
- Arduino GND mit IR Ranger Sensor schwarzer Draht verbinden
- Arduino A2 analoger Eingang mit grünem Draht verbinden
Die folgenden Software-Komponenten werden benutzt:
- IDE von Arduino CC
Mein Code (Projekt 1)
#include <IRremote.h> // use the library int E1 = 6; //M1 Speed Control int E2 = 5; //M2 Speed Control int M1 = 8; //M1 Direction Control int M2 = 7; //M2 Direction Control int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11 IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; void setup() { int i; for(i=5;i<=8;i++) pinMode(i, OUTPUT); Serial.begin(9600); // for serial monitor output irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) // have we received an IR signal? { Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal int leftspeed = 255; //255 is maximum speed int rightspeed = 255; switch(results.value) { case 0x802: { forward (leftspeed,rightspeed); } break; case 0x804: { left (leftspeed,rightspeed); } break; case 0x806: { right (leftspeed,rightspeed); } break; case 0x808: { reverse (leftspeed,rightspeed); } break; default: stop(); break; } irrecv.resume(); // receive the next value } // Your loop can do other things while waiting for an IR command } void stop(void) //Stop { digitalWrite(E1,LOW); digitalWrite(E2,LOW); } void forward(char a,char b) { analogWrite (E1,a); digitalWrite(M1,LOW); analogWrite (E2,b); digitalWrite(M2,LOW); } void reverse (char a,char b) { analogWrite (E1,a); digitalWrite(M1,HIGH); analogWrite (E2,b); digitalWrite(M2,HIGH); } void left (char a,char b) { analogWrite (E1,a); digitalWrite(M1,HIGH); analogWrite (E2,b); digitalWrite(M2,LOW); } void right (char a,char b) { analogWrite (E1,a); digitalWrite(M1,LOW); analogWrite (E2,b); digitalWrite(M2,HIGH); } [/javascript] <h3>Mein Code (Projekt 2)</h3> [javascript] // example 32.1 - IR receiver code repeater // http://tronixstuff.com/tutorials > chapter 32 // based on code by Ken Shirriff - http://arcfn.com int E1 = 6; //M1 Speed Control int E2 = 5; //M2 Speed Control int M1 = 8; //M1 Direction Control int M2 = 7; //M2 Direction Control int irReader = 3; // the analog input pin for the ir reader int irVal = 0; // stores value from Ir reader void setup() { int i; for(i=5;i<=8;i++) pinMode(i, OUTPUT); Serial.begin(9600); // for serial monitor output } void loop() { int leftspeed = 255; //255 is maximum speed int rightspeed = 255; irVal = analogRead(irReader); // read the value from the ir sensor Serial.println(irVal); // sends ir val to computer if (irVal>210) // have we received an IR signal? { left (leftspeed,rightspeed); delay(500); } else { forward (leftspeed,rightspeed); } } void stop(void) //Stop { digitalWrite(E1,LOW); digitalWrite(E2,LOW); } void forward(char a,char b) { analogWrite (E1,a); digitalWrite(M1,LOW); analogWrite (E2,b); digitalWrite(M2,LOW); } void reverse (char a,char b) { analogWrite (E1,a); digitalWrite(M1,HIGH); analogWrite (E2,b); digitalWrite(M2,HIGH); } void left (char a,char b) { analogWrite (E1,a); digitalWrite(M1,HIGH); analogWrite (E2,b); digitalWrite(M2,LOW); } void right (char a,char b) { analogWrite (E1,a); digitalWrite(M1,LOW); analogWrite (E2,b); digitalWrite(M2,HIGH); }