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.
◯ ev3 (Tank) und Ultraschallsensor ◯ PC (VS-Code) ◯ bluetooth ◯ microSD ◯ Material (Es wird empfohlen, fortzufahren, während Sie dies ansehen.)
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
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
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 ↓
** 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
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
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
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