Gör en Mini Arduino programmerbar 4 kanal DC-DVM (7 / 8 steg)
Steg 7: Program i programmerbara
Hittills har vi lärt sig att sätta ihop en Arduino och lägga till spänningsavdelare för att villkora den analoga insignalen (spänning) genom att minska signalen till en nivå som är inom parametrarna för Arduino specifikationerna. Vi sedan sammanställt och laddat upp några skisser som läsa signalerna och visas dem på serial monitorn och TFT LCD-skärmen. Nu är det upp till dig att studera koden och fortsätta arbetet. Jag är även koden för småvessla skisser som kommer att köras med hårdvara vi sammanställt.
/*--------------------------------------------------------------
Program: 1 kanal DVM med provtagning
Beskrivning: Läser värdet på analog ingång A0 och beräknar spänning förutsatt att
Det finns en spänningsavdelare på stift A0 som delar upp av 10.195
Hårdvara: Arduino NANO eller UNO med spänningsavdelare på A0.
Programvara: Written using Arduino 1.0.3 IDE
Datum: Mars 25 2014
Författare:
--------------------------------------------------------------*/
antal analoga prover att ta per läsning
#define NSAMP 100
#define sclk 13
#define mosi 11
#define cs 10
#define dc 9
#define rst 8 / / reset
#include / / core grafik bibliotek
#include / / maskinvaruspecifika bibliotek
#include
Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst);
int summa = 0; summan av prover
unsigned char Scount = 0; aktuella antalet stickprov
flyta V1 = 0.00; beräknade genomsnittliga spänning
flyta VMAX = 0.00;
flyta VMIN = 100,00;
flyta val = 0.00;
flyta VREF = 5.0;
flyta Dv1 = 10.935;
void setup()
{
tft.initR(INITR_BLACKTAB); initiera en ST7735S chip, svart flik
tft.fillScreen(ST7735_BLACK); Rensa skärmen
tft.setTextColor(ST7735_GREEN);
tft.setTextSize(1);
tft.setCursor(10,0);
TFT.println ("DC voltmeter DVM");
tft.setTextColor(ST7735_WHITE);
TFT.println ("spänning @ pin A0");
TFT.Print (med MAX, MIN värden");
tft.setTextColor(ST7735_RED);
tft.setCursor(0,140);
TFT.println ("försiktighet max spänning 55vdc");
}
void loop()
{
ta ett antal analoga prover och lägga upp dem
medan (Scount < NSAMP) {
summa += analogRead(A0); / / Läs och Lägg proverna
val = (analogRead(A0)); Temp-lagring för MAX / MIN
tft.setCursor (45, 110);
TFT.println(val);
IF(Val > Vmax) {//get MAX värdet av provet
(VMAX = val);
}
IF(val < VMIN) {//get MIN värde av provet
(VMIN = val);
}
Scount ++; //increment antalet prov
fördröjning (10), //Wait 10 mS innan du läser nästa prov
}
En gång gjort provtagning, beräkna och Visa den beräknade genomsnittliga spänningen
V1 = (summa (float) / (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 * VREF/1023 * Dv1) ;// beräkna och Visa den beräknade maximala spänningen
TFT.println ("Vdc");
tft.setCursor (20, 100);
tft.setTextColor(ST7735_GREEN,ST7735_BLACK);
TFT.Print ("VMIN");
TFT.Print ((float) VMIN * VREF/1023 * Dv1) ;// beräkna och Visa de beräknade Minimum spänningen
TFT.Print ("Vdc");
Scount = 0; återställa prov räknas
summa = 0; återställa summan
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*--------------------------------------------------------------
Program: 4-kanals voltmeter voltmeter
Beskrivning/kontroller: 4-kanals DC voltmeter med spänningar visas
på färg TFT LCD med 1 decimal, med hjälp av provtagning och i genomsnitt
Hårdvara: Arduino NANO eller UNO med spänningsavdelare på A0 till A3.
TFT LCD ansluten
Programvara: Utvecklad med Arduino 1.0.3 programvara
Datum: 10 mars 2014
Författare:
--------------------------------------------------------------*/
#define sclk 13
#define mosi 11
#define cs 10
#define dc 9
#define rst 8 / / reset
#include / / core grafik bibliotek
#include / / maskinvaruspecifika bibliotek
#include
Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst);
antal analoga prover att ta per läsning, per kanal
#define NSAMP 100 / / antalet prover att ta innan de visar
spänningsavdelare kalibreringsvärden
#define Dv1 11.00
#define Dv2 11.001
#define Dv3 11.00
#define Dv4 10.985
ADC referensspänningen / kalibreringsvärde
#define VREF 5,00
int summa [4] = {0}. belopp av prover som tagits
unsigned char Scount = 0; aktuella antalet stickprov
flyta AVvolts [4] = {0,0}. beräknade spänningar
char cnt1 = 0; används i "for-loopar
void setup()
{
tft.initR(INITR_BLACKTAB); initiera en ST7735S chip, svart flik
tft.fillScreen(ST7735_BLACK); Rensa skärmen
tft.setTextColor(ST7735_WHITE);
tft.drawRoundRect (2, 20, 120, 110, 5, ST7735_WHITE);
tft.setTextSize(1);
tft.setCursor(5,0);
TFT.println ("4-kanals voltmeter");
tft.setTextColor(0XFF00);
tft.setCursor(0,140);
TFT.println ("försiktighet max spänning 55vdc");
}
void loop()
{
ta ett antal analoga prover och lägga upp dem
medan (Scount < NSAMP) {
prova på varje kanal A0 till A3
för (cnt1 = 0; cnt1 < 4; cnt1 ++) {
summa [cnt1] += analogRead (A0 + cnt1);
}
Scount ++;
Delay(10);
}
beräkna spänningen för varje kanal
för (cnt1 = 0; cnt1 < 4; cnt1 ++) {
AVvolts [cnt1] = ((float) summa [cnt1] / (float) NSAMP * VREF) / 1024.0;
}
Visa spänningar på TFT LCC-skärm
spänning 1 - V1(pin A0
tft.setTextColor(ST7735_YELLOW,ST7735_BLACK); Ange färg för V1
tft.setTextSize(2);
tft.setCursor (15, 40);
TFT.Print ("V1");
TFT.Print (AVvolts [0] * Dv1, 1);
TFT.Print ("V");
spänning 2 - V2(pin A1)
tft.setTextColor(ST7735_GREEN,ST7735_BLACK); / / Ange färg för V2
tft.setCursor (15, 60);
TFT.Print ("V2");
TFT.Print (AVvolts [1] * Dv2, 1);
TFT.Print ("V");
voltge 3 - V3(pin A2)
tft.setTextColor(ST7735_CYAN,ST7735_BLACK); / / Ange färg för V3
tft.setCursor (15, 80);
TFT.Print ("V3");
TFT.Print (AVvolts [2] * Dv3, 1);
TFT.Print ("V");
spänning 4 - V4(pin A3)
tft.setTextColor(ST7735_WHITE,ST7735_BLACK); / / Ange färg för 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);
lägga rätt antal och belopp
Scount = 0;
för (cnt1 = 0; cnt1 < 4; cnt1 ++) {
summa [cnt1] = 0;
}
}