Afficher une informations en allumant une led

Questions générales... en particulier !

Postby sgrmetrage » Mon Feb 03, 2014 12:00 am

Bonjour;
Je me présente étudiant en Terminale STI2D et notre projet et de réaliser un stylo 3D (Pour plus d'informations faites une recherche c'est vraiment un projet passionnant). Nous sommes dans une phase de recherche de solutions et je suis face à quelques problèmes...
Je résume :
- Mon premier problème : "Afficher une informations temps de fonctionnement atteint par une led"
Je m'explique, à l'aide d'une RTC (DS1302 ou DS1307) nous allons estimer le temps de fonctionnement du stylo pour prévoir la maintenance du stylo en changeant la tète. Nous voulons donc mémoriser ce temps de fonctionnement lorsque l'on arrête le stylo et le cumuler ce temps lorsqu'on le rallume. Imaginons qu'on a fixé un seuil à 100h d'utilisation, le but serait de faire allumer une led qui indiquerais que les 100h sont dépassé.
Mais comment réaliser cela ? ce projet est vraiment compliqué pour mon niveau, alors j'aurais besoin d'aide et de conseil.
D'après mes recherches il serait plus simple d'utiliser un timer qu'une RTC car en fin de compte nous avons besoin que le nombre d'heures!

- Mon second problème : "Afficher des informations de température (Led fusion et sécurité) "
Une bref schéma : On a un capteur de température (qui sort une tension variable, pour cela on va utiliser une Thermistance Pt100, La PT100 en entrée de deux comparateurs, mais avec un seuil différent (Seuil de température atteinte, seuil de sécurité) que l'on règles grâce à un potentiomètre.)-->Arduino(qui transforme la tension en valeur numérique et en déduit la température) --> La température est comparé au seuil et si elle le dépasse la led s'allume (allumée par l'arduino) C'est à peut prèt cela que je veux réaliser.
Pour résumer :
- Pour les deux leds de controle température : Je peux utiliser des comparateur style LM311 pour allumé les deux DEL de contrôle de température.
- Pour la led du temps de fonctonnement : je peux faire un oscillateur (NE555;CD4060 etc qui sont des timer si j'ai bien bien compris), contrôler par la mise en marche de la tête chauffante qui alimente un compteur qui, quand il atteint la bonne valeur, allume la DEL de temps écoulé.

Voilà pour résumer! Je le répète je ne cherche pas à qu'on me face mon projet non je suis juste dans une phase de recherche de solutions possibles je me renseigne donc. Ce projet est vraiment passionnant mais énorme (pour nous) et nous sommes à vrai dire un peu perdu. Nous n'avons pas beaucoup de notion, et nous sommes lâché comme ça on doit ce débrouillé quoi ce qui est assez nouveau pour nous tous. C'est pourquoi je poste sur ce forum et d'autre d'ailleurs mais c'est un peu la bazar on a du mal à réellement trouver une bonne solution..
Merci à vous
sgrmetrage
 
Posts: 5
Joined: Thu Mar 13, 2014 10:19 am

Postby ymasquel » Mon Feb 03, 2014 12:00 am

Bonjour "SGRmetrage",

Effectivement, le comptage de durée n'a absolument pas besoin d'un RTC, un simple compteur (compteur/timer du micro-contrôleur) avec sauvegarde en mémoire non volatile est largement suffisant (même s'il fallait d'autre part utiliser la notion d'horaire).

Pour le contrôle de température, plutôt que des comparateurs externes il est plus simple d'utiliser une (seule) entrée analogique du contrôleur et d'effectuer la comparaison à des seuils (variables mémoire ou constantes soit fixés par programme, soit paramétrables).

Encore une fois, le micro-contrôleur (Arduino dans ce que tu présentes) peut se charger de tous ces détails.

Amicalement, Yves.
Amicalement,
Yves.
ymasquel
Site Admin
 
Posts: 3364
Joined: Thu Jan 02, 2014 10:44 am
Location: Oise (60)

Postby sgrmetrage » Tue Feb 04, 2014 12:00 am

Pouvez-vous m'en dire plus sur le compteur ?

Personnellement je préfère un RTC plutôt qu'un timer ou un compteur. Mais je ne sais pas si c'est une bonne solution..
sgrmetrage
 
Posts: 5
Joined: Thu Mar 13, 2014 10:19 am

Postby ymasquel » Tue Feb 04, 2014 12:00 am

Bonjour "SGRmetrage",

Tu trouveras toutes les informations sur l'utilisation des compteurs sur n'importe quelle fiche de caractéristiques de micro-contrôleur.

Puisque tu sembles devoir utiliser un Arduino voici un lien sur les timers/compteurs que celui-ci peut utiliser.

Quelques explications en français pourraient peut-être aider à entrer plus vite dans le sujet.

Je ne vois vraiment pas la raison d'utiliser un RTC pour mesurer des durées. Cela ne fait que compliquer les choses.

Amicalement, Yves.'
Amicalement,
Yves.
ymasquel
Site Admin
 
Posts: 3364
Joined: Thu Jan 02, 2014 10:44 am
Location: Oise (60)

Postby sgrmetrage » Tue Feb 04, 2014 12:00 am

Bonsoir;
Merci pour la documentation car j'avoue que je suis vraiment perdu... un coup on me conseil la RTC l'autre fois non..

Si je comprends bien :
Dans la carte arduino on a un microcontrôleur type ATMEGA328, et un timer y es intégré. C'est bien cela ou est-ce un module à part ?

Ensuite avec ceci on va pouvoir mesurer une durée. Mais pour la stocker ? On peut faire cela dans l'eeprom interne d'arduino non ?

Pour finir, pour allumer les leds en fonction (du temps pour la première led) j'aurais juste à faire un programme arduino, qui lorsque le temps fixé sera atteint déclenchera une led ?
pour les leds de contrôle de température, plutôt que des comparateurs externes il est plus simple d'utiliser une (seule) entrée analogique du contrôleur et d'effectuer la comparaison à des seuils (à l'aide pareille d'un programme).

Tout cela n'est-il pas trop compliqué ? étant donné mon faible niveau en language arduino..



Après quelques recherche je suis tombé sur ceci :
http://forums.futura-sciences.com/electronique/310003-modifier-un-kit-velleman-mk138.html

Le kit velleman MK138, qui permet de faire une action (pour moi ce serais dallumer une led) lorsque l'on est au dessus d'une température, d'après vous serait-ce une bonne solution ?

Merci infiniment pour toutes votre aide, et le temps que vous prenez.'
sgrmetrage
 
Posts: 5
Joined: Thu Mar 13, 2014 10:19 am

Postby ymasquel » Tue Feb 04, 2014 12:00 am

Bonjour "SGRmetrage",

Il y a 3 "counter/timer" dans l'ATMEGA328.

Il y a 1024 octets d'EEPROM pour y stocker des données et les retrouver après avoir interrompu (ou non) l'alimentation.

Quelques instructions suffiront pour incrémenter une variable en mémoire à chaque fois que le compteur choisi aura effectué un "tour" complet. Utiliser une routine d'interruption qui sera activée sur détection du flag de débordement est le plus judicieux, choisir cette routine pour comparer le temps écoulé avec le seuil et allumer la LED d'alarme est peut-être aussi une bonne solution.

Une entrée analogique (éventuellement précédée d'un diviseur de tension au cas où le niveau dépasse 5V) permettra de mesurer la température et là aussi une simple comparaison avec les valeurs de consigne permettra de traiter ces évènements. On peut effectuer ces contrôles dans une boucle perpétuelle ou profiter des interruptions du compteur pour éviter de travailler en mode "polling" qui gaspille des ressources.

Amicalement, Yves.
Amicalement,
Yves.
ymasquel
Site Admin
 
Posts: 3364
Joined: Thu Jan 02, 2014 10:44 am
Location: Oise (60)

Postby sgrmetrage » Tue Feb 04, 2014 12:00 am

Oui étant donné que j'en aurais besoin d'un seul ce sera largement suffisant.

Veillez m'excusez je n'ai pas trop compris cette partie :
Quelques instructions suffiront pour incrémenter une variable en mémoire à chaque fois que le compteur choisi aura effectué un "tour" complet. Utiliser une routine d'interruption qui sera activée sur détection du flag de débordement est le plus judicieux, choisir cette routine pour comparer le temps écoulé avec le seuil et allumer la LED d'alarme est peut-être aussi une bonne solution.
sgrmetrage
 
Posts: 5
Joined: Thu Mar 13, 2014 10:19 am

Postby ymasquel » Wed Feb 05, 2014 12:00 am

Bonjour "SGRmetrage",

Un compteur/timer est incrémenté (ou décrémenté) sur la base des impulsions de l'horloge de base du micro-contrôleur (il peut aussi l'être sur une impulsion fournie sur une broche du micro-contrôleur mais comme je n'ai pas assez d'informations sur ton projet je le suppose autonome).

Ces impulsions sont donc basées sur une fréquence rapide. Un pré-diviseur précède généralement le compteur pour que, au choix du concepteur, le compteur soit incrémenté à chaque impulsion d'horloge, ou toutes les 2, 4, 8, ...impulsions d'horloge.

Malgré ce pré-diviseur, selon les durées à mesurer, le compteur/timer risque fort de déborder avant d'avoir atteint la durée espérée. A chaque fois que le compteur déborde il positionne un signal qui peut déclencher l'exécution automatique d'une routine appelée interruption.

Je propose d'utiliser cette routine qu'on pourrait imaginer déclenchée chaque seconde ou autre (en fonction de la fréquence d'horloge, de la valeur du pré-diviseur et de la valeur qu'on recharge dans le compteur/timer) pour d'une part incrémenter une variable mémoire (ou même une information en EEPROM), tester si cette variable a atteint le nombre correspondant à la durée limite pour allumer la LED et d'autre part recueillir la température sur l'entrée analogique et la comparer aux seuils.

Mais je pense que la lecture et la compréhension d'une bonne littérature sur les micro-contrôleurs t'es indispensable.

Amicalement, Yves.
Amicalement,
Yves.
ymasquel
Site Admin
 
Posts: 3364
Joined: Thu Jan 02, 2014 10:44 am
Location: Oise (60)

Postby escartefigue33 » Thu Feb 06, 2014 12:00 am

Bonjour Yves,

Comme toujours, ta patience est admirable...

SGRmetrage devrait évidemment commencer par le début, il existe suffisamment de tutoriels gratos sur le web pour démarrer sur Arduino

Autre solution, encore plus efficace, je ne peux que lui conseiller l'excellent ouvrage de C. Valens "maitrisez Arduino".

Quand on hésite entre un kit Wellman, un 555, un Arduino et une RTC p(arfaitement inutile), cela révèle des lacunes que lmême la lecture de l'ensemble des posts du forum ne pourrait combler....

Cdlt,
Gérard
escartefigue33
 
Posts: 2764
Joined: Fri Jan 17, 2014 4:34 pm

Postby sgrmetrage » Wed Feb 12, 2014 12:00 am

Bonsoir;
Je suis totalement d'accord avec vous, je suis conscient que le timer est une meilleure solution... mais voila mon prof m'impose la RTC je n'ai vraiment pas le choix. Cette après midi je lui en est encore parlé il m'a envoyé bouler...
Je n'ai plus le choix Nos solutions concernant les parties de notre projet sont à présenter dans deux jours(le projet compte coefficient 12 au bac) , j'ai bosser sur toutes mes autres solutions mais celle-ci je bloque et il faut vraiment que je m'y mette.... mème si je suis conscient que la RTC n'est pas la bonne solution. Je dois faire avec et je suis totalement perdu à ce sujet..

De plus je me permet de réagir sur le message de "escartefigue33" Je ne fais parcourir que forum sur forum... je n'arrive pas à trouver de solutions. Beaucoup vienne ici en attendant qu'on leur donne la réponse mais moi ce n'est pas de mon cas. J'ai de grosse lacune en électronique, c'est d'ailleurs le cas de tout le monde dans notre classe mais nous devons faire avec et nous avons ce projet coefficient 12 au bac! Je passe des heures et des heures à bosser chaque soir dessus... je sais que beaucoup pense que je dois le faire exprès car je n'y comprends rien mais ce n'est vraiment pas voulu. Je n'ai pas le temps de me retaper tout l'apprentissage d'arduino qui nous a mal été enseigner et dont ces lacunes ce retrouve cher tous de notre classe aujourd'hui. Je vous remercie infiniment pour votre patience, je ne vous oblige vraiment pas à répondre, comprenez juste que ce n'est pas simple..

Si je requiert votre aide c'est que je suis vraiment perdu à ce sujet, je ne sais pas si c'est possible à mettre en place... et comment le faire..

Pour en revenir à nos moutons :
Je dis surement des bêtises mais mais on détecte l'allumage et l'extinction et à l'allumage et à l'extinction, on lis les valeurs dans le DS1307. On soustrait et on accumules en mémoire.
Après faut le faire... L'allumage c'est pas vraiment un problème, par contre l'extinction se sera plus délicat puisqu'il faut détecter l'extinction et lancer une procédure pour sauvegarder le temps écoulé.

- Je pourrais utiliser ce bout de code pour lire, écrire, et sauvegarder :
#define DS1307_ADDRESS 0x68typedef struct {uint8_t secondes;uint8_t minutes;uint8_t heures; // format 24huint8_t jourDeLaSemaine; // 0~7 = lundi, mardi, ...uint8_t jour;uint8_t mois;uint8_t annee; // format yy (ex 2012 -> 12)} Date;// Ps uint8_t est un synonyme de byte, byte ne pouvant etre utilise dans un structure contenu dans un .h externe// Fonction configurant le DS1307 avec la date/heure fournivoid ecrire(Date *date) {Wire.beginTransmission(DS1307_ ADDRESS); // Début de transaction I2CWire.send(0); // Arrête l'oscillateur du DS1307Wire.send(dec2bcd(date->secondes)); // Envoi des donnéesWire.send(dec2bcd(date->minutes));Wire.send(dec2bcd(date->heures));Wire.send(dec2bcd(date->jourDeLaSemaine));Wire.send(dec2bcd(date->jour));Wire.send(dec2bcd(date->mois));Wire.send(dec2bcd(date->annee));Wire.send(0); // Redémarre l'oscillateur du DS1307Wire.endTransmission(); // Fin de transaction I2C}// Fonction récupérant l'heure et la date courante à partir du DS1307void lire(Date *date) {Wire.beginTransmission(DS1307_ ADDRESS); // Début de transaction I2CWire.send(0); // Demande les info à partir de l'adresse 0 (soit toutes les info)Wire.endTransmission(); // Fin de transaction I2CWire.requestFrom(DS1307_ADDRES S, 7); // Récupère les info (7 octets = 7 valeurs correspondant à l'heure et à la date courante)date->secondes = bcd2dec(Wire.receive()); // stockage et conversion des données reçudate->minutes = bcd2dec(Wire.receive());date->heures = bcd2dec(Wire.receive() & 0b111111);date->jourDeLaSemaine = bcd2dec(Wire.receive());date->jour = bcd2dec(Wire.receive());date->mois = bcd2dec(Wire.receive());date->annee = bcd2dec(Wire.receive());


- Pour détecter l'allumage/Extinction.
Je sais que ma RTC 1307 ou Grove communique par I2C ( l'I2C est un protocole de bus de données en série qui permet à plusieurs dispositifs pour relier les uns aux autres avec assez lentes vitesses de transfert de données.Ces taux de transfert des données lentes sont suffisamment rapides pour de nombreux appareils permettent de bus et d'être très simple à mettre en oeuvre. La vraie beauté de ce protocole est que l'on peut contrôler jusqu'à 112 dispositifs avec seulement deux fils à partir d'un microcontrôleur. Donc si j'ai bien compris la RTC 1307 ou Grove communique par I2C mais pas toutes... la RTC1302 communique par protocole SPI il me semble)

La question que je me pose justement c'est comme détecter l'allumage/Extinction, comment communique la RTC avec Arduino (Oui par I2C, mais il n'y a pas de module entre, tout ce fera simplement dans le programme ?)
J'ai trouvé qu'il fallait faire une interragation NTP (L'interrogation NTP retourne l'heure UTC, exprimée en secondes écoulées depuis le 01/01/1900 00:00, en binaire sur 4 octets.
Mon problème est donc de passer ce format au format étendu pour le DS1307.
Dans mon cas, j'utilise la RAM du DS1307 pour stocker des informations :
- la dernière date/heure lue du DS1307, pour détecter les coupures électriques, au redémarrage de l'arduino
- la date/heure de dernière synchronisation NTP, pour gérer le délai entre les demandes de synchronisation, sans être influencé par les coupures électriques.
Et accessoirement, cela me permet aussi de détecter, au démarrage de l'arduino, que la pile du DS1307 est morte (quand je ne retrouve pas en RAM les données attendues). )
Mais c'est toujours compliqué pour moi de comprendre tout ça... et de comment le mettre en place.

Merci d'avance
sgrmetrage
 
Posts: 5
Joined: Thu Mar 13, 2014 10:19 am


Return to Électronique générale.

Who is online

Users browsing this forum: No registered users and 1 guest