Cet article s'adresse à tous ceux qui souhaitent travailler avec ev3 en Python. Cette fois, je souhaite effectuer diverses opérations à l'aide du capteur à ultrasons.
◯ ev3 (réservoir) et capteur à ultrasons ◯ PC (code VS) ◯ bluetooth ◯ microSD ◯ Material (Il est recommandé de continuer en regardant ceci.)
ultrasonicsensor00.py
#!/usr/bin/env python3
#Importez uniquement ce dont vous avez besoin à partir du module
ev3dev2.sensor.lego import UltrasonicSensor
from ev3dev2.motor import MoveSteering,OUTPUT_A,OUTPUT_B,SpeedPercent
#Génération d'instance
us = UltrasonicSensor()
steering_drive = MoveSteering(OUTPUT_A,OUTPUT_B)
#Boucle exécutée alors que la valeur du capteur à ultrasons est supérieure à 30
while us.distance_centimeters > 30:
steering_drive.on(0,SpeedPercent(75))
#Arrêter quand la boucle se termine
steering_drive.stop()
#Quitter le programme
exit()
** Point **: Un programme qui va droit alors que la distance à l'obstacle est supérieure à 30 cm
** Point **: article de référence sur les seuils Quel est le seuil
Point : distance_centimeters Variable qui stocke la valeur du capteur à ultrasons
ultrasonicsensor01.py
#Importez uniquement ce dont vous avez besoin à partir du module
#!/usr/bin/env python3
from ev3dev2.display import Display
ev3dev2.sensor.lego import UltrasonicSensor
from time import sleep
#Génération d'instance
dsp = Display()
us = UltrasonicSensor()
#boucle infinie
while True:
dsp.update()
#round()Arrondissez avec
distance = round(us.distance_centimeters)
dsp.text_pixels(str(distance) + 'cm',True,0,52,font = 'helvB' + '24')
sleep(0.1)
** Point **: Un programme qui continue d'afficher la valeur du capteur à ultrasons
ultrasonicsensor02.py
#!/usr/bin/env python3
#Importez uniquement ce dont vous avez besoin à partir du module
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
#Génération d'instance
tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
us = UltrasonicSensor(INPUT_3)
ts_1 = TouchSensor(INPUT_1)
ts_2 = TouchSensor(INPUT_2)
#boucle infinie
while True:
#Boucle à exécuter lorsque la valeur du capteur à ultrasons est supérieure à 20
while us.distance_centimeters > 20:
#ts_1 a été pressé
if ts_1.is_pressed:
#ts_1 a été pressé et ts_2 a été pressé
if ts_2.is_pressed:
tank_drive.on(100,100)
#ts_1 a été pressé et ts_2 n'est pas enfoncé
else:
tank_drive.on(40,100)
#ts_1 n'est pas enfoncé
else:
#ts_1 n'est pas enfoncé et ts_2 a été pressé
if ts_2.is_pressed:
tank_drive.on(100,40)
#ts_1 n'est pas enfoncé et ts_2 n'est pas enfoncé
else:
tank_drive.stop()
#Boucle à exécuter lorsque la valeur du capteur à ultrasons est supérieure à 20
while us.distance_centimeters < 30:
tank_drive.on(-80,-80)
Point : Lorsqu'il n'y a pas d'obstacles à moins de 20 cm, vous pouvez utiliser manuellement le contrôleur radio. Cependant, si l'obstacle est à moins de 20 cm, le programme s'échappera automatiquement vers l'arrière jusqu'à ce que la distance à l'obstacle soit supérieure à 30 cm pour éviter une urgence.
** Point **: Ce mécanisme (même contenu) par rapport à scratch ↓
** Point **: ** Répéter jusqu'à ** et ** Répéter entre **
** Répéter jusqu'à **: Répéter jusqu'à ce que la condition ne soit plus vraie ** Répéter pendant ~ **: Répéter tant que la condition est vraie
ultrasonicsensor03.py
#!/usr/bin/env python3
#Importez uniquement ce dont vous avez besoin à partir du module
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
#Génération d'instance
tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
dsp = Display()
us = UltrasonicSensor()
#distance_display()Définition de la fonction
def distance_display():
#loop =Répéter tant que vrai
while loop:
dsp.update()
distance = us.distance_centimeters
dsp.text_pixels(str(distance) + 'cm',True,0,52,font = 'helvB' + '24')
sleep(0.1)
#Assignez True à la boucle pour la rendre bouclable
loop = True
#Créer une instance t de la classe Thread
t = Thread(target = distance_display)
#Démarrer un fil
t.start()
#Répéter 10 fois
for i in range(10):
#Répétez tant que la valeur du capteur à ultrasons est supérieure à 30
while us.distance_centimeters > 30:
tank_drive.on(10,10)
tank_drive.stop()
#Répétez tant que la valeur du capteur à ultrasons est inférieure à 50
while us.distance_centimeters < 50:
tank_drive.on(5,-5)
tank_drive.stop()
#Assignez False à la boucle pour arrêter le thread
loop = False
Point : S'il n'y a pas d'obstacles à moins de 30 cm, allez tout droit. Cependant, si l'obstacle est à moins de 30 cm, un programme comme Rumba tourne jusqu'à ce que la distance à l'obstacle soit supérieure à 50 cm. Ensuite, la distance à l'obstacle est affichée en même temps que la course.
** Point **: article de référence sur le traitement parallèle Multithreading
main.py
#!/usr/bin/env python3
#Importez uniquement ce dont vous avez besoin à partir du module
from ev3dev2.motor import OUTPUT_A,OUTPUT_B,MoveTank
from ev3dev2.sensor.lego import UltrasonicSensor
import subprocess
#Génération d'instance
tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
us = UltrasonicSensor()
#Démarrer un programme enfant dans un nouveau processus
subprocess.Popen(['python3','sub.py'])
#Répéter 10 fois
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()
#Créer une instance de la classe Popen
proc = subprocess.Popen(['python3','sub.py'])
#Terminer le programme enfant
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()
** Point **: Comment appeler sub.py depuis main.py pour un traitement parallèle. (Le traitement est lourd)
** Point **: article de référence sur le traitement parallèle Introduction à la programmation de traitement parallèle en Python
Merci pour la lecture! !! La prochaine fois, j'aimerais écrire sur le capteur gyroscopique!
Je veux faire un meilleur article ◯ C'est plus facile à comprendre ◯ C'est difficile à comprendre ◯ C'est faux ◯ Je veux que vous expliquiez plus ici Nous apprécions vos opinions et suggestions.
Recommended Posts