Mini Arduino Programlanabilir 4 Kanallı DC-DVM Yapın: 8 Adım

Mini Arduino Programlanabilir 4 Kanallı DC-DVM Yapın: 8 Adım

İçindekiler:

Anonim

Bu Eğitilebilirlik, Arduino Analog portlarını nasıl kullanacağınızı öğretecektir.

Dijital Voltmetreler (DVM'ler) Analog-Dijital dönüştürücüler için özel bir durumdur - A / DC'ler - voltajı ölçerler - ve genellikle laboratuvarlardaki voltajları ölçmek için kullanılan Dijital Multimetre (DMM) adı verilen genel amaçlı bir enstrümanın bir fonksiyonudur. alan içerisinde. DMM'ler, sonucu kayan nokta biçiminde görüntülemek için LCD'ler veya LED'ler kullanılarak ölçülen voltajı görüntüler. Her türlü voltaj ölçümü için tercih edilen bir araçtır. Bu talimat size Arduino'yu DC DVM (Doğru Akım Dijital Volt Metre) olarak nasıl kullanacağınızı gösterecektir.

0 ile 5V arasındaki DC voltajlarını ölçmek ve değerleri TFT LCD Renkli ekranda görüntülemek için Arduino analog girişlerini kullanacağız.

Herhangi bir farklılık olup olmadığını görmek için Sainsmart Arduino Nano ve Resmi Arduino UNO R3'ü kullandım.

Arduino'nun ölçebileceği voltaj aralıkları, bir voltaj bölücü oluşturmak için iki direnç kullanılarak kolayca genişletilebilir.

Gerilim bölücü gerçek anlamda ölçülen gerilimi düşürür, böylece Arduino analog girişlerinin (yani 0 ila 5 volt) aralığındadır.

Arduino taslağını, girişi ölçeklendirilmiş faktörle çarparak ölçülen gerçek gerilimleri hesaplamak için programlayabilirsiniz.

Bu, 5V DC'den daha büyük voltajları ölçmemize izin verir, güvenle ölçebileceğimiz maksimum DC voltajı bu talimatlarda kullanılan parçalarla ~ 50 VDC'dir, ancak ihtiyaçlarınızı karşılamak için değiştirilebilir.

Gereçler:

Adım 1: Gerekenler: Parça Listesi

Bunlar 4 kanallı DVM'yi oluşturmak için gerekli parçalar.

Toplam maliyet 35 dolar civarında!

  • Bir Arduino (Sainsmart Nano Klonu kullandım, (13.99 $) ve bir UNO R3 kullandım, ama herhangi birinin yapacağını düşünüyorum)
  • Arduino IDE ve boş bir USB bağlantı noktasına sahip bir bilgisayar.
  • Arduino'nuz için bir USB kablosu
  • Bir Sainsmart 1.8 "TFT RENKLİ LCD (12.99 ABD Doları) Ekran
  • Her kanal için 4 x 1 Mega Ohm Direnç (Kahverengi, Siyah, Yeşil) 1
  • Her kanal için 4 x 100 Kilo Ohm Dirençler (Kahverengi, Siyah, Sarı) 1
  • 4 Arduino analog girişlerine ek koruma için 4,1 volt zener diyotları (isteğe bağlı |) |
  • Jumper kabloları, birçoğu, farklı boyut ve renklerde
  • Lehimsiz Breadboard (Kullanıyorum. My RadioShack elektronik deneycilerim lab breadboard)
  • DVM çıkışlarını kalibre etmek için bir multimetre ve / veya voltaj referansı

Adım 2: DVM TEMEL İLKELERİ

Projeyi bir araya getirmeye başlamadan önce, bir DVM ile voltaj ölçümleriyle ilgili bazı temel prensipleri ve önlemleri gözden geçirelim.

Doğruluk ve hassasiyet

DVM'imiz piyasada satılan bir ünite kadar hassas veya hassas olmayacaktır, ancak kesinlikle daha esnek olacaktır.

Okumaları mümkün olduğu kadar doğru yapmak için iki şeyi göz önünde bulundurmalıyız: giriş çözünürlüğü ve kalibrasyon. Giriş çözünürlüğü, Arduino uno ve nano üzerinde 10 bit olan Arduinos analog giriş A / D dönüştürücüsüne bağlıdır. Kalibrasyon, kullanılan bileşenlerin kalitesine ve ölçümleri kalibre etmek için kullanılan referanslara bağlı olacaktır.

Giriş Empedansı

DC voltajını ölçen comercial dijital multimetreler genellikle 10MΩ veya daha yüksek bir giriş empedansına sahip olacaktır (yani, iki multimetre test probu arasındaki direnç 10MΩ veya daha fazladır).

Bir voltmetre için yüksek giriş empedansı gerekir, böylece voltmetre ölçülen devrenin değerini etkilemez.

Bir voltmetrenin giriş empedansı düşükse, ölçülen voltajı değiştirebilir ve size yanlış okumalar verebilir.

Bununla birlikte, yüksek bir giriş empedansına sahip olmanın bir dezavantajı vardır; Test probları, ölçümlerinizi dengeleyebilen ve "hayalet" okumaları görüntüleyebilen elektromanyetik paraziti (EMI) almaya daha yatkındır.

Her ne kadar yüksek giriş empedansı istense de, kullanacağımız voltaj bölücü devresi voltmetreye genellikle 1MΩ değerinde bir giriş empedansı verecektir; bu, çoğu elektronik voltaj hobisi tarafından yapılan çoğu düşük voltaj ölçümü ve düşük empedans devreleri için kabul edilebilir.

Gerilim Bölücü Devresi

Giriş gerilimini, Arduino analog giriş özelliklerinin güvenli sınırları içindeki bir aralığa indirecek seri olarak iki direnç kullanacağız. Temel voltaj bölücü denklemi:

V çıkışı = V inç * R b / (Ra + Rb)

Eğer:

Ra = 1MΩ

Rb = 100KΩ

V çıkışı = 5V (arduino analog giriş pinleri için maksimum voltaj)

sonra;

V in = 55V (güvenli bir şekilde ölçülebilen maksimum voltaj)

Kullanacağımız devre giriş voltajını 11'e bölecektir; (100 K / (100 K + İM)) = (100/1100) = (1/11)

Ortak Zemin kısıtı

Çoğu ticari DVMS, yalnızca bir toprak referansından değil, herhangi bir bileşen üzerindeki voltajı ölçmenize izin verir. Arduino bazlı voltmetremiz bunu yapamaz, yalnızca bir toprak referansından ölçebilir, çünkü Arduino GND pimi standart bir multimetrenin negatif veya ortak (COM) test probu kablosu olarak kullanılır ve altındaki devrenin toprağına bağlanmalıdır. Ölçek.

Giriş Koruması

Kullandığımız direnç değerleri düşük voltajları ölçerken ve yaklaşık 55 volta kadar bazı aşırı voltaj koruması sağlar. Arduino'yu kazara aşırı gerilimden (> 55VDC) korumak için, isteğe bağlı olarak 100KΩ dirençlerine paralel olarak 5.1 volt zener diyotları kullanabiliriz, Bu Arduino analog giriş pinlerine ek koruma sağlar.

Maksimum voltaj değeri

Daha önce açıklandığı gibi, Arduino analog giriş pimine bağlı direnç bölücü ağdaki nokta, 11 (55V ÷ 11 = 5V) bölü giriş gerilimine eşittir. Güvenli bir şekilde ölçülebilen maksimum voltaj 55 Volt'tur, Arduino analog pimi maksimum 5V'luk voltajda olacaktır.Dikkat!!! 55 Volt'tan daha yüksek voltajları ölçmeye çalışmayın, aksi takdirde Arduino'nuza zarar verebilirsiniz.

Adım 3: Devre Yapısı

Bir gerilim bölücü kurarak ve bunu Arduino'ya bağlayarak başlayacağız, devreyi basit bir çizim ile test edeceğiz ve devrelerin geri kalanını inşa etmeye devam edeceğiz.

Girişlerin çalışmasını sağladıktan sonra, 1.8 "TFT LCD Renkli ekranı kuracağız ve bunun üzerine giriş ölçümünü görüntülemek için bir çizim yazacağız.

DVM'yi geliştirmek veya özelleştirmek için çeşitli yazılım ve donanım seçeneklerini keşfedeceğiz.

Öyleyse, ekmek bölücüsüne voltaj bölücüsünü kurarak ve Arduino'nun A0 pimine bağlayarak başlayalım.

Adımlarla size rehberlik etmek için devre şemasına ve diğer resimlere bakın.

Devre bir araya getirildikten sonra, Arduino'yu PC'nizdeki USB portuna takın ve serbest 1Meg direnç bacağına seri monitör üzerinden bağlanan voltajı gösterecek olan aşağıdaki test taslağını yükleyin.

Sadece aşağıdaki çizimi kopyalayıp Arduino IDE'ye yapıştırın.

// ----------------- Kroki Başlat -----------------------------

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

Program: SERİ DVM

Açıklama: Seri monitörde gösterilen voltajla DC voltmetre

Henüz Renkli TFT LCD!

Donanım: A0 üzerinde gerilim bölücü olan Arduino NANO veya Uno.

Yazılım: Arduino 1.0.3 yazılımı kullanılarak yazılmış ve geliştirilmiştir.

Tarih:

Yazar:

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

// voltaj bölücü kalibrasyon değerleri

#define Dv1 11

// ADC referans voltajı / kalibrasyon değeri

#define VREF 5

şamandıra V1 = {0.00};

geçersiz kurulum ()

{

Serial.begin (9600);

}

geçersiz döngü ()

{

V1 = analog Okuma (0);

Seri serigrafi ("Voltage @ pin A0");

Seri baskı ((((V1 * VREF) / 1023)) * Dv1, 2);

}

// ----------------- Kroki Sonu -----------------------------

Neler olduğunu gözden geçirelim;

Arduino için kullanılan Atmega denetleyici, yerleşik 6 kanallı analog-dijital (A / D) dönüştürücü içerir. Dönüştürücü, 10 - 1023 arasındadır, bu sayı 0 - 1023 (2) arasında bir tam sayı döndürür10= 1024, 0 sayılır, bu yüzden 0 ila 5 volt değeri için 1023 adımdır).

A / D döndürülen değerini ölçtüğümüz gerçek voltaja dönüştürmek istiyoruz.

10 bit A / D Dönüştürücü tarafından döndürülen değeri ayarlamak için sonucu 5 ile çarpmalı ve 1023 ile bölmeliyiz.

Ayrıca voltajı voltaj bölücü ile 11'e bölüyoruz, bu yüzden ölçtüğümüz voltaj (ve ekranda görmek istiyoruz) bölmeyi telafi etmek için 11 ile çarpılmalıdır.

Bunu aşağıdaki formülle yapıyoruz:

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

Bunun için kod:

Seri baskı ((((V1 * VREF) / 1023)) * Dv1, 2);

A / D çıkışını O ile 5 arasında bir skalaya dönüştürmek için 5 (VREF) ile çarpıyoruz ve 1023'e bölüyoruz, daha sonra voltaj bölücüyü telafi etmek için 11 (Dv1) ile çarpıyoruz. Bölücü ve voltaj değerleri için değişken kullanmamızın nedeni, DVM'yi kalibre ederken bu değerlerin değişmesidir. Formülün sonundaki "2", ondalık sayısından sonra kaç basamağın gösterileceğini tanımlar.

Programın doğru yüklenmesini sağladıysanız, arduino IDE'nin sağ üst köşesindeki büyüteç simgesine tıklayarak seri monitörü açın, veri akışını görmelisiniz. Bir atlama teli kullanarak, önce 1Meg rezistörün serbest bacağını önce GND Pimine, sonra 5V pime bağlamayı deneyin. 0 ila 5v arasındaki okuma değişimini görmelisiniz.

Şimdi ilk kanal için yaptığımız şeyi 4 kanallı bir DVM'ye sahip olmak için üç kez daha tekrarlamak zorundayız, ancak bunu yapmadan önce, TFT COLOR LCD DISPLAY'i Arduino'ya bağlayalım. Bunu yapmak için 7 jumper kablosuna ihtiyacınız olacak:

Aşağıdakileri atlama telleriyle bağlayın

TFT LCD Arduino

VCC 5V

GND Gnd

SCL 13

SDA 11

CS 10

RS / DC 9

RES 8

Not:

Diğer talimatlarımın aksine, ekranı hızlandırmak için yüksek hızlı SPI Arayüzünü kullanacağız, böylece atlama kablolaması farklı olacaktır. Nasıl bağlayacağınızdan emin değilseniz, yine size yol göstermesi için resimlere göz atın.

Ekranı kullanmak için iki kitaplık kurmanız gerekecek:

Adafruit_GFX.h Çekirdek grafik kütüphanesi

Adafruit_ST7735.h Donanım-özel kütüphane

Kütüphaneleri indirin ve Arduino kütüphanesi klasörüne kopyalayın.

Aşağıdaki çizimi kopyalayıp Arduino IDE'ye yapıştırın. Eskiz DVM kodu aynıdır, ancak LCD Ekranda voltajı A0'da görüntülemek için kod eklenmesiyle.

Çizimin derlenmesi ve Arduino'ya yüklenmesi.

// ----------------- Kroki Başlat -----------------------------

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

Program: TFTLCDDVM

Açıklama: Görüntülenen voltaj ile DC voltmetre

Renkli TFT LCD'de 2 ondalık basamağa

Donanım: A0'da voltaj bölücü olan Arduino NANO.

Bağlı TFT LCD

Yazılım: Arduino 1.0.3 yazılımı kullanılarak geliştirilmiştir

Tarih: 10 Mart 2014

Yazar: johnag

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

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Çekirdek grafik kütüphanesi

#include // Donanıma özel kütüphane

#Dahil etmek

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

// voltaj bölücü kalibrasyon değeri

#define Dv1 11

// ADC referans voltajı

#define VREF 5

şamandıra V1 = {0.00};

geçersiz kurulum ()

{

Serial.begin (9600);

tft.initR (INITR_BLACKTAB); // ST7735S çipini başlat, siyah sekme

tft.fillScreen (ST7735_BLACK); // temiz ekran

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC voltmetre DVM");

tft.setTextColor (ST7735_RED);

tft.setCursor (0,140);

tft.println ("Dikkat maksimum voltaj 55vdc");

}

geçersiz döngü ()

{

V1 = analog Okuma (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);

// voltaj 1 (pin A0)

// gerilim, direnç ağı ile çarpılır

// gerçek gerilimi hesaplamak için bölme faktörü

tft.setCursor (45, 40);

tft.println ("V1");

tft.setTextSize (1);

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

tft.setCursor (20, 80);

tft.setTextSize (2);

Seri serigrafi ("Voltage @ pin A0");

Seri baskı ((((V1 * VREF) / 1023)) * Dv1, 2);

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

tft.print ("Vdc");

}

// --------------- Kroki Sonu --------------------------------- ---------

Adım 4: 2 Kanal DVM KODU

Aşağıda 2 kanallı bir DVM kopyasının taslağı ve Arduino IDE'ye yapıştırın. Kalibrasyon sonrası 4 kanallı DVM kodunu bırakacağım.

// --------------------------- 2 kanallı DVM başlangıcı ------------------ ---

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

Program: voltmeter_LCD

Açıklama: Görüntülenen voltajlarla 2 kanallı DC voltmetre

Renkli TFT LCD'de 1 ondalık basamağa

Donanım: A0 ve A1'de gerilim bölücülerine sahip Arduino NANO

Bağlı TFT LCD

Yazılım: Arduino 1.0.3 yazılımı kullanılarak geliştirilmiştir

Tarih: 10 Mart 2014

Yazar:

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

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Çekirdek grafik kütüphanesi

#include // Donanıma özel kütüphane

#Dahil etmek

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

// voltaj bölücü kalibrasyon değerleri

#define Dv1 11.00 // direnç kavşağında gerilim ölçülerek hesaplandı

#define Dv2 11.25

// ADC referans voltajı / kalibrasyon değeri

#define VREF 4.9

şamandıra V1 = {0.0};

şamandıra V2 = {0.0};

geçersiz kurulum ()

{

tft.initR (INITR_BLACKTAB); // ST7735S çipini başlat, siyah sekme

tft.fillScreen (ST7735_BLACK); // temiz ekran

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (5,0);

tft.println ("2 kanal voltmetre");

tft.setTextColor (ST7735_RED);

tft.setCursor (0,140);

tft.println ("Dikkat maksimum voltaj 55vdc");

}

geçersiz döngü ()

{

V1 = analog Okuma (A0);

V2 = analog Okuma (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);

// voltaj 1 (pin A0)

tft.setCursor (5, 40);

tft.setTextSize (1);

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

tft.setTextSize (2);

tft.setCursor (10, 50);

tft.print ("V1");

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

tft.print ("V");

// voltaj 2 (pim A1)

tft.setCursor (5, 70);

tft.setTextSize (1);

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

}

// --------------------------- 2 kanallı DVM END ------------------

Adım 5: Kalibrasyon

DVM'yi kalibre etmek için, bir multimetreye ve sabit bir düzenlenmiş çıkışa sahip bir güç kaynağına ihtiyacınız olacaktır. Arduinos 5 volt ve 3.3 v'ı referans voltaj olarak kullanabilirsiniz, ancak bir tolerans olduğundan multimetreye ihtiyacınız vardır, böylece voltaj çıkışları Arduino'dan Arduino'ya değişebilir.

Kalibrasyon için adımlar:

  1. Arduino'daki 5v pinindeki voltajı multimetrenizle ölçün ve bu numarayı kodda VREF değeri olarak kullanın. örneğin, 5.0v ölçtüyseniz, VREF'i tanımlayan çizimdeki satır #define VREF 5.0 olmalıdır.
  2. Voltaj bölücü devrenizde, 1meg dirençteki serbest ayağı Arduino'nuzun 5v pimine takın ve tüm gerilim bölücü boyunca gerilimi ve ardından 100 k dirençteki gerilimi ölçün. (önce GND'den 5v'ye, sonra GND'den direnç birleşim noktasına, 100k direnç boyunca). Şimdi iki gerilimi bölün, örneğin, 100k direnç üzerindeki gerilim için GND'den 5v'ye voltaj için 5.0 ve 100k rezistördeki voltaj için 0.46v'a sahip olduğumdan 5'e 0.46: 5 / 0.46 = 10.869
  3. Bu değeri Dv1 tanım satırına yerleştirin: #define Dv1 10.869.
  4. Krokiyi yükleyin ve ekranınızdaki okumanın multimetrenizdeki okuma ile aynı olup olmadığını kontrol edin.
  5. Tüm voltaj bölücüler için adımları tekrarlayın ve değerleri buna göre değiştirin.

Adım 6: Örnekleme, Ortalama ve Görüntüleme

Tamam, bu yüzden DVM'yi kalibre ettik, ancak okumalar hala biraz dengesiz ve biraz ofset görünüyor. Hala bu konuda yapabileceğimiz bir şey var. Sadece ölçülen girişi görüntülemek yerine, neden birkaç örnek almıyoruz, bunları bir araya ekliyoruz ve toplamı, alınan örnek sayısına bölün. Bu bize girdideki değerlerin bir ortalamasını verecek ve bize daha kararlı bir okuma sağlayacaktır. Bunu kullanarak yapalım süredöngü.

Aşağıdaki çizim, görüntülenen değerleri iyileştirmek için örnekleme ve ortalamaları kullanmaktadır. Arduino IDE'ye kopyalayıp yapıştırın ve derleyip yükleyin.

// ----------------- Kroki Başlat -----------------------------

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

Program: Örnekleme özellikli 1 kanal DVM

Açıklama: A0 analog girişindeki değeri okur ve hesaplar

voltaj bölücü olan voltaj

pim A0 üzerindeki ağ, 10.195 ile 5.0V referans voltajına bölünür.

Donanım: A0 üzerinde voltaj bölücü olan Arduinonano veya Uno.

Yazılım: Arduino 1.0.3 yazılımı kullanılarak geliştirilmiştir

Arduino 1.0 + ile uyumlu olmalı

Tarih: 25 Mart 2014

Yazar:

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

#define NUMSAMP 100 // ortalamanın ve görüntülemeden önce alınacak örneklerin sayısı

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#define Dv1 10.915 // Voltaj bölücü değeri

#define VREF 5.0 // Gerilim ölçülen @Arduino 5V pin

#include // Çekirdek grafik kütüphanesi

#include // Donanıma özel kütüphane

#Dahil etmek

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

int toplamı = 0; // Alınan örneklerin toplamı

işaretsiz karakter Scount = 0; // Mevcut örnek numarası

şamandıralı AVvolts = 0.0; // Hesaplanan Ortalama voltaj

geçersiz kurulum ()

{// Kurulum statik öğeleri görüntüler ve yazdırır

tft.initR (INITR_BLACKTAB); // ST7735S çipini başlat, siyah sekme

tft.fillScreen (ST7735_BLACK); // temiz ekran

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC voltmetre DVM");

tft.println ("");

tft.println ("");

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

tft.setTextColor (ST7735_RED);

tft.setCursor (0,140);

tft.println ("Dikkat maksimum voltaj 55vdc");

}

geçersiz döngü ()

{

// birkaç analog örnek alın ve ekleyin

while (Scount <NUMSAMP) {

toplam + = analog Okuma (A0); // örnekleri oku ve ekle

Scount ++; // örnek sayısının arttırılması

gecikmesi (10); // Bir sonraki örneği okumadan önce 10 mS bekleyin

}

AVvolts = ((şamandıra) toplamı / (şamandıra) NUMSAMP * VREF) / 1023; // ortalama voltajı hesapla

// Hesaplanan Ortalama voltajı görüntüle

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;

toplamı = 0;

}

// ----------------- Kroki Sonu -----------------------------

Adım 7: Programlanabilir Programlar

İkili tanıyan ve bilmeyen 10 çeşit insan vardır.

Şimdiye kadar, bir Arduino'yu nasıl birleştireceğimizi ve sinyali Arduino teknik özelliklerinin parametreleri dahilinde olan bir seviyeye indirerek analog giriş sinyalini (voltaj) koşullandırmak için voltaj bölücülerinin nasıl eklendiğini öğrendik. Ardından, sinyalleri okuyan ve seri monitörde ve TFT LCD Ekranda görüntüleyen bazı çizimler derleyip yükledik. Şimdi kodu incelemek ve çalışmaya devam etmek size kalmış. Birlikte koyduğumuz donanımla çalışacak eski çizimlerin kodunu ekliyorum.

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

Program: Örnekleme özellikli 1 kanal DVM

Açıklama: Analog giriş A0 üzerindeki değeri okur ve voltaj varsayımını hesaplar

A0 piminde 10.195'e bölünen bir voltaj bölücü vardır

Donanım: Arduino NANO veya UNO, A0 üzerindeki voltaj bölücüsü ile.

Yazılım: Arduino 1.0.3 IDE kullanılarak yazılmış

Tarih: 25 Mart 2014

Yazar:

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

// okuma başına alınacak analog örnek sayısı

#define NSAMP 100

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Çekirdek grafik kütüphanesi

#include // Donanıma özel kütüphane

#Dahil etmek

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

int toplamı = 0; // alınan örneklerin toplamı

işaretsiz karakter Scount = 0; // mevcut örnek numarası

şamandıra V1 = 0.00; // hesaplanan Ortalama voltaj

şamandıra VMAX = 0.00;

şamandıra VMIN = 100.00;

şamandıra val = 0.00;

şamandıra VREF = 5.0;

şamandıra Dv1 = 10.935;

geçersiz kurulum ()

{

tft.initR (INITR_BLACKTAB); // ST7735S çipini başlat, siyah sekme

tft.fillScreen (ST7735_BLACK); // temiz ekran

tft.setTextColor (ST7735_GREEN);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC voltmetre DVM");

tft.setTextColor (ST7735_WHITE);

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

tft.print ("MAX, MIN değerleri ile");

tft.setTextColor (ST7735_RED);

tft.setCursor (0,140);

tft.println ("Dikkat maksimum voltaj 55vdc");

}

geçersiz döngü ()

{

// birkaç analog örnek alın ve ekleyin

while (Scount <NSAMP) {

sum + = analogRead (A0); // örnekleri oku ve ekle

val = (analog Okuma (A0)); // MAX / MIN için geçici depolama

tft.setCursor (45, 110);

tft.println (val);

if (val> VMAX) {// numunenin MAX değerini al

(VMAX = val);

}

if (val <VMIN) {// örneğin MIN değerini al

(VMIN = val);

}

Scount ++; // örnek sayısını artırma

delay (10); // Bir sonraki örneği okumadan önce 10 mS bekleyin

}

// Örnekleme yapıldıktan sonra hesaplanan Ortalama voltajı hesaplayın ve görüntüleyin

V1 = ((şamandıra) toplamı / (şamandıra) 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); // hesaplanan ve hesaplanan Maksimum voltajı görüntüle

tft.println ("Vdc");

tft.setCursor (20, 100);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK);

tft.print ("VMIN");

tft.print ((float) VMIN * VREF / 1023 * Dv1); // hesaplanan Minimum voltajı hesapla ve görüntüle

tft.print ("Vdc");

Scount = 0; // örnek sayısını sıfırla

toplamı = 0; // toplamı sıfırla

}

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

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

Program: 4 kanal voltmetre voltmetre

Açıklama: 4 kanallı DC voltmetre ile gösterilen voltaj

Renkli TFT LCD'de 1 ondalık basamağa, örnekleme ve ortalama kullanımı

Donanım: Arduino NANO veya UNO, A0 - A3'te voltaj bölücülere sahip.

Bağlı TFT LCD

Yazılım: Arduino 1.0.3 yazılımı kullanılarak geliştirilmiştir

Tarih: 10 Mart 2014

Yazar:

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

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // reset

#include // Çekirdek grafik kütüphanesi

#include // Donanıma özel kütüphane

#Dahil etmek

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

// okuma başına, kanal başına alınacak analog örnek sayısı

#define NSAMP 100 // görüntüleme için alınacak örneklerin sayısı

// voltaj bölücü kalibrasyon değerleri

#define Dv1 11.00

#define Dv2 11.001

#define Dv3 11.00

#define Dv4 10.985

// ADC referans voltajı / kalibrasyon değeri

#define VREF 5.00

int sum 4 = {0}; // alınan örneklerin toplamı

işaretsiz karakter Scount = 0; // mevcut örnek numarası

şamandıralı AVvolts 4 = {0.0}; // hesaplanan voltajlar

char cnt1 = 0; // 'for' döngülerinde kullanılmış

geçersiz kurulum ()

{

tft.initR (INITR_BLACKTAB); // ST7735S çipini başlat, siyah sekme

tft.fillScreen (ST7735_BLACK); // temiz ekran

tft.setTextColor (ST7735_WHITE);

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

tft.setTextSize (1);

tft.setCursor (5,0);

tft.println ("4 kanal voltmetre");

tft.setTextColor (0XFF00);

tft.setCursor (0,140);

tft.println ("Dikkat maksimum voltaj 55vdc");

}

geçersiz döngü ()

{

// birkaç analog örnek alın ve ekleyin

while (Scount <NSAMP) {

// A0 ila A3 kanallarının her birini örnekleyin

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

toplam cnt1 + = analog Okuma (A0 + cnt1);

}

Scount ++;

gecikmesi (10);

}

// her kanal için voltajı hesapla

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

AVvolts cnt1 = ((şamandıra) toplamı cnt1 / (şamandıra) NSAMP * VREF) / 1024.0;

}

// TFT LCC Ekranındaki gerilimleri görüntüle

// voltaj 1 - V1 (pim A0

tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); // V1 için renk ayarla

tft.setTextSize (2);

tft.setCursor (15, 40);

tft.print ("V1");

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

tft.print ("V");

// voltaj 2 - V2 (pim A1)

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); // V2 için renk belirle

tft.setCursor (15, 60);

tft.print ("V2");

tft.print (AVvolts 1 * Dv2, 1);

tft.print ("V");

// voltge 3 - V3 (pim A2)

tft.setTextColor (ST7735_CYAN, ST7735_BLACK); // V3 için renk belirle

tft.setCursor (15, 80);

tft.print ("V3");

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

tft.print ("V");

// voltaj 4 - V4 (pim A3)

tft.setTextColor (ST7735_WHITE, ST7735_BLACK); // V4 için renk ayarlama

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

// sayımı ve toplamları sıfırla

Scount = 0;

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

toplam cnt1 = 0;

}

}

Adım 8: Programlanabilir DVM Videosu