ทำ Mini Arduino Programmable 4 Channel DC-DVM: 8 ขั้นตอน

ทำ Mini Arduino Programmable 4 Channel DC-DVM: 8 ขั้นตอน

สารบัญ:

Anonim

คำแนะนำนี้จะสอนวิธีการใช้พอร์ต Arduino Analog

Digital Voltmeters (DVMs) เป็นกรณีพิเศษของตัวแปลงสัญญาณอนาล็อกเป็นดิจิตอล A / DC พวกเขาวัดแรงดันไฟฟ้าและมักจะเป็นหน้าที่ของเครื่องมืออเนกประสงค์ที่เรียกว่า Digital Multimeter (DMM) ที่ใช้กันทั่วไปในการวัดแรงดันไฟฟ้าในห้องปฏิบัติการและ ในสนาม DMM แสดงแรงดันไฟฟ้าที่วัดได้โดยใช้ LCD หรือ LED เพื่อแสดงผลลัพธ์ในรูปแบบจุดลอย เป็นเครื่องมือสำหรับการวัดแรงดันไฟฟ้าในทุกสถานการณ์ คำแนะนำนี้จะแสดงวิธีการใช้ Arduino เป็น DC DVM (มิเตอร์วัดกระแสไฟฟ้ากระแสตรง)

เราจะใช้อินพุตอะนาล็อก Arduino เพื่อวัดแรงดันไฟฟ้ากระแสตรงระหว่าง 0 ถึง 5V และแสดงค่าบนหน้าจอสี TFT LCD

ฉันใช้ Sainsmart Arduino Nano และ Official Arduino UNO R3 เพื่อดูว่ามีความแตกต่างหรือไม่

ช่วงแรงดันไฟฟ้าที่ Arduino สามารถวัดสามารถขยายได้อย่างง่ายดายโดยใช้ตัวต้านทานสองตัวเพื่อสร้างตัวแบ่งแรงดัน

ตัวแบ่งแรงดันจะลดแรงดันที่วัดลงอย่างแท้จริงดังนั้นจึงอยู่ในช่วงของอินพุตอะนาล็อก Arduino (เช่น 0 ถึง 5 โวลต์)

จากนั้นคุณสามารถตั้งโปรแกรมร่าง Arduino เพื่อคำนวณแรงดันไฟฟ้าจริงที่วัดได้โดยการคูณอินพุตด้วยปัจจัยที่ปรับสัดส่วน

สิ่งนี้จะช่วยให้เราสามารถวัดแรงดันไฟฟ้าที่มากกว่า 5V DC แรงดันไฟฟ้ากระแสตรงสูงสุดที่เราสามารถวัดได้อย่างปลอดภัยคือ ~ 50 VDC พร้อมชิ้นส่วนที่ใช้ในการสอนนี้ แต่สามารถปรับเปลี่ยนให้เหมาะกับความต้องการของคุณ..

วัสดุ:

ขั้นตอนที่ 1: สิ่งที่คุณต้องการ: รายการชิ้นส่วน

เหล่านี้เป็นส่วนที่จำเป็นในการสร้าง DVM 4 ช่อง

ค่าใช้จ่ายรวมอยู่ที่ประมาณ $ 35 เหรียญ!

  • Arduino (ฉันใช้ Sainsmart Nano Clone, ($ 13.99) และ UNO R3 แต่ฉันคิดว่าจะมีใครทำ)
  • พีซีที่มี arduino IDE และพอร์ต USB ฟรี
  • สาย USB สำหรับ Arduino ของคุณ
  • จอแสดงผล TFT LCD สี Sainsmart 1.8 "($ 12.99)
  • ตัวต้านทานขนาด 4 x 1 Mega Ohm (สีน้ำตาล, สีดำ, สีเขียว) 1 สำหรับแต่ละช่อง
  • ตัวต้านทานโอห์ม 4 x 100 กิโล (สีน้ำตาลสีดำสีเหลือง) 1 สำหรับแต่ละช่อง
  • 4 5.1 โวลท์ซีเนอร์ไดโอด (อุปกรณ์เสริม |) เพื่อการป้องกันเพิ่มเติมสำหรับอินพุตอะนาล็อก Arduino
  • สายจัมเปอร์จำนวนมากขนาดและสีที่ต่างกัน
  • Solderless Breadboard (ฉันใช้อยู่ RadioShack ของฉันห้องปฏิบัติการทดลองอิเล็กทรอนิกส์)
  • การอ้างอิงมัลติมิเตอร์และ / หรือแรงดันไฟฟ้าเพื่อปรับเทียบเอาต์พุต DVM

ขั้นตอนที่ 2: หลักการพื้นฐาน DVM

ก่อนที่เราจะเริ่มจัดทำโครงการร่วมกันลองทบทวนหลักการพื้นฐานและข้อควรระวังเกี่ยวกับการวัดแรงดันไฟฟ้าด้วย DVM

ความแม่นยำและความแม่นยำ

DVM ของเราจะไม่แม่นยำหรือแม่นยำเท่ากับหน่วยโฆษณาที่มีอยู่ แต่แน่นอนว่ามันจะมีความยืดหยุ่นมากกว่า

เพื่อให้การอ่านมีความถูกต้องมากที่สุดเราต้องพิจารณาสองสิ่ง: ความละเอียดอินพุตและการสอบเทียบ ความละเอียดอินพุตขึ้นอยู่กับตัวแปลง A / D ตัวแปลงสัญญาณอนาล็อกของ Arduinos ซึ่งเป็น 10 บิตบน Arduino uno และ nano การสอบเทียบจะขึ้นอยู่กับคุณภาพของส่วนประกอบที่ใช้และการอ้างอิงที่ใช้ในการสอบเทียบการวัด

อินพุตความต้านทาน

มัลติมิเตอร์แบบดิจิตอล Comercial ที่วัดแรงดัน DC มักจะมีความต้านทานอินพุตสูงมากที่10MΩหรือมากกว่า (เช่นความต้านทานระหว่างโพรบการทดสอบสองมัลติมิเตอร์คือ10MΩหรือมากกว่า)

ความต้านทานอินพุตสูงสำหรับโวลต์มิเตอร์เป็นสิ่งจำเป็นเพื่อให้โวลต์มิเตอร์จะไม่ส่งผลกระทบต่อมูลค่าของวงจรที่ถูกวัด

หากโวลต์มิเตอร์มีความต้านทานอินพุตต่ำอาจเป็นไปได้ที่จะเปลี่ยนแรงดันไฟฟ้าที่วัดได้และทำให้คุณอ่านค่าไม่ถูกต้อง..

อย่างไรก็ตามยังมีข้อเสียเปรียบในการมีความต้านทานอินพุตสูง โพรบทดสอบมีแนวโน้มที่จะรับสัญญาณคลื่นแม่เหล็กไฟฟ้า (EMI) ซึ่งสามารถชดเชยการวัดของคุณและแสดงการอ่าน "phantom"

แม้ว่าความต้านทานอินพุตสูงเป็นที่ต้องการวงจรแบ่งแรงดันไฟฟ้าที่เราจะใช้จะทำให้โวลต์มิเตอร์ของเรามีความต้านทานอินพุตประมาณ 1M input ซึ่งเป็นที่ยอมรับสำหรับการวัดแรงดันไฟฟ้าต่ำและวงจรอิมพีแดนซ์ต่ำที่สร้างขึ้นโดยมือสมัครเล่นอิเล็กทรอนิกส์

วงจรแบ่งแรงดัน

เราจะใช้ตัวต้านทานสองตัวในซีรีส์ที่จะลดแรงดันไฟฟ้าอินพุตลงในช่วงที่อยู่ภายในขอบเขตความปลอดภัยของสเปคอินพุตอะนาล็อก Arduino สมการตัวแบ่งแรงดันไฟฟ้าพื้นฐานคือ:

V out = V ใน * R b / (R a + R b)

ถ้า:

R a = 1MΩ

R b = 100KΩ

V out = 5V (แรงดันไฟฟ้าสูงสุดสำหรับพินอินพุตแบบอะนาล็อกอาร์ดิโน)

แล้ว;

V in = 55V (แรงดันไฟฟ้าสูงสุดที่สามารถวัดได้อย่างปลอดภัย)

วงจรที่เราจะใช้จะแบ่งแรงดันไฟฟ้าขาเข้าเป็น 11 (100K / (100K + 1M)) = (100/1100) = (1/11)

ข้อ จำกัด พื้นดินทั่วไป

DVMS เชิงพาณิชย์ส่วนใหญ่อนุญาตให้คุณวัดแรงดันไฟฟ้าข้ามส่วนประกอบใด ๆ ไม่เพียง แต่จากการอ้างอิงภาคพื้นดิน โวลต์มิเตอร์ที่ใช้ Arduino ของเราไม่สามารถทำได้มันสามารถวัดได้จากการอ้างอิงภาคพื้นดินเนื่องจากพิน Arduino GND ถูกใช้เป็นตะกั่วหรือขั้วต่อทดสอบทั่วไป (COM) ของหัวทดสอบมัลติมิเตอร์มาตรฐานและควรเชื่อมต่อกับพื้นของวงจรภายใต้ ทดสอบ.

การป้องกันการป้อนข้อมูล

ค่าตัวต้านทานที่เราใช้นั้นให้การป้องกันแรงดันไฟฟ้าเกินบางอย่างเมื่อวัดแรงดันไฟฟ้าต่ำและสูงถึง 55 โวลต์ เพื่อป้องกัน Arduino จากแรงดันไฟฟ้าเกินโดยไม่ตั้งใจ (> 55VDC) เราสามารถเลือกใช้ไดโอดซีเนอร์ 5.1 โวลต์ควบคู่กับตัวต้านทาน100KΩซึ่งจะเพิ่มการป้องกันไปยังขาอินพุตอนาล็อกของ Arduino

พิกัดแรงดันไฟฟ้าสูงสุด

ตามที่อธิบายไว้ก่อนหน้านี้จุดบนเครือข่ายตัวแบ่งความต้านทานที่เชื่อมต่อกับขาเข้าอนาล็อก Arduino เท่ากับแรงดันไฟฟ้าขาเข้าหารด้วย 11 (55V ÷ 11 = 5V) แรงดันไฟฟ้าสูงสุดที่สามารถวัดได้อย่างปลอดภัยคือ 55 โวลท์ขาอะนาล็อก Arduino จะเป็นแรงดันสูงสุดที่ 5Vข้อควรระวัง !!! อย่าพยายามวัดแรงดันไฟฟ้าที่สูงกว่า 55 โวลท์หรือคุณอาจสร้างความเสียหายให้กับ Arduino ของคุณ

ขั้นตอนที่ 3: การก่อสร้างวงจร

เราจะเริ่มต้นด้วยการสร้างตัวแบ่งแรงดันไฟฟ้าหนึ่งตัวและเชื่อมต่อกับ Arduino ทดสอบวงจรด้วยแบบร่างอย่างง่ายและดำเนินการสร้างส่วนที่เหลือของวงจร

เมื่อเรามีอินพุตที่ใช้งานได้เราจะติดตั้งจอแสดงผล TFT LCD สีขนาด 1.8 "และเขียนแบบร่างเพื่อแสดงการวัดอินพุตของมัน

จากนั้นเราจะสำรวจซอฟต์แวร์และฮาร์ดแวร์ตัวเลือกต่างๆเพื่อปรับปรุงหรือปรับแต่ง DVM

ดังนั้นเริ่มต้นด้วยการสร้างตัวแบ่งแรงดันไฟฟ้าบนแผงควบคุมและเชื่อมต่อกับขา A0 ของ Arduino

ดูแผนภาพวงจรและรูปภาพอื่น ๆ เพื่อแนะนำขั้นตอน

เมื่อรวมวงจรเข้าด้วยกันแล้วให้เสียบ Arduino เข้ากับพอร์ต USB บนพีซีของคุณแล้วอัปโหลดภาพร่างการทดสอบต่อไปนี้ซึ่งจะแสดงแรงดันไฟฟ้าที่เชื่อมต่อกับขาตัวต้านทาน 1Meg ฟรีผ่านทางมอนิเตอร์แบบอนุกรม

เพียงแค่คัดลอกและวางภาพร่างต่อไปนี้ไปยัง Arduino IDE

// ----------------- เริ่มร่างแล้ว -----------------------------

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

โปรแกรม: SERIAL DVM

คำอธิบาย: DC โวลต์มิเตอร์พร้อมแรงดันไฟฟ้าที่แสดงบนจอภาพอนุกรม

ยังไม่มี LCD TFT สี!

ฮาร์ดแวร์: Arduino NANO หรือ Uno พร้อมตัวแบ่งแรงดันไฟฟ้าใน A0

ซอฟต์แวร์: เขียนและพัฒนาโดยใช้ซอฟต์แวร์ Arduino 1.0.3

วันที่:

ผู้แต่ง:

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

// ค่าการสอบเทียบตัวแบ่งแรงดันไฟฟ้า

#define Dv1 11

// ADC อ้างอิงค่าแรงดันไฟฟ้า / การสอบเทียบ

#define VREF 5

float V1 = {0.00};

การตั้งค่าเป็นโมฆะ ()

{

Serial.begin (9600);

}

เป็นโมฆะห่วง ()

{

V1 = analogRead (0);

Serial.print ("แรงดันไฟฟ้า @ พิน A0");

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

}

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

ตรวจสอบสิ่งที่เกิดขึ้น

Atmega คอนโทรลเลอร์ที่ใช้สำหรับ Arduino ประกอบด้วยตัวแปลงสัญญาณอนาล็อกเป็นดิจิตอล (A / D) 6 ช่องสัญญาณ ตัวแปลงมีความละเอียด 10 บิตซึ่งส่งคืนเลขจำนวนเต็มตั้งแต่ 0 ถึง 1023 (210= 1024, 0 นับดังนั้นจึงเป็น 1,023 ขั้นตอน) สำหรับค่า 0 ถึง 5 โวลต์

เราต้องการแปลงค่าคืน A / D เป็นแรงดันไฟฟ้าจริงที่เราวัด

เราต้องคูณผลลัพธ์ด้วย 5 และหารด้วย 1023 เพื่อปรับค่าที่ส่งคืนโดยตัวแปลง A / D 10 บิต

เรายังหารแรงดัน 11 ด้วยตัวแบ่งแรงดันดังนั้นแรงดันที่เราวัด (และเราต้องการเห็นบนจอแสดงผล) จะต้องคูณด้วย 11 เพื่อชดเชยการหาร

เราทำเช่นนั้นด้วยสูตร followimg:

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

รหัสสำหรับสิ่งนี้คือ:

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

เราคูณด้วย 5 (VREF) และหารด้วย 1,023 เพื่อแปลงเอาต์พุต A / D เป็นสเกลระหว่าง O และ 5 จากนั้นเราคูณด้วย 11 (Dv1) เพื่อชดเชยตัวแบ่งแรงดันไฟฟ้า เหตุผลที่เราใช้ตัวแปรสำหรับค่าตัวหารและแรงดันคือค่าเหล่านี้จะเปลี่ยนเมื่อเราปรับเทียบมาตรฐาน DVM "2" ที่ท้ายสูตรกำหนดจำนวนหลักที่จะแสดงหลังจุดทศนิยม

หากคุณมีโปรแกรมที่โหลดอย่างถูกต้องให้เปิดมอนิเตอร์แบบอนุกรมโดยคลิกที่ไอคอนรูปขยายที่มุมบนขวาของ arduino IDE คุณจะเห็นข้อมูลไหลออกมา ใช้สายจัมเปอร์ลองเชื่อมต่อขาอิสระของตัวต้านทาน 1Meg กับขา GND ก่อนจากนั้นจึงต่อเข้ากับขา 5V คุณควรเห็นการเปลี่ยนแปลงการอ่านจาก 0 ถึง 5v

ตอนนี้เราแค่ต้องทำซ้ำสิ่งที่เราทำสำหรับช่องแรกอีกสามครั้งเพื่อมี 4 ช่อง DVM แต่ก่อนที่เราจะทำอย่างนั้นเราจะเชื่อมต่อ TFT COLOR LCD DISPLAY ของเรากับ Arduino คุณจะต้องมี 7 สายจัมเปอร์ในการทำสิ่งนี้:

เชื่อมต่อสิ่งต่อไปนี้กับจัมเปอร์

TFT LCD Arduino

VCC 5V

GND Gnd

SCL 13

SDA 11

CS 10

RS / DC 9

RES 8

บันทึก:

ต่างจากคำแนะนำอื่น ๆ ของเราเราจะใช้อินเตอร์เฟส SPI ความเร็วสูงเพื่อขับเคลื่อนจอแสดงผลดังนั้นการเดินสายจัมเปอร์จึงแตกต่างกัน ตรวจสอบรูปภาพเพื่อแนะนำคุณอีกครั้งหากคุณไม่แน่ใจว่าจะวางสายอย่างไร

คุณจะต้องติดตั้งสองไลบรารีเพื่อใช้จอแสดงผล:

Adafruit_GFX.h ห้องสมุดกราฟิกหลัก

Adafruit_ST7735.h ไลบรารีเฉพาะฮาร์ดแวร์

ดาวน์โหลดไลบรารีและคัดลอกไปยังโฟลเดอร์ไลบรารี Arduino

คัดลอกและวางแบบร่างด้านล่างเพื่อ Arduino IDE รหัสร่าง DVM เหมือนกัน แต่ด้วยการเพิ่มรหัสเพื่อแสดงแรงดันไฟฟ้าใน A0 บนจอแสดงผล LCD

รวบรวมและอัปโหลดภาพร่างไปยัง Arduino

// ----------------- เริ่มร่างแล้ว -----------------------------

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

โปรแกรม: TFTLCDDVM

คำอธิบาย: DC โวลต์มิเตอร์พร้อมแรงดันไฟฟ้าปรากฏขึ้น

บน Color TFT LCD ถึงตำแหน่งทศนิยม 2 ตำแหน่ง

ฮาร์ดแวร์: Arduino NANO พร้อมตัวแบ่งแรงดันไฟฟ้าใน A0

เชื่อมต่อ TFT LCD แล้ว

ซอฟต์แวร์: พัฒนาโดยใช้ซอฟต์แวร์ Arduino 1.0.3

วันที่: 10 มีนาคม 2014

ผู้แต่ง: johnag

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

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // รีเซ็ต

#include // Core graphics library

#include // ไลบรารีเฉพาะฮาร์ดแวร์

#include

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

// ค่าการสอบเทียบตัวแบ่งแรงดันไฟฟ้า

#define Dv1 11

// แรงดันอ้างอิง ADC

#define VREF 5

float V1 = {0.00};

การตั้งค่าเป็นโมฆะ ()

{

Serial.begin (9600);

tft.initR (INITR_BLACKTAB); // เริ่มต้นชิป ST7735S, แท็บสีดำ

tft.fillScreen (ST7735_BLACK); // หน้าจอที่ชัดเจน

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC โวลต์มิเตอร์ DVM");

tft.setTextColor (ST7735_RED);

tft.setCursor (0140);

tft.println ("ข้อควรระวังแรงดันไฟฟ้าสูงสุด 55vdc");

}

เป็นโมฆะห่วง ()

{

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

// แรงดันไฟฟ้า 1 (พิน A0)

// แรงดันไฟฟ้าคูณด้วยเครือข่ายตัวต้านทาน

// ปัจจัยหารเพื่อคำนวณแรงดันไฟฟ้าจริง

tft.setCursor (45, 40);

tft.println ("V1");

tft.setTextSize (1);

tft.println ("แรงดันไฟฟ้า @ พิน A0");

tft.setCursor (20, 80);

tft.setTextSize (2);

Serial.print ("แรงดันไฟฟ้า @ พิน A0");

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

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

tft.print ("Vdc");

}

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

ขั้นตอนที่ 4: รหัสช่อง DVM 2 ช่อง

ด้านล่างนี้เป็นภาพร่างสำหรับการคัดลอก DVM แบบ 2 ช่องสัญญาณและวางลงใน Arduino IDE ฉันจะปล่อยให้รหัสสำหรับ DVM 4 ช่องทางหลังจากเสร็จสิ้นการสอบเทียบแล้ว

// --------------------------- การเริ่มต้น DVM แบบ 2channel ------------------ ---

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

โปรแกรม: voltmeter_LCD

คำอธิบาย: โวลต์มิเตอร์กระแสตรง 2 ช่องพร้อมแรงดันไฟฟ้าปรากฏขึ้น

บน Color TFT LCD ถึงตำแหน่งทศนิยม 1 ตำแหน่ง

ฮาร์ดแวร์: Arduino NANO พร้อมตัวแบ่งแรงดันไฟฟ้าใน A0 และ A1

เชื่อมต่อ TFT LCD แล้ว

ซอฟต์แวร์: พัฒนาโดยใช้ซอฟต์แวร์ Arduino 1.0.3

วันที่: 10 มีนาคม 2014

ผู้แต่ง:

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

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // รีเซ็ต

#include // Core graphics library

#include // ไลบรารีเฉพาะฮาร์ดแวร์

#include

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

// ค่าการสอบเทียบตัวแบ่งแรงดันไฟฟ้า

#define Dv1 11.00 // คำนวณโดยการวัดแรงดันที่จุดต่อตัวต้านทาน

#define Dv2 11.25

// ADC อ้างอิงค่าแรงดันไฟฟ้า / การสอบเทียบ

#define VREF 4.9

float V1 = {0.0};

float V2 = {0.0};

การตั้งค่าเป็นโมฆะ ()

{

tft.initR (INITR_BLACKTAB); // เริ่มต้นชิป ST7735S, แท็บสีดำ

tft.fillScreen (ST7735_BLACK); // หน้าจอที่ชัดเจน

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (5,0);

tft.println ("โวลต์มิเตอร์ 2 ช่อง");

tft.setTextColor (ST7735_RED);

tft.setCursor (0140);

tft.println ("ข้อควรระวังแรงดันไฟฟ้าสูงสุด 55vdc");

}

เป็นโมฆะห่วง ()

{

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

// แรงดันไฟฟ้า 1 (พิน A0)

tft.setCursor (5, 40);

tft.setTextSize (1);

tft.println ("แรงดันไฟฟ้า @ พิน A0");

tft.setTextSize (2);

tft.setCursor (10, 50);

tft.print ("V1");

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

tft.print ("V");

// แรงดันไฟฟ้า 2 (พิน A1)

tft.setCursor (5, 70);

tft.setTextSize (1);

tft.println ("แรงดันไฟฟ้า @ พิน A1");

tft.setTextSize (2);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK);

tft.setCursor (10, 80);

tft.print ("V2");

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

tft.print ("V");

}

// --------------------------- 2 ช่อง DVM สิ้นสุด ------------------

ขั้นตอนที่ 5: การสอบเทียบ

ในการปรับเทียบ DVM คุณจะต้องใช้มัลติมิเตอร์และแหล่งจ่ายไฟที่มีเอาต์พุตที่ควบคุมได้อย่างมั่นคง คุณสามารถใช้ Arduinos 5 โวลต์และ 3.3 โวลต์เป็นแรงดันอ้างอิง แต่คุณต้องใช้มัลติมิเตอร์เนื่องจากมีความอดทนดังนั้นแรงดันไฟฟ้าขาออกอาจแตกต่างจาก Arduino กับ Arduino

ขั้นตอนสำหรับการสอบเทียบ:

  1. วัดแรงดันไฟฟ้าที่ขา 5v ใน Arduino ด้วยมัลติมิเตอร์ของคุณและใช้หมายเลขนั้นในรหัสเป็นค่า VREF ตัวอย่างเช่นหากคุณวัด 5.0v ดังนั้นเส้นในร่างที่กำหนด VREF ควรเป็น #define VREF 5.0
  2. ในวงจรตัวแบ่งแรงดันไฟฟ้าของคุณให้เสียบขาที่ว่างบนตัวต้านทาน 1meg กับขา 5v ของ Arduino ของคุณและวัดแรงดันไฟฟ้าในตัวแบ่งแรงดันไฟฟ้าทั้งหมดและจากนั้นแรงดันทั่วตัวต้านทาน 100k (ก่อนจาก GND ถึง 5v จากนั้น GND ไปยังจุดรวมตัวต้านทานตัวต้านทานข้ามตัวต้านทาน 100k) ตอนนี้หารแรงดันสองตัวสำหรับการทดสอบฉันได้ 5.0 สำหรับแรงดันไฟฟ้าจาก GND ถึง 5v และ 0.46v สำหรับแรงดันทั่วตัวต้านทาน 100k ดังนั้นฉันจึงหาร 5 ด้วย 0.46: 5 / 0.46 = 10.869
  3. วางค่านั้นในบรรทัดนิยาม Dv1: #define Dv1 10.869
  4. อัพโหลดภาพร่างและดูว่าการอ่านบนจอแสดงผลของคุณตรงกับการอ่านบนมัลติมิเตอร์ของคุณหรือไม่
  5. ทำซ้ำขั้นตอนสำหรับตัวแบ่งแรงดันไฟฟ้าทั้งหมดและเปลี่ยนค่าตามลำดับ

ขั้นตอนที่ 6: การสุ่มตัวอย่างการหาค่าเฉลี่ยและการแสดงผล

ตกลงดังนั้นเราจึงปรับเทียบ DVM แต่การอ่านยังคงดูไม่เสถียรและชดเชยเล็กน้อย ยังมีบางสิ่งที่เราสามารถทำได้ แทนที่จะแสดงเพียงอินพุตที่วัดได้ทำไมเราไม่ลองตัวอย่างหลายตัวอย่างเพิ่มเข้าด้วยกันแล้วหารผลรวมด้วยจำนวนตัวอย่างที่ถ่าย สิ่งนี้จะทำให้เรามีค่าเฉลี่ยในอินพุตและให้การอ่านที่เสถียรยิ่งขึ้น ให้ทำอย่างนั้นโดยใช้ ในขณะที่ห่วง.

ร่างด้านล่างใช้การสุ่มตัวอย่างและค่าเฉลี่ยเพื่อปรับปรุงค่าที่แสดง คัดลอกและวางไปยัง Arduino IDE และรวบรวมและโหลด

// ----------------- เริ่มร่างแล้ว -----------------------------

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

โปรแกรม: DVM 1 ช่องพร้อมการสุ่มตัวอย่าง

คำอธิบาย: อ่านค่าบนอินพุตอนาล็อก A0 และคำนวณ

แรงดันไฟฟ้าพร้อมตัวแบ่งแรงดัน

เครือข่ายบนพิน A0 ที่หารด้วย 10.195 และแรงดันอ้างอิง 5.0v

ฮาร์ดแวร์: Arduinonano หรือ Uno พร้อมตัวแบ่งแรงดันไฟฟ้าใน A0

ซอฟต์แวร์: พัฒนาโดยใช้ซอฟต์แวร์ Arduino 1.0.3

ควรเข้ากันได้กับ Arduino 1.0 +

วันที่: 25 มีนาคม 2014

ผู้แต่ง:

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

#define NUMSAMP 100 // จำนวนตัวอย่างที่ต้องดำเนินการก่อนเฉลี่ยและแสดง

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // รีเซ็ต

#define Dv1 10.915 // ค่าตัวแบ่งแรงดัน

#define VREF 5.0 // แรงดันไฟฟ้าวัดที่ขา 5V 5V @Arduino

#include // Core graphics library

#include // ไลบรารีเฉพาะฮาร์ดแวร์

#include

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

int sum = 0; // ผลรวมของตัวอย่างที่ถ่าย

ถ่านที่ไม่ได้ลงนาม = 0; // หมายเลขตัวอย่างปัจจุบัน

AVVolts ลอย = 0.0; // คำนวณแรงดันไฟฟ้าเฉลี่ย

การตั้งค่าเป็นโมฆะ ()

{// การตั้งค่าการแสดงผลและพิมพ์รายการคงที่

tft.initR (INITR_BLACKTAB); // เริ่มต้นชิป ST7735S, แท็บสีดำ

tft.fillScreen (ST7735_BLACK); // หน้าจอที่ชัดเจน

tft.setTextColor (ST7735_WHITE);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC โวลต์มิเตอร์ DVM");

tft.println ("");

tft.println ("");

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

tft.setTextColor (ST7735_RED);

tft.setCursor (0140);

tft.println ("ข้อควรระวังแรงดันไฟฟ้าสูงสุด 55vdc");

}

เป็นโมฆะห่วง ()

{

// นำตัวอย่างอะนาล็อกจำนวนหนึ่งมารวมเข้าด้วยกัน

ในขณะที่ (Scount <NUMSAMP) {

รวม + = analogRead (A0); // อ่านและเพิ่มตัวอย่าง

Scount ++; // เพิ่มจำนวนตัวอย่าง

ล่าช้า (10); // รอ 10 mS ก่อนอ่านตัวอย่างถัดไป

}

AVvolts = ((ลอย) ผลรวม / (ลอย) NUMSAMP * VREF) / 1023; // คำนวณแรงดันไฟฟ้าเฉลี่ย

// แสดงแรงดันไฟฟ้าเฉลี่ยที่คำนวณ

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;

รวม = 0;

}

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

ขั้นตอนที่ 7: โปรแกรมที่ตั้งโปรแกรมได้

มีคน 10 ชนิดคือคนที่รู้จักเลขฐานสองและคนที่ไม่รู้จัก

จนถึงตอนนี้เราได้เรียนรู้วิธีการรวมกันของ Arduino และเพิ่มตัวแบ่งแรงดันไฟฟ้าเพื่อปรับสภาพสัญญาณอินพุตแบบแอนะล็อก (แรงดันไฟฟ้า) โดยการลดสัญญาณให้อยู่ในระดับที่อยู่ภายในพารามิเตอร์ของข้อกำหนดของ Arduino จากนั้นเรารวบรวมและอัปโหลดภาพร่างบางส่วนที่อ่านสัญญาณและแสดงบนจอภาพอนุกรมและจอแสดงผล TFT LCD ตอนนี้ก็ขึ้นอยู่กับคุณที่จะศึกษารหัสและทำงานต่อไป ฉันกำลังรวมรหัสสำหรับภาพร่างของคนงานที่จะทำงานกับฮาร์ดแวร์ที่เรารวบรวมไว้

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

โปรแกรม: DVM 1 ช่องพร้อมการสุ่มตัวอย่าง

คำอธิบาย: อ่านค่าบนอินพุตอนาล็อก A0 และคำนวณค่าแรงดันที่สมมติ

มีตัวแบ่งแรงดันไฟฟ้าบนพิน A0 ที่หารด้วย 10.195

ฮาร์ดแวร์: Arduino NANO หรือ UNO พร้อมตัวแบ่งแรงดันไฟฟ้าใน A0

ซอฟต์แวร์: เขียนโดยใช้ Arduino 1.0.3 IDE

วันที่: 25 มีนาคม 2014

ผู้แต่ง:

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

// จำนวนตัวอย่างอะนาล็อกที่ใช้อ่านต่อ

#define NSAMP 100

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // รีเซ็ต

#include // Core graphics library

#include // ไลบรารีเฉพาะฮาร์ดแวร์

#include

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

int sum = 0; // ผลรวมของตัวอย่างที่ถ่าย

ถ่านที่ไม่ได้ลงนาม = 0; // หมายเลขตัวอย่างปัจจุบัน

float V1 = 0.00; // คำนวณแรงดันไฟฟ้าเฉลี่ย

ลอย VMAX = 0.00;

ลอย VMIN = 100.00;

float val = 0.00;

float VREF = 5.0;

float Dv1 = 10.935;

การตั้งค่าเป็นโมฆะ ()

{

tft.initR (INITR_BLACKTAB); // เริ่มต้นชิป ST7735S, แท็บสีดำ

tft.fillScreen (ST7735_BLACK); // หน้าจอที่ชัดเจน

tft.setTextColor (ST7735_GREEN);

tft.setTextSize (1);

tft.setCursor (10,0);

tft.println ("DC โวลต์มิเตอร์ DVM");

tft.setTextColor (ST7735_WHITE);

tft.println ("แรงดันไฟฟ้า @ พิน A0");

tft.print ("ด้วยค่า MAX, MIN");

tft.setTextColor (ST7735_RED);

tft.setCursor (0140);

tft.println ("ข้อควรระวังแรงดันไฟฟ้าสูงสุด 55vdc");

}

เป็นโมฆะห่วง ()

{

// นำตัวอย่างอะนาล็อกจำนวนหนึ่งมารวมเข้าด้วยกัน

ในขณะที่ (Scount <NSAMP) {

sum + = analogRead (A0); // อ่านและเพิ่มตัวอย่าง

val = (อะนาล็อกอ่าน (A0)); // ที่เก็บข้อมูลชั่วคราวสำหรับ MAX / นาที

tft.setCursor (45, 110);

tft.println (Val);

if (val> VMAX) {// รับค่าสูงสุดของตัวอย่าง

(VMAX = val);

}

if (val <VMIN) {// รับค่า MIN ของตัวอย่าง

(VMIN = val);

}

Scount ++; // เพิ่มจำนวนตัวอย่าง

ล่าช้า (10); // รอ 10 mS ก่อนอ่านตัวอย่างถัดไป

}

// เมื่อทำการสุ่มตัวอย่างเสร็จแล้วให้คำนวณและแสดงแรงดันไฟฟ้าเฉลี่ยที่คำนวณ

V1 = ผลรวม (ลอย) / (ลอย) 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 ((ลอย) VMAX * VREF / 1023 * Dv1); // คำนวณและแสดงแรงดันไฟฟ้าสูงสุดที่คำนวณได้

tft.println ("Vdc");

tft.setCursor (20, 100);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK);

tft.print ("VMIN");

tft.print ((ลอย) VMIN * VREF / 1023 * Dv1); // คำนวณและแสดงแรงดันไฟฟ้าขั้นต่ำที่คำนวณได้

tft.print ("Vdc");

Scount = 0; // รีเซ็ตจำนวนตัวอย่าง

รวม = 0; // รีเซ็ตผลรวม

}

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

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

โปรแกรม: โวลต์มิเตอร์โวลต์มิเตอร์ 4 ช่อง

คำอธิบาย: โวลต์มิเตอร์ DC แบบ 4 ช่องพร้อมแรงดันไฟฟ้าที่แสดง

บน Color TFT LCD ให้เป็นทศนิยม 1 ตำแหน่งโดยใช้การสุ่มตัวอย่างและค่าเฉลี่ย

ฮาร์ดแวร์: Arduino NANO หรือ UNO พร้อมตัวแบ่งแรงดันไฟฟ้าใน A0 ถึง A3

เชื่อมต่อ TFT LCD แล้ว

ซอฟต์แวร์: พัฒนาโดยใช้ซอฟต์แวร์ Arduino 1.0.3

วันที่: 10 มีนาคม 2014

ผู้แต่ง:

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

#define sclk 13

#define mosi 11

#define cs 10

#define dc 9

#define rst 8 // รีเซ็ต

#include // Core graphics library

#include // ไลบรารีเฉพาะฮาร์ดแวร์

#include

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

// จำนวนตัวอย่างอะนาล็อกที่จะใช้ต่อการอ่านต่อช่อง

#define NSAMP 100 // จำนวนตัวอย่างที่จะแสดงก่อน

// ค่าการสอบเทียบตัวแบ่งแรงดันไฟฟ้า

#define Dv1 11.00

#define Dv2 11.001

#define Dv3 11.00

#define Dv4 10.985

// ADC อ้างอิงค่าแรงดันไฟฟ้า / การสอบเทียบ

#define VREF 5.00

int sum 4 = {0}; // จำนวนตัวอย่างที่นำมา

ถ่านที่ไม่ได้ลงนาม = 0; // หมายเลขตัวอย่างปัจจุบัน

float AVvolts 4 = {0.0}; // แรงดันไฟฟ้าที่คำนวณได้

ถ่าน cnt1 = 0; // ใช้เป็นลูป 'สำหรับ'

การตั้งค่าเป็นโมฆะ ()

{

tft.initR (INITR_BLACKTAB); // เริ่มต้นชิป ST7735S, แท็บสีดำ

tft.fillScreen (ST7735_BLACK); // หน้าจอที่ชัดเจน

tft.setTextColor (ST7735_WHITE);

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

tft.setTextSize (1);

tft.setCursor (5,0);

tft.println ("4 channel voltmeter");

tft.setTextColor (0XFF00);

tft.setCursor (0140);

tft.println ("ข้อควรระวังแรงดันไฟฟ้าสูงสุด 55vdc");

}

เป็นโมฆะห่วง ()

{

// นำตัวอย่างอะนาล็อกจำนวนหนึ่งมารวมเข้าด้วยกัน

ในขณะที่ (Scount <NSAMP) {

// ตัวอย่างแต่ละช่อง A0 ถึง A3

สำหรับ (cnt1 = 0; cnt1 <4; cnt1 ++) {

รวม cnt1 + = analogRead (A0 + cnt1);

}

Scount ++;

ล่าช้า (10);

}

// คำนวณแรงดันไฟฟ้าสำหรับแต่ละช่อง

สำหรับ (cnt1 = 0; cnt1 <4; cnt1 ++) {

AVvolts cnt1 = ((ลอย) รวม cnt1 / (ลอย) NSAMP * VREF) / 1024.0;

}

// แสดงแรงดันไฟฟ้าบนจอแสดงผล TFT LCC

// แรงดันไฟฟ้า 1 - V1 (พิน A0

tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); // ตั้งค่าสีสำหรับ V1

tft.setTextSize (2);

tft.setCursor (15, 40);

tft.print ("V1");

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

tft.print ("V");

// แรงดันไฟฟ้า 2 - V2 (พิน A1)

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); // ตั้งค่าสีสำหรับ V2

tft.setCursor (15, 60);

tft.print ("V2");

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

tft.print ("V");

// voltge 3 - V3 (พิน A2)

tft.setTextColor (ST7735_CYAN, ST7735_BLACK); // ตั้งค่าสีสำหรับ V3

tft.setCursor (15, 80);

tft.print ("V3");

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

tft.print ("V");

// แรงดันไฟฟ้า 4 - V4 (พิน A3)

tft.setTextColor (ST7735_WHITE, ST7735_BLACK); // ตั้งค่าสีสำหรับ 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);

// รีเซ็ตจำนวนและจำนวนเงิน

Scount = 0;

สำหรับ (cnt1 = 0; cnt1 <4; cnt1 ++) {

รวม cnt1 = 0;

}

}

ขั้นตอนที่ 8: วิดีโอของ DVM ที่ตั้งโปรแกรมได้