Affichage arduino

Venez ici présenter vos trucs et astuces, du gabarit le plus élaboré au plus petit tour de main.

Modérateur : DeD

Répondre
Avatar de l’utilisateur
Canou
Fan
Messages : 100
Inscription : 22 mars 2017, 16:04
Localisation : Haute-Correze
Contact :

Affichage arduino

Message par Canou »

Bonjour.
Pour ma scie kity je souhaitais réaliser un affichage de la hauteur de lame mais cette réalisation à base d'arduino UNO est adaptable à tous type de machines à partir du moment ou vous avez la possibilité de positionner un encodeur rotatif.

25/08/2017 : Je vais mettre à jour l'ensemble de la réalisation sur le POST initial, ce sera plus simple
Réalisation en cours : projet non finalisé

Matériel (<20€):

Un afficheur LCD
https://www.banggood.com/IIC-I2C-2004-2 ... 08616.html
Un arduino uno compatible
https://www.banggood.com/Wholesale-Ardu ... 68537.html
Son alimentation
http://www.ebay.fr/itm/9V-1A-AC-DC-Plug ... 2618602494
Un codeur rotatif
https://www.banggood.com/KY-040-Rotary- ... 14010.html
2 boutons poussoirs
https://www.banggood.com/20Pcs-Tactile- ... 64789.html
Une solution mécanique pour asservir le volant/axe à asservir pour ma part j'ai rajouté en bout d'arbre une poulie sur l'axe de l'arbre de monté de la scie et sur le codeur le tout raccordé avec une poulie.
2 Poulies
https://www.banggood.com/GT2-Timing-Pul ... 06314.html
Courroie
https://www.banggood.com/3Pcs-GT2-Timin ... 09460.html

Fonctions :

