![Lav en Mini Arduino Programmerbar 4-kanals DC-DVM: 8 trin Lav en Mini Arduino Programmerbar 4-kanals DC-DVM: 8 trin](https://img.gwsigeps.com/img/circuits/make-a-mini-arduino-programmable-4-channel-dc-dvm-8.jpg)
Indholdsfortegnelse:
- forsyninger:
- Trin 1: Hvad du har brug for: Dele liste
- Trin 2: DVM GRUNDLÆGGENDE PRINCIPPER
- Trin 3: Kredsløbsanlæg
- Trin 4: 2-kanal DVM-kode
- Trin 5: Kalibrering
- Trin 6: Prøveudtagning, gennemsnitsværdi og visning
- Trin 7: Programmerne i Programmerbar
- Trin 8: Video af programmerbar DVM
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
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
Trin til kalibrering:
- 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.
- 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
- Placer denne værdi i Dv1-definitionslinjen: #define Dv1 10.869.
- Upload skitsen og se om læsningen på din skærm svarer til læsningen på din multimeter.
- 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;
}
}