[RESOLU] Projet mini automate de contrôle

Vous venez de déballer votre Raspberry Pi et vous vous posez des questions ? C'est ici que ça se passe !

Modérateur : Francois

Cluclu
Messages : 47
Enregistré le : ven. 3 avr. 2015 23:22

Re: Projet mini automate de contrôle

Message par Cluclu » mar. 12 mai 2015 11:47

Réellement besoin de 2 scripts : j'ai envie de dire non seul le second est nécessaire à l'utilisation du RPi mais je n'ai trouvé que ce moyen pour scruté mon commutateur sans lancer la tache en plein écran.

Si on arrive à tout faire dans un seul ça ne sera que mieux !

Donc tu propose 2 boucle ancré dans le même script ? Une qui scrute le commutateur et une seconde qui fera le taf du script + afficher le terminal ?

Au besoin je peux mettre mon second script au complet que j'ai retouché niveau visuel pour l'utilisateur

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

Re: Projet mini automate de contrôle

Message par dbrion0606 » mar. 12 mai 2015 13:02

Je pense qu'une solution consisterait à
a) lancer LXDE (je crois que 'est fait automatiquement dans ceratines configurations de Rapsbian)

b) lancer un script, attaché à un terminal, qui ne fera rien (sauf peut être afficher un message d'attente) tant que le bouton 7 (désigné ci dessous par START) ne sera pas activé: son occuppation sera de boucler en dormant.

c) Une fois sorti de la boucle, il executera en séquence votre boucle de scrutation qui aurait actuellement la structure suivante:

Code : Tout sélectionner

importation de libraries
fixation de quelques parametres
xxxx
while (1 == 1) :
   scruter

la boucle de démarrage aurait la forme suivante (devrait se mettre en xxxx)

Code : Tout sélectionner

START=7 # changer le nombre si je n'ai pas tiré le bon numéro
# pour rassurer
print (" Appuyez sur bouton pour démarrer") # IIRC, marche en python 2.7 et 3.x avec print parenthésé

while (!pi.digitalread( START ) ) : # boucle tant que le demarreur est inactif
   #  print("attente\n")
    sleep(0.1) # scruter toutes les 1/10 secondes suffit, sauf pour des gahmeurhs de course, dopés à la caféine
N

Avatar du membre
Manfraid
Raspinaute
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Projet mini automate de contrôle

Message par Manfraid » mar. 12 mai 2015 13:12

Salut, essaye de mettre tes programme pour voir exactement ce que tu veux faire, si je peu t'aider je le ferais
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Cluclu
Messages : 47
Enregistré le : ven. 3 avr. 2015 23:22

Re: Projet mini automate de contrôle

Message par Cluclu » mar. 12 mai 2015 13:52

Pour répondre à Manfraid

Voici mon .Desktop

Code : Tout sélectionner

[Desktop Entry]
Encoding=UTF-8
Name=SmartEole
TryExec=lxterminal
Exec=lxterminal --command "/home/pi/smarteole.py"
Icon=/home/pi/USB/images.jpg
Type=Application
Categories=GTK;Utility;TerminalEmulator;
Sur le .desktop je n'ai pas trouvé la fonction pour lui demander de maximiser la fenêtre lors de l'ouverture (du genre Exec=lxterminal -mazimised)

Et voilà mon script ou j'ai inclus une boucle d'attente provisoire avant de lancer la seconde boucle. Dans cette config il faut lancer le script dès le début dans un terminal en plein écran si on veut voir quelque chose

Code : Tout sélectionner

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# Script Smart Eole Version 2 du 11/05/2015

import time #importation du module temps
import pifacedigitalio as pi #importation du module Piface et renommage
import os

pi.init() # initialisation du module

while pi.digital_read(7) ==0 :
    time.sleep(1)
    os.system("clear")
    print("Veuillez passer le commutateur sur 1")
    print("                                                           *       ")
    print("                  *************************************     *      ") 
    print("                  *     Module Smart Eole arrêté      *      *     ")
    print("                  *************************************       *****")
    print("                                                             *|    ")
    print("                                                            * |    ")
    print("                                                           *  |    ")
    print("                                                              |    ")
#tant que l'entrée 8 est égale à 1
while pi.digital_read(7) ==1 :
    time.sleep(1)
    os.system("clear") 
    print("                                                           *       ")
    print("                  *************************************     *      ") 
    print("                  *Module Smart Eole en Fonctionnement*      *     ")
    print("                  *************************************       *****")
    print("                                                             *|    ")
    print("                                                            * |    ")
    print("                                                           *  |    ")
    print("                                                              |    ")


# surveillance de l'entrée 1
    if pi.digital_read(0) == 1 :
       # print(aux)
       print("- Alarme SMART Surcharge Transfo")
       print("------------------------")
       pi.digital_write(0, 1)
    else :
        pi.digital_write(0 ,0)

# surveillance de l'entrée 2
    if pi.digital_read(1) == 1 :
       # print(aux)
       print("- Déclenchement SMART")
       print("------------------------")
       pi.digital_write(1, 1)
    else :
        pi.digital_write(1 ,0)

# surveillance de l'entrée 3
    if pi.digital_read(2) == 1 :
       # print(aux)
       print("- Défaut Equipement")
       print("------------------------")
       pi.digital_write(2, 1)
    else :
        pi.digital_write(2 ,0)

# surveillance de l'entrée 4
    if pi.digital_read(3) == 1 :
       # print(aux)
       print("- Déclenchement départ n°1")
       print("------------------------")
       pi.digital_write(3, 1)
    else :
        pi.digital_write(3 ,0)

# surveillance de l'entrée 5
    if pi.digital_read(4) == 1 :
       # print(aux)
       print("- Déclenchement départ n°2")
       print("------------------------")
       pi.digital_write(4, 1)
    else :
        pi.digital_write(4 ,0)

# surveillance de l'entrée 6
    if pi.digital_read(5) == 1 :
       # print(aux)
       print("- Déclenchement départ n°3")
       print("------------------------")
       pi.digital_write(5, 1)
    else :
        pi.digital_write(5 ,0)

# surveillance de l'entrée 7
    if pi.digital_read(6) == 1 :
       # print(aux)
       print("- Déclenchement départ n°4")
       print("------------------------")
       pi.digital_write(6, 1)
    else :
        pi.digital_write(6 ,0)


# surveillance de l'entrée 8
    if pi.digital_read(7) == 0 :
       print("- Coupure par utilisateur")
       print("- Extinction de la maquette dans 10 sec")
       pi.digital_write(6 ,0)
       time.sleep(0.1)
       pi.digital_write(5 ,0)
       time.sleep(0.1)
       pi.digital_write(4 ,0)
       time.sleep(0.1)
       pi.digital_write(3 ,0)
       time.sleep(0.1)
       pi.digital_write(2 ,0)
       time.sleep(0.1)
       pi.digital_write(1 ,0)
       time.sleep(0.1)
       pi.digital_write(0 ,0)
       time.sleep(10)
       # os.system("sudo halt")


Cluclu
Messages : 47
Enregistré le : ven. 3 avr. 2015 23:22

Re: Projet mini automate de contrôle

Message par Cluclu » mar. 12 mai 2015 13:59

dbrion0606 a écrit :Je pense qu'une solution consisterait à
a) lancer LXDE (je crois que 'est fait automatiquement dans ceratines configurations de Rapsbian)

b) lancer un script, attaché à un terminal, qui ne fera rien (sauf peut être afficher un message d'attente) tant que le bouton 7 (désigné ci dessous par START) ne sera pas activé: son occuppation sera de boucler en dormant.

c) Une fois sorti de la boucle, il executera en séquence votre boucle de scrutation qui aurait actuellement la structure suivante:

Code : Tout sélectionner

importation de libraries
fixation de quelques parametres
xxxx
while (1 == 1) :
   scruter

la boucle de démarrage aurait la forme suivante (devrait se mettre en xxxx)

Code : Tout sélectionner

START=7 # changer le nombre si je n'ai pas tiré le bon numéro
# pour rassurer
print (" Appuyez sur bouton pour démarrer") # IIRC, marche en python 2.7 et 3.x avec print parenthésé

while (!pi.digitalread( START ) ) : # boucle tant que le demarreur est inactif
   #  print("attente\n")
    sleep(0.1) # scruter toutes les 1/10 secondes suffit, sauf pour des gahmeurhs de course, dopés à la caféine
N

Alors

1) Tu veux dire au démarrage arriver directement sur le bureau ? Si c'est le cas oui mon RPi démarre ainsi

2) J'ai inclus à peu près ça dans le script que j'ai posté ci dessus

Avatar du membre
Manfraid
Raspinaute
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Projet mini automate de contrôle

Message par Manfraid » mar. 12 mai 2015 15:09

J'ai une petite question, que veux tu faire si l'entrée 7 repasse a zéro, car a l'heure actuelle je dirait que ton programme s'arrête et qu'il ne va plus scruter cette entrée
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

Re: Projet mini automate de contrôle

Message par dbrion0606 » mar. 12 mai 2015 15:31

Il semble y avoir une incohérence entre le commentaire et le code python (peut faire tourner en bourrique si on veut modifier quelque chose dans 6 mois /un an)
# surveillance de l'entrée 8
if pi.digital_read(7) == 0 :
print("- Coupure par utilisateur")
print("- Extinction de la maquette dans 10 sec")

Cluclu
Messages : 47
Enregistré le : ven. 3 avr. 2015 23:22

Re: Projet mini automate de contrôle

Message par Cluclu » mar. 12 mai 2015 15:36

Alors si l'entrée 7 repasse à zéro on arrête le Rpi (actuellement diésé car pas envie que ça coupe à chaque essais)

Pour l'incohérence ce n'en est pas une, il y a 8 entrées sur le Piface mais appelé de 0 à 7 dans le programme, ça je ne peut pas le contourner c'est le module piface qui est ainsi

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

Re: Projet mini automate de contrôle

Message par dbrion0606 » mar. 12 mai 2015 16:18

Il faut faire attention aux rebonds des interrupteurs (usure du matériel http://www.ganssle.com/debouncing.htm, effroi ou Parkinson de l'utilisateur).

une façon de tenter de s'en affranchir est de dire que le niveau est à un (dans la boucle de démarrage où il est génant de détecter un niveau un mal stabilisé) si l'appui précédent est à un et l'appui actuel aussi -ils sont séparés d'au moins 1/10 secondes-

Code : Tout sélectionner

appui_precedent = (1==1) # initialisé à vrai
while (appui_precedent | ( pi.digital_read(7) == 0 )) :
     sleep(0.1)
     #affichage divers
     appui_precedent = ( pi.digital_read(7) == 0 ) # l'appui precedent devient l'appui suivant

Avatar du membre
Manfraid
Raspinaute
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Projet mini automate de contrôle

Message par Manfraid » mar. 12 mai 2015 16:45

Une autre chose, pourquoi ne pas faire une application en tkinter comme tu veux du graphique cela serai encore plus simple a gérer
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Répondre

Retourner vers « Débutants »