[ev3dev × Python] Capteur de couleur

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 de couleur.

table des matières

  1. Quoi préparer
  2. Programme de capteur de couleur

0. Quoi préparer

◯ ev3 (réservoir), capteur de couleur, capteur tactile ◯ PC (code VS) ◯ bluetooth ◯ microSD ◯ Material (Il est recommandé de continuer en regardant ceci.)

1. Programme du capteur de couleur (Document p.33)

1-0. Programme à faire lorsque le capteur de couleur détecte une couleur

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')

** Point **: Un programme qui dit "Le rouge a été détecté" lorsque le capteur de couleur répond au rouge.

** Point **: Les couleurs sont définies à l'avance en fonction des nombres, et les couleurs sont traitées comme des nombres dans le programme.

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. Programme de trace de ligne ①

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)

** Point **: programme qui s'exécute le long de la ligne, en fonction de la réflectance lumineuse détectée par le capteur de couleur.

** Point **: trace de ligne La réflexion de la lumière est différente entre le noir et le blanc. Le blanc réfléchit bien la lumière et le noir reflète moins la lumière. C'est une trace de ligne courante à exécuter tout en détectant une ligne noire sur un champ blanc en tirant parti de la réflectance différente.

1-2. Programme de trace de ligne ②

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)

** Point **: programme de trace de ligne utilisant deux capteurs de couleur

** Point **: image du programme

cs_1 détecte le blanc et cs_2 détecte le blanc: allez tout droit cs_1 détecte le blanc et cs_2 détecte le noir: aller à droite cs_1 détecte le noir et cs_2 détecte le blanc: allez à gauche cs_1 détecte le noir et cs_2 détecte le noir: rotation à la volée (recherche de lignes)

1-3. Programme de trace de ligne ③

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

** Point **: programme de traçage de ligne utilisant le contrôle PID

** Point **: contrôle PID Le contrôle PID est un type de contrôle de rétroaction qui contrôle la valeur d'entrée de sorte que la valeur de sortie s'approche de la valeur cible.

Valeur de sortie: réflexion de la lumière Valeur cible: réflexion de la lumière près de la ligne Valeur d'entrée: vitesse de rotation du moteur (Lors du traçage de ligne avec un capteur de couleur)

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.

** Point **: article de référence sur le contrôle PID

Contrôle PID de la voiture de trace de ligne

** Point **: article de référence sur la gestion des exceptions python

Gestion des exceptions Python (essayez, sauf, sinon, enfin)

1-4. Un programme qui associe les couleurs aux listes

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') 

** Point **: maintenez le capteur tactile enfoncé et maintenez la couleur. Si la couleur que vous tenez à ce moment-là est une couleur qui existe dans color_list

Point :

python


 Traitement `` ''


 ** Si l'élément a est inclus dans b (listez cette fois), exécutez le traitement **

 Article de référence
 [Jugez si une liste etc. contient un élément spécifique avec l'opérateur Python in]
(https://note.nkmk.me/python-in-basic/)








### 1-5. Un programme qui enregistre les couleurs dans une liste

#### **`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)

** Point **: Ajoutez la couleur qui était suspendue lorsque le capteur tactile a été pressé à la color_list vide. Lorsque l'ajout est terminé, le traitement associé à la couleur est exécuté dans l'ordre à partir du haut de la liste.

Point : append() Vous pouvez ajouter des éléments à la fin de la liste

Article de référence Ajouter, étendre, insérer pour ajouter un élément à une liste (tableau) en Python

finalement

Merci pour la lecture! !! La prochaine fois, j'aimerais écrire sur les capteurs à ultrasons!

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

[ev3dev × Python] Capteur de couleur
[ev3dev × Python] Capteur à ultrasons
[ev3dev × Python] Capteur tactile
[ev3dev × Python] Capteur gyroscopique
[ev3dev × Python] Bouton de blocage intelligent
mixeur, python, escalier en colimaçon, couleur
[Python] Ajustement de la barre de couleurs
[ev3dev × Python] Construction de l'environnement de développement ev3dev
Blender 2.9, Python, spécification de couleur hexadécimale
[ev3dev × Python] Commande de moteur unique
[ev3dev × Python] Contrôle de plusieurs moteurs
Python
[python] Horloge qui change de couleur (animation)
[Python] Ajuster la norme de la carte des couleurs
Mémo couleur Python colorama (environnement Cmder)
Formatage des données pour les graphiques Python / couleur
[ev3dev × Python] Affichage, voix, contrôle LED
Blender 2.9, test de couleur de la lumière d'arrière-plan Python
Essayez de reproduire un film couleur avec Python
Récupérer les frappes de / dev / input (python evdev)
Sortir les caractères de couleur en joli avec python
Traitement d'image par Python 100 Knock # 6 Traitement de réduction de couleur
[ev3dev × Python] Contrôle SSH (opération à distance avec clavier)
[Python] Obtenez la couleur principale de la capture d'écran