Domotique et électronique : 2 LEDs et 2 servomoteurs
4 participants
Auteur
Message
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Domotique et électronique : 2 LEDs et 2 servomoteurs Mer 9 Fév 2022 - 14:52
Bonjour à tous !
Je vous propose une démonstration, agrémentée d’un petit clip vidéo, qui mettra en scène un programme écrit en Panoramic pilotant 2 LEDs et 2 servomoteurs reliés sur une carte Arduino UNO.
Le matériel utilisé :
- Une carte Arduino UNO ; - 2 petits servomoteurs SG90 ; - 2 LEDs ; - 2 résistances 330 ohms ; - 1 câble USB (liaison ordinateur / Arduino) ; - 1 platine de prototypage (breadboard) ; - Fils de câblage.
Câblage à effectuer :
- LED n° 1 reliée via une résistance de 330 ohms en série, à la pin 8 de l’Arduino ; - LED n° 2 reliée via une résistance de 330 ohms en série, à la pin 9 de l’Arduino ; - Servomoteur n° 1 relié à la pin 10 de l’Arduino ; - Servomoteur n° 2 relié à la pin 11 de l’Arduino ; - Câblez l’alimentation des servomoteurs à partir du 5 volts issu de l’Arduino (5v + GND).
Spoiler:
N’hésitez pas à demander tout renseignement en cas de doute sur les connexions à effectuer.
Logiciel pour l’Arduino UNO :
Téléversez le code-source ci-dessous dans l’Arduino UNO.
/* Déclaration des variables */ const int pin_led1 = 8; // création d'une constante LED1 (connectée à la broche const int pin_led2 = 9; // création d'une constante LED1 (connectée à la broche 9) Servo servo1; // création d'un objet servo1 Servo servo2; // création d'un objet servo2 int etat_servo1 {90}; // création d'une variable pour l'angle du servo-moteur 1 ( valeur entre 0 et 180 degrés) int etat_servo2 {90}; // création d'une variable pour l'angle du servo-moteur 2 ( valeur entre 0 et 180 degrés) int etat_led1 {0}; // création d'une variable pour l'état de la led 1 (0 pour éteinte, 1 pour allumée) int etat_led2 {0}; // création d'une variable pour l'état de la led 2 (0 pour éteinte, 1 pour allumée)
/* Fonction d'initialisation de la carte arduino */ void setup() { pinMode(pin_led1, OUTPUT); // La broche 8, qui est reliée à la LED1, est configurée en "sortie" pinMode(pin_led2, OUTPUT); // La broche 9, qui est reliée à la LED2, est configurée en "sortie" servo1.attach(10,500,2500); // configuration du servo-moteur 1 servo2.attach(11,500,2500); // configuration du servo-moteur 1 servo1.write(etat_servo1); // initialisation du servo-moteur 1 servo2.write(etat_servo2); // initialisation du servo-moteur 2 digitalWrite(pin_led1,etat_led1); // initialisation de la led 1 digitalWrite(pin_led2,etat_led2); // initialisation de la led 2 Serial.begin(115200); // Initialisation du port série avec sa vitesse en bauds Serial.setTimeout(2); // Initialisation de la vitesse de rafraichissement du port série, en millisecondes } /* fonction exécutée en boucle par la carte arduino */ void loop() { if (Serial.available()>0) // si quelque chose arrive sur le port série { String trameRecue = Serial.readStringUntil('\n'); // on récupère la trame dans une string int i=0; if(recuperer_data(trameRecue, "<", ">", i)); //si la trame contient "<" et ">", on stocke le chiffre situé entre '<' et '>' dans i { /* Selon la valeur de i, * on récupère la valeur située entre '>' et 'f' dans la bonne variable * et on met à jour le périphérique correspondant. */ switch(i) { case 1: recuperer_data(trameRecue, ">", "f", etat_led1); digitalWrite(pin_led1,etat_led1); break; case 2: recuperer_data(trameRecue, ">", "f", etat_led2); digitalWrite(pin_led2,etat_led2); break; case 3: recuperer_data(trameRecue, ">", "f", etat_servo1); servo1.write(etat_servo1); break; case 4: recuperer_data(trameRecue, ">", "f", etat_servo2); servo2.write(etat_servo2); break; } } } }
Logiciel de démonstration Panoramic :
Code:
' Panoramic => Arduino UNO ' Logiciel de démonstration ' Commande de 2 LEDs et 2 servomoteurs ' Marc - Février 2022
' Cablage : ' une LED connectée sur la pin 8 de l'Arduino ' une LED connectée sur la pin 9 de l'Arduino ' un servomoteur connecté sur la pin 10 de l'Arduino ' un servomoteur connecté sur la pin 11 de l'Arduino
sub dessinerInterfaceUtilisateur() width 0,width(0) - width_client(0) + 745 height 0,height(0) - height_client(0) + 180 left 0,(screen_x - width(0)) / 2 top 0,(screen_y - height(0)) / 2 on_resize 0,redim0 on_close 0,quitter caption 0,"PANORAMIC --> Arduino UNO Démonstration : Commande de 2 LEDs et de 2 servomoteurs" creerModuleSerial() creerModuleInterfaceGpio() end_sub
sub creerModuleSerial() dim_local n%
command_target_is 0
container 1 width 1,100 height 1,150 left 1,15 top 1,15 caption 1,"Serial"
command_target_is 1
combo 2 parent 2,1 width 2,70 top 2,30 left 2,15 for n% = 1 to 255 item_add 2,"COM" + str$(n%) next n% on_change 2,choixPortCom
switch1 3 parent 3,1 width 3,50 top 3,70 left 3,25 caption 3,"Off|On" on_click 3,onOffSerial inactive 3 end_sub
sub creerModuleInterfaceGpio() dim_local n%,e%,numeroGpio% command_target_is 0
container 10 width 10,600 height 10,150 top 10,15 left 10,130 caption 10,"GPIO"
' dessiner les interrupteurs de commande des GPIO numeroGpio% = 8 e% = 23
for n% = 12 to 13 switch1 n% parent n%,10 width n%,50 top n%,70 left n%,e% caption n%,str$(numeroGpio%)+": Off|"+str$(numeroGpio%)+": On" on_click n%, actionLed inactive n% e% = e% + 70 numeroGpio% = numeroGpio% + 1 next n%
' dessiner LEDs au dessus des interrupteurs de commande GPIO e% = 36 for n% = 42 to 43 led1 n% parent n%,10 top n%,28 left n%,e% color n%,127,127,127 e% = e% + 70 next n%
' dessiner track_bar des servomoteurs et légendes track_bar 14 parent 14,10 left 14,200 top 14,70 min 14,0 max 14,18 position 14,9 on_change 14,actionServo inactive 14
track_bar 15 parent 15,10 left 15,400 top 15,70 min 15,0 max 15,18 position 15,9 on_change 15,actionServo inactive 15
alpha 16 parent 16,10 top 16,30 left 16,208 font_size 16,11 caption 16,"Servomoteur PIN 10"
alpha 17 parent 17,10 top 17,30 left 17,408 font_size 17,11 caption 17,"Servomoteur PIN 11" end_sub
choixPortCom: portCom% = item_index(2) if serial_port_exists(portCom%) = 0 if message_warning_ok("COM"+str$(portCom%) + " : Liaison série inexistante !") < 2 inactive 3 :' interrupteur on/off Serial return end_if end_if active 3 :' interrupteur on/off Serial return
onOffSerial: if checked(3) = 0 inactive 2 initialisationLiaisonSerie() serial_open 60 for i% = 12 to 15 active i% next i% else if object_exists(60) = 1 serial_close 60 active 2 for i% = 12 to 15 inactive i% next i% end_if end_if return
sub initialisationLiaisonSerie() if object_exists(60) = 0 serial 60 end_if serial_port 60,portCom% serial_baudrate 60,115200 serial_databits 60,8 serial_parity 60,0 serial_stopbits 60,1 end_sub
actionLed: select number_click case 12 if checked(12) = 0 serial_write 60,"<1>1f" color 42,0,255,0 else serial_write 60,"<1>0f" color 42,127,127,127 end_if
case 13 if checked(13) = 0 serial_write 60,"<2>1f" color 43,0,255,0 else serial_write 60,"<2>0f" color 43,127,127,127 end_if end_select return
actionServo: select number_change case 14 serial_write 60,"<3>"+ str$(position(14)*10) + "f"
case 15 serial_write 60,"<4>"+ str$(position(15)*10) + "f" end_select return
quitter: if object_exists(60) = 1 serial_close 60 end_if return
Utilisation :
Dans la zone Serial, à l’aide du combo, sélectionnez le numéro de port COM relié à l’Arduino. Cliquez sur l’interrupteur pour ouvrir la communication série.
Dans la zone GPIO : Les deux interrupteurs permettent d’allumer ou d’éteindre les LEDs reliées aux pins 8 et 9 de l’Arduino. Les deux track_bars permettent de positionner les servomoteurs reliés aux pins 10 et 11 de l’Arduino. Pour cette démonstration, l’amplitude de rotation de chaque servomoteur est programmée à 180° au pas de 10°.
Pour conclure cet article, voici un petit clip vidéo de démonstration :
N’hésitez pas à me poser toute question !
A bientôt !
Yannick, maelilou et Ouf_ca_passe aiment ce message
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs Mer 9 Fév 2022 - 15:32
Bravo ! Marc ça donne envie ! +
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
Sujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs Ven 11 Fév 2022 - 16:36
Alors, ça, c'est du pointu ! Oui, bravo !
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs Ven 11 Fév 2022 - 17:22
Et maintenant on a même la vidéo !
Super Marc ! Merci pour ces explications très claires comme d'habitude !!!
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs Ven 11 Fév 2022 - 17:48
Merci à tous de vos commentaires.
Désolé pour la vidéo qui n’est pas top. C’est flou et il n’est pas facile d’observer simultanément les actions faites sur le logiciel en arrière-plan et le résultat sur la partie électronique (LEDs et servomoteurs).
Contenu sponsorisé
Sujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs
Domotique et électronique : 2 LEDs et 2 servomoteurs