ร้อนนัก วัดซะเลย... Arduino + DS18B20 + C#

Started by sodanum, November 06, 2013, 04:36:36 PM

Previous topic - Next topic

sodanum

ผมได้ชมคลิป ตัวนี้ครับ

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

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
















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




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);
            }

        }
    }








sodanum



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

:)

ขอบคุณครับ



tumrobot

Quote from: sodanum on November 06, 2013, 05:24:50 PM


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

:)

ขอบคุณครับ

ผมว่า ไม่น่าจะมีผลกับค่าอุณหภูมินะครับ เพราะเราอ่านข้อมูล 1 wire แบบ Digital อยู่แล้วครับ
ค่ามากกว่า 4.7K -  R 10K น่าจะใช้งานได้ดีนะครับ
แต่ถ้าน้อยกว่า 4.7K มากๆ อาจจะมีผลส่ง GND Logic อาจจะดึงลง GND ไม่ได้ก็เป็นได้ครับ
แต่เป็นที่ค่า R เท่าไหร่ก็ไม่รู้เหมือนกันครับ อิ อิ
Contact Me:
Line ID: openfog      

My Web: www.openfog.net
GPS Tracking Online: www.openfoggps.com

sodanum

ตอนผมทดลองครั้งแรกจับ R มาใส่ มั่วๆ บางครั้ง พอจับที่ตัวถังเหล็กที่ครอบอยู่ อุณหภมิ
มันจะอ่านได้ -120 องศา พอดีผม ไม่มี R 4.7 โอม มีแต่มากกว่า กับ น้อยกว่า เลยใส่ทดลองไปก่อน

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

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


nont_peet

สงสัยต้องลองบ้างแร้ว หลักการนี้ น่าสนใจมากๆ
คนรักหุ่นยนต์

skytec

Quote from: sodanum on November 06, 2013, 05:24:50 PM


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

:)

ขอบคุณครับ

ไม่มีผลครับ มันเป็นเพียง R pull up เท่านั้นครับ แต่่มากๆ ก็จะทำให้กระแสไม่พอจ่่าย ปกติใช้ ไม่เกิน 47k ครับ
"จินตนาการสำคัญกว่าความรู้ ความรู้มีข้อจำกัด จิตนาการไร้ขอบเขต " --อัลเบิร์ต ไอสไตน์

AppleIIe

Quote from: sodanum on November 06, 2013, 05:24:50 PM


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

:)

ขอบคุณครับ

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





การต่อแบบนี้เป็นแบบ 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 ด้วยครับ



"Stay Hungry, Stay Foolish"
จงกระหาย และ ทำตัวโง่ให้ตลอดเวลา
"Innovation distinguishes between a leader and a follower."
นวัตกรรมแยกผู้นำกับผู้ตามออกจากกัน

คนฉลาด...ต้องโง่เป็น คนโง่ไม่เป็น...จะไม่มีทางฉลาด