[ev3dev × Python] Ultraschallsensor

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

Inhaltsverzeichnis

  1. Was ist vorzubereiten?
  2. Ultraschallsensorprogramm

0. Was vorzubereiten?

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

1. Ultraschallsensorprogramm (Dokument S.35)

1-0. Ein Programm, das die Entfernung zu Hindernissen und die Schwelle vergleicht

ultrasonicsensor00.py


#!/usr/bin/env python3

#Importieren Sie nur das, was Sie benötigen, aus dem Modul
ev3dev2.sensor.lego import UltrasonicSensor
from ev3dev2.motor import MoveSteering,OUTPUT_A,OUTPUT_B,SpeedPercent

#Instanzgenerierung
us = UltrasonicSensor()
steering_drive = MoveSteering(OUTPUT_A,OUTPUT_B)

#Schleife ausgeführt, während der Wert des Ultraschallsensors größer als 30 ist
while us.distance_centimeters > 30:
    steering_drive.on(0,SpeedPercent(75))
#Stoppen Sie, wenn die Schleife endet
steering_drive.stop()
#Beenden Sie das Programm
exit()

** Punkt **: Ein Programm, das gerade läuft, während der Abstand zum Hindernis größer als 30 cm ist

** Punkt **: Referenzartikel über Schwellenwerte Was ist der Schwellenwert

Point : distance_centimeters Variable, die den Wert des Ultraschallsensors speichert

1-1. Ein Programm, das die Entfernung zu einem Objekt anzeigt

ultrasonicsensor01.py


#Importieren Sie nur das, was Sie benötigen, aus dem Modul
#!/usr/bin/env python3
from ev3dev2.display import Display
ev3dev2.sensor.lego import UltrasonicSensor
from time import sleep

#Instanzgenerierung
dsp = Display()
us = UltrasonicSensor()

#Endlosschleife
while True:
    dsp.update()
    #round()Runden Sie ab mit
    distance = round(us.distance_centimeters)
    dsp.text_pixels(str(distance) + 'cm',True,0,52,font = 'helvB' + '24')
    sleep(0.1)

** Punkt **: Ein Programm, das weiterhin den Wert des Ultraschallsensors anzeigt

1-2. Manuelles und automatisches Schaltprogramm

ultrasonicsensor02.py


#!/usr/bin/env python3
#Importieren Sie nur das, was Sie benötigen, aus dem Modul
from ev3dev2.motor import OUTPUT_A,OUTPUT_B,MoveTank
from ev3dev2.sensor.lego import TouchSensor,UltrasonicSensor
from ev3dev2.sensor import INPUT_1,INPUT_2,INPUT_3

#Instanzgenerierung
tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
us = UltrasonicSensor(INPUT_3)
ts_1 = TouchSensor(INPUT_1)
ts_2 = TouchSensor(INPUT_2)

#Endlosschleife
while True:
    #Schleife zum Laufen, während der Wert des Ultraschallsensors größer als 20 ist
    while us.distance_centimeters > 20:
        #ts_1 wurde gedrückt
        if ts_1.is_pressed:
            #ts_1 wurde gedrückt und ts_2 wurde gedrückt
            if ts_2.is_pressed:
                tank_drive.on(100,100)
            #ts_1 wurde gedrückt und ts_2 wird nicht gedrückt
            else:
                tank_drive.on(40,100)
        #ts_1 wird nicht gedrückt
        else:
            #ts_1 wird nicht gedrückt und ts_2 wurde gedrückt
            if ts_2.is_pressed:
                tank_drive.on(100,40)
            #ts_1 wird nicht gedrückt und ts_2 wird nicht gedrückt
            else:
                tank_drive.stop()
    #Schleife zum Laufen, während der Wert des Ultraschallsensors größer als 20 ist
    while us.distance_centimeters < 30:
        tank_drive.on(-80,-80)

Point : Wenn sich keine Hindernisse näher als 20 cm befinden, können Sie den Funkcontroller manuell bedienen. Wenn das Hindernis jedoch näher als 20 cm ist, wird das Programm automatisch nach hinten verschoben, bis der Abstand zum Hindernis zur Vermeidung von Notfällen mehr als 30 cm beträgt.

** Punkt **: Dieser Mechanismus (gleicher Inhalt) im Vergleich zu Scratch ↓ スクリーンショット 2020-06-19 16.59.25.png

** Punkt **: ** Wiederholen bis ** und ** Wiederholen zwischen **

** Wiederholen bis **: Wiederholen, bis die Bedingung nicht mehr erfüllt ist ** Wiederholen, während ~ **: Wiederholen, während die Bedingung erfüllt ist

1-3 Parallelverarbeitungsprogramm

ultrasonicsensor03.py


#!/usr/bin/env python3

#Importieren Sie nur das, was Sie benötigen, aus dem Modul
from ev3dev2.motor import OUTPUT_A,OUTPUT_B,MoveTank
from ev3dev2.display import Display
from ev3dev2.sensor.lego import UltrasonicSensor
from time import sleep
from threading import Thread

#Instanzgenerierung
tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
dsp = Display()
us = UltrasonicSensor()

#distance_display()Definition der Funktion
def distance_display():
    #loop =Wiederholen, während True
    while loop:
        dsp.update()
        distance = us.distance_centimeters
        dsp.text_pixels(str(distance) + 'cm',True,0,52,font = 'helvB' + '24')
        sleep(0.1)
#Weisen Sie der Schleife True zu, um sie schleifenfähig zu machen
loop = True
#Erstellen Sie eine Instanz t der Thread-Klasse
t = Thread(target = distance_display)
#Starten Sie einen Thread
t.start()

#10 mal wiederholen
for i in range(10):
    #Wiederholen Sie diesen Vorgang, solange der Wert des Ultraschallsensors größer als 30 ist
    while us.distance_centimeters > 30:
        tank_drive.on(10,10)
    tank_drive.stop()
    #Wiederholen Sie diesen Vorgang, solange der Wert des Ultraschallsensors weniger als 50 beträgt
    while us.distance_centimeters < 50:
        tank_drive.on(5,-5)
tank_drive.stop()
#Weisen Sie der Schleife False zu, um den Thread zu stoppen
loop = False

Point : Wenn sich keine Hindernisse näher als 30 cm befinden, fahren Sie geradeaus. Wenn das Hindernis jedoch näher als 30 cm ist, wird ein Programm wie Rumba gedreht, bis der Abstand zum Hindernis mehr als 50 cm beträgt. Der Abstand zum Hindernis wird dann gleichzeitig mit dem Laufen angezeigt.

** Punkt **: Referenzartikel zur Parallelverarbeitung Multithreading

1-4 Parallelverarbeitungsprogramm

main.py


#!/usr/bin/env python3

#Importieren Sie nur das, was Sie benötigen, aus dem Modul
from ev3dev2.motor import OUTPUT_A,OUTPUT_B,MoveTank
from ev3dev2.sensor.lego import UltrasonicSensor
import subprocess

#Instanzgenerierung
tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
us = UltrasonicSensor()

#Starten Sie ein untergeordnetes Programm in einem neuen Prozess
subprocess.Popen(['python3','sub.py'])

#10 mal wiederholen
for i in range(10):
    while us.distance_centimeters > 30:
        tank_drive.on(10,10)
    tank_drive.stop()
    while us.distance_centimeters < 50:
        tank_drive.on(5,-5)
tank_drive.stop()
#Erstellen Sie eine Instanz der Klasse Popen
proc = subprocess.Popen(['python3','sub.py'])
#Beenden Sie das untergeordnete Programm
proc.kill()
exit()

sub.py


from ev3dev2.sensor.lego import UltrasonicSensor
from ev3dev2.display import Display
from time import sleep

dsp = Display()
us = UltrasonicSensor()

while True:
    dsp.update()
    distance = round(us.distance_centimeters)
    dsp.text_pixels(str(distance) + 'cm',True,0,52,font = 'helvB' + '24')
    sleep(0.5)
exit()

** Punkt **: So rufen Sie sub.py von main.py für die parallele Verarbeitung auf. (Verarbeitung ist schwer)

** Punkt **: Referenzartikel zur Parallelverarbeitung Einführung in die Parallelverarbeitungsprogrammierung in Python

Schließlich

Danke fürs Lesen! !! Nächstes Mal möchte ich über den Kreiselsensor 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] Ultraschallsensor
[ev3dev × Python] Berührungssensor
[ev3dev × Python] Kreiselsensor
[ev3dev × Python] Farbsensor
[ev3dev × Python] Intelligente Blockschaltfläche
[ev3dev × Python] Aufbau einer ev3dev-Entwicklungsumgebung
[ev3dev × Python] Einzelmotorsteuerung
[ev3dev × Python] Steuerung mehrerer Motoren
Python
[ev3dev × Python] Anzeige, Sprache, LED-Steuerung
Holen Sie sich Tastenanschläge von / dev / input (python evdev)
[ev3dev × Python] SSH-Steuerung (Fernbedienung mit Tastatur)