dimanche 19 octobre 2014

Un blog qu'il faut absolument découvrir

 un tutoriel sur Arduino.

 C'est "le BLOG D'ESKIMON".

http://eskimon.fr/196-arduino-bienvenue-sur-le-tuto


Avec un Ebook Arduino à télécharger 










lundi 22 septembre 2014

Panoramic et le Grafcet
Le grafcet et une représentation graphique utilisée pour créer
des automatismes comme l’organigramme et a l'informatique
il se compose d’étapes de transitions et de liaisons orientées
les étapes et leur actions associées
les transitions entre les étapes et leur réceptivité associées
les liaisons entre étapes transitions et étapes
et les liaisons-orientées
il existe deux formes de grafcet :
Niveau 1: Spécifications fonctionnelles–Utilisation du langage courant
Niveau 2: Spécifications technologiques –Utilisation de symboles voici un site web parmi tant d'autre qui vous expliquera
en détail le grafcet
===================================================
http://philippe.berger2.free.fr/automatique/cours/G7/le_grafcet.htm
===================================================
Avec Maître Google les articles sur le grafcet sont légions

Dans les automates les instructions du grafcet font parties du programme
les instructions du grafcet ne faisant pas partie de Panoramic il suffit de créer un grafcet dit ''sur mot'' on incrémente une variable en respectant les règles du grafcet
(une variable différente par branche, )

Règles d'évolution

  1. L'initialisation : une situation initiale est caractérisée par le fait qu'un certain nombre d'étapes sont actives au début du fonctionnement. Ces étapes sont repérées sur le grafcet par un double carré.
  2. Le franchissement d'une transition : une transition est soit validée soit non validée. Elle est validée lorsque toutes les étapes immédiatement précédentes sont actives (voir le tableau suivant). Elle ne peut être franchie :
    1. que lorsqu'elle est validée
    2. et que la réceptivité associée est vraie.
  3. L'évolution des étapes actives : le franchissement d'une transition entraîne l'activation de toutes les étapes immédiatement suivantes et la désactivation de toutes les étapes immédiatement précédentes.
  4. Évolution simultanée : plusieurs transitions simultanément franchissables sont simultanément franchies. Par exemple, sur la figure ci-contre, si la variable c est vraie, le grafcet va évoluer vers la désactivation simultanée des étapes 5 et 10 et l'activation simultanée des étapes 6 et 11.
  5. Activation et désactivation simultanées : si au cours du fonctionnement, une même étape doit être simultanément désactivée et activée, elle reste ACTIVE
Wikipédia l’encyclopédie libre Grafcet

pour la démo en Pamoramic j'utilise la progression binaire de 0 à 15 sur 4 bits
comme il faut appuyer sur plusieurs touches en même temps
les touches F1 F2 F3 F4 sont du style bistable par programme
un appui =1 un deuxième appui =0 pour la variable associée
__ __
F1 =1 F1=0 => Rappel F1=(F1 barre) ou (!F1=0) ou (/F1=0)

Code Binaire pur de 0 a 15


          D C B A                    D C B A
    0    0  0  0  0               8    1  0 0  0
    1    0  0  0  1               9    1  0 0  1
    2    0  0  1  0             10    1  0 1  0
    3    0  0  1  1             11    1  0 1  1
    4    0  1  0  0             12    1  1 0  0
    5    0  1  0  1             13    1   1 0 1
    6    0  1  1  0             14    1   1 1 0
    7    0  1  1  1             15    1   1 1 1
                                   (16)   0  0  0 0


Le grafcet











Code Panoramic



error_french
dim nobj,nob,hb
width 0,730:height 0,300: color 0,160,160,200: border_hide 0
  top 0,(screen_y-height(0))/2 :left 0,(screen_x-width(0))/2
label  sp_1,sp_fin,sp_72,sp_73,sp_form_help
label sp_fin_help,sp_help,sp_terminal,sp_0
label sp_b10,sp_b20,sp_b30,sp_b40,sp_grafcet,sp_raz_gracet,sp_efface_sortie,sp_var_sortie,sp_sortie,sp_key
dim  b0,b1,b2,b3,O0,O1,O2,O3,etp,metp
b0=0:b1=0:b2=0:b3=0:etp=0:metp=0:O0=0:O1=0:O2=0:O3=0
gosub sp_terminal
gosub sp_form_help
set_focus 0
on_click 101,sp_fin :on_close 0,sp_fin
on_click 111,sp_help :on_click 68,sp_1
on_click 72,sp_72:on_click 73,sp_73
on_double_click 200,sp_fin_help:on_close 200,sp_fin_help
on_click 0,sp_0:on_key_down 0,sp_key

' ========
   end
' ========
sp_0:
set_focus 0:return
' ========
sp_key:
 if key_down_code=115 then gosub sp_b10
 if key_down_code=114 then gosub sp_b20
 if key_down_code=113 then gosub sp_b30
 if key_down_code=112 then gosub sp_b40
return
'  =========================
sp_b10:
  b0=1-b0
  if b0=1
     color 57,0,250,0
  else
     color 57,200,180,180
  end_if
  gosub sp_grafcet
return
'  =========================
sp_b20:
  b1=1-b1
  if b1=1
     color 52,0,250,0
  else
     color 52,200,180,180
  end_if
  gosub sp_grafcet
return
' ===================
sp_b30:
  b2=1-b2
  if b2=1
     color 47,0,250,0
  else
     color 47,200,180,180
  end_if
  gosub sp_grafcet
return
' ========================
sp_b40:
  b3=1-b3
  if b3=1
     color 42,0,250,0
  else
     color 42,200,180,180
  end_if
  gosub sp_grafcet
return
' ==================
sp_grafcet:
  if etp=0 and b3=0 and b2=0 and b1=0 and b0=1 then etp=1
  if etp=1 and b3=0 and b2=0 and b1=1 and b0=0 then etp=2
  if etp=2 and b3=0 and b2=0 and b1=1 and b0=1 then etp=3
  if etp=3 and b3=0 and b2=1 and b1=0 and b0=0 then etp=4
  if etp=4 and b3=0 and b2=1 and b1=0 and b0=1 then etp=5
  if etp=5 and b3=0 and b2=1 and b1=1 and b0=0 then etp=6
  if etp=6 and b3=0 and b2=1 and b1=1 and b0=1 then etp=7
  if etp=7 and b3=1 and b2=0 and b1=0 and b0=0 then etp=8
  if etp=8 and b3=1 and b2=0 and b1=0 and b0=1 then etp=9
  if etp=9 and b3=1 and b2=0 and b1=1 and b0=0 then etp=10
  if etp=10 and b3=1 and b2=0 and b1=1 and b0=1 then etp=11
  if etp=11 and b3=1 and b2=1 and b1=0 and b0=0 then etp=12
  if etp=12 and b3=1 and b2=1 and b1=0 and b0=1 then etp=13
  if etp=13 and b3=1 and b2=1 and b1=1 and b0=0 then etp=14
  if etp=14 and b3=1 and b2=1 and b1=1 and b0=1 then etp=15
  if etp=15 and b3=0 and b2=1 and b1=1 and b0=0 then etp=0
  if metp <> etp
     metp=etp
     caption 67,"_"+right$(str$(1000+etp),2)+"_"
     gosub sp_efface_sortie
     gosub sp_var_sortie
     gosub sp_sortie
  end_if
return
' ========
sp_raz_gracet:
  etp=0:metp=0:caption 90,"Etape  "+str$(etp)
  gosub sp_efface_sortie
return
' ========
sp_efface_sortie:
  color 37,200,180,180:O0=0:color 32,200,180,180:O1=0
  color 27,200,180,180:O2=0:color 22,200,180,180:O3=0
