Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:glf22:robotik-mit-svcode:lichtsensor [2023/02/17 07:02] – [Lichtsensor] Ivo Blöchliger | lehrkraefte:blc:informatik:glf22:robotik-mit-svcode:lichtsensor [2023/02/21 09:09] (current) – Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Lichtsensor ====== | ||
| + | Der Lichtsensor kann Helligkeit und/oder Farbe messen. Dazu wird die zu messende Fläche normalerweise schnell abwechselnd angestrahlt und wieder nicht, und das jeweils reflektierte Licht gemessen. Die Differenz entspricht dann der Helligkeit der gemessenen Fläche. | ||
| + | |||
| + | Dokumentation dazu: https:// | ||
| + | |||
| + | <WRAP todo> | ||
| + | Um einen Eindruck der gelieferten Werte zu bekommen, kann direkt der Roboter benutzt werden (ohne Programmierung). Gehen Sie wie folgt vor: | ||
| + | * Auf dem Roboter gehen ins Menu '' | ||
| + | * Scrollen Sie nach unten und versichern Sie sich, dass der Modus '' | ||
| + | * Wählen Sie dann '' | ||
| + | * Notieren Sie sich zu jeder der verschiedenen Flächen die typischen kleinsten und grössten Werte, die gemessen werden. Bewegen Sie dabei den Roboter auch. | ||
| + | * Mit den gemessenen Wertebereich können später diese Bereich erkannt, bzw. sauber voneinander unterschieden werden. | ||
| + | </ | ||
| + | |||
| + | Kennt man nun die Werte, kann damit z.B. bis zu einer Linie gefahren werden: | ||
| + | |||
| + | <WRAP todo> | ||
| + | * Legen Sie ein neues EV3-Projekt an und fügen Sie folgenden Code hinzu: | ||
| + | <code python> | ||
| + | licht = ColorSensor(Port.S3) | ||
| + | |||
| + | links = Motor(Port.A) | ||
| + | rechts = Motor(Port.B) | ||
| + | fahrwerk = DriveBase(links, | ||
| + | |||
| + | stopuhr = StopWatch() | ||
| + | |||
| + | fahrwerk.drive(150, | ||
| + | hell = licht.reflection() | ||
| + | while hell< | ||
| + | hell = licht.reflection() | ||
| + | print(hell) | ||
| + | fahrwerk.stop() | ||
| + | |||
| + | print(" | ||
| + | print(stopuhr.time()) | ||
| + | </ | ||
| + | * Passen Sie nötigenfalls die Parameter fürs '' | ||
| + | * Passen Sie den Wert für die Bedingung der '' | ||
| + | * Testen Sie das Programm. | ||
| + | </ | ||
| + | |||
| + | ===== Genau auf der Linie anhalten ===== | ||
| + | **Situation** | ||
| + | |||
| + | Der Roboter startet mit dem Lichtsensor auf einer 1m Linie. | ||
| + | Der Roboter soll die gegenüberliegende Linie mit dem Sensor mindestens berühren, um 180 Grad wenden und dann | ||
| + | möglichst genau mit dem Lichtsensor in der «Mitte» der Startlinie stoppen, und das möglichst schnell. | ||
| + | |||
| + | Das Score ist die Zeit in Sekunden plus $\frac{1}{10}$ vom Quadrat des Abstands in mm von der Mitte vom Klebestreifen. | ||
| + | |||
| + | <WRAP todo> | ||
| + | * Beschreiben Sie in Pseudo-Code (mit den zu Verfügung stehenden «Bausteinen») ein bis zwei Strategien, wie das möglichst genau und trotzdem schnell passieren könnte. | ||
| + | * Setzen Sie diese Strategien in Python um, und testen Sie. | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Einer Linie folgen ===== | ||
| + | Grundidee: Der Roboter soll dem linken (oder rechten) Rand einer Linie folgen, d.h. die Helligkeit sollte immer **genau zwischen** den Werten der beiden Flächen liegen. Je nachdem, ob zu hell oder zu dunkel gemessen wird, soll nach links oder rechts gesteuert werden. | ||
| + | |||
| + | |||
| + | <WRAP todo> | ||
| + | Schreiben Sie ein Programm, so dass der Roboter einer Linie folgen kann. Testen erst mit Geraden Linien, dann auch mit Kurven (Blache). | ||
| + | </ | ||