[ev3dev × Python] Farbsensor

Dieser Artikel richtet sich an alle, die mit ev3 in Python arbeiten möchten. Dieses Mal möchte ich verschiedene Operationen mit dem Farbsensor durchführen.

Inhaltsverzeichnis

  1. Was ist vorzubereiten?
  2. Farbsensorprogramm

0. Was ist vorzubereiten?

◯ ev3 (Tank), Farbsensor, Berührungssensor ◯ PC (VS-Code) ◯ bluetooth ◯ microSD ◯ Material (Es wird empfohlen, fortzufahren, während Sie dies ansehen.)

1. Farbsensorprogramm (Dokument S.33)

1-0. Programm, das ausgeführt werden soll, wenn der Farbsensor eine Farbe erkennt

colorsensor00.py


#!/usr/bin/env python3
from ev3dev2.sensor.lego import ColorSensor
from ev3dev2.sound import Sound

cs = ColorSensor()
spkr = Sound()

while True:
    if cs.color == 5:
        spkr.speak('Red is detected')

** Punkt **: Ein Programm mit der Meldung "Rot wurde erkannt", wenn der Farbsensor auf Rot reagiert.

** Punkt **: Farben werden im Voraus entsprechend den Zahlen definiert, und Farben werden im Programm als Zahlen behandelt.

color Color detected by the sensor, categorized by overall value. • 0: No color • 1: Black • 2: Blue • 3: Green • 4: Yellow • 5: Red • 6: White • 7: Brown

1-1. Linienverfolgungsprogramm ①

colorsensor01.py


#!/usr/bin/env python3
from ev3dev2.motor import MoveTank,OUTPUT_A,OUTPUT_B
from ev3dev2.sensor.lego import ColorSensor

tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
cs = ColorSensor()

while True:
    if cs.reflected_light_intensity < 15:
        tank_drive.on(10,0)
    else:
        tank_drive.on(0,10)

** Punkt **: Ein Programm, das abhängig vom vom Farbsensor erfassten Lichtreflexionsgrad entlang der Linie ausgeführt wird.

** Punkt **: Linienspur Das Lichtreflexionsvermögen unterscheidet sich zwischen Schwarz und Weiß. Weiß reflektiert das Licht gut und Schwarz reflektiert weniger Licht. Es ist eine übliche Linienspur, die ausgeführt wird, während eine schwarze Linie auf einem weißen Feld erkannt wird, indem das unterschiedliche Reflexionsvermögen ausgenutzt wird.

1-2. Linienverfolgungsprogramm ②

colorsensor02.py


#!/usr/bin/env python3
from ev3dev2.motor import MoveTank,OUTPUT_A,OUTPUT_B
from ev3dev2.sensor.lego import ColorSensor
from ev3dev2.sensor import INPUT_1,INPUT_2

tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
cs_1 = ColorSensor(INPUT_1)
cs_2 = ColorSensor(INPUT_2)

while True:
    if cs_1.reflected_light_intensity > 15:
        if cs_2.reflected_light_intensity > 15:
            tank_drive.on(10,10)
        else:
            tank_drive.on(10,0)
    else:
        if cs_2.reflected_light_intensity > 15:
            tank_drive.on(0,10)
        else:
            tank_drive.on(-10,10)

** Punkt **: Linienverfolgungsprogramm mit zwei Farbsensoren

** Punkt **: Programmbild

cs_1 erkennt Weiß und cs_2 erkennt Weiß: Fahren Sie geradeaus cs_1 erkennt Weiß und cs_2 erkennt Schwarz: Gehen Sie nach rechts cs_1 erkennt schwarz und cs_2 erkennt weiß: gehe nach links cs_1 erkennt Schwarz und cs_2 erkennt Schwarz: Im laufenden Betrieb drehen (nach Linien suchen)

1-3. Linienverfolgungsprogramm ③

colorsensor03.py


#!/usr/bin/env python3
from ev3dev2.motor import OUTPUT_A, OUTPUT_B, MoveTank, SpeedPercent, follow_for_ms
from ev3dev2.sensor.lego import ColorSensor
tank = MoveTank(OUTPUT_A, OUTPUT_B)
tank.cs = ColorSensor()
try:
    tank.follow_line(
    kp=11.3, ki=0.05, kd=3.2,
    speed=SpeedPercent(30),
    follow_for=follow_for_ms,
    ms=4500
    )
except LineFollowErrorTooFast:
    tank.stop()
    raise

** Punkt **: Linienverfolgungsprogramm mit PID-Regelung

** Punkt **: PID-Regelung Die PID-Regelung ist eine Art Rückkopplungsregelung, die den Eingangswert so regelt, dass sich der Ausgangswert dem Zielwert nähert.

Ausgabewert: Lichtreflexion Zielwert: Lichtreflexion in der Nähe der Linie Eingabewert: Motordrehzahl (Bei Linienverfolgung mit einem Farbsensor)

Point : follow_line(kp, ki, kd, speed, target_light_intensity=None, follow_left_edge=True, white=60,off_line_count_max=20, sleep_time=0.01, follow_for=,**kwargs)

PID line follower kp, ki, and kd are the PID constants.

** Punkt **: Referenzartikel zur PID-Regelung

PID-Regelung des Line Trace Cars

** Punkt **: Referenzartikel zur Behandlung von Python-Ausnahmen

Behandlung von Python-Ausnahmen (versuchen Sie es, außer, sonst, endlich)

1-4. Ein Programm, das Farben mit Listen vergleicht

colorsensor04.py


#!/usr/bin/env python3
from ev3dev2.sensor.lego import ColorSensor,TouchSensor
from ev3dev2.display import Display

cs = ColorSensor()
ts = TouchSensor()
dsp = Display()
color_list = [1,2,4,5]

while True:
    dsp.update()
    if ts.is_pressed:
        if cs.color in color_list:
            dsp.text_pixels(cs.color_name  + ' is detected',True,0,52,font = 'helvB' + '12')
        else:
            dsp.text_pixels('No such color in the color_list',True,0,52,font = 'helvB' + '10')
    else:
        dsp.text_pixels('please set the color !!!!',True,0,52,font = 'helvB' + '12') 

** Punkt **: Halten Sie den Berührungssensor gedrückt und halten Sie die Farbe gedrückt. Wenn die Farbe, die Sie zu diesem Zeitpunkt halten, eine Farbe ist, die in color_list vorhanden ist

Point :

python


 Verarbeitung `` `


 ** Wenn Element a in b enthalten ist (diesmal auflisten), führen Sie die Verarbeitung aus **

 Referenzartikel
 [Beurteilen Sie, ob eine Liste usw. ein bestimmtes Element mit Pythons Operator enthält]
(https://note.nkmk.me/python-in-basic/)








### 1-5. Ein Programm, das Farben in einer Liste speichert

#### **`colorsensor05.py`**
```py

#!/usr/bin/env python3
from ev3dev2.motor import OUTPUT_A,OUTPUT_B,MoveTank
from ev3dev2.sensor.lego import ColorSensor,TouchSensor
from ev3dev2.sound import Sound
from time import sleep

cs = ColorSensor()
ts = TouchSensor()
spkr = Sound()
tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
color_list = []

for i in range(4):
    ts.wait_for_bump()
    sleep(0.1)
    color_list.append(cs.color)
    spkr.speak(cs.color_name)
for c in color_list:
    sleep(1)
    if c == 1:
        spkr.speak('turn left')
        tank_drive.on_for_rotations(0,50,2)
    if c == 2:
        spkr.speak('go forward')
        tank_drive.on_for_rotations(50,50,2)
    if c == 4:
        spkr.speak('turn right')
        tank_drive.on_for_rotations(50,0,2)
    if c == 5:
        spkr.speak('go back')
        tank_drive.on_for_rotations(-10,-10,2)

** Punkt **: Fügen Sie der leeren color_list die Farbe hinzu, die beim Drücken des Berührungssensors hochgehalten wurde. Nach dem Hinzufügen wird der mit der Farbe verknüpfte Prozess in der Reihenfolge vom Anfang der Liste ausgeführt.

Point : append() Sie können am Ende der Liste Elemente hinzufügen

Referenzartikel Anhängen, erweitern, einfügen, um einer Liste (einem Array) in Python ein Element hinzuzufügen

Schließlich

Danke fürs Lesen! !! Nächstes Mal möchte ich über Ultraschallsensoren schreiben!

Ich möchte einen besseren Artikel machen ◯ Das ist leichter zu verstehen ◯ Das ist schwer zu verstehen ◯ Das ist falsch ◯ Ich möchte, dass Sie hier mehr erklären Wir freuen uns über Ihre Meinungen und Vorschläge.

Recommended Posts

[ev3dev × Python] Farbsensor
[ev3dev × Python] Ultraschallsensor
[ev3dev × Python] Berührungssensor
[ev3dev × Python] Kreiselsensor
[ev3dev × Python] Intelligente Blockschaltfläche
Mixer, Python, Wendeltreppe, Farbe
[Python] Anpassen der Farbleiste
[ev3dev × Python] Aufbau einer ev3dev-Entwicklungsumgebung
Blender 2.9, Python, hexadezimale Farbspezifikation
[ev3dev × Python] Einzelmotorsteuerung
[ev3dev × Python] Steuerung mehrerer Motoren
Python
[Python] Uhr, die die Farbe ändert (Animation)
[Python] Passen Sie den Standard für die Farbkarte an
Python colorama Farbnotiz (Cmder-Umgebung)
Datenformatierung für Python / Farbdiagramme
[ev3dev × Python] Anzeige, Sprache, LED-Steuerung
Blender 2.9, Python-Hintergrundlicht-Farbtest
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Holen Sie sich Tastenanschläge von / dev / input (python evdev)
Geben Sie Farbzeichen mit Python zu hübsch aus
Bildverarbeitung mit Python 100 Knock # 6 Farbreduktionsverarbeitung
[ev3dev × Python] SSH-Steuerung (Fernbedienung mit Tastatur)
[Python] Holen Sie sich die Hauptfarbe aus dem Screenshot