domotique arduino : 8 relais + 3 DS18B20 + email + téléinfo + NTP + delesteur

Bjr,

Je reviens sur un ancien projet avec un changement de matos.
Là, je suis passé sous Mega 2560 avec W5100.
J'ai trouvé un super sketch pour commander depuis le web (même sur smarthphone) 8 relais, vérifier les entrées analogiques et digit.
Il y a aussi une lecture de la T°C par résistance ctn.

Mon but, c'est dans un premier temps de remplacer la lecture du ctn par une lecture par DS18B20. J'ai essayé mais il me compile bien mon "nouveau" sktech (transformé) il l'upload aussi mais après impossible de me connecter. J'ai du oublier une ligne ou il me manque un reset dans le loop ?

Précision : avant mon changement, il se connectait parfaitement. J'ai un peu galéré pour arriver enfin à compiler en 022 sans erreur (visible pour le logiciel).

Dans un second temps (une fois 1ere solution trouvé), je vais essayer de changer les cases des interrogations analo. par une lecture de la télé info.

Merci pour tout aide.

bluemax2001:
J'ai essayé plusieurs modèles mais il y a tjrs des erreurs.

Je crois que je vais rester comme cela ou revoir par la ctn !!!

Pas d'idée ?

bonjour
Vous avez testé le DS18B20 seul ?
essayez ce code là :
http://cjoint.com/11dc/ALnswoEZK7Z_DS18B20.pde
Vous n'avez pas oublié la R de 4.7K entre +5V et DQ ?
j'ai regardé rapidement votre sketch et je ne vois pas bien où se fait la demande de T° au 18B20.
vous pouvez mettre en ligne le sketch non modifié , celui qui fonctionne avec la CTN ?

ça doit renvoyer quelque chose comme ça sur le serial :
**** Detection du capteur ****
1 capteur 1-wire present avec code adresse 64 bits : 28 09 53 66 00 00 00 CA
Type du capteur present : Capteur temperature DS18B20.
Verification du code CRC de l'adresse 64 bits de ce capteur : VALIDE !
----- fin de la recherche du capteur ----

**** Acquisition d'une mesure de la temperature ****

---- lecture de la RAM du capteur ----
Octet 0 (Resultat poids faible)=1000110
Octet 1 (Resultat poids fort)=1
Octet 2 (Alarme haute)=1001011
Octet 3 (Alarme basse)=1000110
Octet 4 (Registre de configuration)=1111111
Octet 5 (Reserve)=11111111
Octet 6 (Reserve)=1010
Octet 7 (Reserve)=10000
Octet 8 (code CRC mesure)=10000101

---- test de controle de validite des donnees recues ----
Verification du code CRC de ce resultat : VALIDE !

---- calcul de la temperature ----
Mesure brute =326
Mesure Finale =20.37 Degres Celsius.

Super, merci.

J'ai bien mis la r4k7 entre S et +5.

Je vais essayer ton sketch sur mon uno sur port série donc, rapidement. Mais est ce possible de l'utiliser sans le port série après adaptation vers le "mien" ?

stantor arduino web mega v11. Ce projet est incroyable et super intéressant à mon avis. En plus l'auteur a un super contact. Merci à lui au passage.

bluemax2001:
Cela fonctionne :
code adresse : 28 93 03 B2 02 00 00 61
T°C : 22.62

bon c'est déjà une bonne nouvelle :grin:
J'ai récupéré ce qui concerne "arduino" sur le site (gros travail )
je regarderais ça demain pour voir où et comment substituer un DS18B20 à la CTN

bluemax2001:
:wink:

PS : on peut rester sur la pin 10

bonjour
ci joint une injection de code 1Wire "à la hussarde" :grin: (j'ai essayé de commenté proprement )
faite sur la base d'un uno , je n'ai pas de mega
pin 1W = digitale 4 (la 10 est utilisée par le module ETH)
attention j'ai changé l'adresse IP et le port
chez moi ça roule
http://cjoint.com/11dc/ALolnCACZqi_webuno1w.pde

bluemax2001:
Merci pour ton aide et ton travail.
Je vais essayer de le mettre sur le mega ou d'abord le tester comme cela puis l'inclure sur celui du mega.

Si j'ai bien vu, tu as ajouter les lignes 215 à 226 et 467 à 501.

je suis pressé de le tester dés que je rentre ... :wink:

teste d'abord sur ton uno+ETH
Je ne regarde pas la numérotation mais ça doit être ça
declarations et traitement proprement dit du DS18B20
je n'ai pas touché à la section CTN et calcul (intéressant d'ailleurs)
Je remplace juste la valeur calculée pour la CTN par celle du DS18B20 juste avant affichage.
c'est pas beau, mais c'est fonctionnel au moins pour test 8)

bluemax2001:
Mince, chez moi cela indique tjrs 0.00 aussi bien sur le mega que sur le uno (code serveur uno)

J'ai essayé de changer la ds18b20 ... pareil

J'ai regardé le code mais cela semblait bon.

Je vais regarder de nouveau ce soir.

PS : j'ai utilisé le même ds18B20 que ci dessus.

par acquis de conscience j'ai revérifié
chez moi pas de probleme