return
' ========
sp_var_sortie:
  if etp=1 or etp=3 or etp=5 or etp=7  or etp=9 or etp=11 or etp=13 or etp=15  then O0=1
  if etp=2 or etp=3 or etp=6 or etp=7 or etp=10 or etp=11 or etp=14 or etp=15 then O1=1
  if etp=4 or etp=5 or etp=6 or etp=7 or etp=12 or etp=13 or etp=14 or etp=15 then O2=1
  if etp=8 or etp=9 or etp=10 or etp=11 or etp=12 or etp=13 or etp=14 or etp=15 then O3=1
return
' ========
sp_sortie:
  if O0=1 then color 37,0,250,0
  if O1=1 then color 32,0,250,0
  if O2=1 then color 27,0,250,0
  if O3=1 then color 22,0,250,0
return
' ====raz grafcet====
sp_1:
  show 70:return
' ====FIN=======
sp_fin:
  terminate:return

 ' ==============
sp_72:
  etp=0:metp=0:caption 67,"_00_"
  gosub sp_efface_sortie
  hide 70:return
' ==============
sp_73:
  hide 70:return
' =============
sp_help:
  show 200:return
' =============
sp_fin_help:
  hide 200:set_focus 0:return
' =============

REM ======SUB=============================================================

sub affichtxt(nxt,par,tpt,ltt,fsize,txt$)
  container nxt:parent nxt,par:top nxt,tpt:left nxt,ltt
  Alpha nxt+1:parent nxt+1,nxt:top nxt+1,10:left nxt+1,10
  font_bold nxt+1:font_size nxt+1,fsize:caption nxt+1,txt$
  width nxt,width(nxt+1)+20
  height nxt,height(nxt+1)+20
end_sub
' ============
sub button_container(nbc,par,tpc,ltc,txt$)
  container nbc:parent nbc,par:top nbc,tpc:left nbc, ltc
  caption nbc ,txt$
  button nbc+1:parent nbc+1,nbc:top nbc+1,30:left nbc+1,10
  width nbc+1,30:hint nbc+1,nbc+1
  width nbc,width(nbc+1)+20
  height nbc,height(nbc+1)+40
end_sub
' ======================
sub voyant_automate(ntp,par,ttp,ltp,txt$,etat)
  container ntp:parent ntp,par:top ntp,ttp:left ntp,ltp
  width ntp,80-20: height ntp,133-50
  font_size ntp,14:caption ntp,txt$
  alpha ntp+1:parent ntp+1,ntp:top ntp+1,48-20:left ntp+1,7
  width ntp+1,64-20: height ntp+1,44:color ntp+1,0,0,0
  alpha ntp+2:parent ntp+2,ntp:top ntp+2,52-20:left ntp+2,11
  width ntp+2,56-20: height ntp+2,36:'  min ntp+2,0:max ntp+2,1
  hint ntp+2,ntp+2
  if etat=0
     color ntp+2,200,180,180
  else
     color ntp+2,255,0,0
  end_if
end_sub
'================
sub compteur(nc,par,tpc,ltc,txt$)
  container nc:parent nc,par:top nc,tpc:left nc,ltc
  caption nc,txt$
  alpha nc+1:parent nc+1,nc:top nc+1,40:left nc+1,10
  color nc+1,0,0,0
  alpha nc+2:parent nc+2,nc:top nc+2,45:left nc+2,15
  color nc+2,0,250,0:font_size nc+2,20:caption nc+2,"_00_"
  height nc+1,height(nc+2)+10
  button nc+3 :parent nc+3,nc:top nc+3,45:left nc+3,width(nc+1)+20
  width nc+3 ,30:caption nc+3,"RAZ"
  width nc,width(nc+1)+width(nc+3)+30
  hint nc+3,nc+3: hint nc+2,nc+2
end_sub
' ==============fin==sub==============
sp_form_help:
  form 200:caption 200,"AIDE   Double click pour Quitter": hide 200
  width 200,416:height 200,312
  top 200,200 :left 200,(screen_x-width(200))/2
  memo 210:parent 210,200
  full_space 210
  item_add 210,""
  item_add 210,"          Le GRAFCET   "
  item_add 210,"   GRAphe Fonctionnel de Commande Etapes-Transitions "
  item_add 210,"   les graphismes permettant la représentation d'un systéme automatisé"
  item_add 210,"   étapes, liaisons, transitions"
  item_add 210,"   voici un exemple avec simulation  de l’état des entrées et sorties "
  item_add 210,"   tous ou rien (tor) "
  item_add 210,"   visualise le N°de l'étapes du grafcet et peu le reseter (RAZ grafcet)"
  item_add 210,"   le programme et construis avec un grafcet sur mots"
  item_add 210,"   en respectant les regles du grafcet "
  item_add 210,"   exemple et la progression binaire de 0 a 15."
  item_add 210,"   le terminal et écrit en Panoramic"
  item_add 210,"   les touches F1 F2 F3 F4 sont du style flipflop "
  item_add 210,"   un appui =1 un deuxieme appui =0 "
  item_add 210,"   "
  item_add 210,"   "
  item_add 210,"   avec Maître Google les articles sur "
  item_add 210,"   le grafcet  sont légions"
  inactive 210
return
' =========================
sp_terminal:
  nobj=10 :affichtxt(nobj,0,20,150,16,"  DEMO Terminal GRAFCET PANORAMIC  ")
  nobj=13 :affichtxt(nobj,0,210,510,12,"Entrées")
  nobj=16 :affichtxt(nobj,0,210,130,12,"Sorties")
' voyant entrees
  nobj=20: voyant_automate(nobj,0,120,50,"O.3",0)
  nobj=25:voyant_automate(nobj,0,120,110,"O.2",0)
  nobj=30:voyant_automate(nobj,0,120,170,"O.1",0)
  nobj=35:voyant_automate(nobj,0,120,230,"O.0",0)
' voyant sorties
  nobj=40: voyant_automate(nobj,0,120,50+383,"I.3-F1",0)
  nobj=45:voyant_automate(nobj,0,120,110+383,"I.2-F2",0)
  nobj=50:voyant_automate(nobj,0,120,170+383,"I.1-F3",0)
  nobj=55:voyant_automate(nobj,0,120,230+383,"I.0-F4",0)
  nobj=65:compteur(nobj,0,110,300,"Etape Grafcet")
  nobj=100: button_container(nobj,0,20,620,"F I N")
  nobj=110: button_container(nobj,0,10,50,"Aide")
  container 70:top 70,110:left 70,270:hide 70:caption 70,"Confirmation"
  alpha 71:top 71, 30:left 71,40:parent 71,70:caption 71,"INIT GRAFCET"
  button 72:top 72, 60:left 72,10:parent 72,70:caption 72,"OUI"
  button 73:top 73, 60:left 73,90:parent 73,70:caption 73,"NON"
return

' ==============================

        



jeudi 18 septembre 2014



un programme avec Domoticom
en émission et réception
appui sur le bouton Arduino envoi une requête
qui retourne le nombre de millisecondes du temps écoulé de la carte depuis le début de
l'exécution du programme

code Domoticom


error_french
top 0,100:left 0,900:width 0,270:height 0,200
dim car$,lcar
label reception,fin,sp_com_1
if SERIAL_PORT_EXISTS(8)=1
   serial 2: serial_port 2,8
   serial_baudrate 2,115200: serial_databits 2,8
   serial_stopbits 2,1: serial_parity 2,0
else
   message "pas de port com "
   terminate
end_if
alpha 1:top 1,30:left 1,100
alpha 4:top 4,30:left 4,50:caption 4,"millis()"
button 9:top 9,60:left 9,150:caption 9,"fin"
button 10:top 10,60:left 10,30:caption 10,"Arduino"
timer 3:timer_off 3:timer_interval 3,200
on_click 9, fin:on_click 10, sp_com_1
on_close 0,fin:on_timer 3,reception
' ============
end
' ============
sp_com_1:
  serial_open 2:serial_write 2,"?"
  timer_on 3
return
' ============
fin:
   timer_off_all:SERIAL_CLOSE 2
   pause 20:terminate
return
' ============
reception:
   timer_off 3
   car$="":car$=serial_read$(2)
   car$=trim$(car$):lcar=len(car$)
   if lcar >0
      caption 1,car$
   end_if
   SERIAL_CLOSE 2
return



code Arduino





 //============================
'  void setup() {
      Serial.begin(115200);
  }
  //============================
 void loop(){
     if (Serial.available()!=0){
        module_reception();}
  }
 //============================
  void module_reception(){
       while (Serial.available()) {
            char readChar = (char)Serial.read();
           if (readChar == '?'){emission();}
      }
  }
  //============================
 void emission(){
    Serial.println(millis(),DEC);
    delay(10);
}
 //============================




Tous les sujets sur ce blog sont à dispositions Tel Quel sans garantie.
les programmes fonctionnes sous W7 pros et l' on peut les copier les modifier




 

 


 

samedi 6 septembre 2014

Oscilloscope basique



Sur le site www,mon-club-elec,fr X. HINAUL a crée un programme

Affichage d'une mesure analogique continue sous forme de courbe sur un afficheur LCD graphique

Dans sont application je le cite
Ce programme affiche le résultat d'une conversion analogique numérique sous forme graphique sur un afficheur LCD graphique 128x64, réalisant un oscilloscope basique. On remarquera une fois de plus que le langage Arduino permet un tel résultat en quelques lignes de programme seulement.

J'ai donc adapté son programme pour un écran SainSmart 1.8 ST7735 TFT LCD 
 




le câblage de l’écran et le suivant

ST7735   UNO
VCC      => +5V
GND      => GND
SCL       =>   13
SDA      =>   11
RS/DC   =>   9
RES       =>    8
CS         =>   10


Un multivibrateur et branché sur l'entrée analogique A0

schémas avec  Fritzing 
 

Pour le programme Arduino

Il faut télécharger les deux librairies suivantes <ST7735.h> <SPI.h>

https://bitbucket.org/johnmccombs/arduino-libraries/src/64e60d1637398bb8a3c6cb9adb4c7e1fcc07a4bc/ST7735/?at=default



code Arduino

#define cs 10
#define dc 9
#define rst 8 // you can also connect this to the Arduino reset

//===Color définitions========
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
//============================
#include <ST7735.h>
#include <SPI.h>
ST7735 tft = ST7735(cs, dc, rst);
//........................
const int Voie_0=0; //déclaration constante de broche analogique
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique

int x=0, y=0; // variable coordonnée point affiché sur LCD
int x0=0,y0=0; // variable coordonnée dernier point affiché sur LCD
//.............................
void setup() {
tft.initR(); // initialise a ST7735R chip
tft.fillScreen(BLACK);
}
//.............................

void loop() {
// lit la tension sur la broche et met le résultat brut (0-1023) dans la variable
mesure_brute=analogRead(Voie_0);

// adapte échelle mesure 0-1023 à hauteur écran 0-159
y=map(mesure_brute,0,1023,0,159);

// efface mesure affichage précédent
tft.drawLine(x,0,x,158,WHITE); // dessine ligne de x1,y1 à x2,y2

// affichage de la mesure
tft.drawLine(x0,y0,x,y,BLACK); // dessine ligne de x1,y1 à x2,y2

x0=x; y0=y; // mémorise point actuel
x=x++; // incrémente x à chaque passage
if (x>127) {
x=0; // RAZ x de 127=>0
x0=0; //réinitialise aussi x0 pour retour propre
}

delay (1); // entre 2 mesures

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin


//============FIN=============