From 97d3cca5cc1a2c607dc004b8a9f927fa0d1b0192 Mon Sep 17 00:00:00 2001 From: ccunatbrule <32840852+DARKNAGAN@users.noreply.github.com> Date: Tue, 3 Sep 2024 18:33:41 +0200 Subject: [PATCH] CARIA.2.2.3 Change the gpio for the servo motor because there is a residual current problem and the method for set_angle --- WebControl/apps/scenario_rfid.py | 19 +++++++++++-------- WebControl/modules/AlphaBot.py | 22 +++++++++++----------- WebControl/tests/rfid_open_door.py | 14 +++++++++----- WebControl/tests/servo_motor.py | 17 +++++++++-------- 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/WebControl/apps/scenario_rfid.py b/WebControl/apps/scenario_rfid.py index 9de1fe4..1da526f 100644 --- a/WebControl/apps/scenario_rfid.py +++ b/WebControl/apps/scenario_rfid.py @@ -10,13 +10,14 @@ Ab = AlphaBot() status = "initialization" try: while True: - time.sleep(3) - # Ab.set_angle(0) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(0)) + time.sleep(1) print("La porte est actuellement fermée.\nVeuillez approcher votre badge RFID du capteur pour accéder au véhicule.") id_rfid, text_rfid = RFID_MODULE.read() rfid_content = RFID_MODULE.read() if text_rfid == "TEST RFID ": - Ab.set_angle(90) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(90)) + time.sleep(1) print(f"Bienvenue, {text_rfid.rstrip()} \nJe suis heureux de pouvoir partager un trajet avec vous !") time.sleep(5) print("Installez-vous confortablement !") @@ -26,12 +27,13 @@ try: subprocess.run(['python3', 'apps/itineraire_create.py'], check=True) try: print("Nous préparons votre trajet en toute sécurité.") - Ab.set_angle(0) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(0)) + time.sleep(1) # Changer si nécessaire 'apps/itineraire_suivre.py' en 'apps/itineraire_suivre_emergency.py' - subprocess.run(['python3', 'apps/itineraire_suivre_emergency.py'], check=True) + subprocess.run(['python3', 'apps/itineraire_suivre.py'], check=True) print("Merci d'avoir utilisé notre service !") + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(90)) time.sleep(2) - Ab.set_angle(90) print("Nous espérons que vous avez apprécié votre trajet.") time.sleep(2) print("À bientôt avec CARIA !") @@ -43,11 +45,12 @@ try: print(f"Erreur lors de l'exécution du script step1_prepare_itineraire: {e}") status = "error" elif text_rfid in ["CHRIS "]: - Ab.set_angle(90) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(90)) + time.sleep(1) print(f"Bienvenue, {text_rfid.rstrip()}.\nLa porte du véhicule est maintenant ouverte!") status = "scenario successful" else: - Ab.set_angle(0) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(0)) print("Bonjour, vous n'êtes pas autorisé à entrer dans le véhicule.\nLa porte reste fermée.") print(rfid_content) time.sleep(2) diff --git a/WebControl/modules/AlphaBot.py b/WebControl/modules/AlphaBot.py index 541352f..48dfc4f 100644 --- a/WebControl/modules/AlphaBot.py +++ b/WebControl/modules/AlphaBot.py @@ -8,7 +8,7 @@ class AlphaBot(object): self.LIDAR_MODULE.write(b'\x42\x57\x02\x00\x00\x00\x01\x06') self.RED_LIGHT = 17 self.OBSTACLE_PIN = 16 - self.SERVO_PIN = 27 + self.SERVO_PIN = 22 self.IN1 = 12 self.IN2 = 13 self.ENA = 6 @@ -37,6 +37,7 @@ class AlphaBot(object): self.PWMA.start(0) # Démarre avec un rapport cyclique de 0 (moteurs arrêtés) self.PWMB.start(0) self.PWMSERVO.start(0) + time.sleep(1) GPIO.output(self.RED_LIGHT, GPIO.HIGH) @@ -50,16 +51,15 @@ class AlphaBot(object): vitesse = max(vitesse_min, min(vitesse, vitesse_max)) return vitesse - def set_angle(self, angle): - if 0 <= angle <= 180: - pulse_width_ms = (angle / 180) * (2 - 1) + 1 - duty_cycle = (pulse_width_ms / 20) * 100 - self.PWMSERVO.ChangeDutyCycle(duty_cycle) - # Calcul du temps nécessaire pour atteindre l'angle donné - movement_time = (angle / 60) * 0.15 # 0.12 sec pour 60 degrés - time.sleep(movement_time) - else: - print("Angle hors de portée. Le rapport cyclique doit être compris entre 2,5 et 12,5.") + #Set function to calculate percent from angle servo mettre time sleep après la déclaration + def set_angle(self, angle) : + if angle > 120 or angle < 0 : + return False + start = 4 + end = 12.5 + ratio = (end - start)/120 #Calcul ratio from angle to percent + angle_as_percent = angle * ratio + return start + angle_as_percent def blink_led(self, blink_duration=0.2): self.blinking = True diff --git a/WebControl/tests/rfid_open_door.py b/WebControl/tests/rfid_open_door.py index 49e53c7..fb770f6 100644 --- a/WebControl/tests/rfid_open_door.py +++ b/WebControl/tests/rfid_open_door.py @@ -12,21 +12,26 @@ fonctionnement_ok = False # Lecture initiale du tag RFID try: + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(0)) + time.sleep(1) print("La porte est actuellement fermée.\nVeuillez approcher votre badge RFID du capteur pour accéder au véhicule.") id_rfid, text_rfid = RFID_MODULE.read() if text_rfid in ["CHRIS "]: - Ab.set_angle(90) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(90)) + time.sleep(1) print(f"Salut {text_rfid.rstrip()}, votre accès est validé avec succès.\nLa porte du véhicule est maintenant ouverte!") status = "Access successful" elif text_rfid == "TEST RFID ": - Ab.set_angle(90) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(90)) + time.sleep(1) print(f"Bienvenue, {text_rfid.rstrip()}.\nLa porte du véhicule est maintenant ouverte!") status = "Access successful" else: print("Bonjour, vous n'êtes pas autorisé à entrer dans le véhicule.\nLa porte reste fermée.") status = "Access denied" + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(0)) + time.sleep(1) print(f"(ID, Text)",id_rfid, text_rfid) - time.sleep(2) except KeyboardInterrupt: print("Interruption par l'utilisateur.") status = "interrupted" @@ -34,8 +39,7 @@ except Exception as e: print(f"Erreur lors de l'exécution: {e}") status = "error" finally: - Ab.PWMSERVO.stop() -time.sleep(2) + Ab.PWMSERVO.stop() # Vérification finale et affichage du statut if status == "Access successful": diff --git a/WebControl/tests/servo_motor.py b/WebControl/tests/servo_motor.py index e97ce8c..98ecf23 100644 --- a/WebControl/tests/servo_motor.py +++ b/WebControl/tests/servo_motor.py @@ -7,17 +7,18 @@ Ab = AlphaBot() status = "initialization" try: - Ab.set_angle(0) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(0)) print("Positionné à 0°") - time.sleep(2) - Ab.set_angle(90) + time.sleep(1) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(90)) print("Positionné à 90°") - time.sleep(2) - Ab.set_angle(180) - print("Positionné à 180°") - time.sleep(2) - Ab.set_angle(0) + time.sleep(1) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(120)) + print("Positionné à 120°") + time.sleep(1) + Ab.PWMSERVO.ChangeDutyCycle(Ab.set_angle(0)) print("Positionné à 0°") + time.sleep(1) status = "movement successful" except KeyboardInterrupt: print("Interruption par l'utilisateur.")