Wir bauen einen Staubsaugerroboter
Wir sind drei Mädels aus dem Projektkurs Mathe/Informatik und interessieren uns für die Elektrotechnik. Vorerst werden wir einen einfachen Roboter bauen, den wir später zu einem Staubsaugerroboter umbauen.
Einkaufsliste
- Chassis, 3 Räder, 2 Getriebemotoren, Bateriehalterung, Drehzahlgeber: https://www.amazon.de/YIKESHU-Roboter-Chassis-Encoder-Arduino/dp/B072ZWRM2B/ref=pd_bxgy_107_img_2?_encoding=UTF8&refRID=M4AJHFS24RF2FV58SJFH&th=1
- L298N Motortreiber Modul: https://www.amazon.de/Neuftech-H-Br%C3%BCcke-Motortreiber-Schrittmotor-Controller/dp/B01KBTNHS6/ref=pd_bxgy_21_img_3?_encoding=UTF8&psc=1&refRID=KK7YG74BA6AS22NPY7BR
- Ultraschallmodul: https://www.amazon.de/Aukru-Ultraschall-HC-SR04-Distance-Raspberry/dp/B00R2U8HK6/ref=pd_bxgy_107_img_3?_encoding=UTF8&psc=1&refRID=TM4HM02WKAXHYYW0X4V6
- Arduino Mini Nano V 3.0: https://www.amazon.de/IZOKEE-ATmega328P-Entwicklerboard-USB-Kabel-Verl%C3%B6tet/dp/B072XS9ZTX/ref=sr_1_3?ie=UTF8&qid=1519738471&sr=8-3&keywords=arduino+nano&dpID=61KbvpFxKTL&preST=_SY300_QL70_&dpSrc=srch
Vorbereitungen:
Heute haben wir unsere Einkäufe begutachtet und angefangen den Roboter zusammen zu bauen.
Als erstes haben wir die Motoren auf das Chassis geschraubt (die Anleitung liegt dabei). Danach die Räder angeschraubt. Hier für haben wir einen Schlitzschraubendreher benutzt. Als letztes haben wir das Batteriefach und den Mortortreiber angebracht.
Um den Arduino zu verstehen, haben wir uns ein paar Tutorials angeguckt und Beispielprogrammierungen ausprobiert. Dafür brauchst du die Arduino Software und einen speziellen Treiber: CH340G
Nächster Tag:
Heute haben wir versucht den Arduino mit dem Motor mit dem Arduino Standartprogramm zu programmieren.
Leider haben wir es nicht fertig bekommen, sodass wir nächste Woche weiter machen müssen.
Nächster Tag:
Heute haben wir uns nochmal nur um den Arduino gekümmert und Grundsätze programiert. Zu erst haben eine blaue LED und den Arduino auf ein Breadboard gesteckt und mit Kabeln so verbunden, dass sie leuchten kann.
Dazu hatten wir einen 180 Ω Widerstand für eine LED, die eine Spannung von 3-4 V benötigt.
Quelltext:
// Das Setup void setup() { pinMode(3, OUTPUT); // Den digitalen Pin 3 (D3) als Ausgang deklarieren. } // Die Haupt-Schleife (Main-Loop) void loop() { digitalWrite(3, HIGH); // Den Ausgang D3 HIGH setzen. delay(1000); // 1 Sekunde warten. digitalWrite(3, LOW); // Den Ausgang D3 LOW setzen. delay(1000); // 1 Sekunde warten. }
Danach haben wir eine zweite LED mit dem
selben Widerstand hinzugefügt und einen Taster mit 100k Ω Widerstand.
Quelltext:
const int in_button1 = 7; // An den Pin D7 ist der Taster angeschlossen. const int out_LED1 = 3; // Die LED ist am Pin D3 angeschlossen. const int in_button2 = 8; // Der neue Taster ist an Pin D8 angeschlossen. const int out_LED2 = 5; // Die zweite LED ist immernoch am Pin D5 angeschlossen. int i_buttonState1 = 0; // In dieser Variablen speichern wir den Status des Eingangs. int i_buttonState2 = 0; // Natürlich wollen wir auch den Status des zweiten Tasters speichern. void setup(){ pinMode(in_button1, INPUT); // Der Pin des ersten Tasters wird als Eingang initialisiert. pinMode(out_LED1, OUTPUT); // Der Pin der ersten LED wird als Ausgang initialisiert. pinMode(in_button2, INPUT); // Dasselbe machen wir mit dem zweiten Eingang pinMode(out_LED2, OUTPUT); // und mit der zweiten LED. } void loop(){ // Wir lesen den Status des Taster-Eingangs aus und speichern den Wert in der Variablen i_buttonState1 = digitalRead(in_button1); if (i_buttonState1 == HIGH) { // Ist der Taster gedrückt, digitalWrite(out_LED1, HIGH); // dann schalte die LED an. } else { // Ansonsten digitalWrite(out_LED1, LOW); // schalte die LED wieder aus. }
i_buttonState2 = digitalRead(in_button2); if (i_buttonState2 == HIGH) { // Ist der zweite Taster NICHT gedrückt, digitalWrite(out_LED2, HIGH); // dann schalte die LED an. } else { // Ansonsten digitalWrite(out_LED2, LOW); // schalte die LED aus. } delay(50); // Wir wollen ja nicht hetzen und warten 50ms. }
Nächster tag:
heute haben wir zwei Motoren an den Arduino angeschlossen, wobei uns der arduino durchgebrannt ist.
Nächster Tag:
heute haben wir die zwei Motoren nochmal angeschlossen und verbunden. wir haben die schaltung ein bischen geändert und eine andere Programierung benutzt. Danach hat sich einer der Motoren in regelmäßigen Abständen gedreht.
Für die Programierung haben wir diesen Quelltext verwendet:
// connect motor controller pins to Arduino digital pins // motor one int enA = 10; int in1 = 9; int in2 = 8; // motor two int enB = 5; int in3 = 7; int in4 = 6; void setup() { // set all the motor control pins to outputs pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void demoOne() { // this function will run the motors in both directions at a fixed speed // turn on motor A digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // set speed to 200 out of possible range 0~255 analogWrite(enA, 200); // turn on motor B digitalWrite(in3, HIGH); digitalWrite(in4, LOW); // set speed to 200 out of possible range 0~255 analogWrite(enB, 200); delay(2000); // now change motor directions digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(2000); // now turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void demoTwo() { // this function will run the motors across the range of possible speeds // note that maximum speed is determined by the motor itself and the operating voltage // the PWM values sent by analogWrite() are fractions of the maximum speed possible // by your hardware // turn on motors digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // accelerate from zero to maximum speed for (int i = 0; i < 256; i++) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // decelerate from maximum speed to zero for (int i = 255; i >= 0; --i) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // now turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void loop() { demoOne(); delay(1000); demoTwo(); delay(1000); }