photos et hardcopy

1er cas
ds18B20 seul connecté
T° ambiante

2eme cas
DS18B20 tenu entre pouce et index
+5V sur A0 +3.3V sur A1 GND sur A2

bluemax2001:
Je viens d'essayer d'inclure ton code dans le sketch du mega (en pièce jointe).

Il me demande le code puis il affiche tout jusqu'à la lecture de la T°C où là il cherche, cherche,... et plante si on fait un rafraichir par ex.
Dans le doute d'une mauvaise manip, je l'ai mis en pièce jointe.

J'ai pensé qu'il pouvait y avoir un problème sur ma librairy onwire. Où as tu pris la tienne pour avoir la même ?

Ensuite, mets tu une l'adresse de ta DS18B20 ? (j'ai essayé sans succès)

Tu utilises la version 022 du log arduino ?

Sinon, pour bien vérifier mais avec les photos cela semble identique :
Signal sur S signal Pin10 de l'arduino (4 pour toi)
+5v sur V avec la résistance 4k7 qui va vers le signal
gnd vers G

Je suis un peu bille si je n'y arrive pas =(

bonjour
déjà a tu testé sur uno+eth ?
j'utilise la lib standard fournie
je suis en 022

je n'ai pas de mega, mais je pense peut être que ta pin 10 est conflictuelle , essaie avec une (d'autres) pin digitale
(voir peut être aussi si il n'y a pas un pullup parasite d'activé sur pin10)
l'affectation se fait là :
const int broche_OneWire=pinD04; //declaration constante de broche

l'adresse du ds18B20 est résolue par l'instruction :
capteur.search(adresse);

bluemax2001:
J'avais déjà mis pinD04 dans le sketch mais je n'avais pas enregistré sous le log arduino.
Donc, j'ai changé ma librairy en prenant la 2.1 et le port (j'avais aussi mis N sous pull up du 10) et là : Super boulot et merci pour ton aide :slight_smile:

Penses tu qu'il serait possible aussi de changer le délais juste pour améliorer le temps de réaction bien que cela ne soit pas trop gênant ?

PS : je vais essayer maintenant de récupérer une ligne de ma télé info (consommation instantanée) pour l'inclure dans ce sketch. Là, cela sera plus dur car pour m'aider il faudra le "shield" qui va vers le compteur edf ou tout faire à l'aveugle !!!

Bon et bien voilà !
pour le délai , il est du au temps de conversion du ds18B20 sous 12 bits, le datasheet préconise au moins 750 ms
tu peu essayer de gagner un peu en passant
delay(1000); // au moins 750 ms
à
delay(750); // au moins 750 ms
et voir si il n'y a pas d'aberration de renvoyée, 800 est un bon compromis

et pour le PS "à chaque jour suffit sa peine" :slight_smile:

bluemax2001:
Tu as raison pour le PS, en plus avec les vacances :slight_smile: et bonnes fêtes.

J'avais demandé à celui qui a fait le codage principal si je pouvais mettre et transformer son travail. Il a accepté avec enthousiasme (il me semble) pour son projet.

Il m'a donné une idée que malheureusement je ne sais pas faire. C'est de mettre un compteur à 500 par ex pour que la recherche de la T°C ne soit pas faite à chaque cycle.
Est ce que cela te parle ? une idée ...

Bonjour
Je n'ai pas regardé la structure du programme, pour aller au plus court et à la hussarde j'ai collé la verrue juste derrière la mesure ctn.
l'acquisition ds18B20 est donc faite à chaque fois que le calcul CTN est effectué.
Je regarderais plus tard si c'est simple de mettre un compteur de passage avant de faire cette acquisition.

Stantor (le créateur du premier code) m'a envoyé son aide pour inclure la téléinfo. Je ne peux pas le tester avant quelques jours donc autant attendre pour le poster. Sauf si quelqu'un le peut le tester de suite ...
merci pour son aide.
Par contre, on ne mettra que la conso instantanée en W (PAPP) pour l'instant.

Est il possible d'inclure une condition pour par exemple mettre une couleur verte sur la T°C si supérieur à 5°C et rouge si inférieur ?

Voilà, pour le tableau Digit, j'ai mis la lecture du port correspondant aux lettres On/Off juste pour être certain d'être bien sur On ou Off. La lecture de la téléinfo me permet de vérifier aussi le bon fonctionnement tout en ne dépassant pas la puissance dispo du compteur EDF.en lisant le PAPP et en arrêtant une zone par ex.

Je dispose d'un delesteur, mais on pourrait imaginer de ne pas dépasser une puissance

