Étape 7: Les programmes en programmable
Jusqu’ici, nous avons appris comment mettre sur pied un Arduino et ajouter des diviseurs de tension pour conditionner le signal d’entrée analogique (tension) en réduisant le signal à un niveau qui se trouve dans les paramètres de la norme de l’Arduino. Nous avons ensuite compilé et transféré quelques croquis qui lisent les signaux et les affichent sur le moniteur de la série et l’écran LCD TFT. Maintenant c’est à vous d’étudier le code et continuer le travail. Je suis notamment le code pour les esquisses d’oter qui fonctionnera avec le matériel que nous avons mis en place.
/*--------------------------------------------------------------
Programme: 1 canal DVM avec échantillonnage
Description : Lit valeur sur A0 d’entrée analogique et calcule la tension en supposant
Il y a un diviseur de tension sur la broche A0 qui divise par 10.195
Matériel : Arduino NANO ou UNO avec diviseur de tension sur A0.
Logiciel : Écrit en utilisant Arduino 1.0.3 IDE
Date : 25 mars 2014
Auteur :
--------------------------------------------------------------*/
nombre d’échantillons analogiques à prendre par la lecture
#define NSAMP 100
#define sclk 13
#define mosi 11
#define cs 10
#define dc 9
#define rst 8 / / reset
#include / / bibliothèque graphique de base
#include / / spécifiques au matériel bibliothèque
#include
Tft Adafruit_ST7735 = Adafruit_ST7735 (cs, dc, rst) ;
int somme = 0 ; somme des échantillons prélevés
unsigned char Scount = 0 ; Numéro de l’échantillon actuel
flotteur V1 = 0,00 ; tension moyenne calculée
flotteur VMAX = 0,00 ;
flotteur VMIN = 100.00 ;
float val = 0,00 ;
flotteur VREF = 5.0 ;
flotteur Dv1 = 10.935 ;
void setup()
{
tft.initR(INITR_BLACKTAB) ; initialiser un onglet de puce, noire ST7735S
tft.fillScreen(ST7735_BLACK) ; effacer l’écran
tft.setTextColor(ST7735_GREEN) ;
tft.setTextSize(1) ;
tft.setCursor(10,0) ;
TFT.println ("voltmètre CC DVM") ;
tft.setTextColor(ST7735_WHITE) ;
TFT.println ("tension @ broches A0") ;
TFT.Print ("avec MAX, MIN valeurs") ;
tft.setTextColor(ST7735_RED) ;
tft.setCursor(0,140) ;
TFT.println ("attention tension max 55vdc") ;
}
void loop()
{
prendre un certain nombre d’échantillons analogiques et les additionner
tandis que (Scount < NSAMP) {}
Sum += analogRead(A0); / / lire et ajouter les échantillons
Val = (analogRead(A0)) ; Temp de stockage pour MAX / MIN
tft.setCursor (45, 110) ;
TFT.println(Val) ;
if(Val > Vmax) {//get une valeur maximale de l’échantillon
(VMAX = val) ;
}
if(Val < Vmin) {//get MIN valeur d’échantillon
(VMIN = val) ;
}
Scount ++; //increment le nombre d’échantillons
retard (10); //Wait 10 mS avant de lire le prochain échantillon
}
Une fois fait d’échantillonnage, calculer et afficher la tension moyenne calculée
V1 = ((float)sum / (float)NSAMP * VREF * Dv1 ) / 1024.0;
tft.setTextColor(ST7735_YELLOW,ST7735_BLACK) ;
tft.setCursor (45, 40) ;
tft.setTextSize(2) ;
TFT.println ("V1") ;
tft.setCursor (10, 60) ;
TFT.Print(v1) ;
TFT.println ("Vdc") ;
tft.setCursor (20, 90) ;
tft.setTextSize(1) ;
tft.setTextColor(0xff00,ST7735_BLACK) ;
TFT.Print ("VMAX") ;
TFT.Print ((float) VMAX * VRÉF/1023 * Dv1);// calcule et affiche la tension maximale calculée
TFT.println ("Vdc") ;
tft.setCursor (20, 100) ;
tft.setTextColor(ST7735_GREEN,ST7735_BLACK) ;
TFT.Print (« VMIN") ;
TFT.Print ((float) VMIN * VRÉF/1023 * Dv1);// calcule et affiche la tension minimale calculée
TFT.Print ("Vdc") ;
Scount = 0 ; réinitialiser le nombre d’échantillons
somme = 0 ; réinitialiser la somme
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*--------------------------------------------------------------
Programme : voltmètre de voltmètre 4 canaux
Description : voltmètre 4 canaux DC affichée des tensions
sur l’écran LCD TFT couleur avec 1 décimale, à l’aide d’échantillonnage et une moyenne de
Matériel : Arduino NANO ou UNO avec diviseurs de tension sur A0 à A3.
TFT LCD connecté
Logiciel : Développé à l’aide du logiciel Arduino 1.0.3
Date : 10 mars 2014
Auteur :
--------------------------------------------------------------*/
#define sclk 13
#define mosi 11
#define cs 10
#define dc 9
#define rst 8 / / reset
#include / / bibliothèque graphique de base
#include / / spécifiques au matériel bibliothèque
#include
Tft Adafruit_ST7735 = Adafruit_ST7735 (cs, dc, rst) ;
nombre d’échantillons analogiques à prendre par la lecture, par canal
#define NSAMP 100 / / nombre d’échantillons à prendre avant affichage
valeurs d’étalonnage de diviseur de tension
#define Dv1 11.00
#define Dv2 11.001
#define Dv3 11.00
#define Dv4 10.985
Tension de référence ADC / valeur d’étalonnage
#define VREF 5,00
int somme [4] = {0} ; sommes d’échantillons prélevés
unsigned char Scount = 0 ; Numéro de l’échantillon actuel
char AVvolts [4] = {0,0} ; tensions calculées
char cnt1 = 0 ; utilisé en « pour » boucles
void setup()
{
tft.initR(INITR_BLACKTAB) ; initialiser un onglet de puce, noire ST7735S
tft.fillScreen(ST7735_BLACK) ; effacer l’écran
tft.setTextColor(ST7735_WHITE) ;
tft.drawRoundRect (2, 20, 120, 110, 5, ST7735_WHITE) ;
tft.setTextSize(1) ;
tft.setCursor(5,0) ;
TFT.println ("voltmètre de channel 4") ;
tft.setTextColor(0XFF00) ;
tft.setCursor(0,140) ;
TFT.println ("attention tension max 55vdc") ;
}
void loop()
{
prendre un certain nombre d’échantillons analogiques et les additionner
tandis que (Scount < NSAMP) {}
déguster chaque canal A0 à A3
pour (cnt1 = 0; cnt1 < 4; cnt1 ++) {}
somme [cnt1] += analogRead (A0 + cnt1) ;
}
Scount ++ ;
Delay(10) ;
}
calculer la tension pour chaque canal
pour (cnt1 = 0; cnt1 < 4; cnt1 ++) {}
AVvolts [cnt1] = (somme (flotteur) [cnt1] / (float) NSAMP * VRÉF) / 1024.0 ;
}
affichage des tensions sur l’écran TFT de LCC
tension 1 - V1(pin A0
tft.setTextColor(ST7735_YELLOW,ST7735_BLACK) ; couleur définie pour V1
tft.setTextSize(2) ;
tft.setCursor (15, 40) ;
TFT.Print ("V1") ;
TFT.Print (AVvolts [0] * Dv1, 1) ;
TFT.Print (« V ») ;
tension 2 - V2(pin A1)
tft.setTextColor(ST7735_GREEN,ST7735_BLACK); / / définir la couleur pour V2
tft.setCursor (15, 60) ;
TFT.Print ("V2") ;
TFT.Print (AVvolts [1] * Dv2, 1) ;
TFT.Print (« V ») ;
tension 3 - V3(pin A2)
tft.setTextColor(ST7735_CYAN,ST7735_BLACK); / / définir la couleur pour V3
tft.setCursor (15, 80) ;
TFT.Print ("V3") ;
TFT.Print (AVvolts [2] * Dv3, 1) ;
TFT.Print (« V ») ;
tension 4 - V4(pin A3)
tft.setTextColor(ST7735_WHITE,ST7735_BLACK); / / définir la couleur pour V4
tft.setCursor (15, 100) ;
TFT.Print ("V4") ;
TFT.Print (AVvolts [3] * Dv4, 2) ;
TFT.Print (« V ») ;
tft.drawRoundRect (2, 20, 120, 110, 5, ST7735_WHITE) ;
comte de réinitialisation et sommes
Scount = 0 ;
pour (cnt1 = 0; cnt1 < 4; cnt1 ++) {}
somme [cnt1] = 0 ;
}
}