ในฐานะวิศวกร / นักพัฒนาเรามักจะพึ่งพาข้อมูลที่รวบรวมมาเพื่อออกแบบหรือปรับปรุงระบบ การบันทึกข้อมูลและวิเคราะห์เป็นแนวทางปฏิบัติทั่วไปในอุตสาหกรรมส่วนใหญ่ที่นี่เรากำลังสร้างArduino Data Logger Projectซึ่งเราจะเรียนรู้วิธีบันทึกข้อมูลในช่วงเวลาที่กำหนด เราจะใช้บอร์ด Arduino เพื่ออ่านข้อมูลบางอย่าง (ที่นี่อุณหภูมิความชื้นวันที่และเวลา) และบันทึกลงในการ์ด SD และคอมพิวเตอร์พร้อมกัน
ข้อมูลที่บันทึกไว้สามารถเปิดได้อย่างง่ายดายในแผ่นงาน Excel สำหรับการวิเคราะห์เพิ่มเติม เพื่อรักษาวันที่และเวลาที่เราจะใช้ที่มีชื่อเสียงDS3231 โมดูล RTCและเพื่อให้ได้อุณหภูมิและความชื้นเราจะใช้DHT11 เซนเซอร์ ในตอนท้ายของโครงการคุณจะได้เรียนรู้
- วิธีบันทึกข้อมูลลงในการ์ด SD ด้วยค่าวันที่เวลาและเซ็นเซอร์
- วิธีการเขียนข้อมูลโดยตรงไปยัง Excel Sheet บนพีซีผ่านการสื่อสารแบบอนุกรม
วัสดุที่ต้องการ:
- เขียงหั่นขนม
- Arduino UNO (บอร์ด Arduino ใดก็ได้)
- DHT11 เซ็นเซอร์อุณหภูมิ
- โมดูล DS3231 RTC
- โมดูลการ์ด SD
- การ์ด SD
- การเชื่อมต่อสายไฟ
- คอมพิวเตอร์ / แล็ปท็อป
แผนภูมิวงจรรวม:
แผนภาพวงจรสำหรับโครงการ Arduino Temperature Loggerแสดงไว้ด้านล่าง
ดังที่แสดงในแผนภาพวงจรการเชื่อมต่อนั้นง่ายมากเนื่องจากเราใช้มันเป็นโมดูลเราจึงสามารถสร้างมันบนเขียงหั่นขนมโดยตรง การเชื่อมต่อถูกจัดประเภทเพิ่มเติมในตารางด้านล่าง
Arduino Pin |
พินโมดูล |
เซ็นเซอร์อุณหภูมิ - DHT11 |
|
Vcc |
5V |
Gnd |
Gnd |
Nc |
Nc |
ออก |
พิน 7 |
โมดูล RTC DS3231 |
|
Vcc |
5V |
Gnd |
Gnd |
SCL |
พิน A5 |
SDA |
พิน A4 |
โมดูลการ์ด SD |
|
Vcc |
5V |
Gnd |
Gnd |
มิโซะ |
พิน 12 |
MOSI |
พิน 11 |
SCK |
พิน 13 |
CS |
พิน 4 |
คุณสามารถเปลี่ยนเซ็นเซอร์อุณหภูมิ DHT11 ด้วยเซ็นเซอร์ใดก็ได้ที่คุณต้องการบันทึกค่า คุณสามารถตรวจสอบ LM35 ด้วย Arduino เพื่ออ่านอุณหภูมิ
โมดูล RTC DS3231 เชื่อมต่อกับ Arduino โดยใช้การสื่อสาร I2C (SCL, SDA) และโมดูลการ์ด SD ถูกเชื่อมต่อโดยใช้ SPI Communication (MISO, MOSI, SCK, CS) พิน 4 และ 7 ถูกกำหนดให้เป็นพิน CS และพินเอาต์พุตโดยโปรแกรม Arduino คุณสามารถเปลี่ยนเป็นพินอื่นได้หากต้องการ ก่อนหน้านี้เราได้เชื่อมต่อการ์ด SD กับ Arduino ในโครงการเครื่องเล่นเพลง
คำอธิบายโปรแกรม Arduino:
เราต้องเขียนโปรแกรม Arduino ซึ่งสามารถทำได้ดังต่อไปนี้
- อ่านข้อมูลจากเซ็นเซอร์ DTH11 (หรือข้อมูลอื่น ๆ ที่คุณต้องการบันทึก)
- เริ่มต้นบัส I2C เพื่ออ่านข้อมูลจากโมดูล RTC
- เริ่มต้นบัส SPI เพื่อเชื่อมต่อโมดูลการ์ด SD กับ Arduino
- จัดเก็บวันที่เวลาอุณหภูมิและความชื้นลงในการ์ด SD
- จัดเก็บวันที่เวลาอุณหภูมิและความชื้นบนแผ่นงาน Excel ที่ทำงานบนคอมพิวเตอร์ / แล็ปท็อป
ขั้นตอนข้างต้นอาจฟังดูซับซ้อน แต่ก็ง่ายมากเนื่องจากเรามีไลบรารีที่จะช่วยเรา คุณต้องดาวน์โหลดสองไลบรารีต่อไปนี้
- DHT11 Sensor Library จาก GitHub
- ไลบรารีโมดูล DS3231 RTC จาก Rinky-Dink Electronics
เมื่อคุณดาวน์โหลดไลบรารีแล้วให้เพิ่มลงใน Arduino IDE ของคุณโดยทำตาม
Sketch-> รวมไลบรารี -> เพิ่ม. ZIP Library
ในการป้อนข้อมูลจาก Arduino ที่มีชีวิตชีวาลงในแผ่นงาน Excel บนคอมพิวเตอร์เราจะต้องติดตั้งซอฟต์แวร์ที่เรียกว่า PLX-DAQ ที่ Parallax Inc. จัดทำขึ้นตามลิงค์เพื่อดาวน์โหลดไฟล์และติดตั้งตามระบบปฏิบัติการของคุณ ควรสร้างโฟลเดอร์ชื่อ PLS-DAQ บนเดสก์ท็อปของคุณ เราจะดูแลในภายหลังในส่วนการทำงานของเรา
หลังจากเพิ่มทั้งไลบรารีและหลังจากติดตั้งซอฟต์แวร์แล้วคุณสามารถใช้Complete Code (ระบุไว้ที่ด้านล่างของบทช่วยสอน) และอัปโหลดไปยัง Arduino ของคุณ ฉันพยายามอย่างเต็มที่เพื่อให้โค้ดเรียบง่ายที่สุดเท่าที่จะเป็นไปได้และยังให้คำอธิบายผ่านส่วนความคิดเห็น นอกจากนี้ฉันจะอธิบายส่วนที่สำคัญด้านล่าง
1. การอ่านข้อมูลจาก DS3231:
DS3231 เป็นโมดูล RTC (นาฬิกาเวลาจริง) ใช้เพื่อรักษาวันที่และเวลาสำหรับโครงการอิเล็กทรอนิกส์ส่วนใหญ่ โมดูลนี้มีแหล่งจ่ายไฟเซลล์แบบเหรียญของตัวเองโดยใช้ซึ่งจะรักษาวันที่และเวลาแม้ว่าจะถอดไฟหลักออกหรือ MCU ไปแล้วแม้ว่าจะฮาร์ดรีเซ็ตก็ตาม ดังนั้นเมื่อเราตั้งวันที่และเวลาในโมดูลนี้ระบบจะติดตามมันอยู่เสมอ
การใช้โมดูลนี้ทำได้ง่ายมากเนื่องจาก Arduino มีไลบรารี
// เริ่ม DS3231 โดยใช้อินเตอร์เฟสฮาร์ดแวร์ DS3231 rtc (SDA, SCL); เป็นโมฆะ Initialize_RTC () {// เตรียมใช้งานวัตถุ rtc rtc.begin (); // #### บรรทัดต่อไปนี้สามารถไม่ใส่ข้อคิดเห็นเพื่อตั้งวันที่และเวลาเป็นครั้งแรก ### / * rtc.setDOW (วันศุกร์); // ตั้งค่าวันในสัปดาห์เป็นวันอาทิตย์ rtc.setTime (18, 46, 45); // ตั้งเวลาเป็น 12:00:00 (รูปแบบ 24 ชม.) rtc.setDate (6, 30, 2017); // กำหนดวันที่เป็น 1 มกราคม 2014 * /}
หมายเหตุ: เมื่อใช้โมดูลนี้เป็นครั้งแรกคุณต้องตั้งวันที่และเวลา สามารถทำได้เพียงแค่ลบความคิดเห็นดังที่กล่าวมาแล้วเขียนวันที่และเวลา ตรวจสอบให้แน่ใจว่าคุณแสดงความคิดเห็นกลับและอัปโหลดมิฉะนั้นทุกครั้งที่คุณเรียกใช้บอร์ดวันที่และเวลาจะถูกตั้งค่าอีกครั้ง คุณยังสามารถใช้ RTC IC DS1307 เพื่ออ่านเวลากับ Arduino
2. การอ่านข้อมูลจาก DHT11:
DHT11 เป็นเซนเซอร์วัดความชื้นตามอุณหภูมิ ส่งค่าของอุณหภูมิและความชื้นเป็นข้อมูล 8 บิตแบบอนุกรมผ่านขาเอาต์พุตของโมดูล ไลบรารีอ่านข้อมูลนี้โดยใช้ฟังก์ชันอนุกรมซอฟต์แวร์ของ Arduino
#define DHT11_PIN 7 // พินเอาต์พุตเซนเซอร์เชื่อมต่อกับพิน 7 dht DHT; // วัตถุเซนเซอร์ที่มีชื่อว่า DHT เป็นโมฆะ Read_DHT11 () {int chk = DHT.read11 (DHT11_PIN); }
ที่นี่ฉันได้เชื่อมต่อขาเอาต์พุตกับพิน 7 ตามตัวอย่างคุณสามารถเลือกพินใดก็ได้ที่รองรับ Software Serial กำลังเรียก DHT.read (หมายเลขพิน); จะอ่านค่าของอุณหภูมิและความชื้นและเก็บไว้ในพารามิเตอร์ DHT อุณหภูมิ และ DHT ความชื้น ตามลำดับ ตรวจสอบการวัดอุณหภูมิ Arduino ตาม DHT11 ด้วย
3. การเริ่มต้นโมดูลการ์ด SC:
เป็นโมฆะ Initialize_SDcard () {// ดูว่ามีการ์ดอยู่หรือไม่และสามารถเริ่มต้นได้: if (! SD.begin (chipSelect)) {Serial.println ("Card failed, or not present"); // อย่าทำอะไรเพิ่ม: กลับ; } // เปิดไฟล์ โปรดทราบว่าสามารถเปิดได้ทีละไฟล์เท่านั้น // ดังนั้นคุณต้องปิดไฟล์นี้ก่อนเปิดไฟล์อื่น ไฟล์ dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // หากมีไฟล์ให้เขียน: if (dataFile) {dataFile.println ("Date, Time, Temperature, Humidity"); // เขียนแถวแรกของไฟล์ excel dataFile.close (); }}
การใช้การ์ด SD กับ Arduino เป็นเรื่องง่ายเนื่องจากมีไลบรารีการ์ด SD ซึ่งจะถูกเพิ่มลงใน Arduino IDE ตามค่าเริ่มต้น ในฟังก์ชันเริ่มต้นการ์ด SD เราจะสร้างไฟล์ข้อความชื่อ“ LoggerCD.txt” และเขียนแถวแรกของเนื้อหา ในที่นี้เราแยกค่าโดยใช้ "," เป็นตัวคั่น ความหมายเมื่อวางลูกน้ำหมายความว่าเราต้องย้ายไปยังเซลล์ถัดไปในแผ่นงาน Excel
4. การเขียนข้อมูลลงในการ์ด SD
เป็นโมฆะ Write_SDcard () {// เปิดไฟล์ โปรดทราบว่าสามารถเปิดได้ทีละไฟล์เท่านั้น // ดังนั้นคุณต้องปิดไฟล์นี้ก่อนเปิดไฟล์อื่น ไฟล์ dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // หากไฟล์พร้อมใช้งานให้เขียน: if (dataFile) {dataFile.print (rtc.getDateStr ()); // จัดเก็บวันที่ใน SD card dataFile.print (","); // ย้ายไปที่คอลัมน์ถัดไปโดยใช้ "," dataFile.print (rtc.getTimeStr ()); // จัดเก็บวันที่ใน SD card dataFile.print (","); // ย้ายไปที่คอลัมน์ถัดไปโดยใช้ "," dataFile.print (DHT.temperature); // จัดเก็บวันที่ใน SD card dataFile.print (","); // ย้ายไปที่คอลัมน์ถัดไปโดยใช้ "," dataFile.print (DHT.humidity); // จัดเก็บวันที่ใน SD card dataFile.print (","); // ย้ายไปที่คอลัมน์ถัดไปโดยใช้ "," dataFile.println (); // สิ้นสุดแถวย้ายไปที่แถวถัดไป dataFile.close ();// ปิดไฟล์} else Serial.println ("OOPS !! SD card writing failed"); }
ที่กล่าวก่อนหน้าความตั้งใจของเราคือการบันทึกวันเวลา, อุณหภูมิและความชื้นสัมพัทธ์ลงในการ์ด ด้วยความช่วยเหลือของไลบรารี DS3231 และไลบรารี DHT11 Arduino ของเราจะสามารถอ่านพารามิเตอร์ทั้งสี่นี้และจัดเก็บไว้ในพารามิเตอร์ต่อไปนี้ดังแสดงในตารางด้านล่าง
วันที่ |
rtc.getDateStr ()); |
เวลา |
rtc.getTimeStr ()); |
อุณหภูมิ |
DHT อุณหภูมิ |
ความชื้น |
DHT ความชื้น |
ตอนนี้เราสามารถใช้พารามิเตอร์เหล่านี้โดยตรงเพื่อจัดเก็บไว้ในการ์ด SD โดยใช้สายการพิมพ์
dataFile.print (พารามิเตอร์);
คุณสามารถสังเกตได้ว่าแต่ละพารามิเตอร์ถูกคั่นด้วยลูกน้ำเพื่อให้ดูชัดเจนและ dataFile.println (); ใช้เพื่อระบุจุดสิ้นสุดของบรรทัด
5. การเขียนข้อมูลไปยัง PLX-DAQ
PLX-DAQ เป็นซอฟต์แวร์ปลั๊กอินของ Microsoft Excel ที่ช่วยให้เราเขียนค่าจาก Arduino ไปยังไฟล์ Excel บนแล็ปท็อปหรือพีซีของเราได้โดยตรง นี่เป็นรายการโปรดส่วนตัวของฉันเนื่องจากเหตุผลสองประการ:
1. คุณสามารถเขียนและตรวจสอบข้อมูลในเวลาเดียวกันและให้วิธีการพล็อตเป็นกราฟ
2. คุณไม่จำเป็นต้องมีโมดูล RTC เช่น DS3231 เพื่อติดตามวันที่และเวลา คุณสามารถใช้วันที่และเวลาที่ทำงานบนแล็ปท็อป / คอมพิวเตอร์ของคุณและบันทึกลงใน Excel ได้โดยตรง
ในการใช้ซอฟต์แวร์นี้กับ Arduino เราต้องส่งข้อมูลแบบอนุกรมในรูปแบบเฉพาะเช่นเดียวกับการแสดงค่าบนมอนิเตอร์แบบอนุกรม บรรทัดสำคัญอธิบายไว้ด้านล่าง:
เป็นโมฆะ Initialize_PlxDaq () {Serial.println ("CLEARDATA"); // ล้างข้อมูลที่เหลือจากโครงการก่อนหน้า Serial.println ("LABEL, วันที่, เวลา, อุณหภูมิ, ความชื้น"); // เขียน LABEL เสมอเพื่อระบุว่าเป็นบรรทัดแรก} void Write_PlxDaq () {Serial.print ("DATA"); // เขียน "DATA" เสมอเพื่อ Inidicate ต่อไปนี้เป็น Data Serial.print (","); // ย้ายไปที่คอลัมน์ถัดไปโดยใช้ "," Serial.print ("DATE"); // จัดเก็บวันที่ใน Excel Serial.print (","); // ย้ายไปที่คอลัมน์ถัดไปโดยใช้ "," Serial.print ("TIME"); // จัดเก็บวันที่ใน Excel Serial.print (","); // ย้ายไปที่คอลัมน์ถัดไปโดยใช้ "," Serial.print (DHT.temperature); // จัดเก็บวันที่ใน Excel Serial.print (","); // ย้ายไปที่คอลัมน์ถัดไปโดยใช้ "," Serial.print (DHT.humidity);// จัดเก็บวันที่ใน Excel Serial.print (","); // ย้ายไปที่คอลัมน์ถัดไปโดยใช้ "," Serial.println (); // ท้ายแถวย้ายไปที่แถวถัดไป}
ซอฟต์แวร์สามารถจดจำคำสำคัญเช่น LABEL, DATA, TIME, DATE เป็นต้นดังที่แสดงในฟังก์ชัน Initialize คำหลัก“ LABEL” จะใช้เพื่อเขียน ROW แรกของแผ่นงาน Excel ต่อมาในฟังก์ชันเขียนเราใช้คีย์เวิร์ด“ DATA” เพื่อระบุว่าข้อมูลต่อไปนี้ควรถือเป็น DATA เพื่อระบุว่าเราต้องย้ายไปยังแถวถัดไปเราต้องใช้ลูกน้ำ (“,”) เพื่อระบุจุดสิ้นสุดของแถวเราต้องส่ง Serial.println ();
ดังที่ได้กล่าวไว้ก่อนหน้านี้เราสามารถเขียนวันที่และเวลาของระบบได้โดยส่งคำหลัก“ DATE” และ“ TIME” ตามลำดับดังที่แสดงด้านบน
หมายเหตุ: อย่าใช้จอภาพแบบอนุกรมเมื่อใช้ซอฟต์แวร์ PLX_DAQ นี้
คำอธิบายการทำงาน:
การทำงานของArduino Data Loggerนั้นง่ายมาก เมื่อฮาร์ดแวร์และซอฟต์แวร์พร้อมแล้วก็ถึงเวลาเบิร์นโปรแกรมลงในบอร์ด Arduino ของคุณ ทันทีที่โปรแกรมของคุณได้รับการอัปโหลดค่าอุณหภูมิและความชื้นของคุณจะเริ่มถูกเก็บไว้ในการ์ด SD ของคุณ คุณต้องทำตามขั้นตอนด้านล่างเพื่อเปิดใช้งาน PLX-DAQ เพื่อล็อกเข้าสู่แผ่นงาน Excel ในคอมพิวเตอร์
ขั้นตอนที่ 1:เปิดไฟล์“ Plx-Daq Spreadsheet” ที่สร้างขึ้นบนเดสก์ท็อประหว่างการติดตั้ง
ขั้นตอนที่ 2:หากมีบล็อกความปลอดภัยให้คลิกที่ ตัวเลือก -> เปิดใช้งานเนื้อหา -> เสร็จสิ้น -> ตกลง เพื่อรับหน้าจอต่อไปนี้
ขั้นตอนที่ 3:ตอนนี้เลือกอัตราการส่งข้อมูลเป็น“ 9600” และพอร์ตที่ Arduino ของคุณเชื่อมต่อแล้วคลิกที่เชื่อมต่อ ค่าของคุณควรเริ่มเข้าสู่ระบบดังที่แสดงในภาพด้านล่าง
คุณสามารถเปิดแผ่นงาน excel นี้ทิ้งไว้และตรวจสอบค่าเมื่อได้รับการบันทึก เนื่องจากสิ่งนี้กำลังเกิดขึ้นการ์ด SD ของเราก็จะบันทึกค่าเดียวกัน ในการตรวจสอบว่าใช้งานได้เพียงแค่ถอดการ์ด SD และเปิดบนคอมพิวเตอร์ของคุณ คุณควรพบไฟล์ข้อความชื่อ “ LoggerCD.txt” อยู่ในนั้น เมื่อเปิดออกมาจะมีลักษณะดังนี้
ไฟล์นี้มีข้อมูล แต่คงยากที่จะวิเคราะห์บนแผ่นจดบันทึก ดังนั้นเราสามารถเปิดใน Excel เป็นไฟล์ CSV (Comma Separated values) ได้จึงทำให้มีประสิทธิภาพมากขึ้น เพื่อเปิดใน excel
1. เปิด Excel คลิกที่ไฟล์ -> เปิดและเลือก“ ไฟล์ทั้งหมด” ที่มุมล่างขวาและเลือกไฟล์“ LoggerCD” จากการ์ด SD ซึ่งจะเป็นการเปิดตัวช่วยนำเข้าข้อความ
2. คลิกที่“ ถัดไป” และเลือกลูกน้ำเป็นตัวคั่น คลิกที่“ ถัดไป” อีกครั้ง จากนั้นเสร็จสิ้น
3. ตอนนี้ค่าของคุณจะถูกเปิดในไฟล์ Excel ดังที่แสดงด้านล่าง
ฉันได้บันทึกค่าทุกๆ 5 วินาที คุณสามารถบันทึกได้ทุกเวลาที่ต้องการโดยเปลี่ยนฟังก์ชันหน่วงเวลาในโปรแกรม เพื่อความเข้าใจโดยละเอียดเกี่ยวกับการทำงานโปรดดูวิดีโอด้านล่าง
หวังว่าคุณจะชอบโครงการนี้หากคุณมีข้อสงสัยเขียนไว้ในส่วนความคิดเห็นด้านล่างและเราจะช่วยคุณ
การปรับปรุงโบนัส - การบันทึกข้อมูลไร้สายโดยใช้ Arduino:
เมื่อคุณประสบความสำเร็จจนถึงจุดนี้แล้วด้วยความก้าวหน้าเพียงเล็กน้อยและการเพิ่มโค้ดเพียงไม่กี่บรรทัดคุณก็สามารถบันทึกข้อมูลแบบไร้สายได้
เพียงเชื่อมต่ออุปกรณ์บลูทู ธ เช่น HC-05 และเขียนข้อมูลไปยัง PLX-DAQ ผ่านบลูทู ธ แทน Serial นั่นคือแทนที่ Serial.print (พารามิเตอร์); ด้วย BluetoothName.print (พารามิเตอร์); และเชื่อมต่อแล็ปท็อปของคุณกับโมดูลบลูทู ธ ของคุณแล้วเลือกพอร์ต COM ที่แล็ปท็อปของคุณเชื่อมต่อบลูทู ธ และ Taadaaa…… คุณมีระบบบันทึกข้อมูลแบบไร้สายที่ใช้งานได้ในเวลาไม่นาน