Étape 3: Le code
Voici le code :
/*
Thermomètre issu des maximes DS600u + puce
*/
#include « U8glib.h »
#include < math.h >
U8GLIB_ST7920_128X64_4X u8g (8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16) ; 8 bit Com: D0... D7 : fr 8,9,10,11,4,5,6,7 = 18, di = 17, rw = 16
void u8g_prepare(void) {}
u8g.SetFont(u8g_font_6x10) ;
u8g.setFontRefHeightExtendedText() ;
u8g.setDefaultForegroundColor() ;
u8g.setFontPosTop() ;
}
void setup(void) {}
Flip écran, si nécessaire
u8g.setRot180() ;
assignez la valeur de couleur par défaut
Si (u8g.getMode() == U8G_MODE_R3G3B2)
u8g.setColorIndex(255) ; blanc
ElseIf (u8g.getMode() == U8G_MODE_GRAY2BIT)
u8g.setColorIndex(3) ; intensité max
ElseIf (u8g.getMode() == U8G_MODE_BW)
u8g.setColorIndex(1) ; pixel sur
u8g.setContrast(0x30) ;
pinMode (13, sortie) ;
digitalWrite (13, HIGH) ;
u8g_prepare() ;
}
void draw(void) {}
flotteur d’alimentation = 4,91; L’espèce doit être entré dans la tension mesurée de la carte arduino
lire la tension de sortie du capteur
lecture int = analogRead(0) ;
float v_out = (lecture * approvisionnement) /1.024;
afficher sur l’écran LCD de la température
flotteur de température = (v_out - 509) / 6,45 ;
temp de char [5] ;
dtostrf(temperature,5,1,Temp) ;
u8g.drawStr(4,24,"Temperature:") ;
u8g.drawStr(76,24,Temp) ;
u8g.drawStr (108,24,"\260C") ;
}
void loop(void) {}
boucle de photo
u8g.FirstPage() ;
{}
Draw() ;
} tout en (u8g.nextPage()) ;
reconstruire l’image avec un certain retard
Delay(1000) ;
}
Il y a quelques points difficiles dans le code.
Je les ai mis en gras.
1) parce que l’ADC Atmega interne utilise la tension d’alimentation de référence pour mesurer les potentiels de tension analogique, qui n’est pas métrique de rapport à la tension d’alimentation, mais fixé par la puce du capteur, si la tension d’alimentation varie, une erreur peut se produire. Calcul approximatif dit que 50mV approvisionnement variation peut provoquer erreur de température de 1 degré. La solution pour améliorer la précision consiste à mesurer la tension exacte sur la carte Arduino dans la façon dont il doit être utilisé - si vous avez l’intention d’utiliser le thermomètre de l’Arduino alimenté par le port USB, vous devez mesurer la tension d’alimentation de Conseil dans ce cas ; et, respectivement, si vous avez l’intention d’utiliser le thermomètre comme stand-alone appareil fourni par adaptateur AC/DC - puis, la tension d’alimentation de la pension + bouclier doit être mesurée dans cette condition. Dans mon cas l’appareil est alimenté par le port USB, et j’ai mesuré 4.91V sur les broches de Arduino "5V". Alors j’ai mis cette valeur dans le sketch.
2) il est bon que sur l’écran LCD vous pouvez voir le symbole degré « ° ». Le problème ici est que les différents affichages ont différentes tables ASCII, et quel est exactement le nombre octal correspondant au symbole est difficile à dire. Il y a deux solutions possibles :
A) pour lire la fiche technique du module LCD / pilote si il ne reçoivent aucune table ASCII
B) d’écrire un sketch pour afficher toute la table ASCII écrite dans la ROM de LCD, pour voir où le symbole s’affiche et à calculer/Voir le nombre décimal correspondant à elle. Plus loin pour convertir cette valeur en nombre octal et mettre dans le croquis.
J’ai utilisé la deuxième approche... et dans le plus simple:-) - il y a « Exemples » dans la bibliothèque u8glib. Le programme « GraphicsTest » imprime deux tables ASCII stockés dans la puce de conducteur ROM. Là, j’ai trouvé que le symbole nécessaire a la 260 nombre octal en nombre équivalent.
Les gars, qui veulent mettre en place ce projet sur l’Arduino Due, je voudrais des conseils pour insérer dans le code également la ligne suivante :
analogReadResolution(12) ;
dans la procédure d’installation, puis au lieu de diviser sur 1.024 à diviser sur 4.096. Cela permettra d’améliorer la résolution de l’ADC et en quelque sorte aussi la précision du thermomètre.