Un bouton de remise à zero de la position.
La sauvegarde de la position sera automatique (périodiquement) afin de prévenir la perte de l'information en cas de coupure électrique et de minimiser l'usure de l'EEPROM de la carte.
Un paramètre dans le code permettra de changer le ratio en fonction de la mécanique en place (Faire correspondre les déplacements du codeur avec le déplacement de l'objet à mesurer.

Schéma du prototype :
Arduino.png
Environnement pour programmer l'Arduino:
https://www.arduino.cc/download_handler ... indows.exe

La bibliothèque MSTIMER2 http://playground.arduino.cc/uploads/Main/MsTimer2.zip à ajouter dans l'IDE
(Croquis/Inclure une bibliothèque/Ajouter la bibliothèque.zip)

Code de préparation de l'EEPROM
Un grand merci à Aeth pour son aide, sa pédagogie et son code

C'est le premier fichier à téléverser sur l'arduino

Code : Tout sélectionner

#include <EEPROM.h>

struct ROM_MEMORY_MAP
{
int addr;
int writeCnt;
};



void setup ()
{
struct ROM_MEMORY_MAP encoderMemMap;
int xencoderPosCount = 0;

encoderMemMap.addr = sizeof(struct ROM_MEMORY_MAP); // Défini l'adresse de xencoderPosCount a la suite de la structure ROM_MEMORY_MAP
encoderMemMap.writeCnt = 0x0000;

EEPROM.put(0x0000, encoderMemMap);
EEPROM.put(encoderMemMap.addr, xencoderPosCount);

}

void loop ()
{
}
Dernière modification par Canou le 27 août 2017, 18:09, modifié 11 fois.
JeanJ
Accro
Messages : 144
Inscription : 13 mars 2015, 15:24
Contact :

Re: Affichage arduino

Message par JeanJ »

Bonjour.
Projet très intéressant, j'envisage de faire ceci pour la hauteur de lame, la hauteur de toupie et la hauteur de rabotage de ma combinée.
J'ignorais l'existence de ces mini codeurs à bas prix, comment réalisez vous l'accouplement ? Merci d'avance
keitofu
Accro
Messages : 692
Inscription : 02 mai 2016, 20:28
Contact :

Re: Affichage arduino

Message par keitofu »

joli projet !
ca me rappelle ça : https://www.youtube.com/watch?v=pEl-th8ty2k
Balbu
Accro
Messages : 454
Inscription : 15 août 2015, 02:48
Contact :

Re: Affichage arduino

Message par Balbu »

Bonjour Canou,
Tu peux rajouter quelques photos, si le montage est déjà opérationnel?
Ayant débuté grâce à ce site. Merci Nicolas.
Depuis, j'essaye ...
Avatar de l’utilisateur
meles
Accro
Messages : 771
Inscription : 30 avr. 2012, 00:10
Localisation : Aubagne
Contact :

Re: Affichage arduino

Message par meles »

Canou a écrit :un bouton de remise à zero de la position et un de sauvegarde de la position
code et raccordement des éléments à disponibilité ( je les rajouterais si ça vous intéresse)
Ohh que oui, ça nous intéresse ! Avec un petite photo du montage et de l’utilisation si possible. On est pas tous doués pour ce genre de chose :D

@+
Avatar de l’utilisateur
Canou
Fan
Messages : 100
Inscription : 22 mars 2017, 16:04
Localisation : Haute-Correze
Contact :

Re: Affichage arduino

Message par Canou »

JeanJ a écrit :comment réalisez vous l'accouplement ?
Non encore réalisé je vais fixer une poulie en bout d'arbre du volant de monté et descente de la scie kity, fixer l'autre poulie sur le codeur lui même fixé sur le châssis. les deux poulies raccordées par la courroie.
Pas encore de photo mais je posterais dès que réalisé.

le code
sketch_aug24a.ino.txt
(3.56 Kio) Téléchargé 109 fois
(Une future version à suivre sans bouton de sauvegarde, automatique mais je veux faire des tests sur le nombre d'écriture sur l'EEPROM qui est limité à 100 000).
L'injection du code dans l'arduino est simple à réaliser via le cordon USB et l'IDE arduino que l'on télécharge sur le site arduino.
Je peux aider aussi sur ce point.

NB : Le code n'intègre pas le rapport entre les pas du codeur et la valeur en cm ou mm du déplacement je ferais un update du code.
NB2 : je mettrais à jour code et schèma en fonction de l'évolution du projet et de vos suggestion. Ce n'est donc pas la version finale. mais ça fonctionne...
Dernière modification par Canou le 24 août 2017, 19:06, modifié 1 fois.
Aeth
Accro
Messages : 153
Inscription : 27 juil. 2016, 18:24
Localisation : Montreuil-Juigné (49)
Contact :

Re: Affichage arduino

Message par Aeth »

Avec une extinction par jour (donc une écriture par jour), ça te laisse quasiment 274 ans de durée de vie pour ton EEPROM. Ensuite, tu peux incrémenter le pointeur d'écriture de la valeur, en sauvegardant le pointeur à une adresse fixe et là tu n'auras quasiment plus de problème de durée de vie (un peu à la manière d'un système de fichier) ;)

Ensuite, pour éviter d'écrire la valeur en EEPROM à chaque montée/descente de la table, tu peux détecter la perte d'alimentation (passage d'un seuil de comparaison de tension) et profiter d'une petite réserve de courant dans une capa pour écrire la valeur en mémoire non-volatile.
Avatar de l’utilisateur
Canou
Fan
Messages : 100
Inscription : 22 mars 2017, 16:04
Localisation : Haute-Correze
Contact :

Re: Affichage arduino

Message par Canou »

le brochage:
Arduino.png
Avatar de l’utilisateur
Canou
Fan
Messages : 100
Inscription : 22 mars 2017, 16:04
Localisation : Haute-Correze
Contact :

Re: Affichage arduino

Message par Canou »

Aeth a écrit :Avec une extinction par jour (donc une écriture par jour), ça te laisse quasiment 274 ans de durée de vie pour ton EEPROM. Ensuite, tu peux incrémenter le pointeur d'écriture de la valeur, en sauvegardant le pointeur à une adresse fixe et là tu n'auras quasiment plus de problème de durée de vie (un peu à la manière d'un système de fichier) ;)

Ensuite, pour éviter d'écrire la valeur en EEPROM à chaque montée/descente de la table, tu peux détecter la perte d'alimentation (passage d'un seuil de comparaison de tension) et profiter d'une petite réserve de courant dans une capa pour écrire la valeur en mémoire non-volatile.
Je suis preneur d'info le code est dispo si tu veux apporter des modification ainsi que sur ta solution avec une capacité pour la coupure de tension, tu peux me contacter ou mettre le schéma à jour.
mcop2
Accro
Messages : 1182
Inscription : 28 août 2014, 10:02
Contact :

Re: Affichage arduino

Message par mcop2 »

C'est intéressant, merci de nous faire partager ça.
Aeth
Accro
Messages : 153
Inscription : 27 juil. 2016, 18:24
Localisation : Montreuil-Juigné (49)
Contact :

Re: Affichage arduino

Message par Aeth »

Canou a écrit :Je suis preneur d'info le code est dispo si tu veux apporter des modification ainsi que sur ta solution avec une capacité pour la coupure de tension, tu peux me contacter ou mettre le schéma à jour.
Juste pour situer, quel est ton niveau en électronique et en code ?

Je vois quelques axes d'amélioration sur le schéma :

- Ca manque un peut de résistances de tirages à l'état haut + capa de filtrage (debouncing) sur les lignes DATA, CLK du codeur et des switchs, des résistances de tirage à l'état haut sur les signaux SCL et SDA de l'afficheur, ainsi que des capas de découplages sur les alimentations du LCD et de l'arduino.

- Pour la perte de tension, on peut imaginer une alimentation en +12V en entrée d'un 7805 qui fournirait le +5V de l'arduino. Un comparateur entre la ligne +12V et une zener de 7..9V, dès que la tension +12V passe sous la tension de la zener, la sortie du comparateur indique à l'arduino qu'il faut sauvegarder en EEPROM. Une grosse capa en sortie du 7805 continuera de fournir l'énergie à l'arduino le temps de sauver la position en EEPROM.

Pour l'idée du pointeur de sauvegarde en EEPROM, je pensais à quelque chose comme ça :

Code : Tout sélectionner

struct ROM_MEMORY_MAP
{
int addr;
int writeCnt;
}

struct ROM_MEMORY_MAP encoderMemMap;

void setup ()
{
...
// La structure est toujours stockee a l'adresse 0 de l'EEPROM
EEPROM.get(0, encoderMemMap);

// Recupere la valeur de la position dans l'EEPROM
EEPROM.get(encoderMemMap.addr, xencoderPosCount);
...
}

void loop ()
{
...
// Autorise 10 000 ecriture a la meme adresse de l'EEPROM
if(encoderMemMap.writeCnt > 10000)
{
// incrémente l'adresse en EEPROM de la taille de la variable xencoderPosCount
encoderMemMap.addr+= sizeof(xencoderPosCount);

// Remet à 0 le compteur d'écriture
encoderMemMap.writeCnt = 0;

// Sauvegarde la structure dans l'EEPROM
EEPROM.put(0, encoderMemMap);
}

// Sauvegarde la valeur du codeur en EEPROM
EEPROM.put(encoderMemMap.addr, xencoderPosCount);
}
Avatar de l’utilisateur
Canou
Fan
Messages : 100
Inscription : 22 mars 2017, 16:04
Localisation : Haute-Correze
Contact :

Re: Affichage arduino

Message par Canou »

Aeth a écrit :Juste pour situer, quel est ton niveau en électronique et en code ?
Je ne suis pas un programmeur mais j'ai codé un temps en PERL+PHP
J'ai programmé dans le cadre de mon boulo pas mal de script, base de donnée pour de l'analyse de config, alarm, traffic etc sur des routeurs essentiellement du multithreading en perl
J'ai une formation de base en C++, me suis intéressé un temps au JAVA

En électronique j'ai une formation théorique assez poussé mais rien de concret...

Mon prototype sur breadboard fonctionne bien, mais si tu penses que certaines modifications sont préférables pour minimiser le risque de dysfonctionnement, peut t'on y travailler ensemble sachant qu'il faut à la base que ça reste simple et réalisable par tous?
Aeth a écrit : Ca manque un peut de résistances de tirages à l'état haut + capa de filtrage (debouncing) sur les lignes DATA, CLK du codeur
a priori le codeur KY-040 possède déjà 2 résistances de tirages 10kohm sur les sorties DT et CLK mais pas de capa.
https://github.com/Billwilliams1952/KY- ... ---Arduino conseille effectivement un capa de 0.47uF entre Clk et la masse. mais c'est contredit sur la page http://henrysbench.capnfatz.com/henrys- ... er-manual/ si on utilise les transitions High -> Low (dixit kbellco)
=> Nécessaire?
Aeth a écrit :des résistances de tirage à l'état haut sur les signaux SCL et SDA de l'afficheur.
https://arduino-info.wikispaces.com/LCD-Blue-I2C à priori déjà sur le composant I2C "BACKPACK" au dos de l'afficheur 10kohm
Aeth a écrit :ainsi que des capas de découplages sur les alimentations du LCD et de l'arduino.
Pour l'alimentation je comptais utiliser http://www.ebay.fr/itm/9V-1A-AC-DC-Plug ... 2618602494 j'imagine peut être à tord qu'il y a déjà un filtrage...
Mais effectivement ça ne permet pas la détection de la coupure d'alimentation...

Pour les switch l'ajout de la capa a pour rôle de supprimer les rebonds? Je n'en constate pas sur mon montage après réglage de la tempo... => Nécessaire?
Aeth a écrit : - Pour la perte de tension, on peut imaginer une alimentation en +12V en entrée d'un 7805 qui fournirait le +5V de l'arduino. Un comparateur entre la ligne +12V et une zener de 7..9V, dès que la tension +12V passe sous la tension de la zener, la sortie du comparateur indique à l'arduino qu'il faut sauvegarder en EEPROM. Une grosse capa en sortie du 7805 continuera de fournir l'énergie à l'arduino le temps de sauver la position en EEPROM.
Complique un peut la réalisation, mais je n'écarte pas la solution..
Aeth a écrit :Pour l'idée du pointeur de sauvegarde en EEPROM, je pensais à quelque chose comme ça :

Code : Tout sélectionner

struct ROM_MEMORY_MAP....[/quote]

A quoi correspond l'instruction struct? sinon très bonne idée merci pour le code.
En le lisant je pensais à une autre piste supplémentaire si pas de changement de position après quelques secondes on enregistre la position qu'en pense tu?

Merci pour ton aide
Aeth
Accro
Messages : 153
Inscription : 27 juil. 2016, 18:24
Localisation : Montreuil-Juigné (49)
Contact :

Re: Affichage arduino

Message par Aeth »

Canou a écrit : Je ne suis pas un programmeur mais j'ai codé un temps en PERL+PHP
J'ai programmé dans le cadre de mon boulo pas mal de script, base de donnée pour de l'analyse de config, alarm, traffic etc sur des routeurs essentiellement du multithreading en perl
J'ai une formation de base en C++, me suis intéressé un temps au JAVA

En électronique j'ai une formation théorique assez poussé mais rien de concret...

OK nickel, ça me permettra d'adapter mon discours ;)
Canou a écrit : Mon prototype sur breadboard fonctionne bien, mais si tu penses que certaines modifications sont préférables pour minimiser le risque de dysfonctionnement, peut t'on y travailler ensemble sachant qu'il faut à la base que ça reste simple et réalisable par tous?
Je suis complètement pour la démarche, pas besoin de connaitre toute la théorie pour souder quelques composants ensembles, j'ai moi-même commencé comme ça ;)
Canou a écrit : a priori le codeur KY-040 possède déjà 2 résistances de tirages 10kohm sur les sorties DT et CLK mais pas de capa.
https://github.com/Billwilliams1952/KY- ... ---Arduino conseille effectivement un capa de 0.47uF entre Clk et la masse. mais c'est contredit sur la page http://henrysbench.capnfatz.com/henrys- ... er-manual/ si on utilise les transitions High -> Low (dixit kbellco)
=> Nécessaire?
Effectivement, sur la seconde page 2 résistances de pull-up de 100k sont présentes. 470nF ça peut effectivement être assez élevée comme valeur : avec la 100k de tirage, ça donne une constante de temps de 47ms, donc un temps de montée de 235ms. Ca peut pas mal limiter la vitesse de rotation du codeur (au delà d'une certaine vitesse, des pas seront loupés). Quelques centaines des pF voir quelques nF seraient suffisant pour éviter les rebonds.
Canou a écrit : https://arduino-info.wikispaces.com/LCD-Blue-I2C à priori déjà sur le composant I2C "BACKPACK" au dos de l'afficheur 10kohm
Nickel !
Canou a écrit : Pour l'alimentation je comptais utiliser http://www.ebay.fr/itm/9V-1A-AC-DC-Plug ... 4j'imagine peut être à tord qu'il y a déjà un filtrage...
Mais effectivement ça ne permet pas la détection de la coupure d'alimentation...
De manière générale, on aime bien ajouter du filtrage au plus près du consommateur ;) 10...100µF sur une capa aluminium + 100nF suffisent à éviter bien des problèmes.
Canou a écrit : Pour les switch l'ajout de la capa a pour rôle de supprimer les rebonds? Je n'en constate pas sur mon montage après réglage de la tempo... => Nécessaire?
Exactement. En général on en place sur tous les éléments de commutation mécaniques puisqu'ils peuvent produire des rebonds. C'est loin d'être systématique, ça dépend des switchs et surtout de leur usure ;) Traditionnellement j'utilise des résistances de 10...100k de pull-up et 100...470nF de capa d'anti-rebond.
Canou a écrit : Complique un peut la réalisation, mais je n'écarte pas la solution..
Complètement et c'est loin d'être nécessaire. La solution logicielle que je t'ai présenté limite quand même grandement les risques pour l'EEPROM ;)

Canou a écrit : A quoi correspond l'instruction struct? sinon très bonne idée merci pour le code.
"struct" permet de définir un nouveau type, de type "structure de données" : basiquement, un type composé de variables de types divers et variés (voir ici)
Canou a écrit : En le lisant je pensais à une autre piste supplémentaire si pas de changement de position après quelques secondes on enregistre la position qu'en penses tu?
C'est une solution tout à fait classique ;)
Avatar de l’utilisateur
diomedea
Accro
Messages : 3548
Inscription : 16 avr. 2015, 13:45
Contact :

Re: Affichage arduino

Message par diomedea »

Canou a écrit :
JeanJ a écrit :comment réalisez vous l'accouplement ?
Non encore réalisé je vais fixer une poulie en bout d'arbre du volant de monté et descente de la scie kity, fixer l'autre poulie sur le codeur lui même fixé sur le châssis. les deux poulies raccordées par la courroie.
Pas encore de photo mais je posterais dès que réalisé...
Comme ça?
Image

++
JP
Il y a trois sortes de gens: Les vivants, les morts et les marins...
Avatar de l’utilisateur
Canou
Fan
Messages : 100
Inscription : 22 mars 2017, 16:04
Localisation : Haute-Correze
Contact :

Re: Affichage arduino

Message par Canou »

Bonjour,
c'est bien l'idée. et comme toujours les conceptions de Diomedea illustre une réalisation parfaite..
grim_lokason
Habitué
Messages : 40
Inscription : 30 déc. 2012, 22:26
Localisation : Ille et vilaine
Contact :

Re: Affichage arduino

Message par grim_lokason »

ahah ! pas mal,

J'avais songé à faire un truc du genre pour la distance d'un guide de découpe // pour scie sous table mais avec des lasers. j'ai vite abandonner en voyant le prix des lasers ^^'
Ta base pourrais donc être une solution pour ce que j'envisageais de faire ^^'
Avatar de l’utilisateur
diomedea
Accro
Messages : 3548
Inscription : 16 avr. 2015, 13:45
Contact :

Re: Affichage arduino

Message par diomedea »

Canou a écrit :Bonjour,
c'est bien l'idée. et comme toujours les conceptions de Diomedea illustre une réalisation parfaite..
Merci!
Le dessin montre le moteur pas à pas qui actionne la table de ma raboteuse.
Il y a trois sortes de gens: Les vivants, les morts et les marins...
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 6 invités