ค้นหาบล็อกนี้

Custom Search

วันอังคารที่ 7 มิถุนายน พ.ศ. 2554

Digital Temprature Controller

เป็น project ที่ไม่ซีเรียสมากแต่เอาไปใช้ได้จริง สามารถคุมได้ทั้งร้อนและเย็น
ตั้งแต่ -55องศา ถึง 125องศาcompare routine สามารถคำนวนและเปรียบเทียบ
ค่าลบได้ด้วย โดยคำนวนร่วมกับ flag tn,th,tl





มาว่ากันเรื่องการคำนวน มีหลักๆก็
TN ค่าอุณหภูมิ ปัจจุบันที่อ่านได้จาก ds18b20
TH ค่าอุณหภูมิ สูงสุดที่เรากำหนด
TL ค่าอุณหภูมิ ต่ำสุดที่เรากำหนด

เริ่มแรกให้คำนวน TH กับ TN ก่อน TNน้อยกว่าTH ??
ผมลองสุ่มค่าดังนี้
tn+15 th+10 = tnมากกว่าth
tn+15 th-10 = tnมากกว่าth
tn+15 th-15 = tnมากกว่าth
tn-15 th-20 = tnมากกว่าth
tn-15 th+15 = tnน้อยกว่าth**
การคำนวนให้คิดเครื่องหมายก่อนถ้าเป็นบวกทั้งคู่ใช้ th-tn
ถ้าเป็นลบทั้งคู่ใช้ tn-th แต่ถ้า tn เป็นบวก th เป็นลบจะคิด
แต่เครื่องหมายเพราะยังไง tn ก็ต้องเยอะกว่าแนนอนอยู่แล้ว
ในทางตรงกันข้าม ถ้า tn เป็นลบ th เป็นบวก tn จะมีค่า
น้อยกว่า ก็ข้ามไปคำนวณ tl ต่อไป

TL กับ TN ก่อน TNน้อยกว่าTL ??
ผมลองสุ่มค่าดังนี้
tl+15 tn+10 = tnน้อยกว่าtl
tl+15 tn-10 = tnน้อยกว่าtl
tl+15 tn-15 = tnน้อยกว่าtl
tl-15 tn-20 = tnน้อยกว่าtl
tl-15 tn+15 = tnมากกว่าtl**
การคำนวนให้คิดเครื่องหมายก่อนเช่นเดียวกับ th แต่คราวนี้
ใช้ tn เป็นตัวตั้งลบด้วย tl หากเป็นค่าบวกทั้งคู่....
ที่เหลื่อก้จะคำนวณคล้ายๆกันแค่สลับตัวตั้งเท่านั้น.....

การทำงานใน Hot mode (คุมร้อน)
เมื่อ TN ต่ำกว่าหรือเท่ากับ TL รีเลย์จะทำงานและจะตัด
การทำงานจนกว่าค่าของ TN จะสูงกว่าหรือเท่ากับ TH

การทำงานใน Cool mode (คุมเย็น)
คล้าย คุมร้อน แต่สลับกัน...
พอมองภาพออกกันมั๊ยครับ (ทั้งหมดนี่จะไม่มีความหมายหากเขียนด้วย ภาษาc)

Source code v2.0f

FIRMWARE 4.0F
รุ่นท้ายสุด... ผมปรับแก้ bug จนหมดแล้วครับ
อีกอย่างคือยัดอะไรไม่ได้แล้ว เต็ม2kแล้วจริงๆ อยากใส่ delay time
ให้ รีเลย์ แต่ยัดไม่ลงครับ ก็เลยเอาเท่าที่ได้...

การตั้งค่า กด set ค้างไว้ 1 วิครับมันจะขึ้น HC_x ซึง x ก็คือ ตัวกระพริบ
ถ้าเป็น C กระพริบก็ Cool คุมเย็น ถ้าเป็น H ก็คือ Hot คุมร้อน
กดปุ่ม inc เพื่อตั้งค่า จากนั้นกด set อีกครั้ง หน้าจอจะแสดง Hi_t
ประมาณ1วินาที จากนั้น จะเปลี่ยนเป็นตัวเลข4หลัก คือค่าอุณหภูมิสูง
กดปุ่ม inc เพื่อตั้งค่าจากนั้นเลื่อนไปหลักต่อไปโดยกดปุ่ม set
เมื่อตั้งค่าหลักสุดท้ายเสร็จ กดปุ่ม set อีกครั้ง หน้าจอจะเสดง Lo_t
ประมาณ1วินาที จากนั้น จะเปลี่ยนเป็นตัวเลข4หลัก คือค่าอุณหภูมิต่ำ
กดปุ่ม inc เพื่อตั้งค่าจากนั้นเลื่อนไปหลักต่อไปโดยกดปุ่ม set
เมื่อตั้งค่าหลักสุดท้ายเสร็จ กดปุ่ม set อีกครั้ง หน้าจอจะเสดง Succ
เป้นอันเสร็จการตั้งค่า

การ ลบค่าอุณหภูมิที่ตั้งไว้ทั้งหมด ทำได้โดยกด ปุ่ม set กับ inc ค้าง
ไว้ 1วิ หน้าจอจะแสดง CLr เท่านี้ค่าต่างๆก็จะถูกลบออกหมดแล้ว...

4.0F ผมตัด function ที่เกี่ยวกับ EEPROM ทั้งหมดออกนะครับ
อยากได้ต้องไปเพิ่มกันเองครับ เหลือไว้ให้คิดเองบ้างครับ ชีวิตจะได้
มีรสชาติ...อิอิ คงไปต่อยอดกันเองได้ไม่ยากนะ...

ปล. เกี่ยวกับ error msg.
Er_1 = family code ไม่ตรง หรือไม่ใช่ ds18b20 ที่ต่ออยู่
แต่ผมตัดออกเพาระไม่จำเป็น.
Er_2 = Device not Presence ไม่มีการตอบสนอง ต่อการ
reset บน bus 1-wire ซึ่งตัว ds18b20 อาจจะเสียหรือหลุด
หือสายอาจจะขาดก็ว่าไป.
Er_3 = ค่าอุณหภูมิสูง มีค่าที่น้อยกว่า ค่าอุณหภูมิต่ำ.
Er_4 = ค่าอุณหภูมิสูง และหรือ ค่าอุณหภูมิต่ำ มีค่าเกินย่านวัด
คือ -55 ถึง +125 องศา.
Er_5 = อันนี้เกี่ยวกับ EEPROM ทั้งหมด 4.0F จะไม่มี

Source code v4.0f

ไม่มีความคิดเห็น: