Konstruktionsphase#
Die Position von Servos und die Geschwindigkeit von Motoren wird über deren Eingangsspannung eingestellt. Der Arduino kann die Spannung eines Ausgangs über eine sogenannte Puls-Weiten-Modulation (PWM) zwischen 0V und 5V variieren. Nur die Pins 3, 5, 6, 9, 10, 11 können eine PWM, die anderen können nur eingeschaltet (Spannung gleich 5V) oder ausgeschaltet (Spannung gleich 0V) sein. Die Kurven-Symbole im Arduino Nano v3 Pinout bedeuten „kann auch PWM“.
Abb. 13 Arduino Nano v3 Pinout#
1const int PIN_SENSOR_LINKS = A0;
2const int PIN_SENSOR_RECHTS = A1;
3
4const int PIN_MOTOR_LINKS = 6;
5const int PIN_MOTOR_RECHTS = 5;
6
7int helligkeit_links;
8int helligkeit_rechts;
9
10String untergrund_links = "Unbekannt";
11String untergrund_rechts = "Unbekannt";
12
13String untergrund_neu(String untergrund_alt, int helligkeit) {
14 if(helligkeit > 910)
15 return "SCHWARZ";
16 else if (helligkeit < 880)
17 return "WEISS";
18 else
19 return untergrund_alt;
20}
21
22String ort = "ende";
23
24String ort_neu(String ort_alt, String untergrund_links, String untergrund_rechts){
25 if (untergrund_rechts == "SCHWARZ" && untergrund_links == "SCHWARZ")
26 return "ende";
27 else if (untergrund_rechts == "SCHWARZ")
28 return "links";
29 else if (untergrund_links == "SCHWARZ")
30 return "rechts";
31 else
32 return ort_alt;
33}
34
35const int GESCHWINDIGKEIT_NORMAL = 150;
36const int GESCHWINDIGKEIT_UNTERSCHIED = 30;
37
38void fahre(String ort){
39 if (ort == "ende") {
40 analogWrite(PIN_MOTOR_LINKS, 0);
41 analogWrite(PIN_MOTOR_RECHTS, 0);
42 } else if (ort == "links"){
43 analogWrite(PIN_MOTOR_LINKS, GESCHWINDIGKEIT_NORMAL + GESCHWINDIGKEIT_UNTERSCHIED);
44 analogWrite(PIN_MOTOR_RECHTS, GESCHWINDIGKEIT_NORMAL - GESCHWINDIGKEIT_UNTERSCHIED);
45 } else if (ort == "rechts") {
46 analogWrite(PIN_MOTOR_LINKS, GESCHWINDIGKEIT_NORMAL - GESCHWINDIGKEIT_UNTERSCHIED);
47 analogWrite(PIN_MOTOR_RECHTS, GESCHWINDIGKEIT_NORMAL + GESCHWINDIGKEIT_UNTERSCHIED);
48 } else {
49 analogWrite(PIN_MOTOR_LINKS, GESCHWINDIGKEIT_NORMAL);
50 analogWrite(PIN_MOTOR_RECHTS, GESCHWINDIGKEIT_NORMAL);
51 }
52}
53
54void setup() {
55 Serial.begin(9600);
56}
57
58void loop() {
59 helligkeit_links = analogRead(PIN_SENSOR_LINKS);
60 helligkeit_rechts = analogRead(PIN_SENSOR_RECHTS);
61
62 Serial.print(helligkeit_links);
63 Serial.print(" ");
64 Serial.println(helligkeit_rechts);
65
66 untergrund_links = untergrund_neu(untergrund_links, helligkeit_links);
67 untergrund_rechts = untergrund_neu(untergrund_rechts, helligkeit_rechts);
68
69 Serial.print(untergrund_links);
70 Serial.print(" ");
71 Serial.println(untergrund_rechts);
72
73 ort = ort_neu(ort, untergrund_links, untergrund_rechts);
74
75 Serial.println(ort);
76 Serial.println();
77
78 fahre(ort);
79
80 delay(100);
81
82
83}