Rückblick auf den Online-Kurs über Arduino / Robotik von MIPT (dritte Woche)

Wir überprüfen weiterhin den kostenlosen Online-Kurs Bauen von Robotern und anderen Geräten auf Arduino. Von der Ampel bis zum 3D-Drucker (vorherige Bewertungen: Woche 1 , Woche 2 )


Dritte Woche


Hallo allerseits! Haben Sie sich jemals gefragt, was zwischen Valley und der Barriere gemeinsam sein könnte?



Zumindest sind sie beide Roboter .


Bevor ich mich für einen Robotikkurs bei MIPT einschrieb, stellte ich mir Roboter fast ausschließlich als vor


humanoide Maschinen

Es stellte sich jedoch heraus, dass die Definition von Robotern viel weiter gefasst ist:


Ein Roboter ist ein automatisches Gerät, das nach dem Prinzip eines lebenden Organismus entwickelt wurde und für die Durchführung von Produktions- und anderen Vorgängen ausgelegt ist. Es arbeitet nach einem vordefinierten Programm und empfängt Informationen über die Außenwelt von Sensoren. Der Roboter führt unabhängig voneinander Produktions- und andere Vorgänge aus, die normalerweise von Menschen ausgeführt werden. Gleichzeitig kann der Roboter sowohl mit dem Bediener kommunizieren (Befehle von ihm empfangen) als auch autonom handeln.

Wie Sie sehen können, ist die Definition viel weiter gefasst als meine stereotype Vorstellung davon, was ein Roboter ist.


In der dritten Woche lernen wir zusätzlich zu einigen neuen Funktionen der Programmierumgebung, wie man mit Entfernungsmessern , Infrarot und Ultraschall arbeitet und mit Servomotoren mit der externen Umgebung interagiert. Das Wichtigste zuerst.


Was geschah nach dem Ergebnis der dritten Woche

Ich möchte Sie daran erinnern, dass wir in der zweiten Kurswoche den Anschluss der einfachsten Sensoren untersucht haben - eines Fotowiderstands und eines Thermistors. Sie waren auf einfachste Weise angeordnet - als sich die Umgebung änderte, änderten sie ihren Widerstand und als Ergebnis konnten wir den Spannungsabfall an ihnen mit dem Arduino messen und verstehen, dass sich die äußeren Bedingungen änderten. Wir haben auch gelernt, wie Informationen mithilfe von LED-Anzeigen und Piezodynamik angezeigt werden.


Diese Woche untersuchen wir Entfernungsmesser - ein Gerät, mit dem Sie die Entfernung zu einem Objekt oder Hindernis bestimmen können.



Der Ultraschall-Entfernungsmesser arbeitet nach dem Prinzip, die Zeit zwischen dem Senden eines Signals (Schallimpuls mit einer Frequenz von 40 kHz) und dem Empfangen seiner reflektierten Kopie zu messen.



Im Infrarotsensor gelangt das reflektierte Signal (ein Strahl im Infrarotspektrum) durch die Linse zu einer positionsempfindlichen Fotozelle, die ihre Leitfähigkeit in Abhängigkeit von dem Ort ändert, an dem der Strahl empfangen wird.


Vielleicht interessiert sich der Leser dafür, warum zwei Sensoren benötigt werden können, um dasselbe zu tun? Es hängt alles vom Umfang des Sensors ab, daher ist der Infrarotsensor nicht zum Messen des Abstands zu lichtabsorbierenden oder transparenten Oberflächen geeignet, da er auf Licht basiert. Andererseits ist der Ultraschall-Entfernungsmesser nicht zur Bestimmung des Abstands zu schallabsorbierenden Oberflächen geeignet, insbesondere zu flauschigen :) Außerdem haben Infrarotsensoren einen kleineren Bereich gemessener Abstände (z. B. 4-30, 10-80 oder 80-150 cm), obwohl sie sogar billig sind Der Entfernungsmesser bestimmt Entfernungen von 2 bis 400 cm. Nur der Ultraschall-Entfernungsmesser befand sich in meinem Set, daher habe ich ihn nur für Experimente verwendet.



Was ist ein Servomotor ? Dies ist ein kleiner Elektromotor, der mit einem Potentiometer und einem Steuerkreis kombiniert wird. Durch Anlegen eines PWM-Signals an den Eingang des Servomotors können wir den Winkel einstellen, um den er sich drehen und diese Position halten soll. Normalerweise beträgt der maximale Drehwinkel 180 Grad, es gibt jedoch Servomotoren mit Winkeln von 120 bis 270 Grad.


Nachdem ich genug mit dem Servomotor und dem Ultraschall-Entfernungsmesser gespielt hatte, begann ich zu überlegen, welches Gerät diese Woche zusammengebaut werden sollte. Die Entscheidung kam plötzlich, als ich aus der Tiefgarage des Einkaufszentrums fuhr. Am Ausgang wurde ein Ausgangssystem mit Barriere und Ampel organisiert, das ich simulieren wollte.


Um dieses Gerät zu bauen, habe ich Elemente des Designers verwendet, die aus der Schulzeit stammen.




Da die Stromversorgung des Computers eindeutig nicht ausreichte, wurde die Karte regelmäßig neu gestartet, sodass in der endgültigen Version die Powerbank für die Stromversorgung verwendet wurde.



Wie unser vereinfachtes Modell des Durchsatzsystems funktioniert:


  1. Nach dem Einschalten leuchtet die rote Ampel auf, die Schranke wird in die geschlossene Position gebracht. Das System wartet auf das Drücken einer Taste (Simulation des Lesens eines Durchgangs).
  2. Nach dem Drücken der Taste leuchtet die grüne Ampel auf und die Schranke öffnet sich. Das System wartet darauf, dass der Entfernungsmesser einen bestimmten Wert unterschreitet (Fahrzeugfahrt).
  3. Nachdem das Fahrzeug das Entfernungsmessersignal überquert hat, leuchtet die rote Verkehrsampel wieder auf und die Barriere schließt sich. Das System wechselt wieder in den Standby-Modus.

In der Fritzing-Umgebung sieht das Schema wie folgt aus:



Quellcode
#include <Servo.h> //     #define GATE_PIN 3 #define RED_PIN 4 #define GREEN_PIN 5 #define BUTTON_PIN 6 #define SENSOR_TRIG 11 #define SENSOR_ECHO 12 //     #define GREEN 1 #define RED 0 #define CLOSE 1 #define OPEN 0 //   ,      #define GATE_OPEN 180 #define GATE_CLOSE 90 // ,     #define SENSOR_THR 15 Servo gate; void setup() { Serial.begin(9600); //      Serial.println("Initialize gate"); gate.attach(GATE_PIN); gate.write(CLOSE); //     Serial.println("Setup pins"); pinMode(GREEN_PIN, OUTPUT); pinMode(RED_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(SENSOR_TRIG, OUTPUT); pinMode(SENSOR_ECHO, INPUT); Serial.println("Light red"); light(RED); } //   -  void gateSet(int state) { if (state == CLOSE) { for (int i = GATE_OPEN; i >= GATE_CLOSE; i--) { gate.write(i); delay(15); } } else { for (int i = GATE_CLOSE; i <= GATE_OPEN; i++) { gate.write(i); delay(15); } } } //   void light(int col) { if (col == RED) { digitalWrite(GREEN_PIN, LOW); digitalWrite(RED_PIN, HIGH); } else { digitalWrite(GREEN_PIN, HIGH); digitalWrite(RED_PIN, LOW); } } //     / int getDistance() { digitalWrite(SENSOR_TRIG, HIGH); digitalWrite(SENSOR_TRIG, LOW); int distance = pulseIn(SENSOR_ECHO, HIGH) / 54; Serial.println("Distance is :" + String(distance)); return distance; } // ,    bool waitCar() { while (getDistance() > SENSOR_THR) { delay(10); } while (getDistance() <= SENSOR_THR) { delay(10); } } void loop() { Serial.println("Wait button"); while (digitalRead(BUTTON_PIN)) { delay(10); } Serial.println("Light green"); light(GREEN); Serial.println("Open gate"); gateSet(OPEN); Serial.println("Wait for car"); waitCar(); Serial.println("Light red"); light(RED); Serial.println("Close gate"); gateSet(CLOSE); Serial.println("End loop"); } 

Demonstration der Funktionsweise des zusammengebauten Geräts



Zusammenfassend. Diese Woche haben wir gelernt, wie man mit Entfernungsmessern arbeitet und einen Servoantrieb steuert. Diese Elemente sind die Basis für viele Rad- oder Laufroboter sowie verschiedene Manipulatoren und bieten daher einen großen Raum für Kreativität.


Frühere Bewertungen :



Und ein Link zum Kurs: Roboter und andere Geräte auf Arduino bauen. Von der Ampel zum 3D-Drucker

Source: https://habr.com/ru/post/de403841/


All Articles