Buat Arduino Mini Programmable 4 Channel DC-DVM: 8 Langkah

Buat Arduino Mini Programmable 4 Channel DC-DVM: 8 Langkah

Isi kandungan:

Anonim

Instructable ini akan mengajar anda cara menggunakan port Analog Arduino.

Voltmeters Digital (DVM) adalah kes khas pengubah Analog kepada Digital - A / DCs.- mereka mengukur voltan - dan biasanya merupakan fungsi alat umum yang dipanggil Digital Multimeter (DMMs), yang biasanya digunakan untuk mengukur voltan dalam makmal dan dalam bidang. DMM memaparkan voltan yang diukur menggunakan LCD atau LED untuk memaparkan hasil dalam format titik terapung. Mereka adalah alat pilihan untuk pengukuran voltan dalam semua keadaan. Pengajaran ini akan menunjukkan kepada anda cara menggunakan Arduino sebagai DC DVM (Volt Meter Digital Langsung Semasa).

Kami akan menggunakan input analog arduino untuk mengukur voltan DC antara 0 dan 5V dan memaparkan nilai pada paparan Warna TFT LCD.

Saya menggunakan Sainsmart Arduino Nano dan Arduino Rasmi UNO R3 untuk melihat jika terdapat sebarang perbezaan.

Julat voltan yang Arduino dapat mengukur boleh dengan mudah diperluas dengan menggunakan dua perintang untuk membuat pembahagi voltan.

Pembahagi voltan secara literal menurunkan voltan diukur sehingga ia berada dalam julat input analog Arduino (iaitu 0 hingga 5 volt).

Anda kemudian boleh program lakaran Arduino untuk mengira tegasan sebenar diukur dengan mendarabkan input oleh faktor skala.

Ini akan membolehkan kita mengukur voltan lebih besar daripada 5V DC, voltan DC maksimum yang kita dapat mengukur dengan selamat adalah ~ 50 VDC dengan bahagian-bahagian yang digunakan dalam pengajaran ini, tetapi boleh diubah suai untuk memenuhi keperluan anda..

Bekalan:

Langkah 1: Apa yang Anda Perlu: Senarai Bahagian

Ini adalah bahagian yang diperlukan untuk membina DVM 4 saluran

Jumlah kos adalah sekitar $ 35 dolar!

  • Arduino (Saya Digunakan Clone Sainsmart Nano, ($ 13.99) dan UNO R3, tetapi saya fikir mana-mana yang akan dilakukan)
  • PC dengan arduino IDE dan port USB percuma.
  • Kabel USB untuk Arduino anda
  • A Sainsmart 1.8 "TFT COLOR LCD ($ 12.99) Paparan
  • 4 x 1 Mega Ohm Resistors (Brown, Black, Green) 1 untuk setiap saluran
  • 4 x 100 Kilo Ohm Resistors (Brown, Black, Yellow) 1 untuk setiap saluran
  • 4 5.1 volt zener diodes (opsyen |) untuk perlindungan tambahan kepada input analog Arduino
  • Kabel jumper, banyaknya, saiz dan warna yang berbeza
  • Breadboard Tanpa Solderless (Saya menggunakan. RadioShack saya lab makmal eksperimen elektronik)
  • Rujukan multimeter dan / atau voltan untuk menentukur output DVM

Langkah 2: PRINSIP DASAR DVM

Sebelum kita memulakan projek ini, mari kita mengkaji beberapa prinsip asas dan langkah berjaga-jaga mengenai pengukuran voltan dengan DVM.

Ketepatan dan ketepatan

DVM kami tidak akan tepat atau tepat sebagai unit yang tersedia secara komersil, tetapi ia pasti lebih fleksibel.

Untuk membuat bacaan secepat mungkin, kita mesti mempertimbangkan dua perkara: resolusi input, dan penentukuran. Resolusi input bergantung pada Arduinos analog input A / D converter, yang 10 bit pada Arduino uno dan nano. Penentukuran akan bergantung pada kualiti komponen yang digunakan dan rujukan yang digunakan untuk menentukur ukuran.

Impedans Input

Multimeters digital komersial yang mengukur voltan DC biasanya akan mempunyai impedans input yang sangat tinggi 10MΩ atau lebih besar. (I.e- rintangan antara dua ujian multimeter probes adalah 10MΩ atau lebih.)

Impedans input yang tinggi untuk voltmeter diperlukan supaya voltmeter tidak akan menjejaskan nilai litar yang diukur.

Jika voltmeter mempunyai impedans input yang rendah, ia mungkin boleh mengubah voltan yang diukur dan memberi bacaan yang salah.

Terdapat juga kelemahan, bagaimanapun, untuk mempunyai impedans input yang tinggi; Probe ujian lebih mudah untuk mengambil gangguan elektromagnetik (EMI) yang juga boleh mengimbangi pengukuran anda dan memaparkan bacaan "hantu".

Walaupun impedans input tinggi diperlukan, litar pemisah voltan yang akan kita gunakan, akan memberikan voltmeter kita suatu impedans input kira-kira 1MΩ, yang boleh diterima untuk kebanyakan pengukuran voltan rendah dan litar impedans yang rendah biasanya dibina oleh penggemar elektronik.

Litar Pembahagi Voltan

Kami akan menggunakan dua perintang dalam siri yang akan menurunkan voltan input ke julat dalam batas selamat dari spesifikasi input analog Arduino. Persamaan pembahagi voltan asas ialah:

V keluar = V dalam * R b / (R a + R b)

Sekiranya:

R a = 1MΩ

R b = 100KΩ

V keluar = 5V (voltan maksimum untuk pin input analog arduino)

maka;

V in = 55V (voltan maksimum yang boleh diukur dengan selamat)

Litar yang akan kita gunakan, akan membahagikan voltan masukan sebanyak 11; (100K / (100K + 1M)) = (100/1100) = (1/11)

Kekangan Ground Common

Kebanyakan DVMS komersial membolehkan anda mengukur voltan merentasi sebarang komponen, bukan sahaja dari rujukan tanah. Voltan berasaskan Arduino kami tidak boleh melakukan itu, ia hanya boleh mengukur dari rujukan tanah kerana Arduino GND pin digunakan sebagai ujian negatif atau biasa (COM) ujian probe memimpin multimeter standard, dan harus dihubungkan ke tanah litar bawah ujian.

Perlindungan Input

Nilai resistor yang kami gunakan memberikan perlindungan overvoltage apabila mengukur voltan rendah dan sehingga sekitar 55 volt. Untuk melindungi Arduino dari overvoltage yang tidak disengajakan (> 55VDC), kita boleh menggunakan 5.1 volt zener diodes selari dengan perintang 100KΩ, Ini akan memberikan perlindungan tambahan kepada pin input analog Arduino.

Penilaian voltan maksimum

Seperti yang dijelaskan sebelum ini, titik pada rangkaian pembahagi resistor yang disambungkan kepada pin input analog Arduino adalah sama dengan voltan masukan dibahagikan dengan 11 (55V ÷ 11 = 5V). Voltan maksimum yang boleh diukur dengan selamat adalah 55 Volt, pin analog Arduino akan berada pada voltan maksimum 5V.Awas !!! jangan cuba untuk mengukur voltan lebih tinggi daripada 55 Volt atau anda boleh merosakkan Arduino anda

Langkah 3: Pembinaan Litar

Kami akan mulakan dengan membina satu pembahagi voltan dan menyambungkannya ke Arduino, menguji litar dengan lakaran mudah, dan teruskan membina siling litar.

Sebaik sahaja kita mempunyai input yang berfungsi, kita akan memasang 1.8 "warna TFT LCD Display dan menulis lakaran untuk memaparkan pengukuran input di atasnya.

Kami akan meneroka beberapa pilihan perisian dan perkakasan untuk meningkatkan atau menyesuaikan DVM.

Oleh itu, mulailah dengan membina pembahagi voltan pada papan roti dan sambungkannya ke pin A0 dari Arduino.

Lihat gambar rajah litar dan gambar-gambar lain untuk membimbing anda dengan langkah-langkah.

Setelah litar dikumpulkan, pasang Arduino ke port USB pada PC anda, dan muat naik lakaran ujian berikut yang akan memaparkan voltan yang disambungkan ke kaki perintang 1Meg percuma melalui monitor siri.

Hanya salin dan tampal lakaran berikut kepada Arduino IDE.

// ----------------- Lakaran Mula -----------------------------

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

Program: DVS SERIAL

Description: DC voltmeter dengan voltan yang dipaparkan pada monitor bersiri

Tiada TFT LCD Warna lagi!

Perkakasan: Arduino NANO atau Uno dengan pembahagi voltan pada A0.

Perisian: Ditulis dan Dikembangkan menggunakan perisian Arduino 1.0.3

Tarikh:

Pengarang:

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

/ // nilai penentukuran voltan voltan

#define Dv1 11

// Voltan rujukan volum / penentukuran ADC

#define VREF 5

terapung V1 = {0.00};

batal persediaan ()

{

Serial.begin (9600);

}

kekosongan gelung ()

{

V1 = analogRead (0);

Serial.print ("Voltage @ pin A0");

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

}

// ----------------- Lakaran Akhir -----------------------------

Mari tinjau apa yang berlaku;

Pengawal Atmega yang digunakan untuk Arduino mengandungi penukar analog-ke-digital (A / D) 6 saluran on-board. Penukar mempunyai resolusi 10 bit, yang mengembalikan integer dari 0 hingga 1023 (210= 1024, 0 tuduhan, jadi 1023 langkah) untuk nilai 0 hingga 5 volt.

Kami mahu menukarkan nilai A / D yang dikembalikan kepada voltan sebenar yang kita ukur.

Kita perlu melipatgandakan hasilnya dengan 5 dan bahagikan dengan 1023 untuk menyesuaikan nilai yang dikembalikan oleh 10 bit A / D Converter.

Kami juga membahagikan voltan dengan 11 dengan pembahagi voltan, jadi voltan yang kita ukur (dan kita mahu melihat pada paparan), perlu didarabkan dengan 11 untuk mengimbangi pembahagian itu.

Kami berbuat demikian dengan formula berikut:

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

kod untuk ini ialah:

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

Kami melipatgandakan 5 (VREF) dan membahagikan 1023 untuk menukar output A / D ke skala antara O dan 5, maka kami darab dengan 11 (Dv1) untuk mengimbangi pembahagi voltan. Alasan kami menggunakan pembolehubah untuk nilai pembahagi dan voltan, ialah nilai-nilai ini akan berubah apabila kami menentukur DVM. "2" di hujung formula menentukan bilangan digit yang ditunjukkan selepas perpuluhan.

Jika anda mendapat program untuk memuatkan dengan betul, buka monitor bersiri dengan mengklik pada ikon pembesar di sudut kanan atas arduino IDE, anda harus melihat data mengalir. Menggunakan wayar jumper, cuba sambungkan kaki bebas dari resistor 1Meg ke Pin GND terlebih dahulu dan kemudian ke pin 5V. Anda harus melihat perubahan bacaan dari 0 hingga 5v.

Sekarang kita hanya perlu mengulangi apa yang kita lakukan untuk saluran pertama tiga kali untuk mempunyai DVM saluran 4, tapi sebelum kita berbuat demikian, mari kita sambungkan TFT WARNA LCD DISPLAY ke Arduino. Anda memerlukan 7 kabel jumper untuk melakukan ini:

Sambungkan yang berikut dengan jumper

TFT LCD. Arduino

VCC 5V

GND Gnd

SCL 13

SDA 11

CS 10

RS / DC 9

RES 8

Catatan:

Tidak seperti instructables saya yang lain, kami akan menggunakan SPI Interface berkelajuan tinggi untuk memacu paparan supaya pendawaian jumper berbeza. Sekali lagi, lihat gambar-gambar untuk membimbing anda jika anda tidak pasti bagaimana untuk mengendalikannya.

Anda perlu memasang dua pustaka untuk menggunakan paparan:

Adafruit_GFX.h Perpustakaan grafik Teras

Adafruit_ST7735.h Perpustakaan khusus perkakasan

Muat turun perpustakaan dan salinnya ke folder perpustakaan Arduino.

Salin dan tampal lakaran di bawah untuk Arduino IDE. Kod lakaran DVM adalah sama, tetapi dengan penambahan kod untuk memaparkan voltan pada A0 pada Paparan LCD.

Menyusun dan Upload lakaran ke Arduino.

// ----------------- Lakaran Mula -----------------------------

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

Program: TFTLCDDVM

Description: DC voltmeter dengan voltan dipaparkan

pada Warna TFT LCD hingga 2 tempat perpuluhan

Perkakasan: Arduino NANO dengan pembahagi voltan pada A0.

TFT LCD disambungkan

Perisian: Dikembangkan menggunakan perisian Arduino 1.0.3

Tarikh: 10 Mac 2014

Pengarang: johnag

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

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Perpustakaan graf teras

#include // Perpustakaan khusus perkakasan

#include

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

// nilai penentukuran voltan voltan

#define Dv1 11

// voltan rujukan ADC

#define VREF 5

terapung V1 = {0.00};

batal persediaan ()

{

Serial.begin (9600);

tft.initR (INITR_BLACKTAB); // Inisikan cip ST7735S, tab hitam

tft.fillScreen (ST7735_BLACK); / / skrin yang jelas

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC voltmeter DVM");

tft.setTextColor (ST7735_RED);

tft.setCursor (0,140);

tft.println ("Amaran 55 voltan tegar");

}

kekosongan gelung ()

{

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);

// voltan 1 (pin A0)

/ // voltan dikalikan oleh rangkaian perintang

// // faktor bahagian untuk mengira voltan sebenar

tft.setCursor (45, 40);

tft.println ("V1");

tft.setTextSize (1);

tft.println ("Voltan @ pin A0");

tft.setCursor (20, 80);

tft.setTextSize (2);

Serial.print ("Voltage @ pin A0");

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

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

tft.print ("Vdc");

}

// --------------- Lakaran Akhir ------------------------------- ---------

Langkah 4: 2 CODE DVM Saluran

Di bawah adalah lakaran untuk salinan saluran 2 DVM dan tampalkannya ke Arduino IDE. Saya akan meninggalkan kod untuk saluran DVM 4 untuk selepas dilakukan dengan penentukuran.

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

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

Program: voltmeter_LCD

Penerangan: 2 channel DC voltmeter dengan tegasan yang dipaparkan

pada Warna TFT LCD hingga 1 tempat perpuluhan

Perkakasan: Arduino NANO dengan pembahagi voltan pada A0 dan A1

TFT LCD disambungkan

Perisian: Dikembangkan menggunakan perisian Arduino 1.0.3

Tarikh: 10 Mac 2014

Pengarang:

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

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Perpustakaan graf teras

#include // Perpustakaan khusus perkakasan

#include

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

/ // nilai penentukuran voltan voltan

#define Dv1 11.00 // dihitung dengan mengukur voltan pada persimpangan resistor

#define Dv2 11.25

// Voltan rujukan volum / penentukuran ADC

#define VREF 4.9

terapung V1 = {0.0};

terapung V2 = {0.0};

batal persediaan ()

{

tft.initR (INITR_BLACKTAB); // Inisikan cip ST7735S, tab hitam

tft.fillScreen (ST7735_BLACK); / / skrin yang jelas

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (5,0);

tft.println ("2 saluran voltmeter");

tft.setTextColor (ST7735_RED);

tft.setCursor (0,140);

tft.println ("Amaran 55 voltan tegar");

}

kekosongan gelung ()

{

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);

// voltan 1 (pin A0)

tft.setCursor (5, 40);

tft.setTextSize (1);

tft.println ("Voltan @ pin A0");

tft.setTextSize (2);

tft.setCursor (10, 50);

tft.print ("V1");

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

tft.print ("V");

// voltan 2 (pin A1)

tft.setCursor (5, 70);

tft.setTextSize (1);

tft.println ("Voltan @ 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");

}

// --------------------------- 2channel DVM END ------------------

Langkah 5: Penentukuran

Untuk menentukur DVM, anda memerlukan multimeter dan bekalan kuasa dengan keluaran terkawal yang stabil. Anda boleh menggunakan Arduinos 5 volt dan 3.3 v sebagai voltan rujukan, tetapi anda memerlukan multimeter kerana terdapat toleransi sehingga output voltan mungkin berbeza dari Arduino hingga Arduino.

Langkah-langkah penentukuran:

  1. Ukur voltan pada pin 5v di Arduino dengan multimeter anda, dan gunakan nombor tersebut dalam kod tersebut sebagai nilai VREF. contohnya, jika anda mengukur 5.0v maka garis dalam lakaran yang mentakrifkan VREF harus #define VREF 5.0.
  2. Pada litar pembahagi voltan anda, palamkan kaki percuma pada perintang 1meg ke pin 5v Arduino anda, dan ukurkan voltan merentasi pembahagi voltan keseluruhan dan kemudian voltan merentasi perintang 100 k. (pertama dari GND ke 5v kemudian dari GND ke titik simpang resistor, merentasi perintang 100k). Sekarang bahagikan dua tegasan, untuk ujian, saya dapat 5.0 untuk voltan dari GND ke 5v dan 0.46v untuk voltan merentasi perintang 100k jadi saya membahagikan 5 dengan 0.46: 5 / 0.46 = 10.869
  3. Letakkan nilai itu dalam garisan takrif Dv1: #define Dv1 10.869.
  4. Muat naik lakaran dan lihat sama ada bacaan pada paparan anda sepadan dengan bacaan pada multimeter anda.
  5. Ulangi langkah-langkah untuk semua pembahagi voltan dan ubah nilai dengan sewajarnya.

Langkah 6: Pensampelan, Rata-rata, dan Paparan

OK, jadi kami menalibkan DVM, tetapi pembacaan masih kelihatan sedikit tidak stabil dan sedikit diimbangi. Masih ada sesuatu yang boleh kita lakukan mengenainya. Daripada hanya memaparkan input diukur, kenapa kita tidak mengambil beberapa sampel, menambahnya bersama, dan membahagikan jumlahnya dengan jumlah sampel yang diambil. Ini akan memberi kita purata nilai-nilai dalam input, dan memberikan kita bacaan yang lebih stabil. Mari kita gunakannya sementaragelung.

Lakaran di bawah menggunakan pensampelan dan purata untuk meningkatkan nilai yang dipaparkan. Salin dan Tampalkannya ke Arduino IDE dan kompilasi dan muatkannya.

// ----------------- Lakaran Mula -----------------------------

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

Program: 1 saluran DVM dengan Pensampelan

Penerangan: Membaca nilai pada input analog A0 dan dikira

voltan dengan pembahagi voltan

rangkaian pada pin A0 yang dibahagikan dengan 10.195 dan voltan rujukan 5.0v.

Perkakasan: Arduinonano atau Uno dengan pembahagi voltan pada A0.

Perisian: Dikembangkan menggunakan perisian Arduino 1.0.3

Harus sesuai dengan Arduino 1.0 +

Tarikh: 25 Mac 2014

Pengarang:

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

#define NUMSAMP 100 // bilangan sampel yang diambil sebelum membuat perbandingan dan memaparkan

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#define Dv1 10.915 // Nilai pembahagi voltan

#define VREF 5.0 // Voltan mengukur @Arduino 5V pin

#include // Perpustakaan graf teras

#include // Perpustakaan khusus perkakasan

#include

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

int sum = 0; // Jumlah sampel diambil

char unsigned Scount = 0; // Nombor sampel semasa

terapung AVvolts = 0.0; / // Voltan Purata Dikira

batal persediaan ()

{// Papar persediaan dan cetak item statik

tft.initR (INITR_BLACKTAB); // Inisikan cip ST7735S, tab hitam

tft.fillScreen (ST7735_BLACK); / / skrin yang jelas

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC voltmeter DVM");

tft.println ("");

tft.println ("");

tft.print ("Voltage @ pin A0");

tft.setTextColor (ST7735_RED);

tft.setCursor (0,140);

tft.println ("Amaran 55 voltan tegar");

}

kekosongan gelung ()

{

// mengambil beberapa sampel analog dan tambahnya

sementara (Scount <NUMSAMP) {

jumlah + = analogRead (A0); // baca dan tambahkan sampel

Scount ++; / / tambah kiraan sampel

kelewatan (10); // Tunggu 10 mS sebelum membaca sampel seterusnya

}

AVvolts = ((terapung) jumlah / (terapung) NUMSAMP * VREF) / 1023; // menghitung voltan purata

// Paparkan voltan Purata dikira

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 (AVvolts * Dv1);

tft.println ("Vdc");

Scount = 0;

jumlah = 0;

}

// ----------------- Lakaran Akhir -----------------------------

Langkah 7: Program yang Boleh Diprogram

Terdapat 10 jenis orang, mereka yang tahu binari dan mereka yang tidak.

Setakat ini, kami telah mempelajari cara menggabungkan Arduino dan menambah pembahagi voltan untuk mengesahkan isyarat input analog (voltan) dengan mengurangkan isyarat ke tahap yang berada dalam parameter spesifikasi Arduino. Kami kemudian mengumpulkan dan memuat naik beberapa lakaran yang membaca isyarat dan memaparkannya pada monitor siri dan TFT LCD Display. Kini terpulang kepada anda untuk mengkaji kod dan meneruskan kerja. Saya termasuk kod untuk sketsa oter yang akan dijalankan dengan perkakasan yang kami sediakan.

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

Program: 1 saluran DVM dengan Pensampelan

Penerangan: Membaca nilai pada input analog A0 dan mengira voltan mengandaikan

terdapat pembahagi voltan pada pin A0 yang dibahagikan dengan 10.195

Perkakasan: Arduino NANO atau UNO dengan pembahagi voltan pada A0.

Perisian: Ditulis menggunakan Arduino 1.0.3 IDE

Tarikh: 25 Mac 2014

Pengarang:

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

// bilangan sampel analog untuk mengambil per bacaan

#define NSAMP 100

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Perpustakaan graf teras

#include // Perpustakaan khusus perkakasan

#include

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

int sum = 0; // jumlah sampel diambil

char unsigned Scount = 0; // nombor sampel semasa

terapung V1 = 0.00; / // dikira Voltan purata

terapung VMAX = 0.00;

terapung VMIN = 100.00;

float val = 0.00;

terapung VREF = 5.0;

terapung Dv1 = 10.935;

batal persediaan ()

{

tft.initR (INITR_BLACKTAB); // Inisikan cip ST7735S, tab hitam

tft.fillScreen (ST7735_BLACK); / / skrin yang jelas

tft.setTextColor (ST7735_GREEN);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC voltmeter DVM");

tft.setTextColor (ST7735_WHITE);

tft.println ("Voltan @ pin A0");

tft.print ("Dengan MAX, nilai MIN");

tft.setTextColor (ST7735_RED);

tft.setCursor (0,140);

tft.println ("Amaran 55 voltan tegar");

}

kekosongan gelung ()

{

// mengambil beberapa sampel analog dan tambahnya

sementara (Scount <NSAMP) {

jumlah + = analogRead (A0); // baca dan tambahkan sampel

val = (analogRead (A0)); / / storan temp untuk MAX / MIN

tft.setCursor (45, 110);

tft.println (val);

jika (val> VMAX) {// dapatkan MAX nilai sampel

(VMAX = val);

}

jika (val <VMIN) {// dapatkan nilai min sampel

(VMIN = val);

}

Scount ++; // increment count sample

kelewatan (10); / Tunggu 10 mS sebelum membaca sampel seterusnya

}

/ / Setelah selesai pensampelan, hitung dan Tunjukkan voltan Purata dikira

V1 = ((terapung) jumlah / (terapung) 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); // kiraan dan Paparkan voltan Maksimum yang dikira

tft.println ("Vdc");

tft.setCursor (20, 100);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK);

tft.print ("VMIN");

tft.print ((terapung) VMIN * VREF / 1023 * Dv1); // kiraan dan paparkan voltan Minimum yang dikira

tft.print ("Vdc");

Scount = 0; // Mengira semula jumlah sampel

jumlah = 0; / / reset jumlah

}

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

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

Program: 4 channel voltmeter voltmeter

Penerangan: 4 channel voltmeter DC dengan tegasan yang dipaparkan

pada Warna TFT LCD hingga 1 tempat perpuluhan, menggunakan persampelan dan rata-rata

Perkakasan: Arduino Nano atau UNO dengan pembahagi voltan pada A0 hingga A3.

TFT LCD disambungkan

Perisian: Dikembangkan menggunakan perisian Arduino 1.0.3

Tarikh: 10 Mac 2014

Pengarang:

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

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Perpustakaan graf teras

#include // Perpustakaan khusus perkakasan

#include

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

// bilangan sampel analog untuk mengambil per bacaan, setiap saluran

#define NSAMP 100 // bilangan sampel yang perlu dipamerkan

/ // nilai penentukuran voltan voltan

#define Dv1 11.00

#define Dv2 11.001

#define Dv3 11.00

#define Dv4 10.985

// Voltan rujukan volum / penentukuran ADC

#define VREF 5.00

int sum 4 = {0}; / / jumlah sampel diambil

char unsigned Scount = 0; // nombor sampel semasa

float AVvolts 4 = {0.0}; // // voltan terkira

char cnt1 = 0; // digunakan dalam 'untuk' gelung

batal persediaan ()

{

tft.initR (INITR_BLACKTAB); // Inisikan cip ST7735S, tab hitam

tft.fillScreen (ST7735_BLACK); / / skrin yang jelas

tft.setTextColor (ST7735_WHITE);

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

tft.setTextSize (1);

tft.setCursor (5,0);

tft.println ("4 saluran voltmeter");

tft.setTextColor (0XFF00);

tft.setCursor (0,140);

tft.println ("Amaran 55 voltan tegar");

}

kekosongan gelung ()

{

// mengambil beberapa sampel analog dan tambahnya

sementara (Scount <NSAMP) {

// sampel setiap saluran A0 hingga A3

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

jumlah cnt1 + = analogRead (A0 + cnt1);

}

Scount ++;

kelewatan (10);

}

// kirakan voltan untuk setiap saluran

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

AVvolts cnt1 = ((terapung) jumlah cnt1 / (terapung) NSAMP * VREF) / 1024.0;

}

// paparan tegasan pada TFT LCC Display

// voltan 1 - V1 (pin A0

tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); / // warna ditetapkan untuk V1

tft.setTextSize (2);

tft.setCursor (15, 40);

tft.print ("V1");

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

tft.print ("V");

// voltan 2 - V2 (pin A1)

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); // set color for 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); // set warna untuk V3

tft.setCursor (15, 80);

tft.print ("V3");

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

tft.print ("V");

// voltan 4 - V4 (pin A3)

tft.setTextColor (ST7735_WHITE, ST7735_BLACK); // set warna untuk 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);

/ / reset kiraan dan jumlah

Scount = 0;

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

jumlah cnt1 = 0;

}

}

Langkah 8: Video DVM Boleh Diprogram