Isi kandungan:
- Bekalan:
- Langkah 1: Apa yang Anda Perlu: Senarai Bahagian
- Langkah 2: PRINSIP DASAR DVM
- Langkah 3: Pembinaan Litar
- Langkah 4: 2 CODE DVM Saluran
- Langkah 5: Penentukuran
- Langkah 6: Pensampelan, Rata-rata, dan Paparan
- Langkah 7: Program yang Boleh Diprogram
- Langkah 8: Video DVM Boleh Diprogram
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 saluranJumlah 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:
- 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.
- 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
- Letakkan nilai itu dalam garisan takrif Dv1: #define Dv1 10.869.
- Muat naik lakaran dan lihat sama ada bacaan pada paparan anda sepadan dengan bacaan pada multimeter anda.
- 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;
}
}