สารบัญ:

DIY เซ็นเซอร์อุณหภูมิโดยใช้ไดโอดเดียว: 3 ขั้นตอน
DIY เซ็นเซอร์อุณหภูมิโดยใช้ไดโอดเดียว: 3 ขั้นตอน

วีดีโอ: DIY เซ็นเซอร์อุณหภูมิโดยใช้ไดโอดเดียว: 3 ขั้นตอน

วีดีโอ: DIY เซ็นเซอร์อุณหภูมิโดยใช้ไดโอดเดียว: 3 ขั้นตอน
วีดีโอ: ไดโอดเบื้องต้น EP3/3(ไดโอด ลดแรงดัน? 5v to 3v) 2024, กรกฎาคม
Anonim
DIY เซนเซอร์จับอุณหภูมิโดยใช้ One Diode
DIY เซนเซอร์จับอุณหภูมิโดยใช้ One Diode
DIY เซนเซอร์จับอุณหภูมิโดยใช้ One Diode
DIY เซนเซอร์จับอุณหภูมิโดยใช้ One Diode

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

การตั้งค่านี้มักใช้ในวงจรรวมจำนวนมากเพื่อวัดอุณหภูมิภายในและเซ็นเซอร์อุณหภูมิหลายตัวเช่น LM35 ที่มีชื่อเสียงซึ่งอิงตามคุณสมบัตินี้

เพียงแค่แรงดันตกคร่อมของไดโอด (ซึ่งเป็นทางแยก PN เดียว) จะเปลี่ยนไปตามปริมาณของกระแสที่ไหลผ่านมันเปลี่ยนไป และเมื่ออุณหภูมิไดโอดเปลี่ยนแปลง แรงดันตกก็จะเปลี่ยนไปด้วย (เมื่ออุณหภูมิเพิ่มขึ้น การลดลงลดลงด้วยค่า (1.0 มิลลิโวลต์ถึง 2.0 มิลลิโวลต์สำหรับไดโอดซิลิคอนและ 2.5 มิลลิโวลต์สำหรับไดโอดเจอร์เมเนียม)

ดังนั้นโดยการส่งกระแสคงที่ผ่านไดโอด แรงดันตกไปข้างหน้าควรจะแปรผันตามอุณหภูมิไดโอดเท่านั้น ตอนนี้เราต้องวัดแรงดันไปข้างหน้าของไดโอด ใช้สมการง่าย ๆ และ voila นี่คือเซ็นเซอร์อุณหภูมิของคุณ !!!

เสบียง

1 - 1n4007 diode #12 - 1 Kohm resistor #13 - บอร์ด Arduino

ขั้นตอนที่ 1: แผนภาพวงจร

แผนภูมิวงจรรวม
แผนภูมิวงจรรวม

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

ตัวต้านทาน 1 กิโลโอห์มที่มีแหล่งจ่าย 5V ควรส่งผลให้กระแสไดโอด 4 มิลลิแอมแปร์ซึ่งเป็นค่าที่เพียงพอสำหรับจุดประสงค์นี้ I(ไดโอด) = VCC / (Rseries + Rdiode)

ขั้นตอนที่ 2: การเข้ารหัส

เราต้องจำไว้ว่ามีค่าบางอย่างที่จะปรับแต่งในโค้ดเพื่อให้ได้ผลลัพธ์ที่ดีขึ้นเช่น:

1 - VCC_Voltage: เนื่องจากค่า analogRead() ขึ้นอยู่กับ VCC ของชิป ATmega เราจึงต้องเพิ่มลงในสมการหลังจากวัดบนบอร์ด Arduino

2 - V_OLD_0_C: แรงดันไปข้างหน้าของไดโอดที่ใช้ที่กระแส 4 mA และอุณหภูมิ 0 องศาเซลเซียส

3 - Temperature_Coefficient: การไล่ระดับอุณหภูมิของไดโอดของคุณ (ควรได้รับจากแผ่นข้อมูลดีกว่า) หรือคุณสามารถวัดได้โดยใช้สมการนี้:Vnew - Vold = K (Tnew - Told)

ที่ไหน:

Vnew = แรงดันตกคร่อมที่วัดใหม่หลังจากให้ความร้อนกับไดโอด

Vold = แรงดันตกที่วัดได้ที่อุณหภูมิห้องบางส่วน

Tnew = อุณหภูมิที่ไดโอดถูกทำให้ร้อนถึง

บอก = อุณหภูมิห้องเก่าที่วัดโวลด์ได้ที่

K = อุณหภูมิ_ค่าสัมประสิทธิ์ (ค่าลบที่อยู่ระหว่าง -1.0 ถึง -2.5 มิลลิโวลต์) ในที่สุด คุณก็อัปโหลดโค้ดและรับผลอุณหภูมิได้แล้ว

#define Sens_Pin A0 //PA0 สำหรับบอร์ด STM32F103C8

V_OLD_0_C สองเท่า = 690.0; //690 mV แรงดันไปข้างหน้าที่ 0 เซลเซียส ที่กระแสทดสอบ 4 mA

คู่ V_NEW = 0; // แรงดันไปข้างหน้าใหม่ที่อุณหภูมิห้องที่ 4 mA ทดสอบปัจจุบัน double Temperature = 0.0; //อุณหภูมิห้องคำนวณสองเท่า Temperature_Coefficient = -1.6; //-1.6 mV เปลี่ยนต่อองศาเซลเซียส (-2.5 สำหรับเจอร์เมเนียมไดโอด) ดีกว่าที่จะได้รับจากแผ่นข้อมูลไดโอด double VCC_Voltage = 5010.0; //แรงดันไฟฟ้าอยู่ที่ราง 5V ของ Arduino ในหน่วยมิลลิโวลต์ (จำเป็นสำหรับความแม่นยำที่ดีขึ้น) (3300.0 สำหรับ stm32)

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

// ใส่รหัสการตั้งค่าของคุณที่นี่ เพื่อเรียกใช้ครั้งเดียว: pinMode(Sens_Pin, INPUT); Serial.begin(9600); }

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

// ใส่รหัสหลักของคุณที่นี่ เพื่อเรียกใช้ซ้ำ: V_NEW = analogRead(Sens_Pin)*VCC_Voltage/1024.0; // หารด้วย 4.0 ถ้าคุณใช้ 12 บิต ADC Temperature = ((V_NEW - V_OLD_0_C)/Temperature_Coefficient);

Serial.print ("อุณหภูมิ = ");

Serial.print(อุณหภูมิ); Serial.println("C");

ล่าช้า (500);

}

ขั้นตอนที่ 3: รับค่าที่ดีขึ้น

ได้คุณค่าที่ดีขึ้น
ได้คุณค่าที่ดีขึ้น
ได้คุณค่าที่ดีขึ้น
ได้คุณค่าที่ดีขึ้น

ฉันคิดว่าควรมีอุปกรณ์วัดอุณหภูมิที่เชื่อถือได้อยู่ข้างๆ คุณเมื่อทำโครงงานนี้

คุณจะเห็นว่ามีข้อผิดพลาดที่เห็นได้ชัดเจนในการอ่านค่าที่สามารถไปถึง 3 หรือ 4 องศาเซลเซียส ข้อผิดพลาดนี้มาจากไหน?

1 - คุณอาจต้องปรับแต่งตัวแปรที่กล่าวถึงในขั้นตอนก่อนหน้า

2 - ความละเอียด ADC ของ Arduino ต่ำกว่าที่เราต้องการเพื่อตรวจจับความแตกต่างของแรงดันไฟฟ้าเล็กน้อย

3 - แรงดันอ้างอิงของ Arduino (5V) สูงเกินไปสำหรับการเปลี่ยนแปลงแรงดันไฟฟ้าเล็กน้อยในไดโอด

ดังนั้น หากคุณกำลังจะใช้การตั้งค่านี้เป็นเซ็นเซอร์อุณหภูมิ คุณควรตระหนักว่าถึงแม้ว่าจะมีราคาถูกและสะดวก แต่ก็ไม่ถูกต้อง แต่ก็สามารถให้ความคิดที่ดีเกี่ยวกับอุณหภูมิของระบบของคุณได้ไม่ว่าจะอยู่ใน PCB หรือติดตั้งกับมอเตอร์ที่ทำงานอยู่ ฯลฯ …

คำแนะนำนี้มีขึ้นเพื่อใช้ส่วนประกอบจำนวนน้อยที่สุดเท่าที่จะเป็นไปได้ แต่ถ้าคุณต้องการได้ผลลัพธ์ที่แม่นยำที่สุดจากแนวคิดนี้ คุณสามารถทำการเปลี่ยนแปลงบางอย่างได้:

1 - เพิ่มแอมพลิฟายเออร์และขั้นตอนการกรองโดยใช้ op-amps เช่นเดียวกับในลิงค์นี้2 - ใช้คอนโทรลเลอร์อ้างอิงแอนะล็อกภายในที่ต่ำกว่าเป็นบอร์ด STM32F103C8 ที่มีแรงดันอ้างอิงแอนะล็อก 3.3 โวลต์ (ดูจุดที่ 4)3 - ใช้การอ้างอิงแอนะล็อกภายใน 1.1 V ใน Arduino แต่โปรดทราบว่าคุณไม่สามารถเชื่อมต่อมากกว่า 1.1 โวลต์กับพินอะนาล็อกของ Arduino ได้

คุณสามารถเพิ่มบรรทัดนี้ในฟังก์ชันการตั้งค่า:

analogReference (ภายใน);

4 - ใช้ไมโครคอนโทรลเลอร์ที่มี ADC ที่มีความละเอียดสูงกว่าเป็น STM32F103C8 ซึ่งมีความละเอียด ADC 12 บิต กล่าวโดยสรุป การตั้งค่าที่ใช้ Arduino นี้สามารถให้ภาพรวมที่ดีเกี่ยวกับอุณหภูมิของระบบของคุณ แต่ผลลัพธ์ไม่ค่อยแม่นยำนัก (ประมาณ 4.88 mV/การอ่าน)

การตั้งค่า STM32F103C8 จะให้ผลลัพธ์ที่ค่อนข้างแม่นยำ เนื่องจากมี ADC 12 บิตที่สูงกว่าและค่าอ้างอิงแอนะล็อกที่ต่ำกว่า 3.3V (ประมาณ 0.8 mV/การอ่าน)

นั่นสินะ !!:NS

แนะนำ: