เกี่ยวกับ เครื่องวัดอุณหภูมิแบบดิจิตอลบน ใช้ Arduinoมีการกล่าวมากมาย ทั้งหมดเชื่อมต่อกับคอมพิวเตอร์หรือแสดงอุณหภูมิโดยตรงบนจอแสดงผล
แต่ฉันต้องการเทอร์โมมิเตอร์กลางแจ้งที่ทำงานอัตโนมัติและส่งข้อมูลไปยังเว็บไซต์ มาเริ่มกันเลย
สิ่งที่เราต้องการ:
- Arduino Duemilanove (Freeduino 2009)
- อีเทอร์เน็ตชิลด์ v2
- เซ็นเซอร์อุณหภูมิดิจิตอล - DS18B20
- พัดลมเคส (120 มม.)
- กระป๋องน้ำอิมัลชันหรือกาว PVA (2 ลิตร)
- นำ
- คู่บิด
งาน
สำรวจเซ็นเซอร์อุณหภูมิผ่านบัส 1-Wire และทุกๆ 3 วินาทีจะส่งผลลัพธ์ไปยังเว็บเซิร์ฟเวอร์อย่างอิสระที่จะจัดเก็บผลลัพธ์เหล่านั้นอัลกอริธึมการทำงานของอุปกรณ์:
- กำหนดให้กับ Ethernet Shield ของเรา ที่อยู่ MACและที่อยู่ IP
- เริ่มต้นการเชื่อมต่อกับเซิร์ฟเวอร์บนพอร์ต 80
- เราได้รับข้อมูลจากเซ็นเซอร์วัดอุณหภูมิแบบดิจิตอลผ่านบัส 1 สาย
- เราสร้าง รับคำขอ
- ส่งคำขอ GET
- กำลังตัดการเชื่อมต่อ
ซอร์สโค้ดร่าง:
ความคิดเห็นตามโค้ดควรให้ความชัดเจนรวม
// ไลบรารีด้านล่างไม่รวมอยู่ในสภาพแวดล้อมการพัฒนา Arduino มาตรฐาน
// คุณจะต้องคัดลอกมัน
รวม// ที่อยู่ MAC ของอุปกรณ์ของเรา
ไบต์ mac = ( 0x00, 0x3A, 0xF1, 0x19, 0x69, 0xFC );
// ที่อยู่ IP ของอุปกรณ์
ไบต์ ip = ( 192, 168, 1, 156 );
// ที่อยู่ IP ของเซิร์ฟเวอร์ระยะไกล
เซิร์ฟเวอร์ไบต์ = ( 79, 140, 28, 20 ); //เปลี่ยนเป็นของคุณ
อุณหภูมิถ่าน;
ไบต์ isdata=0;ไคลเอนต์ไคลเอนต์ (เซิร์ฟเวอร์ 80); // 80-พอร์ต
ดัลลัสอุณหภูมิ tempSensor;การตั้งค่าเป็นโมฆะ ()
{
Ethernet.begin(mac, ip); // เริ่มต้น Ethernet Shield
tempSensor. เริ่มต้น (7); // เซ็นเซอร์วัดอุณหภูมิที่พินที่ 7
อนุกรมเริ่มต้น(9600); // ความเร็วพอร์ตคอนโซล 9600 (มีประโยชน์สำหรับการดีบัก)
}เป็นโมฆะวน()
{
ล่าช้า (3000); // ดีเลย์ 3 วินาที
// เชื่อมต่อ
ถ้า (client.connect()) (
Serial.println("กำลังเชื่อมต่อ..." ); // Serial.println สำหรับการดีบัก ปล่อยไว้จะดีกว่า เผื่อว่าปัญหาจะเข้าใจได้ง่ายขึ้น
// ตัวจัดการข้อผิดพลาดของเซ็นเซอร์
สวิตช์ (tempSensor.isValid())
{
กรณีที่ 1:
Serial.println("CRC ไม่ถูกต้อง" ); // ข้อผิดพลาด เช็คซัม
tempSensor.รีเซ็ต(); // รีเซ็ตอุปกรณ์
กลับ ;
กรณีที่ 2:
Serial.println("อุปกรณ์ไม่ถูกต้อง" ); // เซ็นเซอร์ "ซ้าย" บางชนิด :)
tempSensor.รีเซ็ต(); // รีเซ็ตอุปกรณ์
กลับ ;
}Serial.println("เชื่อมต่อแล้ว" );
ถ่านบุฟ;
ลอย f=tempSensor.getTemperature(); //รับอุณหภูมิSerial.println(tempSensor.getTemperature());
// ต่ำกว่าความวิปริตด้วยการแยกส่วนที่เป็นเศษส่วนและจำนวนเต็ม ด้วยเหตุผลบางอย่าง Arduino ไม่ต้องการทำงานกับโฟลต
// แทรกคำถามแทนตัวเลข อาจเป็นเพราะขาดการสนับสนุนฮาร์ดแวร์ในการทำงานด้วย
// ตัวเลขทศนิยมใน Arduino ฉันยินดีที่จะเห็นวิธีแก้ปัญหาที่สวยงามยิ่งขึ้นในความคิดเห็น
int temp1 = (ฉ - (int )f) * 100; // เลือก เศษส่วน
// เขียนคำขอ GET จำเป็นต้องใช้ตัวแปรรหัสเพื่อป้องกันไม่ให้เทอร์โมมิเตอร์ของศัตรูส่งค่าสุ่ม
// ตรวจสอบทางฝั่งเว็บเซิร์ฟเวอร์
วิ่ง (buf, "GET /class/backend/meteo.php?temp=%0d.%d&code=123456 HTTP/1.0", (int )f, เอบีเอส(temp1));Serial.println(buf);
ลูกค้า println (buf); // ส่งคำขอ GET
client.println("โฮสต์: opck.info" ); // เราระบุว่าเราสนใจโฮสต์ใดบน IP นี้
ลูกค้า println();) อื่น (
Serial.println("การเชื่อมต่อล้มเหลว" );
}ในขณะที่ (client.available()) (
isdata=1;
ถ่าน c = client.read(); // อ่านสิ่งที่เว็บเซิร์ฟเวอร์ตอบเรา
อนุกรม.พิมพ์(c);ถ้า (!client.connected()) (
isdata=0;
อนุกรม.println();
Serial.println("กำลังตัดการเชื่อมต่อ" );
ลูกค้า.หยุด(); // สิ้นสุดการเชื่อมต่อ
}
}
การประกอบอุปกรณ์:
- เราขอ "ขา" แรกของเซ็นเซอร์ไปที่ "ลบ" GND
- “ขา” ที่สอง (DQ) บนพินที่ 7
- ที่สามถึง "บวก"
- ตัวที่สองและสามต้องเชื่อมต่อกับตัวต้านทาน ~ 4.7 K แต่ฉันเปลี่ยนตัวต้านทานเป็น LED และได้รับตัวบ่งชี้สำหรับการเข้าถึงบัสเซ็นเซอร์ (โปรดทราบ! หากไม่มีตัวต้านทานหรือ LED จะไม่มีอะไรทำงาน อย่าลืม!)
ตามทฤษฎีก็แค่นั้นแหละ มันควรจะทำงาน
มันใช้งานได้แต่สภาพการต่อสู้แสดงให้เห็นว่าเมื่อมันตกลงมา แสงแดดบนเซนเซอร์สามารถร้อนขึ้นและแสดงอุณหภูมิที่สูงกว่าของจริงได้มาก ถูกต้อง - มันจะแสดงอุณหภูมิในดวงอาทิตย์ และเราต้องการอุณหภูมิอากาศ
นับเป็นครั้งแรกที่มีการประกอบกระป๋องกาแฟที่ห่อด้วยกระดาษฟอยล์เพื่อจุดประสงค์นี้ แต่นี่ไม่ได้ช่วยอะไร
การศึกษาภาพถ่ายของสถานีตรวจอากาศจริงช่วยค้นหาวิธีแก้ปัญหา โครงสร้างสำหรับเซ็นเซอร์ควรมีขนาดใหญ่ขึ้นและยังมีการระบายอากาศแบบแอคทีฟในกรณีดังกล่าวด้วย
การสร้างที่อยู่อาศัยสำหรับเซ็นเซอร์
กระป๋องสีน้ำกลายเป็นขนาดที่เหมาะสม (กาว PVA มีปริมาตร 2-3 ลิตรเหมือนกัน) ที่ด้านล่างของกระป๋องเราเจาะรูสำหรับพัดลม และติดไว้กับโถ ตรงกลางกระป๋องเราวางแท่นสำหรับเซ็นเซอร์ โดยมีเส้นผ่านศูนย์กลางเล็กกว่ากระป๋องเล็กน้อย เพื่อให้อากาศไหลเวียนได้ภาพถ่ายบางส่วน:
อย่างที่คุณจำได้ฉันได้เปลี่ยนตัวต้านทานเป็น LED ดังนั้นเราจึงเจาะรูเพื่อให้สามารถมองเห็นการทำงานของอุปกรณ์ได้ตลอดเวลา
เราไม่ต้องการฝาปิดจากขวด แต่เราต้องการทรงพุ่มเพื่อให้อากาศผ่านไปได้และฝนจะไม่เข้าไปข้างใน (เซ็นเซอร์จะอยู่ที่ถนน)
ฉันสร้างเคส Arduino จากกล่องพลาสติกจากเครื่องเล่น MP3 Explay C360
แบ็กเอนด์รับข้อมูล:
ที่ฝั่งเซิร์ฟเวอร์จะมีสคริปต์ที่เทอร์โมมิเตอร์เข้าถึง สคริปต์จะตรวจสอบความถูกต้อง รหัสลับเพื่อที่จะไม่สามารถแทนที่การอ่านได้แล้วเพิ่ม รายการใหม่วี ตาราง MySql- จากนั้นข้อมูลนี้สามารถแสดงได้ตามต้องการ ในกรณีนี้ ข้อมูลทุกนาทีของนาทีที่ผ่านมาจะถูกเฉลี่ยและเพิ่มลงในตารางอื่น
สิ่งนี้จำเป็นเพื่อ:
1. เลือกในฐานข้อมูลได้ง่ายกว่า (ระบุนาทีแล้วได้ผลลัพธ์สะดวกกว่าหรือเปล่า)
2. ตัวอย่างเร็วขึ้น (~500,000 บันทึกต่อปี แทนที่จะเป็น 10,000,000)
ในระหว่าง ทำงานที่ยาวนานเซ็นเซอร์ตรวจพบปัญหา บางครั้งเซ็นเซอร์เกิดขึ้นเอง (ทุก 3-4 ชั่วโมง) ทำให้เกิดค่าสุ่ม จึงเพิ่มการตรวจสอบการเปลี่ยนแปลงของอุณหภูมิมากกว่า 1 องศา ภายใน 15 วินาที ค่าดังกล่าวจะถูกละเว้น
ข้อบกพร่อง:
ความแม่นยำของเซ็นเซอร์คือ 0.5* C ซึ่งไม่เพียงพอสำหรับฉัน แต่มีวิธีปรับปรุงประสิทธิภาพ คุณจะต้องมีเซ็นเซอร์ตั้งแต่หนึ่งตัวขึ้นไป (ควรมาจากชุดที่แตกต่างกัน) เราได้รับข้อมูลจากเซ็นเซอร์ทั้งหมดและคำนวณค่าเฉลี่ยเลขคณิต วิธีนี้จะทำให้คุณได้รับความแม่นยำจนถึงระดับหนึ่งในร้อยแผนการในอนาคต:
- เซ็นเซอร์ความชื้น
- เซ็นเซอร์ความดัน
- เซ็นเซอร์ความเร็วลม
- เซ็นเซอร์วัดแสง
- ใส่สิ่งเหล่านี้ไว้ในเมืองและพยากรณ์อากาศของคุณเอง
- จ่ายไฟให้กับ Arduino ผ่าน Power over Ethernet
- เปิดใช้งานพัดลมและความเร็วโดยอัตโนมัติโดยขึ้นอยู่กับแสงสว่าง
- การควบคุมระยะไกล
- รีเซ็ตข้อมูลในกรณีที่ไม่มีการเชื่อมต่อ (สำหรับฉันนี่เป็นสิ่งสำคัญ)
ข้อเสียที่ฉันรู้จัก:
- ราคาสูง- 2180 ถู (Freeduino 2009 (800 RUR) + Ethernet Shield v2 (1300 RUR) + 1 เซ็นเซอร์ (80 RUR))- หากเปิดพัดลมเร็วเกินไปก็จะทำให้เกิดข้อผิดพลาดกับอุณหภูมิโดยการเป่าเซ็นเซอร์ ไม่ควรเป่าออก แต่ดันอากาศผ่านเท่านั้น
เรียนรู้วิธีใช้โมดูล RF 433 MHz กับ ATMega328P-PU ในบทความนี้เราจะประกอบวงจรจากเซ็นเซอร์ DHT11 และเครื่องส่งสัญญาณ RF นอกจากนี้เรายังจะประกอบอุปกรณ์รับสัญญาณที่มีเครื่องรับวิทยุ 433 MHz และจอ LCD
เราต้องการอะไร
- คอมพิวเตอร์พร้อมติดตั้ง อาร์ดูโน่ IDE(ฉันใช้เวอร์ชัน 1.6.5);
- ไลบรารี VirtualWire (ลิงค์ด้านล่าง);
- ATMega328P;
- โปรแกรมเมอร์ AVR MKII ISP;
- เซ็นเซอร์อุณหภูมิและความชื้นสัมพัทธ์ DHT11;
- ส่วนประกอบจากรายการองค์ประกอบด้านล่าง
การแนะนำ
ในบทความนี้ ฉันจะแสดงวิธีสร้างอุปกรณ์ที่ใช้วัดอุณหภูมิและความชื้นสัมพัทธ์และส่งค่าที่วัดได้โดยใช้โมดูล RF มาตรฐาน 433 MHz เซ็นเซอร์อุณหภูมิและความชื้นที่ใช้ในอุปกรณ์คือ DHT11
มีหลายวิธีในการถ่ายโอนข้อมูลจำนวนเล็กน้อย โดยใช้อาดูโน่หรือตัวควบคุม ATMega หนึ่งในนั้นใช้ไลบรารีสำเร็จรูปเช่น RCSwitch, Radiohead หรือ VirtualWire นอกจากนี้ยังสามารถส่งข้อมูลดิบโดยใช้โมดูล UART ในตัวของไมโครคอนโทรลเลอร์ได้อีกด้วย แต่ไม่แนะนำให้ใช้โมดูล UART ในตัว เนื่องจากตัวรับสัญญาณจะรวบรวมเสียงรบกวนทั้งหมดและไมโครคอนโทรลเลอร์จะไม่ทำงานตามที่ตั้งใจไว้ ในบทความนี้ ฉันใช้ไลบรารี VirtualWire เพื่อส่งและรับข้อมูล ไลบรารีนี้ทำงานร่วมกับ Arduino IDE 1.6.2 และ 1.6.5
โมดูลเครื่องส่งสัญญาณ 433 MHz เมื่อไม่ส่งข้อมูล ยังคงปล่อย RF และส่งเสียงรบกวน นอกจากนี้ยังอาจรบกวนอุปกรณ์ความถี่วิทยุอื่นๆ อีกด้วย เพื่อป้องกันสิ่งนี้ ฉันจึงเปิดเครื่องเมื่อจำเป็นต้องถ่ายโอนข้อมูล และปิดเมื่อการถ่ายโอนเสร็จสมบูรณ์
ฮาร์ดแวร์
เราต้องการสอง บล็อกไดอะแกรม- อันหนึ่งสำหรับอุปกรณ์ส่งสัญญาณ อันที่สองสำหรับอุปกรณ์รับ
เครื่องส่ง
เราต้องการ:
- วิธีเฟิร์มแวร์ไมโครคอนโทรลเลอร์ → ISP;
- เซ็นเซอร์วัดอุณหภูมิและความชื้น → DHT11;
- ไมโครคอนโทรลเลอร์สำหรับการประมวลผลข้อมูล → ATMega32p;
- ทาง การส่งสัญญาณไร้สายข้อมูล → โมดูลความถี่วิทยุ 433 MHz
ผู้รับ
เราต้องการ:
- วิธีการรับสัญญาณวิทยุ → โมดูลความถี่วิทยุ 433 MHz;
- วิธีการประมวลผลข้อมูลที่ได้รับ → Arduino Mega;
- วิธีแสดงอุณหภูมิและความชื้น → 16x2 LCD
แผนผัง
เครื่องส่ง
กำลังส่งสัญญาณส่วนหนึ่งของเทอร์โมมิเตอร์ไร้สายบน ATMega328p
()
ใน ในตัวอย่างนี้ฉันจะไม่ส่งออกพินไมโครคอนโทรลเลอร์ที่ไม่ได้ใช้ไปที่ ผู้ติดต่อภายนอกเทอร์โมมิเตอร์หลังจากนั้นจะนำไปใช้ปรับปรุงอุปกรณ์ต่อไปได้ ที่นี่เรากำลังพิจารณาเฉพาะแนวคิดสำหรับอุปกรณ์และจะประกอบเข้ากับเขียงหั่นขนมเท่านั้น
ผู้รับ
(หากต้องการขยายขนาดคุณสามารถคลิกที่ภาพได้ คลิกขวาเมาส์และเลือก "เปิดลิงก์/รูปภาพในแท็บใหม่/หน้าต่างใหม่")
โปรดทราบว่าผู้รับจะขึ้นอยู่กับ บอร์ด Arduinoเมกะซึ่งไม่ได้แสดงในแผนภาพ หากต้องการเชื่อมต่อบอร์ด Arduino Mega ให้เชื่อมต่อโมดูล RF เข้ากับบอร์ดและ จอ LCDตามเครื่องหมายบนแผนภาพ
รายการองค์ประกอบ
เครื่องส่ง
รายการองค์ประกอบของส่วนส่งสัญญาณของเทอร์โมมิเตอร์ไร้สายบน ATMega328p
(หากต้องการขยาย คุณสามารถคลิกขวาที่รูปภาพแล้วเลือก "เปิดลิงก์/รูปภาพในแท็บใหม่/หน้าต่างใหม่")
ผู้รับ
(หากต้องการขยาย คุณสามารถคลิกขวาที่รูปภาพแล้วเลือก "เปิดลิงก์/รูปภาพในแท็บใหม่/หน้าต่างใหม่")
โปรแกรม
โปรแกรมส่งสัญญาณ
ก่อนอื่น มาดูโปรแกรมของส่วนที่ส่งสัญญาณกันก่อน:
เพื่อถ่ายทอดความชื้นและอุณหภูมิเป็นข้อความเดียว ฉันจึงรวมมันเข้าด้วยกัน ขั้นแรก ข้อมูลจะถูกอ่านเป็นตัวแปรเป็นจำนวนเต็ม จากนั้นจำนวนเต็มจะถูกแปลงเป็นอาร์เรย์อักขระ จากนั้นจึงนำมาต่อกัน เมื่อสิ้นสุดการรับข้อมูลจะถูกแบ่งออกเป็น ตัวละครแต่ละตัว- การทำเช่นนี้ ฉันจำกัดตัวเองไว้ที่ระดับสองหลัก หากเซ็นเซอร์อยู่ในสภาพแวดล้อมที่มีอุณหภูมิน้อยกว่า 10°C ฉันจะได้รับสัญลักษณ์ขยะบนจอแสดงผล ตัวอย่างเช่น หากอุณหภูมิอยู่ที่ 20°C และความชื้นอยู่ที่ 45% ข้อความ 2045 จะถูกส่งออกไป และทุกอย่างเป็นไปด้วยดี ถ้าอุณหภูมิ 9°C และความชื้น 78% ข้อความ 978x จะถูกส่ง โดยที่ “x” คือ สัญลักษณ์สุ่ม- ดังนั้นหากคุณสร้างเทอร์โมมิเตอร์ไร้สายนี้ ขอแนะนำให้เปลี่ยนโปรแกรมเพื่อส่งข้อมูลที่ถูกต้องเมื่ออุณหภูมิต่ำกว่า 10°C
โปรแกรมตัวรับ
// รวมไลบรารีที่จำเป็น #includeวิธีที่น่าสนใจในการใช้ไลบรารี LiquidCrystal คือการสร้างสัญลักษณ์แบบกำหนดเอง การใช้ createChar ฉันสร้างสัญลักษณ์องศา คุณสามารถสร้างสัญลักษณ์ของคุณเองได้ในลักษณะเดียวกัน หากต้องการสร้างสัญลักษณ์หรือไอคอนที่กำหนดเอง คุณจะต้องประกาศให้เป็นอาร์เรย์ 8 ไบต์และ "วาด" ว่าพิกเซลใดจะเปิดอยู่ (1 เปิดอยู่ 0 ปิดอยู่)
เมื่อสร้างโครงการทางเทคนิคต่างๆ มักจำเป็นต้องติดตั้งตัวบ่งชี้อุณหภูมิ ส่วนประกอบเหล่านี้ช่วยให้คุณตรวจสอบการทำงานของอุปกรณ์ได้ดียิ่งขึ้น ในการทบทวนนี้ เราจะได้เรียนรู้วิธีแปลงโวลต์มิเตอร์แบบอะนาล็อกให้เป็นเทอร์โมมิเตอร์ที่แม่นยำ ในการทำงาน เราจำเป็นต้องมีบอร์ด Arduino (วงจรพิเศษที่ติดตั้งหน่วยความจำ โปรเซสเซอร์ และหน้าสัมผัสการทำงานสองสามโหลของตัวเอง) และเซ็นเซอร์อุณหภูมิรุ่น DS18B20
ลักษณะของโมดูลอุณหภูมิ DS18B20
เป็นไปไม่ได้ที่จะไม่พูดถึงข้อดีอีกประการของโมดูล DS18B20 เซ็นเซอร์ประเภทนี้แต่ละตัวใช้รหัสซีเรียล 64 บิตเฉพาะในการทำงาน ซึ่งหมายความว่าส่วนประกอบดังกล่าวทั้งหมดสามารถทำงานบนบัส 1-Wire เพียงเส้นเดียว ซึ่งข้อมูลทั้งหมดจะถูกส่งไปตามที่ระบุไว้ข้างต้น ดังนั้นในการควบคุมหลายโมดูลจึงจำเป็นต้องใช้ไมโครโปรเซสเซอร์เพียงตัวเดียวและเซ็นเซอร์อุณหภูมิสามารถกระจายไปทั่วพื้นที่ขนาดใหญ่ได้
ชิ้นส่วนสำหรับการทำงานกับเทอร์โมมิเตอร์ด้วย DS18B20 ที่ใช้ Arduino
ในการประกอบเทอร์โมมิเตอร์แบบแอนะล็อกคุณภาพสูง คุณต้องเตรียม:
- วงจรไฟฟ้าประเภท Arduino (ควรใหม่กว่า);
- เซนเซอร์วัดอุณหภูมิ รุ่น DS18B20;
- โวลต์มิเตอร์แบบอะนาล็อก
- สายไฟ 5 เส้น - ต้องใช้สายไฟสองเส้นเพื่อสร้างวงจรระหว่างบอร์ด Arduino และโวลต์มิเตอร์ ต้องใช้สายไฟ 3 เส้นเพื่อเชื่อมต่อกับวงจรไฟฟ้าของเซ็นเซอร์อุณหภูมิ
- แบตเตอรี่ภายนอก
การสร้างวงจรไฟฟ้าสำหรับเทอร์โมมิเตอร์ด้วย DS18B20 โดยใช้ Arduino
อัลกอริธึมการทำงานค่อนข้างง่ายที่นี่แม้แต่ผู้เริ่มต้นก็สามารถเชื่อมต่อส่วนประกอบทั้งหมดไว้ในวงจรเดียวได้ ขั้นแรก คุณต้องค้นหาหน้าสัมผัสเชิงลบบนโมดูล DS18B20 (หากคุณดูเซ็นเซอร์จากด้านบน หน้าสัมผัสนี้จะอยู่ทางด้านซ้าย) ต้องเชื่อมต่อพินเชิงลบเข้ากับจุดกราวด์ด้านล่างของบอร์ด Arduino (จะมีตัวย่อว่า GND) พินที่มีประจุบวก (ขวา) ต้องเชื่อมต่อกับพินไฟ 5 V (ซึ่งอยู่ที่ด้านล่างของบอร์ดด้วย) ถัดไป สัญญาณเอาต์พุตจะถูกส่งไปยังพินดิจิทัล 2 (อยู่ที่ด้านบนของบอร์ด) เพื่อให้สามารถวัดอุณหภูมิได้ (ในกรณีนี้ จะใช้พินกลางของเซ็นเซอร์)
ในการควบคุมโวลต์มิเตอร์ระหว่างการทำงานคุณจะต้องเชื่อมต่อหน้าสัมผัสเชิงบวกเข้ากับพินดิจิตอลหมายเลข 9 หน้าสัมผัสเชิงลบของโวลต์มิเตอร์เชื่อมต่อกับจุดกราวด์ด้านบนของบอร์ด (กำหนดโดยตัวย่อ GND) หากต้องการเปลี่ยนสเกลดิจิตอลของโวลต์มิเตอร์ คุณเพียงแค่ต้องพิมพ์ภาพที่เตรียมไว้เป็นองศาเซลเซียส รูปภาพนี้ติดกาวไว้ที่ด้านบนของสเกลเก่าหรือแทรกเข้าที่
คำอธิบายของการปรับความกว้างพัลส์
กล่าวโดยสรุป การมอดูเลตความกว้างพัลส์เป็นวิธีการสร้างผลลัพธ์แบบอะนาล็อก (เช่น อุณหภูมิ) โดยใช้วิธีดิจิทัล เป็นเรื่องที่ดีเพราะแม้แต่ค่าที่สูงมากหรือต่ำมากก็ถูกส่งผ่านช่องทางการสื่อสารในพัลส์เดียว กระบวนการทั้งหมดของการปรับความกว้างพัลส์เป็นดังนี้: เซ็นเซอร์ส่งสัญญาณพัลส์ไปยังโปรเซสเซอร์และโปรเซสเซอร์เองก็ประมวลผลมัน หลังจากนั้นจะส่งค่าไปยังเทอร์โมมิเตอร์ เพื่อให้สามารถรับข้อมูลในลักษณะนี้ได้ คุณต้องใช้หมุดสัมผัสพิเศษบนบอร์ด Arduino การจดจำผู้ติดต่อเหล่านี้ทำได้ง่ายมาก - ถัดจากนั้นจะมีไอคอน "~" อย่างไรก็ตามไอคอนนี้ยังปรากฏใกล้กับหมายเลขติดต่อ 9 ซึ่งเราเชื่อมต่อพินบวกของโวลต์มิเตอร์ ใช้พิน 9 เป็นตัวอย่างเท่านั้น หากต้องการ คุณสามารถใช้ผู้ติดต่ออื่นที่มีไอคอน "~" อยู่ข้างๆ ได้
การเขียนโค้ดสำหรับใช้งานเทอร์โมมิเตอร์ด้วย DS18B20 บน Arduino
ก่อนอื่น คุณต้องเพิ่มไลบรารีชื่อ DallasTemperature ให้กับโปรแกรมการพัฒนาของคุณ มันคุ้มค่าที่จะให้ความสำคัญกับมันเพราะมันมีค่าอุณหภูมิสูงสุด (และนี่เป็นสิ่งสำคัญเมื่อใช้โมดูล DS18B20)
เมื่อสร้างโค้ดคุณจะต้องเขียนคำสั่งหลักสามคำสั่ง:
- อ่านค่าอุณหภูมิที่มาจากเซ็นเซอร์
- การแปลงอุณหภูมิโดยใช้การปรับความกว้างพัลส์
- การแสดงค่าบนเทอร์โมมิเตอร์
โปรดทราบว่าเกณฑ์อุณหภูมิต่ำสุดและสูงสุดอาจแตกต่างกันมาก (ทั้งหมดนี้ขึ้นอยู่กับความชอบของผู้ใช้) อย่างไรก็ตาม สิ่งหนึ่งที่ต้องจำก็คือ ยิ่งช่องว่างระหว่างขีดจำกัดล่างและบนมากเท่าไร ตัวเลขบนสเกลก็จะยิ่งน้อยลงเท่านั้น
โค้ดทั้งหมดที่จำเป็นในการตั้งค่าเทอร์โมมิเตอร์มีดังนี้
วันนี้เราจะมาดูโครงการ Arduino สำหรับนักศึกษาวิศวกรรมศาสตร์ ในบทความนี้เราจะบอกวิธีสร้างเทอร์โมมิเตอร์โดยใช้ Arduino ข้อดีของการสร้างเทอร์โมมิเตอร์โดยใช้ Arduino คือความเรียบง่ายของการออกแบบ เรามีคุณสมบัติของมันอยู่แล้ว การเขียนโปรแกรม Arduino ง่ายกว่าที่คุณคิดมาก
โครงการนี้เป็นเทอร์โมมิเตอร์แบบดิจิตอล (เซ็นเซอร์วัดอุณหภูมิแบบดิจิตอล Arduino) ซึ่งสร้างขึ้นบนพื้นฐานของเซ็นเซอร์ LM35 ที่มีความแม่นยำในตัว
เทอร์โมมิเตอร์แบบดิจิตอลถูกนำมาใช้กันอย่างแพร่หลายในอุปกรณ์อิเล็กทรอนิกส์หลายชนิด เช่น เครื่องปรับอากาศ เพื่อรายงานระดับอุณหภูมิและควบคุมกระบวนการของระบบทำความเย็น
วงจรนี้ใช้เซ็นเซอร์อุณหภูมิ LM35 ในการตรวจจับระดับอุณหภูมิซึ่งสามารถวัดได้ตั้งแต่ -55 ถึง 150°C อุณหภูมิที่วัดได้จะแสดงบนจอ LCD ขนาด 16x2 โดยใช้ Arduino
ส่วนประกอบที่จำเป็นสำหรับโครงการ “Thermometer on Arduino”
เทอร์โมมิเตอร์ดิจิตอล Arduino ใช้ส่วนประกอบที่ทุกคนสามารถซื้อได้ตามร้านขายอุปกรณ์อิเล็กทรอนิกส์
- อาร์ดูโน่
- เซ็นเซอร์อุณหภูมิ LM35
- จอ LCD 16x2
- โพเทนชิออมิเตอร์ 1kOhm
การทำงานของเทอร์โมมิเตอร์
แรงดันไฟขาออกของเซ็นเซอร์ LM35 จะเป็นสัดส่วนเชิงเส้นตรงกับอุณหภูมิ (เซลเซียส)
เอาต์พุตของ LM35 มีปัจจัยสเกล 10mV/°C ซึ่งหมายความว่าอุณหภูมิที่เพิ่มขึ้นทุกๆ 1°C แรงดันเอาต์พุตจะเพิ่มขึ้น 10mV ที่สอดคล้องกัน ดังนั้นเราจึงสามารถอ่านค่าอุณหภูมิที่วัดได้ได้อย่างง่ายดาย
Arduino มีพินแบบอะนาล็อก (A0) ที่สามารถอ่านสัญญาณอะนาล็อกจากเซ็นเซอร์ใดก็ได้ ดังที่แสดงในแผนภาพวงจร พินอะนาล็อก A0 ของ Arduino เชื่อมต่อกับเอาต์พุตของ LM35
ขาเซ็นเซอร์อุณหภูมิ LM35
Arduino มี ADC ในตัว 10 บิต จึงสามารถอ่านค่าได้ตั้งแต่ 0 ถึง 1,023 ซึ่งสำหรับแรงดันไฟฟ้าเป็นศูนย์จะอ่าน 0000 และสำหรับ VCC (5V) จะอ่าน 1,023
ดังนั้นเราจึงปรับขนาดค่า 0 - 1,023 เป็นช่วงใหม่ 0 - 500 เนื่องจาก LM35 เอาท์พุตค่าโดยเพิ่มขั้นละ 10mV ต่อระดับ ดังนั้นการเพิ่มสูงสุดที่เป็นไปได้คือ 500 (5V/0.01V)
เมื่อใช้การแมปนี้ เราสามารถเพิ่มค่า ADC แต่ละครั้งเป็นการเพิ่มระดับได้ ถ้าค่า ADC คือ 27 แสดงว่าอุณหภูมิที่วัดได้คือ 27°C
ภาพสเก็ตช์เทอร์โมมิเตอร์
#รวมตอนนี้เรามาดูตรรกะของโปรแกรมกันดีกว่า อันดับแรก เราต้องประกาศตัวแปรแบบยาว "A" เพื่อจัดเก็บค่าที่อ่านได้จาก LM35 ซึ่งมีช่วงตั้งแต่ 0 ถึง 1023 จากนั้นเราจะประกาศตัวแปรจำนวนเต็ม "B" อีกตัวหนึ่งเพื่อจัดเก็บค่าที่แสดง (แปลงแล้ว)
ค่าอุณหภูมิจะอ่านจากพิน A0 และเก็บไว้ในตัวแปร “A” จากนั้นตัวแปร "A" จะถูกแปลงเป็นช่วงตั้งแต่ 0 ถึง 500 และเก็บไว้ในตัวแปร "B" ค่า "B" จะแสดงโดยตรงบนหน้าจอ LCD ขนาด 16x2