Electoday 2025

ประกาศ => Projects => Topic started by: sodanum on November 06, 2013, 04:36:36 PM

Title: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: sodanum on November 06, 2013, 04:36:36 PM
ผมได้ชมคลิป ตัวนี้ครับ

การใช้พัดลมให้ได้เหมือนแอร์
http://www.youtube.com/watch?v=5dsa_tfjR5I

เลยเอามาทดลองใช้งานในห้องดูซะเลย งานนี้ ใช้ Arduino + DS18B20  + C#

(http://www.ogalik.ee/pics/DS18B20_parasite_mode.png)


(http://b.lnwfile.com/kl0x7m.jpg)


(http://image.ohozaa.com/i/e5e/ftS9LQ.jpg) (http://image.ohozaa.com/view2/xccdUa0X2UaPojE6)


(http://image.ohozaa.com/i/5af/siMI3h.jpg) (http://image.ohozaa.com/view2/xcce0xDe9tBdethC)


(http://image.ohozaa.com/i/e61/tMIxHd.jpg) (http://image.ohozaa.com/view2/xcceQiwNy6LTxnEB)


จากการทดลอง ประมาณ 20 นาที (1200 วินาที)


(http://image.ohozaa.com/i/07f/ms3BRo.png) (http://image.ohozaa.com/view2/xccdfoswr2hg7t8D)

8)

อุณหภูมิลดลงประมาณเกือบๆ 1 องศา ช่วงทดลองประมาณ บ่าย 3 - 4 โมง
ดูเหมือนลดลงไม่มาก แต่ที่จับจากความรู้สึกของตัวเอง รู้สึกมันเย็นสบายขึ้น พอสมควรครับ
อาจจะเป็นเพราะอากาศมีการถ่ายเทมากขึ้น เราเลยหายใจได้สะดวกขึ้น
โดยเฉพาะตรงใกล้ๆ หน้าต่าง จะรู้สึกเลยว่ามีลมเย็นเข้ามา...

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

:-*

สำหรับ Arduino ผมใช้ lib ที่ชื่อว่า DallasTemperature  โปรแกรมเลยออกมาสั้นนิดเดียว
(ใช้ lib ก็ดีครับ ง่ายดี แต่ทำให้เราโง่ลงนี้สิ เหอะๆๆ)

Arduino Code

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
}

void loop(void)
{
  sensors.requestTemperatures();
  Serial.println(sensors.getTempCByIndex(0));   
}




C# Code


    public partial class Form1 : Form
    {

        string RxString;
        uint rxCounter;

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM3";
            serialPort1.BaudRate = 9600;
            try { serialPort1.Open(); }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            if (serialPort1.IsOpen)
            {
                buttonStart.Enabled = false;
                buttonStop.Enabled = true;
                textBox1.ReadOnly = false;
            }

        }

        private void buttonStop_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    serialPort1.Close();
                    buttonStart.Enabled = true;
                    buttonStop.Enabled = false;
                    textBox1.ReadOnly = true;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen) serialPort1.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }
       
        private void DisplayText(object sender, EventArgs e)
        {
            textBox1.Text = RxString;
            chart1.ChartAreas[0].AxisY.Minimum = 25;
            chart1.ChartAreas[0].AxisY.Maximum = 37;
            chart1.ChartAreas[0].AxisY.Interval = 1;

            chart1.ChartAreas[0].AxisX.Interval = 60;
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
                       
            chart1.ChartAreas[0].AxisY.Title = "C";
            chart1.ChartAreas[0].AxisX.Title = "Time";
           

            chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray;
            chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;
            chart1.Series[0].Color = Color.Red;
            chart1.Series[0].Points.AddXY(rxCounter, RxString);
        }
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                RxString = serialPort1.ReadLine();
                this.Invoke(new EventHandler(DisplayText));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }
    }







Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: sodanum on November 06, 2013, 05:24:50 PM
(http://www.ogalik.ee/pics/DS18B20_parasite_mode.png)

จากรูป เจ้า DS18B20 เราต้องต่อ ตัวต้านทาน 4.7 k โอม
ถ้าตัวต้านทาน ที่เอามาต่อ มีค่ามากกว่า หรือน้อย กว่า 4.7k โอม
จะมีผลต่ออุณหภมิที่ DS18B20 วัดได้หรือเปล่าครับ

:)

ขอบคุณครับ
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: chatichai on November 08, 2013, 12:40:12 PM
เก็บก่อน ครับ  :o
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: tumrobot on November 08, 2013, 07:49:30 PM
Quote from: sodanum on November 06, 2013, 05:24:50 PM
(http://www.ogalik.ee/pics/DS18B20_parasite_mode.png)

จากรูป เจ้า DS18B20 เราต้องต่อ ตัวต้านทาน 4.7 k โอม
ถ้าตัวต้านทาน ที่เอามาต่อ มีค่ามากกว่า หรือน้อย กว่า 4.7k โอม
จะมีผลต่ออุณหภมิที่ DS18B20 วัดได้หรือเปล่าครับ

:)

ขอบคุณครับ

ผมว่า ไม่น่าจะมีผลกับค่าอุณหภูมินะครับ เพราะเราอ่านข้อมูล 1 wire แบบ Digital อยู่แล้วครับ
ค่ามากกว่า 4.7K -  R 10K น่าจะใช้งานได้ดีนะครับ
แต่ถ้าน้อยกว่า 4.7K มากๆ อาจจะมีผลส่ง GND Logic อาจจะดึงลง GND ไม่ได้ก็เป็นได้ครับ
แต่เป็นที่ค่า R เท่าไหร่ก็ไม่รู้เหมือนกันครับ อิ อิ
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: sodanum on November 08, 2013, 09:10:08 PM
ตอนผมทดลองครั้งแรกจับ R มาใส่ มั่วๆ บางครั้ง พอจับที่ตัวถังเหล็กที่ครอบอยู่ อุณหภมิ
มันจะอ่านได้ -120 องศา พอดีผม ไม่มี R 4.7 โอม มีแต่มากกว่า กับ น้อยกว่า เลยใส่ทดลองไปก่อน

แต่ถ้าเทียบกับเครื่องสำเร็จรูป อุณหภูมิ ของผม มันจะสูงกว่า ประมาณเกือบ 1 องศา เลยสงสัย
ว่า R ที่ใส่มันจะมีผล ซะอีก ขอบคุณครับสำหรับข้อมูลครับ .....  ;D

ว่าแต่ ไม่รู้ว่า arduino หรือ  เครื่องสำเร็จ อันไหนแม่นกว่ากัน... เหอะๆๆ

(http://www.rcland.net/content/image/product-20130202-032124-4.jpg)
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: nont_peet on November 09, 2013, 10:53:06 AM
สงสัยต้องลองบ้างแร้ว หลักการนี้ น่าสนใจมากๆ
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: skytec on November 25, 2013, 10:52:15 PM
Quote from: sodanum on November 06, 2013, 05:24:50 PM
(http://www.ogalik.ee/pics/DS18B20_parasite_mode.png)

จากรูป เจ้า DS18B20 เราต้องต่อ ตัวต้านทาน 4.7 k โอม
ถ้าตัวต้านทาน ที่เอามาต่อ มีค่ามากกว่า หรือน้อย กว่า 4.7k โอม
จะมีผลต่ออุณหภมิที่ DS18B20 วัดได้หรือเปล่าครับ

:)

ขอบคุณครับ

ไม่มีผลครับ มันเป็นเพียง R pull up เท่านั้นครับ แต่่มากๆ ก็จะทำให้กระแสไม่พอจ่่าย ปกติใช้ ไม่เกิน 47k ครับ
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: AppleIIe on November 26, 2013, 05:04:21 PM
Quote from: sodanum on November 06, 2013, 05:24:50 PM
(http://www.ogalik.ee/pics/DS18B20_parasite_mode.png)

จากรูป เจ้า DS18B20 เราต้องต่อ ตัวต้านทาน 4.7 k โอม
ถ้าตัวต้านทาน ที่เอามาต่อ มีค่ามากกว่า หรือน้อย กว่า 4.7k โอม
จะมีผลต่ออุณหภมิที่ DS18B20 วัดได้หรือเปล่าครับ

:)

ขอบคุณครับ

ขอให้ดู Datasheet ครับ

(http://upic.me/i/pw/pic-1.png) (http://upic.me/show/48343927)

(http://upic.me/i/m9/pic-2.png) (http://upic.me/show/48343995)

การต่อแบบนี้เป็นแบบ Parasite Power ยังใช้พลังงานในช่วงการ อ่านอุณหภูมิ (และทำงานกับ eeprom ) อยู่ที่ประมาณ 1 ถึง 1.5 mA. ดังนั้นหาก ใช้ R ค่ามากไป ก็อาจทำให้ แรงดันตกลงไปต่ำจน IC ทำงานผิดปกติได้ หาก น้อยเกินไป ก็จะขับไม่ไหว ( Datasheet ว่า Sink Current ได้ 4 mA ที่ Vi/o เท่ากับ 0.4 V )
จาก Datasheet นี้ ค่า R ที่ใช้กับแรงดัน 5V ก็ไม่ควรต่ำกว่า 1K2 และ R น่าจะไม่ควรเกิน 5 K มากนัก ( R มากใช้เวลาในการ Charge พลังงานที่ Cpp นาน) จะทำให้พลังงานใน Cpp ของ IC อาจไม่พอใช้ในการทำงานในแต่ละ Timing ของสํญญาณ 1 Wire นี้
หากใช้กับแรงดัน 3 V ก็ต้องระวังมากขึ้นครับ (พลังงานใน Cpp น่าจะหมดลงเร็วกว่า)

และกรณี นำไปวัดเกินกว่า +100 องศา ก็ไม่ควรต่อใช้ในแบบ Parasite Power ด้วยครับ



Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: MAbUS on November 27, 2013, 09:16:56 PM
ทำตามแล้ว OK ครับ(เฉพาะส่วนของ Arduino) ผมใช้ 1 ตัว แต่เดี๋ยวว่าจะลองสัก 3 ตัวครับ ตอนนี้มีแค่ตัวเดียว
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: sodanum on November 29, 2013, 10:42:54 PM
 ;D เหอะๆ ตอนแรกผมก็จับ R ใส่มั่วๆ เลย
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: ROM on December 04, 2013, 11:09:27 PM
ได้รับความรู้อีกแล้ว  :)
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: MAbUS on December 05, 2013, 11:48:52 PM
ตอนแรกผมใช้ R 5k สำหรับโพรบตัวเดียวเวิร์คครับ พอมากกว่า 1 เท่านั้นแหละต้องปรับลงมาที่ 4.7k
ใช้โค้ด Multiple DS18B20 Example: จากเวบนี้ครับ http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20
โดยหาแอดเดรสของแต่ละโพรบจากเวบนี้ครับ http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: MAbUS on December 05, 2013, 11:52:20 PM
อีกรูปครับเป็นผลการอ่านอุณหภูมิ ดูเหมือนว่า sensitivity ของแต่ละตัวจะไม่เท่ากันครับ
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: sodanum on December 17, 2013, 05:05:32 PM
ต่างกันเยอะเกิน 1 องศาอีกนะครับ แล้วแบบนี้  อันไหน เป็นค่าที่ถูกต้องกันแน่
หรือว่าต้องใช้ Senser เบอร์อื่น ที่ราคาแพงกว่านี้...

ท่าน MAbUS มีเทอร์โมมิเตอร์ แบบแก้วไหมครับ ถ้ามีทดสอบเปรียบเทียม มาให้ชมหน่อยนะครับ
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: MAbUS on December 19, 2013, 11:09:51 PM
มันต้องรอเวลาครับถึงจะใกล้เคียงกัน ความไวมันต่างกันด้วย บังเอิญผมซื้อมา 2 ครั้ง ครั้งแรกสายสี แดง ดำ เหลือง ความไวจะดีกว่าสายสี แดง เขียว เหลือง ครับ พรุ่งนั้ว่าจะลองเทียบกับอ่างคุมอุณหภูมิดูครับ
ภาพนี้เป็นอุณหภูมิห้อง ผมไล่จุดไฟทีละตัว 1-5 ครับ

Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: MAbUS on December 28, 2013, 01:27:58 AM
รูปนี้ผมเทียบกับ PT100+อ่างควบคุมอุณหภูมิ ครับ
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: sodanum on December 29, 2013, 02:55:10 PM
เครื่องวัดได้ 34.12  ส่วน Arduino วันได้ ประมาณ 40 ผมเข้าใจถูกเปล่าครับ

ถ้าใช่ ทำไมมันต่างกันเยอะจังครับ..
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: MAbUS on December 29, 2013, 04:03:42 PM
ขอโทษครับท่านโซดาที่ทำให้เข้าใจผิด ตัวอ่านอุณหภูมิอ่างมันเพี้ยนๆอ่ะครับแต่มันนิ่งนะครับ ผมเลยอ้างอิงกับตัว PT100 มาตรฐาน
จริงแล้วมันตรงกันครับ(PT100 มาตรฐาน,DS1820)ที่ 40.3 องศาเซลเซียส เพียงแต่ว่า sensitivity ของ DS1820 แต่ละตัวไม่เท่ากันนะครับ
ถ้าระบบเปลี่ยนแปลงไวจะเห็นความต่างเลยครับ
Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: samira on December 30, 2013, 01:03:55 AM
Quoteดูเหมือนลดลงไม่มาก แต่ที่จับจากความรู้สึกของตัวเอง รู้สึกมันเย็นสบายขึ้น พอสมควรครับ
อาจจะเป็นเพราะอากาศมีการถ่ายเทมากขึ้น เราเลยหายใจได้สะดวกขึ้น
โดยเฉพาะตรงใกล้ๆ หน้าต่าง จะรู้สึกเลยว่ามีลมเย็นเข้ามา...
ที่รู้สึกเช่นนั้นก็ถูกต้องแล้ว ว่าพอมีลมพัด( พัดลมที่ตั้ง thermostat control ใว้ ) ทำให้รู้สึกสบาย แม้ว่า อากาศรอบตัวจะลดลงไปแค่ 1 องศา
คำอธิบายเรื่องนี้ เป็นเรื่องที่เขาเรียกว่า Wind chill ( factor )

http://en.wikipedia.org/wiki/Wind_chill

มันเป็นปรากฎการทาง physiology ( สรีรวิทยา- ศาสตร์ที่เกี่ยวกับการทำงาน การตอบสนองของร่างกาย
วิชานี้เป็นวิชาพื้นฐานที่เขาสอนใน รร แพทย์ หรือพวกสายวิทย์ชีว..)

ใน ตปท เวลาเขาประกาศอุณหภูมิประจำวัน เขาจะบอกว่า แต่ละวันอากาศอุณหภูมิเท่าไร และ ร่างกายจะรู้สึกเท่าไร

เจ้าตัวหลังนี่แหละ ที่คือความรู้สึกของร่างกายอันเนื่องมาจากแรงลมพัด ที่เขาเรียก wind chill factor
เขาจะมีตารางให้เปรียบเที่ยบดูว่า ความเร็วลมเท่าไร จะทำให้เรารู้สึกว่า "ร่างกายเรารู้สึกเย็นเท่าไร"

พื้นฐานของมันมาจากความจริงว่า ( สรีรวิทยา ) ร่างกายจะเสียความร้อนโดย
๑ การแผ่รังสีความร้อนออกไป( Radiation)
๒ โดยการพาความร้อนออกไป ( convection )
๓ โดยการระเหย ( Evaporation )
๔ โดยการนำออกไป ( Conduction )

นอกจากนี้ อัตราการเสียความร้อนของร่างกายออกโดยการพาออกไป (convection ) ไปยังขึ้นกับความเร็วลมที่พัดผ่านตัวเรา

ร่างกายตัวเรามีอุณหภูมิราวๆ 38 C  รอบตัวเราอย่างบ้านเรา ร้อนคิดว่า ราว 30+ ดังนั้นจะมีแถบขั้นระหว่างอุณหภูมิรอบตัวเรากับอากาศรอบๆกั้นรอบๆอยู่  หากเราทำลายแถบอุณหภูมิระหว่างตัวเรากับอุณหภูมิรอบตัวเสีย เป็นการเปิดโอกาศให้ลมที่เย็นกว่าร่างกายเข้ามาใหม่ ก็จะมีการถ่ายเทเอาลมเย็นใหม่เข้ามาปะทะ( ประกบ ) กับร่างกาย ยิ่งลมยิ่งแรงหรือเร็ว อุณหภูมิรอบผิวตัวเรา ก็จะเย็นเร็วขึ้นด้วย

ดังนั้นจากคำอธิบายข้างบน หากตัวเราเปียก ไปโดนลมเข้า ก็จะรู้สึกเย็นสบายขึ้น

หวังว่าคำอธิบายคงจะเข้ากับที่เขียนมาว่า รู้สึกสบายขึ้น แม้อุณหภูมิจะลดลงไปแค่ 1 องศา
ก็ด้วยคำอธิบายข้างบน แปลว่า แม้ Electronics จะทำงานลดได้แค่ 1 องศา....
แต่.... ร่างกายเรามันทำงานให้เราได้ดีกว่า electronics ( เฉพาะในกรณีที่ จขกท เล่ามาเท่านั้น)

เพราะหากร้อนมาก เราก็คงต้องวิ่งเข้าหาห้องแอร์( พึ่ง electronics )  เพราะลมมันลดอุณหภูมิร่างกายไม่พอในหน้าร้อนจัดๆ

หวังว่าข้อมูลพอจะทำให้เข้าใจดีขึ้นและมีประโยชน์บ้าง

ปล ความรู้เพิ่มอีกนิด ก็คือว่า ปรากฎการณ์ อันนี ในสารหรือวัตถุที่มีชีวิต กับไม่มีชีวิต จะตอบสนองต่างกันกล่าวคือ
ในสิ่งไม่มีชีวิต ไม่ว่าจะลมจะพัดแรงแค่ใหน อุณหภูมิของมันจะไม่ต่ำกว่าอุณหภูมิสิ่งแวดล้อม
แต่....... ในสิ่งมีชีวิต ร่างกายจะตอบสนองต่างออกไป จะมีการปรับของร่างกายตามระบบสรีรวิทยาของร่างกาย
ยกตัวอย่าง ร่างกายจะปรับเพื่อให้อยู่รอด จนในบางกรณีจะทำให้นิ้วมือนิ้วเท้า เน่าไปเลย ( frostbite ) หรือ
จนร่างกายเย็นลงต่ำกว่าอุณหภูมิรอบตัว ( hypothermia )

Title: Re: ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#
Post by: chatichai on March 12, 2014, 09:30:24 AM
อ่านแล้วได้ความรู้เพิ่มขึ้นมากมาย สะสมไว้ก่อนครับ