Lav en Mini Arduino Programmerbar 4-kanals DC-DVM: 8 trin

Lav en Mini Arduino Programmerbar 4-kanals DC-DVM: 8 trin

Indholdsfortegnelse:

Anonim

Denne instruktion vil lære dig, hvordan du bruger de analoge porte i Arduino.

Digital Voltmeters (DVM'er) er et specielt tilfælde af analoge til digitale omformere - A / DCs.- De måler spænding - og er normalt en funktion af et universalinstrument kaldet et digitalt multimeter (DMM), der almindeligvis anvendes til måling af spændinger i laboratorier og i marken. DMM'er viser den målte spænding ved hjælp af LCD'er eller LED'er for at vise resultatet i et floating point format. De er et valgmulighed til spændingsmålinger i alle slags situationer. Dette instruerbare viser dig, hvordan du bruger Arduino som en DC DVM (Direct Current Digital Volt Meter).

Vi bruger de analoge indganger fra Arduino til at måle DC spændinger mellem 0 og 5V og vise værdierne på en TFT LCD-farveskærm.

Jeg brugte Sainsmart Arduino Nano og den officielle Arduino UNO R3 for at se om der er nogen forskel.

Spændingsområdet, som Arduino kan måle, kan let udvides ved at bruge to modstande til at skabe en spændingsdeler.

Spændingsdeleren skaler bogstaveligt ned spændingen, der måles, så den ligger inden for rækkevidden af ​​Arduino-analoge indgange (dvs. 0 til 5 volt).

Du kan derefter programmere Arduino-skitsen for at beregne de faktiske spændinger, der måles ved at gange indgangen med den skalerede faktor.

Dette giver os mulighed for at måle spændinger på mere end 5V DC, og den maksimale jævnspænding, vi kan måle sikkert, er ~ 50 VDC med de dele, der bruges i denne instruerbare, men kan ændres, så de passer til dine behov.

forsyninger:

Trin 1: Hvad du har brug for: Dele liste

Dette er de nødvendige dele til at opbygge 4-kanals DVM

Samlede omkostninger er omkring $ 35 dollars!

  • En Arduino (jeg brugte Sainsmart Nano Clone, ($ 13,99) og en UNO R3, men jeg tror, ​​at nogen vil gøre)
  • En pc med arduino IDE og en gratis USB-port.
  • Et USB-kabel til din Arduino
  • En Sainsmart 1,8 "TFT FARGE LCD ($ 12.99) Skærm
  • 4 x 1 Mega Ohm Modstande (Brun, Sort, Grøn) 1 for hver kanal
  • 4 x 100 Kilo Ohm Modstande (Brun, Sort, Gul) 1 for hver kanal
  • 4 5,1 volt zener dioder (valgfri |) for ekstra beskyttelse til Arduino analoge indgange
  • Jumperkabler, mange af dem, forskellige størrelser og farver
  • Solderless Breadboard (jeg bruger. My RadioShack elektroniske eksperimenter labbrødbræt)
  • En multimeter og / eller spændingsreference til kalibrering af DVM-udgange

Trin 2: DVM GRUNDLÆGGENDE PRINCIPPER

Før vi begynder at sætte projektet sammen, lad os gennemgå nogle grundlæggende principper og forholdsregler vedrørende spændingsmålinger med en DVM.

Nøjagtighed og præcision

Vores DVM vil ikke være så præcis eller præcis som en tilgængelig enhed, men det vil helt sikkert være mere fleksibel.

For at gøre aflæsningerne så nøjagtige som muligt skal vi overveje to ting: indgangsopløsningen og kalibreringen. Indgangsopløsning afhænger af Arduinos analoge input A / D konverter, som er 10 bits på Arduino uno og nano. Kalibrering afhænger af kvaliteten af ​​de anvendte komponenter og de referencer, der bruges til at kalibrere målingen.

Inputimpedans

Kommercielle digitale multimetre, der måler DC-spænding, vil normalt have en meget høj inputimpedans på 10 MΩ eller derover. (I.e- Modstanden mellem de to multimeter-testprober er 10 MΩ eller mere.)

En højimpedans til en voltmeter er nødvendig, så voltmeteret ikke påvirker værdien af ​​det kredsløb, der måles.

Hvis et voltmeter har en lav indgangsimpedans, kan det muligvis ændre spændingen, der måles, og give dig forkerte aflæsninger.

Der er imidlertid også en ulempe at have en høj indgangsimpedans; Testproberne er mere tilbøjelige til at afhente elektromagnetisk interferens (EMI), som også kan kompensere dine målinger og vise "phantom" aflæsninger.

Selvom en højimpedans er ønskelig, vil det spændingsdeler kredsløb vi bruger, give vores voltmeter en indgangsimpedans på ca. 1 MΩ, hvilket er acceptabelt for de fleste lavspændingsmålinger og lavimpedanskredsløb, der normalt er bygget af elektroniske hobbyfolk.

Spændingsdeler Circuit

Vi vil bruge to modstande i serie, der skal nedskrænke indgangsspændingen til en rækkevidde inden for de sikre grænser for de analoge inputspecifikationer for Arduino. Den grundlæggende spændingsdeler ligning er:

V ud = V i * Rb / (R a + R b)

Hvis:

R a = 1 MΩ

Rb = 100KΩ

V ud = 5V (maksimal spænding for de arduino analoge indgangsstifter)

derefter;

V i = 55V (den maksimale spænding, som kan måles sikkert)

Kredsløbet vi bruger vil dele indgangsspændingen med 11; (100K / (100K + 1M)) = (100/1100) = (1/11)

Fælles jordbegrænsning

De fleste kommercielle DVMS giver dig mulighed for at måle spændingen på tværs af enhver komponent, ikke kun fra en grundreference. Vores Arduino-baserede voltmeter kan ikke gøre det, det kan kun måle fra en grundreferencer, fordi Arduino GND-stiften bruges som den negative eller almindelige (COM) testfølerledning af et standard multimeter og skal forbindes til bunden af ​​kredsløbet under prøve.

Indgangsbeskyttelse

Modstandsværdierne, vi bruger, giver en vis overspændingsbeskyttelse ved måling af lave spændinger og op til omkring 55 volt. For at beskytte Arduino fra en uhensigtsmæssig overspænding (> 55VDC) kan vi valgfrit bruge 5,1 volt zener dioder parallelt med 100KΩ modstandene. Dette giver yderligere beskyttelse til Arduino analoge indgangsstifter.

Maksimal spænding

Som tidligere forklaret er punktet på modstandsdelernetværket, der er forbundet til Arduino-analogindgangsstiften, lig med indgangsspændingen divideret med 11 (55V ÷ 11 = 5V). Den maksimale spænding, der kan måles sikkert, er 55 volt, den Arduino analoge pin vil være ved sin maksimale spænding på 5V.Advarsel!!! Forsøg ikke at måle spændinger højere end 55 volt, eller du kan beskadige din Arduino

Trin 3: Kredsløbsanlæg

Vi starter med at opbygge en spændingsdeler og forbinde den til Arduino, teste kredsløbet med en enkel skitse og fortsæt med at bygge resten af ​​kredsløbene.

Når vi har inputerne arbejder, installerer vi 1.8 "TFT LCD Color-skærmen og skriver en skitse for at vise inputmåling på den.

Vi vil derefter udforske flere software og hardware muligheder for at forbedre eller tilpasse DVM.

Så lad os begynde med at opbygge spændingsdeleren på brødbrættet og forbinde den med pin A0 af Arduino.

Se på kredsløbsdiagrammet og de andre billeder for at guide dig med trinene.

Når kredsløbet er sat sammen, skal du tilslutte Arduino til USB-porten på din pc og uploade den følgende testskitse, som viser spændingen forbundet med det gratis 1Meg-modstandsben via serielt skærm.

Du skal bare kopiere og indsætte følgende skitse til Arduino IDE.

// ----------------- Skitse Start -----------------------------

/* -----------------------------------------------------------

Program: SERIAL DVM

Beskrivelse: DC voltmeter med spænding vist på seriel skærm

Ingen farve TFT LCD endnu!

Hardware: Arduino NANO eller Uno med spændingsdeler på A0.

Software: Skrevet og Udviklet ved hjælp af Arduino 1.0.3 software

Dato:

Forfatter:

--------------------------------------------------------------*/

// spændingsdelerens kalibreringsværdier

#define Dv1 11

// ADC referencespænding / kalibreringsværdi

#define VREF 5

float V1 = {0,00};

void setup ()

{

Serial.begin (9600);

}

void loop ()

{

V1 = analogRead (0);

Serial.print ("Spænding @ pin A0");

Serial.println ((((V1 * VREF) / 1023)) * Dv1, 2);

}

// ----------------- Sketch End -----------------------------

Lad os gennemgå hvad der sker;

Atmega-controlleren, der anvendes til Arduino, indeholder en 6-kanals analog-til-digital (A / D) omformer. Konverteren har 10 bit opløsning, som returnerer et helt tal fra 0 til 1023 (210= 1024, 0 tæller, så det er 1023 trin) for værdien 0 til 5 volt.

Vi ønsker at konvertere A / D returneret værdi til den aktuelle spænding, som vi måler.

Vi skal multiplicere resultatet med 5 og opdele i 1023 for at justere værdien returneret af 10 bit A / D Converter.

Vi deler også spændingen med 11 med spændingsdeleren, så den spænding, vi måler (og vi ønsker at se på skærmen), skal ganges med 11 for at kompensere for divisionen.

Det gør vi med følgende formel:

Vout = ((Vin * (5/1023)) * 11).

koden for dette er:

Serial.println ((((V1 * VREF) / 1023)) * Dv1, 2);

Vi multiplicerer med 5 (VREF) og opdeles i 1023 for at konvertere A / D-udgangen til en skala mellem O og 5, og vi multiplicerer med 11 (Dv1) for at kompensere for spændingsdeleren. Årsagen til, at vi bruger variabler til divider og spændingsværdier, er at disse værdier vil ændre sig, når vi kalibrerer DVM. "2" i slutningen af ​​formlen definerer, hvor mange cifre der skal vises efter decimaltegnet.

Hvis du fik programmet til at indlæse korrekt, skal du åbne seriel skærmen ved at klikke på forstørrelsesikonet i øverste højre hjørne af arduino IDE. Du bør se dataflytning. Prøv at forbinde det fri ben på 1Meg-modstanden til GND Pin først og derefter til 5V-stikket ved hjælp af en glidekabel. Du skal se læsningsændringen fra 0 til 5v.

Nu skal vi bare gentage, hvad vi gjorde for den første kanal tre gange til at have en 4-kanals DVM, men inden vi gør det, lad os slutte vores TFT COLOR LCD DISPLAY til Arduino. Du skal bruge 7 jumperkabler til at gøre dette:

Forbind følgende med hopperne

TFT LCD. Arduino

VCC 5V

GND Gnd

SCL 13

SDA 11

CS 10

RS / DC 9

RES 8

Bemærk:

I modsætning til mine andre instrukser bruger vi SPI Interface med høj hastighed til at køre displayet, så jumperkablerne er forskellige. Igen skal du tjekke billederne for at guide dig, hvis du ikke er sikker på, hvordan du leder den op.

Du skal installere to biblioteker for at bruge displayet:

Adafruit_GFX.h Kerne grafikbiblioteket

Adafruit_ST7735.h Det hardwarespecifikke bibliotek

Download bibliotekerne og kopier dem til arkivmappen Arduino.

Kopier og indsæt skitsen nedenfor til Arduino IDE. Skitse DVM-koden er den samme, men med tilføjelsen af ​​kode for at vise spændingen på A0 på LCD-skærmen.

Kompilér og Upload skitsen til Arduino.

// ----------------- Skitse Start -----------------------------

/*-----------------------------------------------------------

Program: TFTLCDDVM

Beskrivelse: DC voltmeter med spænding vist

på farve TFT LCD til 2 decimaler

Hardware: Arduino NANO med spændingsdeler på A0.

TFT LCD tilsluttet

Software: Udviklet ved hjælp af Arduino 1.0.3 software

Dato: 10. marts 2014

Forfatter: johnag

--------------------------------------------------------------*/

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Core Graphics Library

#include // Hardware-specifikt bibliotek

#omfatte

Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst);

// spændingsdelerens kalibreringsværdi

#define Dv1 11

// ADC referencespænding

#define VREF 5

float V1 = {0,00};

void setup ()

{

Serial.begin (9600);

tft.initR (INITR_BLACKTAB); // initialiser en ST7735S chip, sort fane

tft.fillScreen (ST7735_BLACK); // Clear skærm

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC voltmeter DVM");

tft.setTextColor (ST7735_RED);

tft.setCursor (0140);

tft.println ("Pas på maksimal spænding 55vdc");

}

void loop ()

{

V1 = analogRead (0);

tft.drawLine (0, 20, tft.width () - 1, 20, ST7735_WHITE);

tft.drawLine (0, 130, tft.width () - 1, 130, ST7735_WHITE);

tft.setTextColor (ST7735_YELLOW, ST7735_BLACK);

tft.setTextSize (2);

// spænding 1 (pin A0)

// spænding multipliceres med modstandsnettet

// divisionsfaktor for at beregne den aktuelle spænding

tft.setCursor (45, 40);

tft.println ("V1");

tft.setTextSize (1);

tft.println ("Spænding @ pin A0");

tft.setCursor (20, 80);

tft.setTextSize (2);

Serial.print ("Spænding @ pin A0");

Serial.println ((((V1 * VREF) / 1023)) * Dv1, 2);

tft.print ((((V1 * VREF) / 1023)) * Dv1, 2);

tft.print ("Vdc");

}

// --------------- Skitse End ------------------------------- ---------

Trin 4: 2-kanal DVM-kode

Nedenfor er skitsen for en 2-kanals DVM kopi og indsæt den til Arduino IDE. Jeg vil forlade koden til 4-kanals DVM, for efter blev der foretaget kalibrering.

// --------------------------- 2channel DVM start ------------------ ---

/*--------------------------------------------------------------------

Program: voltmeter_LCD

Beskrivelse: 2-kanals DC voltmeter med spændinger vist

på farve TFT LCD til 1 decimal

Hardware: Arduino NANO med spændingsdelere på A0 og A1

TFT LCD tilsluttet

Software: Udviklet ved hjælp af Arduino 1.0.3 software

Dato: 10. marts 2014

Forfatter:

--------------------------------------------------------------*/

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Core Graphics Library

#include // Hardware-specifikt bibliotek

#omfatte

Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst);

// spændingsdelerens kalibreringsværdier

#define Dv1 11.00 // beregnet ved måling af spænding ved modstandsforbindelsen

#define Dv2 11.25

// ADC referencespænding / kalibreringsværdi

#define VREF 4.9

float V1 = {0,0};

float V2 = {0,0};

void setup ()

{

tft.initR (INITR_BLACKTAB); // initialiser en ST7735S chip, sort fane

tft.fillScreen (ST7735_BLACK); // Clear skærm

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (5,0);

tft.println ("2-kanal voltmeter");

tft.setTextColor (ST7735_RED);

tft.setCursor (0140);

tft.println ("Pas på maksimal spænding 55vdc");

}

void loop ()

{

V1 = analogRead (A0);

V2 = analogRead (A1);

tft.drawLine (0, 20, tft.width () - 1, 20, ST7735_WHITE);

tft.drawLine (0, 130, tft.width () - 1, 130, ST7735_WHITE);

tft.setTextColor (ST7735_YELLOW, ST7735_BLACK);

// spænding 1 (pin A0)

tft.setCursor (5, 40);

tft.setTextSize (1);

tft.println ("Spænding @ pin A0");

tft.setTextSize (2);

tft.setCursor (10, 50);

tft.print ("V1");

tft.print ((((V1 * VREF) / 1023)) * Dv1, 1);

tft.print ("V");

// spænding 2 (pin A1)

tft.setCursor (5, 70);

tft.setTextSize (1);

tft.println ("Spænding @ pin A1");

tft.setTextSize (2);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK);

tft.setCursor (10, 80);

tft.print ("V2");

tft.print ((((V2 * VREF) / 1023)) * Dv2, 1);

tft.print ("V");

}

// --------------------------- 2kanals DVM END ------------------

Trin 5: Kalibrering

For at kalibrere DVM'en skal du have et multimeter og en strømforsyning med en stabil reguleret udgang. Du kan bruge Arduinos 5 volt og 3,3 V som referencespændinger, men du har brug for et multimeter, da der er en tolerance, så spændingsudgange kan variere fra Arduino til Arduino.

Trin til kalibrering:

  1. Mål spændingen ved 5v pin i Arduino med din multimeter, og brug det nummer i koden som VREF-værdien. Hvis du for eksempel har målt 5.0v, skal linjen i skissen, der definerer VREF, være #defineret VREF 5.0.
  2. På dit spændingsdeler kredsløb skal du sætte det fri ben på 1meg modstanden til 5v pin på din Arduino, og måle spændingen over hele spændingsdeleren og derefter spændingen over 100k modstanden. (først fra GND til 5v derefter fra GND til modstandsforbindelsespunktet, på tværs af 100k modstanden). Nu divider de to spændinger, til eksamen, jeg fik 5,0 for spændingen fra GND til 5v og 0.46v for spændingen på tværs af 100k modstanden, så jeg deler 5 ved 0.46: 5 / 0.46 = 10.869
  3. Placer denne værdi i Dv1-definitionslinjen: #define Dv1 10.869.
  4. Upload skitsen og se om læsningen på din skærm svarer til læsningen på din multimeter.
  5. Gentag trinene for alle spændingsdelere og skift værdierne i overensstemmelse hermed.

Trin 6: Prøveudtagning, gennemsnitsværdi og visning

OK, så vi kalibrerede DVM'et, men aflæsningerne synes stadig lidt ustabile og lidt modregnede. Der er stadig noget, vi kan gøre ved det. I stedet for blot at vise den målte input, hvorfor tager vi ikke flere prøver, tilføjer dem sammen og deler summen ved antallet af udtagne prøver. Dette giver os et gennemsnit af værdierne i inputen og giver os en mere stabil læsning. Lad os gøre det ved at bruge mensløkke.

Skissen nedenfor bruger prøveudtagning og gennemsnitlig for at forbedre de viste værdier. Kopier og indsæt det på Arduino IDE og kompilér og læs det.

// ----------------- Skitse Start -----------------------------

/*--------------------------------------------------------------

Program: 1-kanal DVM med sampling

Beskrivelse: Læser værdi på analog indgang A0 og beregner

spændingen med en spændingsdeler

netværk på pin A0, der adskiller sig med 10.195 og en referencespænding på 5.0v.

Hardware: Arduinonano eller Uno med spændingsdeler på A0.

Software: Udviklet ved hjælp af Arduino 1.0.3 software

Skal være kompatibel med Arduino 1.0 +

Dato: 25. marts 2014

Forfatter:

--------------------------------------------------------------*/

#define NUMSAMP 100 // antal prøver, der skal tages før gennemsnittet og visning

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#define Dv1 10.915 // Spændingsdelerværdi

#define VREF 5.0 // Spænding målt @Arduino 5V pin

#include // Core Graphics Library

#include // Hardware-specifikt bibliotek

#omfatte

Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst);

int sum = 0; // Summen af ​​udtagne prøver

usigneret char Scount = 0; // Nuværende prøve nummer

float AVvolts = 0.0; // Beregnet gennemsnitsspænding

void setup ()

{// Setup-visning og udskrive statiske genstande

tft.initR (INITR_BLACKTAB); // initialiser en ST7735S chip, sort fane

tft.fillScreen (ST7735_BLACK); // Clear skærm

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC voltmeter DVM");

tft.println ("");

tft.println ("");

tft.print ("Spænding @ pin A0");

tft.setTextColor (ST7735_RED);

tft.setCursor (0140);

tft.println ("Pas på maksimal spænding 55vdc");

}

void loop ()

{

// Tag et antal analoge prøver og tilføj dem

mens (Scount <NUMSAMP) {

sum + = analogRead (A0); // læs og tilføj prøverne

Scount ++; // øge prøveantalet

forsinkelse (10); // Vent 10 mS før du læser næste prøve

}

AVvolts = ((float) sum / (float) NUMSAMP * VREF) / 1023; // beregne gennemsnitsspænding

// Vis den beregnede gennemsnitsspænding

tft.setTextColor (ST7735_YELLOW, ST7735_BLACK);

tft.setTextSize (2);

tft.setCursor (45, 50);

tft.println ("V1");

tft.setCursor (10, 80);

tft.setTextSize (2);

tft.print (AV volt * Dv1);

tft.println ("Vdc");

Scount = 0;

sum = 0;

}

// ----------------- Sketch End -----------------------------

Trin 7: Programmerne i Programmerbar

Der er 10 slags mennesker, dem der kender binære og dem, der ikke gør det.

Indtil videre har vi lært, hvordan man sammensætter en Arduino og tilføjer spændingsfordelere for at indstille det analoge indgangssignal (spænding) ved at reducere signalet til et niveau, der ligger inden for parametrene for Arduino-specifikationerne. Vi kompilerede og uploadede nogle skitser, der læste signalerne og viste dem på serielt skærm og TFT LCD Display. Nu er det op til dig at studere koden og fortsætte arbejdet. Jeg indbefatter koden for oter-skitserne, der kører med den hardware, vi sætter sammen.

/*--------------------------------------------------------------

Program: 1-kanal DVM med sampling

Beskrivelse: Læser værdi på analog indgang A0 og beregner spænding forudsat

Der er en spændingsdeler på pin A0, der adskiller sig med 10.195

Hardware: Arduino NANO eller UNO med spændingsdeler på A0.

Software: Skrevet med Arduino 1.0.3 IDE

Dato: 25. marts 2014

Forfatter:

--------------------------------------------------------------*/

// antal analoge prøver, der skal tages pr. læsning

#define NSAMP 100

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Core Graphics Library

#include // Hardware-specifikt bibliotek

#omfatte

Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst);

int sum = 0; // summen af ​​de udtagne prøver

usigneret char Scount = 0; // nuværende prøve nummer

flyde V1 = 0,00; // beregnet Gennemsnitlig spænding

flyde VMAX = 0,00;

flyde VMIN = 100,00;

float val = 0.00;

flyde VREF = 5.0;

float Dv1 = 10.935;

void setup ()

{

tft.initR (INITR_BLACKTAB); // initialiser en ST7735S chip, sort fane

tft.fillScreen (ST7735_BLACK); // Clear skærm

tft.setTextColor (ST7735_GREEN);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC voltmeter DVM");

tft.setTextColor (ST7735_WHITE);

tft.println ("Spænding @ pin A0");

tft.print ("Med MAX, MIN værdier");

tft.setTextColor (ST7735_RED);

tft.setCursor (0140);

tft.println ("Pas på maksimal spænding 55vdc");

}

void loop ()

{

// Tag et antal analoge prøver og tilføj dem

mens (Scount <NSAMP) {

sum + = analogRead (A0); // læs og tilføj prøverne

val = (analogRead (A0)); // Temp storage for MAX / MIN

tft.setCursor (45, 110);

tft.println (val);

hvis (val> VMAX) {// få MAX værdi af prøve

(VMAX = val);

}

hvis (val <VMIN) {// få MIN værdi af prøve

(VMIN = val);

}

Scount ++; // øge prøveantalet

forsinkelse (10); // Vent 10 mS før du læser næste prøve

}

// Når du har foretaget prøveudtagning, skal du beregne og vise den beregnede middelspænding

V1 = ((flyde) sum / (flyde) 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); // beregne og vis den beregnede maksimale spænding

tft.println ("Vdc");

tft.setCursor (20, 100);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK);

tft.print ("VMIN");

tft.print ((float) VMIN * VREF / 1023 * Dv1); // beregne og vis den beregnede minimale spænding

tft.print ("Vdc");

Scount = 0; // Nulstil prøveantalet

sum = 0; // reset sum

}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/*--------------------------------------------------------------

Program: 4-kanals voltmeter voltmeter

Beskrivelse: 4-kanals DC voltmeter med spændinger vist

på farve TFT LCD til 1 decimal, ved hjælp af prøveudtagning og gennemsnitsværdi

Hardware: Arduino NANO eller UNO med spændingsdelere på A0 til A3.

TFT LCD tilsluttet

Software: Udviklet ved hjælp af Arduino 1.0.3 software

Dato: 10. marts 2014

Forfatter:

--------------------------------------------------------------*/

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Core Graphics Library

#include // Hardware-specifikt bibliotek

#omfatte

Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst);

// antal analoge prøver, der skal tages pr. læsning, pr. kanal

#define NSAMP 100 // antal prøver, der skal tages for visning

// spændingsdelerens kalibreringsværdier

#define Dv1 11.00

#define Dv2 11.001

#define Dv3 11.00

#define Dv4 10.985

// ADC referencespænding / kalibreringsværdi

#define VREF 5.00

int sum 4 = {0}; // summer af udtagne prøver

usigneret char Scount = 0; // nuværende prøve nummer

float AVvolts 4 = {0,0}; // Beregnede spændinger

char cnt1 = 0; // brugt i 'for' sløjfer

void setup ()

{

tft.initR (INITR_BLACKTAB); // initialiser en ST7735S chip, sort fane

tft.fillScreen (ST7735_BLACK); // Clear skærm

tft.setTextColor (ST7735_WHITE);

tft.drawRoundRect (2, 20, 120, 110, 5, ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (5,0);

tft.println ("4-kanal voltmeter");

tft.setTextColor (0XFF00);

tft.setCursor (0140);

tft.println ("Pas på maksimal spænding 55vdc");

}

void loop ()

{

// Tag et antal analoge prøver og tilføj dem

mens (Scount <NSAMP) {

// Prøv hver kanal A0 til A3

for (cnt1 = 0; cnt1 <4; cnt1 ++) {

sum cnt1 + = analogRead (A0 + cnt1);

}

Scount ++;

forsinkelse (10);

}

// beregne spændingen for hver kanal

for (cnt1 = 0; cnt1 <4; cnt1 ++) {

AVvolts cnt1 = ((float) sum cnt1 / (float) NSAMP * VREF) / 1024,0;

}

// display spændinger på TFT LCC Display

// spænding 1 - V1 (pin A0

tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); // sæt farve til V1

tft.setTextSize (2);

tft.setCursor (15, 40);

tft.print ("V1");

tft.print (AVvolts 0 * Dv1, 1);

tft.print ("V");

// spænding 2 - V2 (pin A1)

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); // sæt farve til 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); // sæt farve til V3

tft.setCursor (15, 80);

tft.print ("V3");

tft.print (AVvolts 2 * Dv3, 1);

tft.print ("V");

// spænding 4 - V4 (pin A3)

tft.setTextColor (ST7735_WHITE, ST7735_BLACK); // sæt farve til 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);

// Nulstil tæller og beløb

Scount = 0;

for (cnt1 = 0; cnt1 <4; cnt1 ++) {

sum cnt1 = 0;

}

}

Trin 8: Video af programmerbar DVM