Enrouleur pour rideau

Bonjour à tous,

Je réalise un enrouleur de rideau commander par un moto réducteur.

Le but serait d'enregistrer deux hauteurs (positions) du rideau "haute et basse", pour qu'il s'arrête automatiquement. Une sorte de butée.
Sachant que le rideau peut se dérouler de 6m maximum, je pensait prendre l'info du nombre de tour par le pignon avec un capteur a effet hall.

L'arduino commande le moteur dans un sens puis dans l'autre grâce à des relais. Recevant une tension à chaque passage d'une dent, il stock cette valeur incrémenté jusqu'à atteindre la valeur enregistré puis coupe le moteur.

Comment enregistrer une position (valeur) via un bouton poussoir branché sur l'arduino ?

Merci par avance !

La valeur sera stockée dans la mémoire de l'Arduino, ça n'a rien a voir avec le bouton poussoir.
A quoi sert ton bouton ? A lancer et arrêter le moteur ?
Dans ce cas, ton code attend l'appui sur le bouton, puis lance le moteur, compte les impulsions données par le capteur et arrête le moteur lorsque le nombre d'impressions attendu est atteint.

C'est exact.
il y a 3 boutons

  • monter
  • descente
  • mémorisation des butées
    Comment faire un système de mémorisation ?

C'est la mémorisation sur l'arduino ou la commande «enregistre cette position comme position préférée» (ou plus généralement l'interface homme-machine) qui te pose un problème ?

J'ai des volets commandés par un système à module commerciaux (yokis) qui ont une position préférée (typiquement entrouvert) qui s'utilise par un code de type :

  • 2 clics sur le poussoir --> le volet se met en position préférée
  • 5 clics sur le poussoir --> mémorisation de la position comme position préférée
  • 6 (ou je sais plus combien) clics --> effacement de la mémorisation
  • x clics : mémorisation de l'heure d'ouverture

tout ça avec comme interface homme-machine un seul et unique bouton. Le retour du module pour signaler la réception de la commande est un bref aller-retour du volet.

ProfesseurMephisto, ton système doit se basé sur le temps de commande du volet.

A la place du capteur de rotation, peut-on adapter au système un enregistrement du temps de commande pour aller d'un point A vers B ?

Pour enregistrer des données à conserver au delà d'un redémarrage on utilise l'eprom du microcontrôleur ou on utilise une eeprom externe, si il n'en a pas.
Sur les ESP qui n'ont pas d'eeprom, il est utilisé la mémoire flash, je crois

Sur un nano, y t-il un eprom ?

Je crois oui, la nano est basé sur le ATmega168, si je ne me trompe pas ?

J'ai oublié de préciser, qu'il ne faut pas abuser de l'écriture qui est limitée.
Tu veux enregistrer uniquement le nombre de cran pour la position basse et haute ou à chaque passage de la dent?

Bonjour JustinPirolley

Une solution est d'utiliser une bibliothèque comme OneButton.
Tu utilises tes boutons haut et bas en simple click pour les déplacement, quand le rideau est en position bas, un double click enregistre la position basse et la même opération pour la position haute.
A chaque double click sur un des 2 boutons, leur position est enregistrée en EEPROM.
Pour rendre l'enregistrement/lecture plus facile, il faut créer une structure contenant ces 2 valeurs, ainsi, pour sauver la structure, un EEPROM.put et pour lire ces 2 valeurs, EEPROM.get

Oui

Cordialement
jpbbricole

Je veux juste enregistrer le nombre de dents pour la butée haut et basse.

Il faut mieux se basé sur un temps de commande ou une position en nombres de tours ?

Bonjour JustinPirolley

Le nombre de dents est mieux parce que constant, tandis qu'un temps de montée/descente peut varier.

Cordialement
jpbbricole

Nickel, l'eeprom est fait pour toi :slight_smile:
Moi je dirais qu'un nombre de tours, il y a moins de chance d'être désynchronisé.

Le temps est invariant dans un même révérenciel :rofl:

:rofl: oui mais quand un moteur fatigue, schez moi le volet fait n'importequoi...

Bonjour @terwal
Non, la nano ( 32 kB de mémoire ) est basée sur un ATmega328. Il en existe avec des ATmega168, mais celles-ci sont bien moins puissantes en terme de mémoire :

  • Mémoire flash : 16 KB (dont 2KB utilisés par le bootloader)
  • SRAM : 1 KB
  • EEPROM : 512 B

Amitiés
Pandaroux007 :fox_face:

Merci @pandaroux007 pour la rectification :+1:

La bonne solution semble être celle proposée par @jpbbricole, avec un bouton pour arrêter.
Donc avec 3 boutons (up, down, stop) avec un simple clic, tu montes / descend ou arrêtes le volet. Sans appui sur le stop, il s'arrête seul à la position mémorisée auparavant avec un double clic.

Le fonctionnement pourrait être celui-ci :
Au début, rien n'est mémorisé. On suppose que le volet est en position basse. Un clic sur 'up', le volet monte, tu le stoppes avec le bouton 'stop'. Double clic sur 'stop' : il mémorise la butée haute (on peut même se passer du double clic ici, il peut mémoriser la position automatiquement). A partir de maintenant, chaque fois que tu cliques sur 'up' , il s'arrête seul à la position mémorisée, sauf si tu appuies sur 'stop' (et si tu double-cliques ensuite, il remplace la position mémorisée par celle ci)
Même chose pour descendre.

Il faut juste l'arrêter (en montée ou en descente) la toute première fois que tu t'en sers, lorsque les positions de butée ne sont pas mémorisées.

Pour résumer :

  • 'up' : monter
  • 'down' : descendre
  • 'stop' : stopper, double clic pour mémoriser (il faut se souvenir si on montait ou si on descendait pour savoir si on mémorise la butée haute ou basse)

Ca gaze ? Si oui, il ne reste plus qu'à coder... :grin:

Bonsoir lesept

Je pensais à arrêter avec le bouton stop et double-clique sur le bouton monter si l'on est en haut ou double-clique avec le bouton bas si l'on est en bas, pour mémoriser la position.
Pendant un mouvement, la pression sur n'importe bouton arrête le store.

Cordialement
jpbbricole

Les fonctions du store me paraissent super !

Il y a certaine partie du code qui sont encore flou. Comme comment enregistrer des valeurs dans l'eprom avec un bouton :roll_eyes:

Je vais faire des recherches :grin: