نمایش نتایج: از 1 به 8 از 8
Like Tree11 لایک
  • 4 Post By parsd
  • 1 Post By magmagmary
  • 1 Post By shobeir90
  • 1 Post By parsdc
  • 2 Post By parsdc
  • 2 Post By parsdc

موضوع: آموزش کامل راه اندازی bmp280

  1. #1
    Junior Member
    تاریخ عضویت
    May 2014
    نوشته ها
    1

    آموزش کامل راه اندازی bmp280

    در این آموزش قصد دارم راه اندازی کامل سنسور bmp280 شرح دهم به شکلی که افراد مبتدی هم بتونن باهاش کار کنند، من قصد ندارم کد آماده بزارم و توضیح کامل میزارم تا هرکس برا خودش از رو مطالب کدها رو بنویسه به هر زبانی
    ابتدا مشخصات سنسور
    این سنسور فشار و دما رو اندازه گیری میکنه
    دقت دما 0.01°C
    دقت فشار 0.16 Pa
    مناسب برای فشار محیط
    سنسور از دو نوع پروتکل ارتباطی پشتیبانی میکنه spi و i2c
    در این آموزش ما با پروتکل i2c کا خواهیم کرد.

    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: BOSCH-BMP280-Module (2)-500x500.jpg
مشاهده: 146
حجم: 38.4 کیلو بایت


    نام پایه های سنسور روی برد
    vcc
    gnd
    sdi
    sck
    csb
    sdo

    پایه vcc به ولتاژ +3.3 ولت وصل کنید، پایه gnd رو به زمین ،پایه sdi را به پایه SDA میکروکنترلر و با یک مقاومت 4.7 پول آپ کنید (به مثبت وصل کنید) پایه sck را به پایه SCL در میکروکنترل وصل کنید و با مقاومت 4.7 کیلو به مثبت وصل کنید
    پایه csb را با مقاومت 4.7 کیلو به مثبت وصل کنید و پایه sdo را نیز با مقاومت 4.7 کیلو به مثبت وصل کنید.

    توضیح پایه ها:
    sdi و sda دو خط ارتباطی i2c هستند که با میکرو ارتباط برقرار خواهند کرد
    پایه csb باید به مثبت وصل باشه تا سنسور از مد spi به i2c بره( این پایه خیلی مهم هست که درست وصل بشه)
    پایه sdo وقتی به مثبت وصل باشه باعث یک شدن بیت شماره یک از آدرس سخت افزاری خواهد شد، پس میشه دو سنسور رو با دو آدرس متفاوت در یک خط i2c داشت ، اما ما فعلا با حالتی که به مثبت وصل هست کار خواهیم کرد (اطلاعات بیشتر در صفحه 29 از دیتاشیت)

    تا الان ما میکرو و سنسور رو به درستی وصل کردیم

    حالا بریم سروقت نرم افزار و راه اندازی
    آدرس سخت افزاری برا نوشتن روی سنسور EE هست یا 11101110
    آدرس سخت افزاری برای خواندن روی سنسور EF هست یا 11101111

    جهت راه اندازی سنسور در مدی که مد نظر ما است دو بایت به آدرس F4 و F5 را باید برنامه ریزی کنیم و تا این دو بیت را برنامه ریزی کنیم سنسور شروع به کار خواهد کرد و ما قادر خواهیم بود اطلاعات خام فشار و دما را بخونیم
    در ادامه خواهم گفت چطور اطلاعات خام رو به اعداد دقیق دما و فشار تبدیل کنیم
    فعلا بریم سراغ ّF4 و F5

    از طریق پروتکل i2c ابتدا f5 رو برنامه ریزی میکنیم
    بیت شماره صفر را برابر با صفر میزاریم این بیت اشاره داره به غیر فعال بودن پروتکل spi
    بیت شماره یک را برابر با صفر قرار میدیم این بیت به هیچ چیزی اشاره نداره و در کار سنسور بی اثر است
    بیت شماره 2 و 3 و 4 اشاره داره به فعال بودن فیلتر نرم افزاری در سنسور و فعلا ما همه اونا رو میزاریم صفر تا فیلتر غیرفعال بشه
    بیت شماره 5 و 6 و7 که خیلی در راه اندازی مهم هست رو میزاریم رو 010 در این حالت سنسور هر 125 میلی ثانیه یک بار نمونه گیری رو انجام میده و دما و فشار رو میخونه و در آدرس مربوطه ذخیره میکنه
    شما میتونید 0.5 میلی ثانیه تا 4 ثانیه مدت زمان نمونه گیری را تنظیم کنید با این سه بیت (اطلاعات دقیقتر صفحه 17 جدول 11)
    پس مقدار F5 شد 01000000 یا بر مبنای هگز 40

    و حالا بریم سراغ برنامه ریزی آدرس f4

    بیت شماره صفر و بیت شماره یک از مهمترین بیتها در راه اندازی این سنسور هستند و مربوط به Power modes هستند
    این سنسور سه حالت Power modes داره که با این دو بیت مشخص میشه ما حالت نرمال رو نیاز داریم و برا انتخاب این حالت هر دو بیت رو یک میکنیم(اطلاعات سایر حالات در صفحه 15 جدول 10)

    بیت شماره 2 و 3 و 4 مربوط به دقت اندازه گیری فشار هست جهت 16 تا 20 بیتی(حالات مختلف صفحه 12 جدول 4) چون در فایل دیتاشیت فراموش شده حالت مختلف بیتها رو برا فشار بنویسه که شما بتونید 16 بیتی یا 17 یا 18 یا 19 و یا 20 بیتی رو انتخاب کنید میتونید دقیقا مثل جدول دما بیت ها رو برا فشار تنظیم کنید از صفحه 13 جدول 5

    زیاد موضوع رو پیچیده نکنیم ما با 16 بیتی کار میکنیم پس این 3 بیت رو میزاریم رو 001

    و بیت شماره 5 و 6 و7 مربوط به دقت دما هست که اون هم تنظیم میکنیم رو 001 تا 16 بیتی خونده بشه

    پس مقدار برا آدرس f4 شد 00100111 یا بصورت هگز 27

    حالا مقدار f4 و f5 رو مشخص کردیم که باید مقادیر رو بریزیم در آدرس f4 و آدرس f5
    سنسور شروع به کار میکنه تا این مقادیر رو ست کردیم و مقدار خام دما و فشار رو میریزه داخل آدرس مربوطه و ما میتونیم اونا رو بخونیم
    ------------------------------------
    برا خوندن دما کافیه آدرس FA و FB بخونیم (در بالا ما دما رو 16 بیت تنظیم کردیم اگر دما رو بیش از 16 بیت تنظیم کرده بودیم باید مقدار آدرس FC رو هم بخونیم که فقط بیت 4و 5 و6 و7 مقدار دارند و بیتهای پاینتر صفر هستند)
    جهت اطلاعات بیشتر جدول 18 از صفحه 24 رو ببینید قسمت زرد رنگ

    خوب ما مقدار fa و fb رو خونیدیم هشت بیت fa از ارزش بالاتری نسبت به fb برخوردار هست
    اگه خط بالا رو متوجه نشید این کار رو بکنید مقدار fa را در 255 ضرب کنید و حاصل رو با مقدار fb جمع کنید حاصل عدد خام دما هست و تا اینجا شما دما رو خوندید ولی مقدار خام آن
    ---------------------------------
    برا خوندن فشار کافیه آدرس F7 و F8 بخونیم (در بالا ما فشار رو 16 بیت تنظیم کردیم اگر فشار رو بیش از 16 بیت تنظیم کرده بودیم باید مقدار آدرس F9 رو هم بخونیم که فقط بیت 4و 5 و6 و7 مقدار دارند و بیتهای پاینتر صفر هستند)
    جهت اطلاعات بیشتر جدول 18 از صفحه 24 رو ببینید قسمت زرد رنگ

    خوب ما مقدار f7 و f8 رو خونیدیم هشت بیت f7 از ارزش بالاتری نسبت به f8 برخوردار هست
    اگه خط بالا رو متوجه نشید این کار رو بکنید مقدار f7 را در 255 ضرب کنید و حاصل رو با مقدار f8 جمع کنید حاصل عدد خام فشار هست و تا اینجا شما دما رو خوندید ولی مقدار خام آن
    ----------------------------------
    خوب ما با این روش به راحتی سنسور رو راه اندازی کردیم و مقدار خام دما و فشار خوندیم
    چند نکته وقتی دارید دما و فشار رو میخونید از طریق i2c نباید آدرس ها رو تک تک بخونید و باید پشت سر هم بایتها خونده بشن این توصیه سازنده هست و دلیل اون هم در دیتاشیت توضیح داده

    برا نوشتن مقدار در یک بایت میتونید تکی یک بایت رو بنویسید و اگر نخواستید i2c رو stop کنید و دو بایت پشت سر هم بنویسید یه نکته ظریف داره که باید به این شکل عمل بشه
    start
    آدرس سخت افزاری برا نوشتن که EE هست

    آدرس نرم افزاری (محلی که قصد نوشتن در آن رو داریم) مثلا F4
    مقداری که قصد ذخیره در f4 رو داریم

    آدرس نرم افزاری دوم که قصد نوشتن در آن رو داریم (مثلا f5) حتی اگر آدرسها پشت سر هم باشند باید آدرس نوشته بشه
    مقداری که قصد داریم در آدرس f5 بنویسیم
    و stop
    جهت اطلاعات بیشتر صفحه 29
    ------------------------------------------

    خوب ما تا اینجا سنسور رو راه اندازی و مقدار خام دما و فشار رو خوندیم
    مرحله بعد که در پست بعدی خواهم گذاشت
    شیوه تبدیل مقدار خام دما به مقدار دقیق سانتیگراد هست که دمای واقعی محیط هست و دقت این سنسور شما رو شگفتزده خواهد کرد
    دوستان من این سنسور رو راه اندازی و استفاده کردم ، همه اطلاعات من تست شده و طبق دیتاشیت سازنده هست
    در پست بعدی دستورات بسکام هم خواهم گذاشت جهت راه اندازی و خوندن دمای واقعی

    جهت تهیه سنسور
    http://shop.aftabrayaneh.com/Sensors...or_Module.html
    ویرایش توسط parsd : 05-27-2016 در ساعت 05:49 PM

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    با تشکر از شما
    لایک کردن

  3. #3
    مدیر ویژه
    تاریخ عضویت
    Mar 2014
    نوشته ها
    586
    خیلی ممنون
    دقیقا متوجه شدم چطور باهاش کار کنم

    عالی
    لایک کردن

  4. #4
    Junior Member
    تاریخ عضویت
    May 2016
    نوشته ها
    13
    خوب بریم سراغ ادامه موضوع
    من قسمت های بالا را بصورت برنامه نویسی توضیح دوباره میدم

    Const Ic_w = &HEE
    Const Ic_r = &HEF

    تعریف دو متغییر که در واقع آدرس سخت افزاری برا نوشتن و دیگری آدرس سخت افزاری برا خوندن هست

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &HF4
    I2cwbyte &B11111111

    I2cwbyte &HF5
    I2cwbyte &B10011100

    I2cstop
    Waitms 50

    دستورات بالا تنظیمات آدرس f5 و F4 را در سنسور نوشته و باعث راه اندازی میشود که در بالا توضیح داده شد و من یه تغییر کوچولو در f5 دادم و بیت شماره 2,3,4 را یک کردم تا فیلتر فشار فعال باشه
    دوستان من تست کردم فعال بودن این فیلتر بسیار در نتیجه خروجی فشار تاثیر داره و نوسانات و نویز را کامل از بین میبره
    تغیراتی هم در f4 دادم تا داده هی فشار و دما بصورت 20 بیتی خوانده شود و در بالا به صورت 16 بیتی تنظیم کرده بودم

    الان سنسور با دستورات فوق راه اندازی شده و داره از دما و فشار نمونه گیری میکنه حالا دما و فشار رو پشت سر هم میخونیم این پشت سر هم بودن توصیه سازنده هست

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &HF7
    I2cstart
    I2cwbyte Ic_r

    I2crbyte P1 , Ack
    I2crbyte P2 , Ack
    I2crbyte P3 , Ack

    I2crbyte T1 , Ack
    I2crbyte T2 , Ack
    I2crbyte T3 , Nack

    I2cstop
    Waitms 50

    با دستورات بالا فشار خونده شده و در سه بایت p1 , p2 , p3 ریخته شده که p1 پرارزشترین بایت و p3 کم ارزشترین بایت از مقدار کل فشار هست
    فراموش نکنید که ما در سه بایت یعنی 24 بیت فشار رو خوندیم اما فشار یک عدد 20 بیتی هست که چهار بیت کم ارزش p3 کاربردی نداره مطابق جدول صفحه 24
    برای اینکه این مقادیر را به بچسبانیم و عدد فشار را در یک متغییر بریزیم این کار رو انجام میدیم

    Dim Adc_p As Long
    متغییری از نوع long تعریف میکنیم

    Dim Z As Single
    متغییر زد هم تعریف کردم برای محاسبات و بعد از محاسبات ارزشی برا ما نخواهد داشت

    Adc_p = P1 * 4096
    Z = P2 * 16
    Adc_p = Z + Adc_p
    Adc_p.3 = P3.7
    Adc_p.2 = P3.6
    Adc_p.1 = P3.5
    Adc_p.0 = P3.4

    خط اول p1 رو در 4096 ضرب کرده تا بیت های p1 را در بیت 19 تا 10 از متغییر Adc_p ریخته شود
    همین کار را برا p2 انجام میدهیم و در متغییر Adc_p میریزیم اما در 16 ضرب میکنیم تا چهار بیت شیفت به چپ کند در متغییر Adc_p که در واقع مقدار خام فشار است
    چند خط آخر هم جایگاه هر بیت از pc را در متغییر Adc_p مشخص میکند
    من چون مبتدی هستم روش بهتری به ذهنم نرسید اگر شما روش بهتری بلد بودید بگید تا من هم اون روش رو انجام بدم، در هر صورت دستورات فوق کار رو برا ما انجام میده بدون خطا

    دقیقا روش فوق رو برای دما هم انجام میدیم

    Dim Adc_t As Long
    متغییر رو تعریف کرده و طبق دستورات زیر دما هم به صورت 20 بیتی شکل میدیم در متغییر Adc_t

    Adc_t = T1 * 4096
    Z = T2 * 16
    Adc_t = Z + Adc_t
    Adc_t.3 = T3.7
    Adc_t.2 = T3.6
    Adc_t.1 = T3.5
    Adc_t.0 = T3.4

    همه چیز الان حل شد، شما فشار و دما رو خوندید به صورت خام
    در پست بعدی من توضیح میدم چطور مقدار دما رو به مقدار واقعی دما به سانتیگراد تبدیل کنیم که یک فرمول ساده داره
    و در پست بعدی +1 هم توضیح میدم چطور فشار رو به مقدار واقعی فشار به پاسکال یا بار یا psi تبدیل کنیم
    لایک کردن

  5. #5
    Junior Member
    تاریخ عضویت
    May 2016
    نوشته ها
    13
    سلام دوباره
    خوب در پست های بالا ما فشار و دما رو به صورت خام خوندیم حالا برای تبدیل این عددهای خام به دما و فشار باید مراحل زیر رو بگذرونیم
    1 خوندن دما و فشار خام
    2 خوندن عدد های ثابت کالیبره
    3 ستفاده از فرمول شرکت سازنده حهت رسیدن به دما و فشار واقعی

    عدد های کالیبره چیست؟
    هر سنسور رفتاری متفاوت در مقابل تغییرات دما و فشار دارد و سنسوری که شما دارید ممکن است کمی با سنسوری که من دارم تغییرات را متفاوت حس کند، برای رفع این مشکل شرکت سازنده این رفتار را برا هر سنسور بررسی کرده و اعدادی رو در بخشی از حافظه سنسور به صورت فقط خواندی ذخیره کرده که اگر این اعداد در فرمول قرار گیرد عدد دما و فشار بسیار به واقعیت نزدیک خواهد شد
    این عداد ثابت هستند برا هر سنسور و تغییر نخواهند کرد پس فقط یک بار آنها را از سنسور خواهیم خواند و نیاز نیست هر بار برای گرفتن دما و فشار آنها خوانده شوند

    این اعداد مطابق جدول صفحه 24 در آدرس 0xA1…0x88 قرار دارند
    اعداد به صورت دو بیتی و سه عدد برا دما و 9 عدد برا فشار هستند که برخی علامت دار و برخی بی علامت هستند که این نکته مهمی است در تعریف متغییر در ادامه به تعریف متغییر ها دقت کنید بدون علامت ها از نوع word تعریف شده اند
    جهت دیدن اطلاعات دقیق صفحه 12 جدول 17 رو ببینید


    خوب حالا تعریف متغییرها



    Dim Dig_t1 As Word , Dig_t2 As Integer , Dig_t3 As Integer
    Dim Dig_p1 As Word , Dig_p2 As Integer , Dig_p3 As Integer
    Dim Dig_p4 As Integer , Dig_p5 As Integer , Dig_p6 As Integer
    Dim Dig_p7 As Integer , Dig_p8 As Integer , Dig_p9 As Integer

    دوستان دقت کنید نوع این متغییرها خیلی مهم هست که مثل بالا باشه
    در متغییر هم در بالا داشتیم که دما و فشار خام رو ریختم داخلش
    Dim Adc_t As Long , Adc_p As Long


    چند متغییر زیر هم برای انجام محاسبات نیاز داریم، چون محاسبات ریاضی در اکثر میکروهای ضعیف تر باید به صورت خط به خط و در هر خط یک محاسبه قابل انجام هست به این متغییرها نیاز داریم
    Dim T_fine As Single
    Dim Var1 As Single
    Dim Var2 As Single
    Dim T As Single
    Dim P As Single
    Dim Z As Single
    Dim Y As Single

    متغییر p و t برای اعداد واقعی دما و فشار تعریف کردیم
    متغییر z,y,var1,var2 جهت انجام محاسبات ریاضی هست
    متغییر T_fine مهم هست و این متغییر عددی وابسته به دما رو در خودش خواهد داشت که در محاسبات فشار کاربرد داره

    متغییرهای زیر هم جهت ریختن بایت های با ارزش و کم ارزش هر متغییر بزرگتر و به هم وصل کردن آنها هست
    Dim P1 As Byte , P2 As Byte , P3 As Byte , T1 As Byte , T2 As Byte , T3 As Byte

    حالا خوندن سه عدد اصلی کالیبره دما

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &H88
    I2cstart
    I2cwbyte Ic_r

    I2crbyte P1 , Ack
    I2crbyte T1 , Ack

    I2crbyte P2 , Ack
    I2crbyte T2 , Ack

    I2crbyte P3 , Ack
    I2crbyte T3 , Nack

    I2cstop


    Dig_t1 = Makeint(p1 , T1)
    Dig_t2 = Makeint(p2 , T2)
    Dig_t3 = Makeint(p3 , T3)

    دستورات بالا سه متغییر Dig_t3 Dig_t2 Dig_t1 را کامل کرده و از حافظه خونده و در این متغییرها میریزد که برای محاسبات دما نیاز داریم

    و حالا خوندن اعداد کالیبره فشار
    ابتدا سه عدد اول از 9 عددی که باید خوانده شود

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &H8E
    I2cstart
    I2cwbyte Ic_r

    I2crbyte P1 , Ack
    I2crbyte T1 , Ack

    I2crbyte P2 , Ack
    I2crbyte T2 , Ack

    I2crbyte P3 , Ack
    I2crbyte T3 , Nack

    I2cstop
    Waitms 5

    Dig_p1 = Makeint(p1 , T1)
    Dig_p2 = Makeint(p2 , T2)
    Dig_p3 = Makeint(p3 , T3)


    سه عدد بعدی

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &H94
    I2cstart
    I2cwbyte Ic_r

    I2crbyte P1 , Ack
    I2crbyte T1 , Ack

    I2crbyte P2 , Ack
    I2crbyte T2 , Ack

    I2crbyte P3 , Ack
    I2crbyte T3 , Nack

    I2cstop
    Waitms 5

    Dig_p4 = Makeint(p1 , T1)
    Dig_p5 = Makeint(p2 , T2)
    Dig_p6 = Makeint(p3 , T3)


    و سه عدد آخر

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &H9A
    I2cstart
    I2cwbyte Ic_r

    I2crbyte P1 , Ack
    I2crbyte T1 , Ack

    I2crbyte P2 , Ack
    I2crbyte T2 , Ack

    I2crbyte P3 , Ack
    I2crbyte T3 , Nack

    I2cstop
    Waitms 5

    Dig_p7 = Makeint(p1 , T1)
    Dig_p8 = Makeint(p2 , T2)
    Dig_p9 = Makeint(p3 , T3)

    خوب ما طبق دستورات پست های قبل عددهای خام فشار و دما و اعداد کالیبره رو خوندیم
    حالا فرمول و محاسبات برای رسیدن به عدد دقیق دما

    صفحه 45 این فرمولها وجوددارد اما مناسب برای بسکام نیست و من مدل شکافته شده اون رو برای بسکام به شکل زیر درآورده ام

    Var1 = Adc_t / 16384
    Z = Dig_t1 / 1024
    Var1 = Var1 - Z
    Var1 = Var1 * Dig_t2
    Var2 = Adc_t / 131072
    Z = Dig_t1 / 8192
    Var2 = Var2 - Z
    Var2 = Var2 ^ 2
    Var2 = Var2 * Dig_t3
    T = Var1 + Var2
    T_fine = T
    T = T / 5120

    با محاسبات بالا دمای واقعی با چند رقم اعشار در t ریخته شده هست و میتوانید ان را نمایش دهید این سنسور اینقدر حساس هست که صحبت کردن شما و بازدم شما روی خروجی دما تاثیر خو اهد داشت
    عدد و متغییر T_fine فراموش نکنید برای محاسبات فشار نیاز داریم



    حالا محاسبات فشار

    Y = T_fine / 2
    Y = Var1 - 64000

    Var2 = Y ^ 2
    Var2 = Var2 * Dig_p6
    Var2 = Var2 / 32768
    Var2 = Var2 + Y
    Var2 = Var2 * Dig_p5
    Var2 = Var2 * 2
    Var2 = Var2 / 4
    Z = Dig_p4 * 65536
    Var2 = Var2 + Z

    Var1 = Dig_p3 * Y
    Var1 = Var1 * Y
    Var1 = Var1 / 524288
    Z = Dig_p2 * Y
    Var1 = Var1 + Z
    Var1 = Var1 / 524288
    Var1 = Var1 / 32768
    Var1 = Var1 + 1
    Var1 = Var1 * Dig_p1
    If Var1 = 0 Then
    P = 0
    Else
    P = 1048576 - Adc_p
    Z = Var2 / 4096
    P = P - Z
    P = P * 6250
    P = P / Var1
    Var1 = Dig_p9 * P
    Var1 = Var1 * P
    Var1 = Var1 / 2147483648
    Var2 = P * Dig_p8
    Var2 = Var2 / 32768
    Z = Var1 + Var2
    Z = Z + Dig_p7
    Z = Z / 16
    P = P + Z
    End If

    فشار د ر متغییر p به پاسکال ریخته شده و کار تمام شد
    میتوانید آن را به psi یا بار تبدیل کنید



    من زیاد حرفه ای نیستم و ممکن هست برای شما دوستان حرفه ای برخی قسمتها ساده و پیش پا افتاده باشه، به هر حال امیدوارم برای افرادی که قصد کار با این سنسور ارزان قیمت و دقیق رو دارند مناسب بوده باشه

    اعتقاد من این است که اگر من به شما در بالارفتن یک پله کمک کنم بدون شک وقت شما صرف پله ای که من گذرانده ام نخواهد شد و تلاش شما برای گذشتن از پله بعدی به من هم کمک خواهد کرد
    دوستان لطفا نتایج کار خودتون را روی پروژهای مختلف با سایر دوستان به اشتراک بزارید

    موفق باشید
    ویرایش توسط parsdc : 06-03-2016 در ساعت 05:15 AM

  6. #6
    Junior Member
    تاریخ عضویت
    May 2016
    نوشته ها
    13
    من با ماژول وای فای ESP8266 کار کردم و راه اندازی کردم
    در حال حاظر با کمک این ماژول به وای فای adsl وصل میشم و توسط میکرو اطلاعات رطوبت ، دما ، فشار هوا و وضیت یک کولر رو به سرور خودم در کشوری دیگر میفرستم ، برنامه ای نوشتم که اطلاعات رو از میکرو دیافت میکند و در sql server ذخیر میکند.
    من با باز کردن آدرس اینترنتی خودم فشار و دما و رطوبت رو میبینم و میتونم دستور باز شدن در حیاط و روشن شدن کولر رو به میکرو بفرستم تا اون اتفاق بیفته

    همه اینها با کمک یک میکرو atmega8 و ماژول وای فای و سنسور و چند رله + برنامه نویسی کامپیوتر روی سرور قابل انجام هست و من انجام دادم
    بزودی فشار دما و رطوبت فضای آزاد را ارسال میکنم به سرور و آدرس اینترنتی میزارم برا همه که با مراجعه به اون صفحه اینترنتی شما هم قادر به دیدن این اطلاعات به صورت لحظه ای خواهید بود

  7. #7
    مدیر ویژه
    تاریخ عضویت
    Mar 2014
    نوشته ها
    586
    ممنون بابت سورس زبان بسکام ... ♥♥

  8. #8
    Junior Member
    تاریخ عضویت
    May 2016
    نوشته ها
    13
    همه مطالب بالا با آردوینو

    #include <Wire.h>


    const byte Ic_r = 0x77;
    const byte Ic_w = 0x78;

    uint16_t Dig_t1;
    int16_t Dig_t2, Dig_t3;
    uint16_t Dig_p1;
    int16_t Dig_p2, Dig_p3, Dig_p4, Dig_p5, Dig_p6, Dig_p7, Dig_p8, Dig_p9;

    float T_fine;
    float Var1, Var2, T, P, Z, Y;

    long Adc_p;
    long AdcT;


    byte P1,P2,P3,T1,T2,T3;



    void setup() {

    //Wire.setClock(100000);

    Wire.begin();
    Serial.begin(115200);
    while (!Serial); // Wait for Serial to be ready
    delay(2000);
    Serial.println("-----------");





    /*
    Wire.beginTransmission(Ic_r);
    Wire.write(0xF4); // آدرس رجیستر F4
    Wire.write(0x27); // مقدار برای نوشتن (مثال: 0x27 برای تنظیم حالت نرمال)
    Wire.endTransmission();

    // نوشتن مقدار در آدرس F5
    Wire.beginTransmission(Ic_r);
    Wire.write(0xF5); // آدرس رجیستر F5
    Wire.write(0xA0); // مقدار برای نوشتن (مثال: 0xA0 برای تنظیم زمان انتظار)
    Wire.endTransmission();
    */


    Wire.beginTransmission(Ic_r);
    Wire.write(0xF4); // آدرس رجیستر F4
    Wire.write(0xFF); // مقدار برای نوشتن (مثال: 0x27 برای تنظیم حالت نرمال)
    Wire.endTransmission();

    // نوشتن مقدار در آدرس F5
    Wire.beginTransmission(Ic_r);
    Wire.write(0xF5); // آدرس رجیستر F5
    Wire.write(0x9C); // مقدار برای نوشتن (مثال: 0xA0 برای تنظیم زمان انتظار)
    Wire.endTransmission();


    delay(100);
    /////////////////////////////////


    Serial.println();

    readCalibrationData(0x88, Dig_t1, Dig_t2, Dig_t3);


    readCalibrationData(0x8E, Dig_p1, Dig_p2, Dig_p3);
    readCalibrationData(0x94, Dig_p4, Dig_p5, Dig_p6);
    readCalibrationData(0x9A, Dig_p7, Dig_p8, Dig_p9);



    Serial.println();



    Wire.beginTransmission(Ic_r);
    Wire.write(0xF4);
    Wire.endTransmission();

    Wire.requestFrom(Ic_r, (byte)2);

    if (Wire.available() == 2) {
    P1 = Wire.read();
    P2 = Wire.read();

    Serial.print(P1);
    Serial.print(" ");
    Serial.println(P2);
    Serial.println("---------A-------");

    }




    }
    /////////////////////////////////////////////////

    void readCalibrationData(byte startAddress, uint16_t &dig1, int16_t &dig2, int16_t &dig3) {
    Wire.beginTransmission(Ic_r);
    Wire.write(startAddress);
    Wire.endTransmission();

    Wire.requestFrom(Ic_r, (byte)6);

    if (Wire.available() == 6) {
    dig1 = (Wire.read() | (Wire.read() << 8));
    dig2 = (Wire.read() | (Wire.read() << 8));
    dig3 = (Wire.read() | (Wire.read() << 8));
    }

    }
    ////////////////////////////////////////////////////////////////

    void readCalibrationData(byte startAddress, int16_t &dig1, int16_t &dig2, int16_t &dig3) {
    Wire.beginTransmission(Ic_r);
    Wire.write(startAddress);
    Wire.endTransmission();
    Wire.requestFrom(Ic_r, (byte)6);

    if (Wire.available() == 6) {
    dig1 = (Wire.read() | (Wire.read() << 8));
    dig2 = (Wire.read() | (Wire.read() << 8));
    dig3 = (Wire.read() | (Wire.read() << 8));
    }

    }
    ////////////////////////////////////////////////////////////////
    void loop() {



    Wire.beginTransmission(Ic_r);
    Wire.write(0xF7);
    Wire.endTransmission();

    Wire.requestFrom(Ic_r, (byte)6);
    if (Wire.available()==6) {
    P1 = Wire.read();
    P2 = Wire.read();
    P3 = Wire.read();

    T1 = Wire.read();
    T2 = Wire.read();
    T3 = Wire.read();

    }




    Adc_p = P1 * 4096;
    Z = P2 * 16;
    Adc_p = Z + Adc_p;
    bitWrite(Adc_p, 3, bitRead(P3, 7));
    bitWrite(Adc_p, 2, bitRead(P3, 6));
    bitWrite(Adc_p, 1, bitRead(P3, 5));
    bitWrite(Adc_p, 0, bitRead(P3, 4));

    AdcT = T1 * 4096;
    Z = T2 * 16;
    AdcT = Z + AdcT;
    bitWrite(AdcT, 3, bitRead(T3, 7));
    bitWrite(AdcT, 2, bitRead(T3, 6));
    bitWrite(AdcT, 1, bitRead(T3, 5));
    bitWrite(AdcT, 0, bitRead(T3, 4));




    Var1 = AdcT / 16384.0;
    Z = Dig_t1 / 1024.0;
    Var1 = Var1 - Z;
    Var1 = Var1 * Dig_t2;

    Var2 = AdcT / 131072.0;
    Z = Dig_t1 / 8192.0;
    Var2 = Var2 - Z;
    Var2 = Var2 * Var2;
    Var2 = Var2 * Dig_t3;

    T = Var1 + Var2;
    T_fine = T;
    T = T / 5120.0;
    /////////////////////////////////////
    Y = T_fine / 2.0;
    Y = Var1 - 64000.0;

    Var2 = Y * Y;
    Var2 = Var2 * Dig_p6;
    Var2 = Var2 / 32768.0;
    Var2 = Var2 + Y;
    Var2 = Var2 * Dig_p5;
    Var2 = Var2 * 2.0;
    Var2 = Var2 / 4.0;
    Z = Dig_p4 * 65536.0;
    Var2 = Var2 + Z;

    Var1 = Dig_p3 * Y;
    Var1 = Var1 * Y;
    Var1 = Var1 / 524288.0;
    Z = Dig_p2 * Y;
    Var1 = Var1 + Z;
    Var1 = Var1 / 524288.0;
    Var1 = Var1 / 32768.0;
    Var1 = Var1 + 1.0;
    Var1 = Var1 * Dig_p1;

    if (Var1 == 0) {
    P = 0;
    } else {
    P = 1048576.0 - Adc_p;
    Z = Var2 / 4096.0;
    P = P - Z;
    P = P * 6250.0;
    P = P / Var1;
    Var1 = Dig_p9 * P;
    Var1 = Var1 * P;
    Var1 = Var1 / 2147483648.0;
    Var2 = P * Dig_p8;
    Var2 = Var2 / 32768.0;
    Z = Var1 + Var2;
    Z = Z + Dig_p7;
    Z = Z / 16.0;
    P = P + Z;
    }


    Serial.print(T);
    Serial.print(" ");
    Serial.println(P);


    delay(1000);
    }

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO