- ส่วนประกอบที่จำเป็น
- MAX30205 พร้อม Arduino - แผนภาพวงจร
- การเชื่อมต่อ Arduino กับเซ็นเซอร์อุณหภูมิร่างกาย MAX30205
- การเขียนโปรแกรม MAX30205 ด้วย Arduino
- เครื่องวัดอุณหภูมิร่างกาย Arduino - การทดสอบ
สำหรับการใช้งานทางการแพทย์หรือทางคลินิกการวัดอุณหภูมิร่างกายมนุษย์เป็นตัวแปรสำคัญในการกำหนดสภาวะสุขภาพของบุคคลใด ๆ อย่างไรก็ตามมีหลายวิธีในการตรวจจับอุณหภูมิ แต่ไม่ใช่ทุกอย่างที่มีความแม่นยำตรงตามข้อกำหนดของเทอร์โมมิเตอร์ทางคลินิก เซ็นเซอร์อุณหภูมิ MAX30205 ได้รับการออกแบบมาโดยเฉพาะสำหรับแอปพลิเคชันนี้ โปรดทราบว่าเซ็นเซอร์นี้ไม่ใช่เซ็นเซอร์อุณหภูมิแบบไม่สัมผัสหากคุณกำลังมองหาการวัดอุณหภูมิ IR แบบไม่สัมผัสโปรดดูเทอร์โมมิเตอร์ MLX90614 ที่เราออกแบบไว้ก่อนหน้านี้
ในโครงการนี้เราจะเชื่อมต่อเซ็นเซอร์อุณหภูมิร่างกายมนุษย์ MAX30205 ที่สามารถเชื่อมต่อกับวงออกกำลังกายหรือสามารถใช้เพื่อวัตถุประสงค์ทางการแพทย์ เราจะใช้ Arduino Nano เป็นหน่วยไมโครคอนโทรลเลอร์หลักและยังใช้จอแสดงผล 7 ส่วนเพื่อแสดงอุณหภูมิที่ตรวจจับได้ในรูปแบบฟาเรนไฮต์ เมื่อคุณรู้วิธีใช้เซ็นเซอร์แล้วคุณสามารถใช้แอปพลิเคชั่นใดก็ได้ที่คุณต้องการคุณยังสามารถตรวจสอบโครงการ Arduino Smartwatch ซึ่งรวมกับ MAX30205 เพื่อตรวจสอบอุณหภูมิของแต่ละบุคคลได้
ส่วนประกอบที่จำเป็น
- Arduino NANO
- 7-Seg แสดงแคโทดทั่วไป - 3 ชิ้น
- 74HC595 - 3 ชิ้น
- ตัวต้านทาน 680R - 24 ชิ้น
- MAX30205 บอร์ดโมดูล
- แหล่งจ่ายไฟ 5V
- เขียงหั่นขนม
- เกี่ยวสายไฟมากมาย
- Arduino IDE
- สายไมโคร USB
MAX30205 พร้อม Arduino - แผนภาพวงจร
แผนภาพวงจรที่สมบูรณ์เพื่อเชื่อมต่อArduino กับเซ็นเซอร์อุณหภูมิร่างกาย MAX30205 แสดงไว้ด้านล่าง วงจรนั้นง่ายมาก แต่เนื่องจากเราใช้จอแสดงผล 7 ส่วนมันจึงดูซับซ้อนเล็กน้อย 7-Segment Displays with Arduino เป็นวิธีที่ยอดเยี่ยมในการแสดงมูลค่าของคุณให้ใหญ่และสว่างด้วยต้นทุนที่ต่ำมาก แต่คุณยังสามารถแสดงค่าเหล่านี้บน OLED หรือ LCD ได้หากต้องการ
Arduino Nano เชื่อมต่อกับ 74HC595 สามตัว 74HC595 สามตัวเรียงซ้อนกันเพื่อบันทึกพินเอาต์พุตเพิ่มเติมจาก Arduino Nano สำหรับเชื่อมต่อจอแสดงผล 7-Seg สามจอ ก่อนหน้านี้เราเคยใช้ 74HC595 กับ Arduino ในโปรเจ็กต์อื่น ๆ เช่น Arduino Clock, LED Board Display, Arduino snake game ฯลฯ เพื่อตั้งชื่อไม่กี่อย่าง
คณะโมดูล MAX30205 ต้องต้านทานดึงขึ้นเพิ่มเติมเพราะมันสื่อสารกับโพรโทคอ I2C อย่างไรก็ตามบอร์ดโมดูลบางส่วนไม่จำเป็นต้องมีพูลอัพเพิ่มเติมเนื่องจากตัวต้านทานแบบดึงขึ้นนั้นได้รับมาแล้วภายในโมดูล ดังนั้นเราจำเป็นต้องตรวจสอบว่าบอร์ดโมดูลมีตัวต้านทานแบบดึงขึ้นภายในหรือไม่หรือต้องใช้ตัวดึงภายนอกเพิ่มเติม บอร์ดที่ใช้ในโครงการนี้มีตัวต้านทานแบบดึงขึ้นในตัวอยู่แล้วภายในบอร์ดโมดูล
การเชื่อมต่อ Arduino กับเซ็นเซอร์อุณหภูมิร่างกาย MAX30205
เซ็นเซอร์ที่ใช้ตรงนี้คือ MAX30205 จาก maxim integrated เซ็นเซอร์อุณหภูมิ MAX30205 วัดอุณหภูมิได้อย่างแม่นยำด้วยความแม่นยำ 0.1 ° C (37 ° C ถึง 39 ° C) เซ็นเซอร์ทำงานร่วมกับโปรโตคอล I2C
บอร์ดโมดูลสามารถทำงานร่วมกับ 5 หรือ 3.3V อย่างไรก็ตามบอร์ดได้รับการกำหนดค่าให้ใช้กับแรงดันไฟฟ้า 5V นอกจากนี้ยังมีตัวเปลี่ยนระดับลอจิกเนื่องจากเซ็นเซอร์เองรองรับสูงสุด 3.3V เป็นพลังงานหรือวัตถุประสงค์ที่เกี่ยวข้องกับการสื่อสาร
บนเอาต์พุต 74HC595, 8-bit shift register สามตัวใช้เพื่อเชื่อมต่อจอแสดงผล 7-Segment สามจอกับ Arduino NANO แผนภาพพินสามารถแสดงได้ในภาพด้านล่าง -
คำอธิบายพินของ 74HC595 สามารถดูได้จากตารางด้านล่าง -
QA ถึง QH คือพินเอาต์พุตข้อมูลที่เชื่อมต่อกับจอแสดงผล 7-Seg เนื่องจาก 74HC595 สามตัวเรียงซ้อนกันขาอินพุตข้อมูล (PIN14) ของทะเบียนกะแรกจะเชื่อมต่อกับ Arduino NANO และขาเอาต์พุตข้อมูลอนุกรมจะให้ข้อมูลไปยังทะเบียนกะถัดไป การเชื่อมต่อข้อมูลแบบอนุกรมนี้จะดำเนินต่อไปจนถึง 74HC595 ตัวที่สาม
การเขียนโปรแกรม MAX30205 ด้วย Arduino
โปรแกรมที่สมบูรณ์สำหรับบทช่วยสอนนี้สามารถพบได้ที่ด้านล่างของหน้านี้ คำอธิบายของรหัสนี้มีดังต่อไปนี้ ขั้นแรกเรารวมไฟล์ส่วนหัวไลบรารี Arduino I2C มาตรฐาน
# รวม
บรรทัดด้านบนจะรวมไลบรารีที่สนับสนุน Arduino จากโปรโตเซนตรัล ไลบรารีนี้มีฟังก์ชันสำคัญในการสื่อสารกับเซ็นเซอร์ MAX30205 ไลบรารีนำมาจากลิงค์ GitHub ด้านล่าง -
https://github.com/protocentral/ProtoCentral_MAX30205
หลังจากนำเข้าไลบรารีเรากำหนดข้อมูลออบเจ็กต์ MAX30205 ดังที่แสดงด้านล่าง -
#include "Protocentral_MAX30205.h" MAX30205 tempSensor;
สองบรรทัดถัดไปมีความสำคัญในการตั้งค่าพารามิเตอร์ บรรทัดด้านล่างจะให้อุณหภูมิเป็นฟาเรนไฮต์หากตั้งค่าเป็นจริง สำหรับการแสดงผลลัพธ์เป็นเซลเซียสต้องตั้งค่าบรรทัดเป็นเท็จ
const บูล fahrenheittemp = จริง; // ฉันกำลังแสดงอุณหภูมิเป็นฟาเรนไฮต์หากคุณต้องการแสดงอุณหภูมิเป็นเซลเซียสให้ตัวแปรนี้เป็นเท็จ
ต้องกำหนดค่าบรรทัดด้านล่างหากมีการใช้จอแสดงผล 7 ส่วนประเภทแคโทดทั่วไปในฮาร์ดแวร์ ทำให้เป็นเท็จหากใช้ขั้วบวกทั่วไป
const บูล commonCathode = จริง; // ฉันใช้ Cathode 7segment ทั่วไปถ้าคุณใช้ Anode ทั่วไปให้เปลี่ยนค่าเป็นเท็จ const byte digit_pattern = {// 74HC595 Outpin Connection พร้อมการแสดงผล 7 ส่วน // Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 // abcdefg DP 0b11111100, // 0 0b01100000, // 1 0b11011010, // 2 0b11110010, // 3 0b01100110, // 4 0b10110110, // 5 0b10111110, // 6 0b11100000, // 7 0b11111110, // 8 0b11110110, // 9 0b11101110, // A 0b00111110, // b 0b00011010, // C 0b01111010, // d 0b10011110, // E 0b10001110, // F 0b00000001 //. };
อาร์เรย์ด้านบนใช้เพื่อจัดเก็บรูปแบบหลักสำหรับการแสดง 7-Segment
ในฟังก์ชั่นการตั้งค่าหลังจากตั้งค่าโหมดพินของพิน 74HC595 แล้วโปรโตคอล I2C และการอ่านเซ็นเซอร์อุณหภูมิจะเริ่มทำงาน
การตั้งค่าเป็นโมฆะ () {// ใส่รหัสการตั้งค่าของคุณที่นี่เพื่อเรียกใช้ครั้งเดียว: // ตั้งค่าพอร์ตอนุกรมที่ 9600 Serial.begin (9600); ล่าช้า (1,000); // ตั้งค่าพินควบคุม 74HC595 เป็นพินเอาต์พุต (latchPin, OUTPUT); // ST_CP ของ 74HC595 pinMode (clkPin, OUTPUT); // SH_CP ของ 74HC595 pinMode (dtPin, OUTPUT); // DS ของ 74HC595 // เริ่มต้น I2C Libs Wire.begin (); // เริ่มอ่านอุณหภูมิ MAX30205 ในโหมดต่อเนื่อง, โหมดใช้งาน tempSensor.begin (); }
ในวงอุณหภูมิจะถูกอ่านโดยฟังก์ชั่น tempSensor.getTemperature () และเก็บไว้ในตัวแปรชื่อลอยชั่วคราว หลังจากนั้นหากเลือกโหมดอุณหภูมิฟาเรนไฮต์ข้อมูลจะถูกแปลงจากเซลเซียสเป็นฟาเรนไฮต์ จากนั้นตัวเลขสามหลักจากข้อมูลอุณหภูมิที่รับรู้ที่แปลงแล้วจะถูกแยกออกเป็นสามหลัก ในการทำเช่นนี้จะใช้บรรทัดด้านล่างของรหัส -
// แยกตัวเลข 3 หลักจากอุณหภูมิปัจจุบัน (เช่นถ้า temp = 31.23c) int dispDigit1 = (int) temp / 10; // digit1 3 int dispDigit2 = (int) temp% 10; // digit2 1 int dispDigit3 = (temp * 10) - ((int) temp * 10); // digit3 2
ตอนนี้ตัวเลขสามหลักที่แยกจากกันจะถูกส่งไปยังจอแสดงผล 7 ส่วนโดยใช้การลงทะเบียนกะ 74HC595 เนื่องจาก LSB แสดงครั้งแรกในจอแสดงผล 7 ส่วนที่สามผ่านทาง 74HC595 ที่สามตัวเลขที่ 3 จะถูกส่งไปก่อน ในการทำเช่นนี้พินสลักจะถูกดึงให้ต่ำและส่งข้อมูลไปยัง 74HC595 โดยฟังก์ชัน shiftOut ();
ในทำนองเดียวกันตัวเลขที่สองและหลักแรกที่เหลือจะถูกส่งไปยัง 74HC595 ตามลำดับดังนั้นจึงเหลือการแสดงผล 7 ส่วนอีกสองจอ หลังจากส่งข้อมูลทั้งหมดแล้วสลักพินจะถูกปลดและดึงให้สูงเพื่อยืนยันการสิ้นสุดการส่งข้อมูล รหัสที่เกี่ยวข้องสามารถดูได้ด้านล่าง -
// แสดงตัวเลขในการแสดงผล 3, 7 ส่วน digitalWrite (latchPin, LOW); ถ้า (commonCathode == จริง) {shiftOut (dtPin, clkPin, LSBFIRST, digit_pattern); shiftOut (dtPin, clkPin, LSBFIRST, digit_pattern-digit_pattern); // 1. (Digit + DP) shiftOut (dtPin, clkPin, LSBFIRST, digit_pattern); } else {shiftOut (dtPin, clkPin, LSBFIRST, ~ (digit_pattern)); shiftOut (dtPin, clkPin, LSBFIRST, ~ (digit_pattern-digit_pattern)); // 1. (Digit + DP) shiftOut (dtPin, clkPin, LSBFIRST, ~ (digit_pattern)); } digitalWrite (latchPin, สูง);
เครื่องวัดอุณหภูมิร่างกาย Arduino - การทดสอบ
วงจรนี้สร้างขึ้นใน breadboards สองชุดดังที่คุณเห็นด้านล่าง เมื่อเราวางนิ้วลงบนเซ็นเซอร์อุณหภูมิจะถูกตรวจจับและเอาต์พุตจะแสดงในจอแสดงผล 7 ส่วนค่าที่นี่คือ 92.1 * F
การทำงานทั้งหมดของโครงการสามารถพบได้ในวิดีโอที่ลิงก์ด้านล่าง หวังว่าคุณจะสนุกกับการสร้างโครงการและเรียนรู้สิ่งที่เป็นประโยชน์ หากคุณมีคำถามใด ๆ ทิ้งไว้ในส่วนความคิดเห็นด้านล่างหรือใช้ฟอรัมของเรา