Une fois le test réalisé (pour la téléinfo car là c'est des valeurs par défaut.
Le reste fonctionne soit lecture digit et analog, on/off sur 8 relais et une T°C sur DS18B20).
Il me faudra revoir l'esthétique ...
Notamment :

  • T°C, dans le titre, il me marque un A entre les deux (c'est quoi le bon code de T°C) ?
  • Les touches de sélection on/off plus "jolie"
  • j'ai un code pour un serveur ntp. Si quelqu'un pouvait m'aider à l'intégrer ? Cela serait sympa de le mettre juste sous le titre .
  • mettre une couleur verte à +5°C et rouge en dessous
  • autre ???

des idées me seraient utile ... thanks

Essaie ° pour le °, liste des codes

Pour le téléinfo, est-ce que tu reçois des caractères sur la liaison série ? Essaie un printf juste après

// get incoming byte:
    inByte = Serial1.read();
    
    Serial.print( inByte );

bluemax2001:
Merci, entre temps j'avais trouvé : http://www.w3schools.com/tags/ref_entities.asp

Je vais essayer de rajouter la ligne. Le plus difficile c'est d'aller le tester directement sur le compteur edf ext ...

Je me demandais si il ne serait pas mieux de mettre la ligne de téléinfo avant la lecture de la t°C. Comme il y a cette temporisation pour permettre la lecture de la DS18B20, n'y a t il pas là une perte de la trame edf ?

bonjour
je ne connais pas la teleinfo
mais j'ai cru comprendre qu'il s'agit de "pissage" continu = le "compteur" envoie en continu de la data sans se préoccuper si c'est lu ou pas ?
Si c'est bien le cas, alors que ce soit fait avant acq T° (18B20) ou après n'est pas là important, il suffit simplement d'attendre de lire une trame complète et intègre.

Un peu comme dans le décodage de trame GPS (sentences NMEA) , si tu prend la trame en cours d'emission = toutes les data non acquises , alors tu attend la prochaine trame complète et intègre pour faire ensuite "avec"

bluemax2001:
Je viens de tester la bonne réception sous serial de la trame de téléinfo sur un 2560. Tout fonctionne normalement.

Puis j'ai essayé mon code complet avec DS18B20 et téléinfo mais pas de lecture de trame. J'ai refait le test sans la lecture de la T°C mais pareil.

PS : le sketch utilisé est celui mis en ligne le 28.12 (le dernier).

Ne faudrait il pas lui laisser un délais pour la collecte de l'info ou pas assez de mem. pour le Mega ?

bonsoir
je n'arrive pas à voir où dans le code une trame teleinfo complète est acquise et validée ?
vous pouvez mettre le code simple de lecture sous serial ?

bluemax2001:
Vous pensez quoi de celui ci joint en test ?

des suggestions :expressionless:

Bonjour
à ce stade il faut faire un point d’étape !
je ne peux pas t'aider sur la teleinfo, je n'en dispose pas, je ne peux pas non plus tester avec un méga 2560 pour la même raison .
mais :
A tu avec le sketch test déjà vérifié que l'arduino 2560 recevait bien et recopiait ce qui sort en continu de la teleinfo vers le serial monitor?
en plus clair :
1200 teleinfo ----> mega ----> 115200 serial monitor ?
l'entrée de teleinfo est cablée où (quel pin) sur la mega ?

bluemax2001:
D'après le premier test, l'ensemble semble fonctionner comme il le faut grâce au codeur d'origine : stantor : merci.

Je le mettrai en ligne à la fin du test sur quelques jours, sur un nouveau post, de préférence pour tout expliquer en détail.

Je vais voir aussi si je peux y placer un lcd 44780 que je placerai sur le boitier avec si possible l'heure, le t°C et la conso inst. Ainsi, je pourrai voir de suite si tout fonctionne.

merci à ceux qui m'ont aidé et ceux qui ont suivi ce post. Enfin, si tout se passe bien :slight_smile:

bon, alors ça avance bien ! :grin:
pour mettre un lcd 44780 sans trop consommer de pins sur l'arduino, la solution à base de 74 595 est intéressante
voir ce topic
http://arduino.cc/forum/index.php/topic,84892.0.html

bluemax2001:
C'est intéressant son montage.
Par contre, sur un Mega il y a de la place donc je pense même le faire fonctionner en 8bits pour "gagner" en "vitesse".

Il me faut rajouter des pins sur le 5v et gnd de mon shield téléinfo pour récupérer cela pour le DS18B20.

Je vais essayer aussi avec un optocoupleur :
TouteLaDomotique.com : la maison connectée au meilleur prix

Par contre, je ne sais pas si c'est possible d'afficher sur le lcd l'heure en temps réel depuis un serveur ntp ?

pour le lcd travailler en mode 4 bits (majorités des montages) est bien suffisant

pour le ntp avec un shield ethernet voir ça

mais AMHA ce n'est pas interessant de l'utiliser en temps réel tout le temps :grin:
l’idéal est soit d'avoir une rtc sur l'arduino (ds1307 ou autre RTC) et de faire une synchro par ntp toutes les X heures (pour ton appli 4 fois/24h c'est déjà luxe.
ou solution plus... cheap : determiner le temps de boucle pour en déduire une "pseudo" seconde et faire une synchro NTP un peu plus souvent.

bluemax2001:
Est il possible de pouvoir se servir dans un même sketch aussi bien d'un W5100 que d'un ENC28J60 (pas en même temps) pour être un peu plus multi compatible ?

A mon avis, et même en supposant qu'il n'y ai pas déjà de probleme de compatibilité de pinout, c'est surement une usine à gaz qui vierar vite au "nid à embrouilles" :grin: