SP-2:.### Z01### [Picaxe] Fabriquer un thermomètre digital à écran OLED sur port USB et sondes KTY précises. Forum Cyclurba.fr. Habitat, écologie et énergie

Nouvelle discussionNouveau message Derniers messages Recherche forum
24 messages.   1 2 3   - [Picaxe] Fabriquer un thermomètre digital à écran OLED sur port USB et sondes KTY précises. [17520]
Meuh
17-11-2015 à 21h08
Acceder au profil du membre
Bonjour à tous,

Voici un sujet pour montrer comment fabriquer un thermomètre programmable à base de :

- Ecran OLED 16 caractères et 2 lignes
- Picaxe 18M2
- Sonde de température analogique KTY à large plage résistive

Le module employé est celui vendu directement par picaxe sous la référence AXE133Y.
www.picaxe.com



Il est livré avec un mode d'emploi pour la soudure (en anglais uniquement) et le programme est à télécharger (fichier texte à copier-coller dans le programme qui écrit le picaxe).
www.picaxe.com

Biensûr (et malheureusement), il vous faudra acquérir le câble de programmation pour programmer la puce picaxe (par connecteur jack au module AXE133Y).
www.picaxe.com

Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [413253]

Message modifié le 2016-01-16 15:35:32 par Meuh.
Meuh
17-11-2015 à 21h14
Acceder au profil du membre
Pour la bonne marche du sujet, voici le programme modifié UNIQUEMENT pour l'écran OLED.

Ce programme permet de voir l'OLED démarrer et de tester chaque pixel utilisable sur chaque bloc de caractère.

Il ne permet pas encore d'utiliser les sondes de température ... mais vous donne une bon idée de ce l'écran peut faire et à quelle vitesse.

D'ailleurs, notez bien que le programme a été ralenti exprès (passage de 16MHz à 4Mhz sur certaines instructions seulement) pour que les "PAUSE" soient valables (1000 = 1000ms = 1s).

Astuce : Pour piloter l'écran, vous avez quelques instructions fournies par picaxe à appliquer à "let pinsB = x"

x = 1 : effacement de l'écran (doit être suivi immédiatement d'une pause de 30ms)
x = 8 : éteindre l'écran (temporairement, le message n'est pas perdu sur l'afficheur)
x = 12 : rallumer l'écran
x = 14 : afficher un curseur
x = 16 : bouger le curseur à gauche
x = 20 : bouger le curseur à droite
x = 128 : mettre l'afficheur sur la ligne du haut (1er caractère)
x = 192 : mettre l'afficheur sur la ligne du bas (1er caractère)
x = 128 + y : mettre l'afficheur sur le y-ème caractère à la ligne du haut
x = 192 + y : mettre l'afficheur sur le y-ème caractère à la ligne du bas

Les dernières instructions sont vitales ... car, quand on manipule les écrans OLED, on utilise des "calques".

Ainsi, on n'écrit qu'une seule fois une phrase ... et ensuite, on ne change que la valeur qui bouge à coté.

Ce qui économise de la place dans la puce à programmer.
L'écran est donc magnétique en quelque sorte.


#picaxe 18M2

symbol line_length = 16; change to 20 for displays with 20 character lines

symbol spare0 = C.0 ; spare output 0
symbol spare1 = C.1 ; spare output 1
symbol spare2 = C.2 ; spare output 2

symbol enable = C.6; LCD enable
symbol rs = C.7; LCD RS 


; LCD data pins are on B.0 to B.7

; Store the 16 character user defined messages in EEPROM data memory
; First two messages are optionally used as welcome message


EEPROM $00, (" OLED  CYCLURBA ") ; store msg in the EEPROM memory
EEPROM $10, ("      2015      ") ; store msg 1 in the EEPROM memory

EEPROM $20, ("This is msg 2   ") ; store msg in the EEPROM memory
EEPROM $30, ("This is msg 3   ") ; store msg in the EEPROM memory
EEPROM $40, ("This is msg 4   ") ; store msg in the EEPROM memory
EEPROM $50, ("This is msg 5   ") ; store msg in the EEPROM memory
EEPROM $60, ("This is msg 6   ") ; store msg in the EEPROM memory
EEPROM $70, ("This is msg 7   ") ; store msg in the EEPROM memory
EEPROM $80, ("This is msg 8   ") ; store msg in the EEPROM memory
EEPROM $90, ("This is msg 9   ") ; store msg in the EEPROM memory
EEPROM $A0, ("This is msg 10  ") ; store msg in the EEPROM memory
EEPROM $B0, ("This is msg 11  ") ; store msg in the EEPROM memory
EEPROM $C0, ("This is msg 12  ") ; store msg in the EEPROM memory
EEPROM $D0, ("This is msg 13  ") ; store msg in the EEPROM memory
EEPROM $E0, ("This is msg 14  ") ; store msg in the EEPROM memory
EEPROM $F0, ("This is msg 15  ") ; store msg in the EEPROM memory











init:

let dirsC = %11000111; PortC 0,1,2,6,7 all outputs
let dirsB = %11111111; PortB all outputs

pause 500 ; Power stabilistation = 500ms

let pinsB = %00111001 ; 8 bit, 2 line, 5x8 , Western_European table1

pulsout enable,1  ; 

let pinsB = %00001100; Display on, no cursor, no blink
pulsout enable,1 

let pinsB = %00000001 ; Display Clear
pulsout enable,1
pause 7; Allow 6.2ms to clear display

setfreq m16; now change to 16Mhz

let pinsB = %00000010 ; Return Home
pulsout enable,1

let pinsB = %00000110 ; Entry Mode, ID=1, SH=0
pulsout enable, 1

high rs; Leave in character mode


welcome:


let b1 = 0; EEPROM 00 on top
gosub msg; do it

low rs; command mode
let pinsB = 192; move to line 2, instruction 192
pulsout enable,1  ; pulse the enable pin to send data.
high rs; character mode again

let b1 = 1; EEPROM 10 on bottom
gosub msg; do it

setfreq m4 : pause 3000 : setfreq m16
















testOLED:

low rs; command mode
let pinsB = 1; clear all display, instruction 1
pulsout enable,1  ; pulse the enable pin to send data.
high rs
pause 30

setfreq m4 : pause 1000 : setfreq m16

low rs; command mode
let pinsB = 128; move to line 1, instruction 128
pulsout enable,1  ; pulse the enable pin to send data.
high rs; character mode again


let b5=16
do
let pinsB = %11111111
pulsout enable, 1
setfreq m4 : pause 1000 : setfreq m16
dec b5
loop until b5=0

low rs; command mode
let pinsB = 192; move to line 2, instruction 192
pulsout enable,1  ; pulse the enable pin to send data.
high rs; character mode again

let b5=16
do
let pinsB = %11111111
pulsout enable, 1
setfreq m4 : pause 1000 : setfreq m16
dec b5
loop until b5=0

let pinsB = %00000001 ; Display Clear
pulsout enable,1
pause 7; Allow 6.2ms to clear display

setfreq m4 : pause 3000 : setfreq m16

goto main






; display message from EEPROM sub routine
; message number 0-15 must be in b1 when called
; uses (alters) b1, b2, b3, b4
msg:
let b2 = b1 & %00001111 * line_length
; EEPROM start address is 0 to 15 multiplied by 16
let b3 = b2 + line_length - 1 ; end address is start address + (line_length - 1)
for b4 = b2 to b3; for 16 times
read b4,b1; read next character from EEPROM data memory into b1
let pinsB = b1 ; output the data
pulsout enable,1  ; pulse the enable pin to send data.
next b4; next loop
return







main:

low rs; command mode
let pinsB = 1; clear all display, instruction 1
pulsout enable,1  ; pulse the enable pin to send data.
high rs
pause 30

goto main



Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [413255]

Message modifié le 2015-11-17 21:26:49 par Meuh.
publicité
17-11-2015 à 21h14
Accédez à notre site www.power-e-bike.fr
Lien commercial -232-


Meuh
17-11-2015 à 22h54
Acceder au profil du membre
A noter un bug de compréhension entre le picaxe et l'écran.
Le signe "degrès" ne s'affiche pas correctement quand on le stocke dans l'EEPROM.

Il faut le "coller" sur l'afficheur à l'endroit exact où on veut remplacer un faux caractère.


low rs; command mode
let pinsB = 137; move to line 1, +9 
pulsout enable,1  ; pulse the enable pin to send data.
high rs
let pinsB = %11010010 ; correction on "degres" character
pulsout enable,1



Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [413266]

Message modifié le 2015-11-17 22:56:51 par Meuh.
Meuh
18-11-2015 à 16h13
Acceder au profil du membre
J'ai utilisé ce site pour récupérer les tensions théoriques qui sortent du pont diviseur de tension créée entre le 5v et le 0v avec une R de 2K et la sonde KTY résistive.

www.electronique-radioamateu...eur-tension.php

Je dois donc, maintenant, trouver la formule linéaire entre la tension mesurée aux entrées ADC du picaxe 18M2 et la valeur indiquée en 10bit.

La tension varie de 1,61v à -55°C en passant par 2,5v à 25°C et s'arrêtant à 3,31v sous 120°C.

-

Comme l'avait précisé un membre ... la tension d'alimentation doit être fiable et stable pour que la mesure de température soit juste.

Je ne peux donc pas utiliser mes batteries Li-Ion 3,7-4,0v pour le développement car ça ne collerait pas à la mesure de la KTY.

Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [413342]

Message modifié le 2015-11-18 16:20:17 par Meuh.
Jacques74
18-11-2015 à 16h36
Acceder au profil du membre
Tu peux pas l'alimenter en 3.3V ? ... = 120° selon ton message...
Et pour la fiabilité/précision, c'est aussi du coté de ton ADC microprocesseur que ça doit être super stable, pas seulement l'alim de la sonde.
Si tu as de petites variations au niveau de l'ADC, au moment de la conversion cela peut t'amener des erreurs. Il faut donc éviter tout parasitage ou fluctuation de la tension de référence..

Anonyme, 16653 msg, (FR).
 Citer Alerter [413349]

Message modifié le 2015-11-18 16:41:55 par Jacques74.
Papat-Le-Bref
18-11-2015 à 17h04
Acceder au profil du membre
La courbe ressemble plus à un arc de parabole qu'à une droite. Tu peux essayer avec un polynome du second degré: Temp=a(Tension+b)^2+c

Dans ton cas, ça fait: (un petit coup d'Excel)

Temp (en degC)= 16,115x(Tension en V)^2+23,653x(Tension en V)-134,85
ou encore:

Temp (en degC)= 16,115x(Tension en V + 0,734)^2-143,5

Ça passe bien par les 3 points.

Papat, 18592 msg, 53 ans. Fatbike Mxus 3kw (NL). [mon blog] LiPo 18S-20Ah - Vélotaf plage 42 km/j
 Citer Alerter [413353]

Message modifié le 2015-11-18 17:11:29 par Papat-Le-Bref.
Jacques74
18-11-2015 à 17h18
Acceder au profil du membre
Oui avec Excel c'est vraiment pratique !
Il suffit d'avoir une ou plusieurs sondes de référence et faire des tests dans de l'eau sur un réchaud, de par expl. 15° à 100°
On note les valeurs ADC de la sonde puis on trace la courbe, et Excel nous sort une jolie régression polynomiale d'ordre 2, avec la formule qui va bien

Dans le cas d'un appareil de surveillance basique, on peut aussi beaucoup plus simplement relever et calibrer quelques températures de référence, sans utiliser toute la gamme.

Mais perso je préfère les capteurs linéaires type LM35, c'est quand même moins laborieux

Anonyme, 16653 msg, (FR).
 Citer Alerter [413354]

Message modifié le 2015-11-19 03:25:00 par Jacques74.
Meuh
18-11-2015 à 20h16
Acceder au profil du membre
je savais bien que j'aurai une réponse
merci.

effectivement, j'avais un peu de mal à trouver un système pour faire des mesures ... mais la casserole d'eau avec 3 thermomètres différents permet cela.

---

Remarque : sur les picaxes de la série M2, on a pas le droit d'utiliser les parenthèses ou des formules mathématique non-entière (virgules).

En outre, si une formule dépasse 65535 (dans le cas d'un filtrage à boucle) ... il (le résultat) repasse par 0 (puis augmente de la différence).

Mais c'est pas grave, je peux adapter la formule sur plusieurs segment en fonction de la tension mesurée comme le propose une réponse du haut.

---

J'ai un peu de mal à afficher une valeur brute (stockée en word ou bit) directement (en une seule instruction) sur l'écran ... mais c'est pas grave non-plus, il suffit que je rentre les codes des 9 chiffres dans le programme pour envoyer les bonnes instructions en "bit" brute (11001111 par exemple).

Faut quand même que je regarde si l'instruction bcd pourrait pas faire cela tout seul ...

Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [413384]

Message modifié le 2015-11-18 23:20:02 par Meuh.
Superjc
19-11-2015 à 00h08
Acceder au profil du membre
DS18B20 -> easier to use, and without calibration
www.picaxe.com

Christophe, 2994 msg, 58 ans. Guyancourt (FR-78). [mon blog] 36V 250W VTT bafang swxk 185R MetV and BBS01 Cycloboost
 Citer Alerter [413397]
publicité
19-11-2015 à 00h08
Lien commercial -303-

Jacques74
19-11-2015 à 00h18
Acceder au profil du membre
Oui tout à fait, c'est du linéaire et du même genre que les TMP36, LM35, etc, etc..
C'est ce que j'utilise généralement.

Par contre j'ai favorisé plusieurs fois les CTN (autre domaine que le VAE) car on peut les trouver en taille minuscule !
C'est parfois indispensable. Par ailleurs on a pas forcement besoin d'une énorme plage de température de surveillance, donc on est pas obligé non plus de passer par une formule complexe pour être précis de 0 à 150° ...


Meuh a écrit :
...mais la casserole d'eau avec 3 thermomètres différents permet cela


Absolument. Il faut juste faire gaffe que les divers sondes ne touchent pas une parois et qu'elles soient proches l'une de l'autre.
Sur l'ensemble des sondes on arrive à calibrer assez précisément.
On a aussi une référence sur le point d’ébullition (c'est pratique), en tenant compte de l'altitude évidemment. Tu trouveras facilement un tableau.

Pour monter plus haut en température (plus de 100°) on peut aussi utiliser de l'huile
Par exemple pour vérifier la courbe après calibration dans l'eau.
L'huile d'olive extra vierge fume vers 190° (point de fumée) mais ne met quand même pas le feu à ta cuisine !

Anonyme, 16653 msg, (FR).
 Citer Alerter [413398]

Message modifié le 2015-11-19 03:34:15 par Jacques74.
24 messages.   1 2 3   - [Picaxe] Fabriquer un thermomètre digital à écran OLED sur port USB et sondes KTY précises. - Lu 5280 fois. [17520]
retour en haut de page Messages récents
répondre dans cette discussion
En ce moment sur le tchat
Le 27 à 10h09 Ptit-philou Bonjour, il faut poser la question sur le forum ;-)
Pas assez de place et de visibilité dans le tchat...
Le 30 à 19h26 Havoc Hinault: « Barguil fait n'importe quoi, il va courir avec le maillot tricolore sur les épaules ! ».
Le 04 à 22h18 Smalltwin ce message comporte une illustrationAlimenter un moteur brossé a 48v au lieu de 36.
Bonjour a tous
Ma question est simple.
Est il possible d'alimenter un moteur...
Le 05 à 21h07 Havoc Oui, il tournera plus vite et il faudra en tenir compte.
Le 15 à 17h36 Leyo Bonjour je voudrais savoir quelle type de contrôleur je dois l'acheter pour ma trottinette électrique.
je vous rajoute la photo de...

Découvrez nos produits
Lien commercial -341-



Accédez à notre site www.power-e-bike.fr


Transformez votre vélo en vélo électrique !