Compteur/enregistreur

Bonjour à tous.
Pour un projet professionnel, j’utilise un RPI4.
Je dois faire un programme sous python qui compte le temps où une ampoule sera allumée.

Une broche du GPIO sera, sur demande, activée et via un relais une ampoule sera allumée.

Mon problème est le suivant, je n’ai pas d’idée et ne trouve pas ce que je cherche sur le net.
Le but et qu’a chaque activation de la broche, le programme récupère l’ancienne valeur et continu a compter à partir de celle ci et à la désactivation de la broche, la valeur sera stockée (dans un fichier texte…). Et ainsi de suite.

Si quelqu’un a une idée???

Je vous remercie.

Bonjour,

Il faut importer datetime et/ou time dans un premier temps pour avoir les fonctions de gestion du temps.

Soit calculer la différence de temps entre l’allumage et l’extinction:
Source:

import datetime
from time import sleep

start = datetime.datetime.now()
sleep(3)
stop = datetime.datetime.now()

elapsed = stop - start

Soit ajouter 1 à un compteur toutes les secondes

import time
secondes=0
allumee=test_allumage()
while allumee:
   secondes+=1
   time.sleep(1)
   allumee=test_allumage()

Il faut écrire la fonction de test de l’allumage.

Ensuite pour écrire dans un fichier, il y a une multitude de possibilités en fonction du format des données souhaitées. Si le fichier n’est utilisable que par le programme je conseille d’utiliser le module pickle.

Source: Python Pickle – Serialize and De-serialize Objects

Pour la gestion des changement d’états du port GPIO regarder de ce co
té (paragraphe Interruption et détection de front)

Je ne suis pas sûr que le lien ci-dessus soit toujours d’actualité, mais le principe est là.

Voici quelques pistes.

Bonne bidouilles

A+

Bonjour.
Je vous remercie. Je regarde cela en rentrant ce soir.

Pour écrire dans le fichier, je pensai à utiliser un fichier excel. J’ai déjà regarder pour une autre application.

Pour le GPIO, je commence à comprendre l’utilisation.

Merci beaucoup. Je vous tiens informé de l’évolution.

Bonjour,
Il a fallu du temps mais le programme est fini et surtout il fonctionne !!!

Je vous laisse mon programme.
En gros, j’ai 2 broches GPIO une INPUT(21) et une OUTPUT(17). Le programme en démarrant va vérifié si le fichier .txt existe (compteur_ampoule_temps.txt) sinon, il le créera.
Lorsque la broche GPIO 21 est a 1 (état haut) ma sortie GPIO 17 change d’état se qui active un relais qui alimentera mon ampoule. Mais surtout le compteur comptera. Il y a une alarme pour le temps où l’ampoule est allumée. Le programme comptant en seconde, je multiplie 19506060. Le temps alarme est 1950H. je multiplie par 60 minutes puis par 60 pour avoir le tous en seconde. Une fois la broche 21 à 0 le programme vérifiera ma consigne d’alerte et si le temps est dépassé ma LED3 s’allumera. Et il comptera ainsi de suite sur commande de ma broche GPIO.

Un grand merci a toi Jelopo pour les infos. Ca m’as mis un peu de temps avec un peu d’aide je reconnais, mais cela fonctionne, bonne chose de faite.

Encore merci.

Si quelqu’un veut plus de précision qu’il n’hésite pas.

Bonne continuation à tous.

# LIBRAIRIE #

import time

import board

import RPi.GPIO as GPIO # LIBRAIRIE GPIO "

import datetime

GPIO.cleanup() # REINITIALISE VARIBLE SUR GPIO #

# CONFIGURATION GPIO #

GPIO.setmode(GPIO.BCM)                      # NUMERO DES GPIO A UTILISER

ampoule = 17                                # COMMANDE RELAIS AMPOULE DEFINIE SUR BROCHE GPIO 04

GPIO.setup(ampoule,GPIO.OUT)                # GPIO AMPOULE DEFINI COMME SORTIE

GPIO.output(ampoule,1)                        

cpt_temp_on = 21                            # COMMANDE ACTIVE COMPTEUR AMPOULE

GPIO.setup(cpt_temp_on,GPIO.IN)

led3 = 25                                   # LED 3 DEFINI SUR GPIO 25

GPIO.setup(led3,GPIO.OUT)

GPIO.output(led3,0)                  #  LED 3 _ VOYANT CHANGEMENT AMPOULE

# PROGRAMME #

try:

    fichier_horodatage = open("compteur_ampoule_temps.txt", "r")            # VERIFIE SI DOSSIER SAUVEGARDE EXISTE, SI NON CREATION

    temps = fichier_horodatage.read()

    fichier_horodatage.close()

    if temps.strip() == "":

        tempsUtilisationAmpoule = 0

    else:

        tempsUtilisationAmpoule = int(temps)

except:

    tempsUtilisationAmpoule = 0

print(tempsUtilisationAmpoule)

time.sleep(5)

estAlumee = False

dureeMax = 1950*60*60                   #REGLE ALERTE TEMPS UTILISATION AMPOULE EN SECONDE H*MIN*SEC

afficher = 0

while True:

   

    if GPIO.input(cpt_temp_on) == 1:

        if estAlumee == False:

            debut = datetime.datetime.now()                              

            debut_h = debut.strftime("%H")                              

            debut_m = debut.strftime("%M")

            debut_s = debut.strftime("%S")

            estAlumee = True

        #print("1")

    elif estAlumee == True:

        estAlumee = False

        fin = datetime.datetime.now()                            

        fin_h = fin.strftime("%H")                          

        fin_m = fin.strftime("%M")

        fin_s = fin.strftime("%S")

        tempsUtilisationAmpoule += (int(fin_h)-int(debut_h))*60*60 + (int(fin_m)-int(debut_m))*60 + (int(fin_s)-int(debut_s))

       

        if tempsUtilisationAmpoule > dureeMax:                  

            GPIO.output(led3,1)                                      # ALLUMME LED TEMPS UTILISATION AMPOULE DEPASSE

       

        fichier_horodatage = open("compteur_ampoule_temps.txt", "w")

        fichier_horodatage.write(str(tempsUtilisationAmpoule))

        fichier_horodatage.close()

       

        print("Le temps d'allumage de l'ampoule est :", tempsUtilisationAmpoule, "seconde.")

        time.sleep(5)

    afficher += 1  

   

    if afficher%1000 == 0:

        print(ampoule)

Bonjour,

Merci pour le partage.

A+