FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Domotique et électronique : 2 LEDs et 2 servomoteurs Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
Code promo Nike : -25% dès 50€ d’achats sur tout le site Nike
Voir le deal

 

 Domotique et électronique : 2 LEDs et 2 servomoteurs

Aller en bas 
4 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Domotique et électronique : 2 LEDs et 2 servomoteurs Empty
MessageSujet: Domotique et électronique : 2 LEDs et 2 servomoteurs   Domotique et électronique : 2 LEDs et 2 servomoteurs EmptyMer 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.

Domotique et électronique : 2 LEDs et 2 servomoteurs Panose10

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.
Code:
#include <Servo.h>

bool recuperer_data(String const& trame_recue, String const& balise_debut, String const& balise_fin, int& data)
{
  if(!(trame_recue.indexOf(balise_debut) != -1 && trame_recue.indexOf(balise_fin)!= -1))
  {
    return false;
  }
  else
  {
    data = trame_recue.substring(trame_recue.indexOf(balise_debut) + balise_debut.length(),trame_recue.indexOf(balise_fin)).toInt();
    return true;
  }
}


/* 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 :

Domotique et électronique : 2 LEDs et 2 servomoteurs Panose12

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

dim portCom%, i%

label onOffSerial, choixPortCom, actionLed, actionServo, redim0, quitter

dessinerInterfaceUtilisateur()

end


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


redim0:
    width 0,width(0) - width_client(0) + 745
    height 0,height(0) - height_client(0) + 180
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

Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Domotique et électronique : 2 LEDs et 2 servomoteurs Empty
MessageSujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs   Domotique et électronique : 2 LEDs et 2 servomoteurs EmptyMer 9 Fév 2022 - 15:32

Bravo ! Marc
ça donne envie !
+
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2747
Date d'inscription : 13/09/2009

Domotique et électronique : 2 LEDs et 2 servomoteurs Empty
MessageSujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs   Domotique et électronique : 2 LEDs et 2 servomoteurs EmptyVen 11 Fév 2022 - 16:36

Alors, ça, c'est du pointu !
Oui, bravo !
cheers
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Domotique et électronique : 2 LEDs et 2 servomoteurs Empty
MessageSujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs   Domotique et électronique : 2 LEDs et 2 servomoteurs EmptyVen 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 !!! cheers
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Domotique et électronique : 2 LEDs et 2 servomoteurs Empty
MessageSujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs   Domotique et électronique : 2 LEDs et 2 servomoteurs EmptyVen 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).
Revenir en haut Aller en bas
Contenu sponsorisé





Domotique et électronique : 2 LEDs et 2 servomoteurs Empty
MessageSujet: Re: Domotique et électronique : 2 LEDs et 2 servomoteurs   Domotique et électronique : 2 LEDs et 2 servomoteurs Empty

Revenir en haut Aller en bas
 
Domotique et électronique : 2 LEDs et 2 servomoteurs
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Domotique et électronique : Panoramic et l’Arduino DUE.
» Domotique et électronique : deux SUBs pour Arduino MEGA 2560
» Domotique et électronique : Panoramic et la liaison série.
» Domotique et électronique : Régie lumière 8 canaux
» Domotique et électronique : Arduino, action locale/distante

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: