استفاده از ماژول سنسور dht11 با sim800l

8 ماه قبل
111 بازدید

0

سلام با استفاده از آموزش راه اندازی dthl11 با آردینو در در کافه ربات این ماژول را راه اندازی کردم و بدون مشکل کار میکنه، با یک کلید و شرط فشرده شدن کلید برای نمایش دما و رطوبت در سریال مانیتور هم انجام دادم مشکلی نبود، اما وقتی با ماژول sim800 میخوام از طریق پیامک دما و‌ رطوبت در سریال مانیتور نمایش داده بشه مشکل‌ پیش میاد، یعنی ۹۹ درصد از مواقع بعد از دریافت پیامک پیغام خطای خواندن سنسور رو میده زمانی هم که دما و رطوبت را نمایش میده اشتباه نشان میده(مثلا -۱۴ و رطوبت ۱۳۷ درصد) گاهی هم بعد از نمایش ارتباط پیامکی قطع میشه باید ریست کنی، لطفا راهنمایی بفرمایید دلیل این مشکلات چیه؟‌و چطور میتوان از طریق یک پیامک مشخص با استفاده از dht11 دما و رطوبت را به صورت صحیح در سریال مانیتور ببینم؟؟

09 مهر 02 در 06:46
راحله
1

با سلام، تغذیه ماژول DHT11 را به کجا وصل کرده اید؟؟ تغذیه کلی از چه چیزی تامین می شود؟  – محمد دمیرچی 02-07-09 در 09:12

تغذیه را از آردینو گرفتم  – راحله 02-07-09 در 09:43

هم GSM هم DHT رو؟؟ و خود آردوینو از سیستم دارد تغذیه می شود؟؟یا از آدابتور استفاده میکنید  – محمد دمیرچی 02-07-09 در 12:19

خیر تغذیه gsm کاملا جداست و فقط منفیش به منفی آردینو وصل شده، اما تغذیه dht از آردینو‌ گرفته شده و آرپینو هم به سیستم وصله  – راحله 02-07-09 در 06:29

افزودن دیدگاه

2 پاسخ ثبت شده است
0

با سلام

این که دیتا DHT دچار مشکل میشود عجیب می باشد. با توجه به این که تغذیه جدا می باشد.

برای تست زمانی که دیتای شما دچار مشکل شد یک بار فقط لاین power dht رو قطع و وصل کنید ببینید دیتا درست می شود یا خیر.

یک احتمال نیز شاید نیاز باشد دستور dht.begin(); را بعد از ارسال پیام دوباره اجرا کنید.

چون حدث میزنم رجیستر های dht با بقیه جا ها دچار مشکل می شود و سر همین مشکل پیش می آید.

10 مهر 02 در 05:46
محمد دمیرچی
3730

ممنون مواردی که فرمودید امتحان میکنم نتیجه را خدمتتون میگم  – راحله 02-07-10 در 06:59

سلام روز بخیر با مواردی که فرمودید مشکل رفع شد، اما خیلی بد عمل میکنه، مثلا بعد از هربار پروگرام یا ریست آردینو مدام خطای خواندن دما رو میده و باید چند ثانیه تغذیه dht رو قطع کنم و تا شاید دما رو بخونه و اعلام کنه که باز هم اشتباه میخونه و باید مجددا تغذیه dht رو قطع و وصل کنم تا نمایش دما هم درست بشه، من در آزمایشگاه دارم تست میکنم و زیاد مهم نیست اما اگر کسی بخواد ازین سنسور و سیستم در واقعیت و مثلا برای کشاورزی استفاده کنه اصلا اینطور نمیشه که، حتی شاید استاد از من هم قبول نکنه چون جواب دادن و خطا ندادنش شانسیه!! لطفا راهنمایی کنید چه کار باید بکنم که این مشکلات dht برطرف بشه؟  – راحله 02-07-12 در 06:02

با سلام شما ماژول DHT11 رو تهیه کردید یا سنسور خالی را؟؟ چون در صورتی که سنسور خالی را استفاده میکنید باید بین پین های دیتا و VCC یک عدد مقاومت 10 کیلو قرار بدهید. سنسور خیلی سر راستی می باشد از همین به مدت 1 سال خودم استفاده میکردم مشکل اینچنینی نداشتم  – محمد دمیرچی 02-07-12 در 01:10

سلام و درود. ماژول dht11 هست, بدون حضور sim800l مشکلی نداره و دقیق و بدون خطای خواندن مار میکنن اما وقتی sim800l اضافه میشه و قرار هست از طریق یک پیامک دما و روطوبت رو نشان یده انواع و اقسام مشکلات از بارها خطا در خواندن دما تا اشتباه خواند و قطع ارتباط sim800l و ... پیش میاد. برد آردینو را هم عوض‌کردم اما مشکلات بود و فرقی نکرد! شما از ماژول sim800l و dht11 استفاده کردید مشکلی نداره؟ مشکل من از کجاست؟؟ فقط با این مشکل داره!  – راحله 02-07-12 در 04:18

در پروژه خودم از esp و dht استفاده کرده بودم sim در پروژه نداشتم، شما بین پایه های دیتا sim به Arduino یک عدد مقاومت با مقدار 1 الی 10 کیلو قرار بدهید باز بررسی کنید.  – محمد دمیرچی 02-07-15 در 04:57

مقاومت یک کیلویی هم گذاشتم مشکل برطرف نشد!  – راحله 02-07-15 در 06:02

متأسفانه در حال حاضر sim800 و dht ندارم تست میکنم و خبرش را به شما میدهم  – محمد دمیرچی 02-07-15 در 06:38

زحمت میکشید، از توجه شما بسیار ممنون و سپاسگزارم.  – راحله 02-07-15 در 09:04

افزودن دیدگاه

1

با سلام.

مدار را به صورت زیر ببندید:

تغذیه DHT11 از روی 5 ولت آردوینو و تغذیه SIM800 از روی باتری لیتیومی 4.2 ولت تامین شد. البته GND این دو به هم وصل هستند.

پایه TX و RX ماژول SIM800 به ترتیب به پایه های 10 و 11 برد آردوینو وصل هستند.

پایه data سنسور DHT11 نیز به پایه 8 آردوینو وصل است.

سپس کد زیر را در آردوینو آپلود کردیم.

#include "DHT.h"
#include <SoftwareSerial.h>

#define RX  10
#define TX  11

SoftwareSerial MySerial(RX, TX);

#define DHTPIN 8     // Digital pin connected to DHT11

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);
char* text;
char* number;
bool error;           //to catch the response of sendSms
float h = 0;
float t = 0;
float f = 0;

void setup() {
  Serial.begin(9600);
  MySerial.begin(9600);
  pinMode(8, INPUT);
  dht.begin();
  Serial.println("Initializing... Please wait.");
  delay(2000);
  MySerial.println("AT+CMGF=1");
  delay(1500);
  while (MySerial.available())
    Serial.write(MySerial.read());
}
String value;
void loop() {

  h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  f = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.println(f);


  if (digitalRead(2) == HIGH)
  {
    delay(1000);

    MySerial.println("AT+CMGS=\"+98 YOUR NUMBER WITHOUT FIRST 0\"");//MySerial.println(number);

    while (true) {
      value = MySerial.readStringUntil('\n');
      value.trim();
      if (value.startsWith(">")) {
        break;
      }
    }
    MySerial.print("Humidity:");
    MySerial.print(h);
    MySerial.print("%  Temperature: ");
    MySerial.print(t);
    MySerial.print("°C ");

    delay(100);
    MySerial.write(26);
    MySerial.println("");
//    debug();
  }
  delay(2000);
}



void debug() {
  while (true) {
    if (Serial.available()) {      // If anything comes in Serial (USB),
      MySerial.write(Serial.read());   // read it and send it out Serial1 (pins 0 & 1)
    }

    if (MySerial.available()) {     // If anything comes in Serial1 (pins 0 & 1)
      Serial.write(MySerial.read());   // read it and send it out Serial (USB)
    }
    if (digitalRead(2) == HIGH)
    { Serial.print(F("Humidity: "));
      Serial.print(h);
      Serial.print(F("%  Temperature: "));
      Serial.print(t);
      Serial.print(F("°C "));
      Serial.println(f);
    }
  }
}

فقط قسمت Enter your number without 0 را با شماره تلفن خود جایگزین کنید. فرمت شماره در نهایت باید به صورت 989121234567+ باشد.

در صورتی که پایه 2 آردوینو به GND وصل باشد، داده های دما و رطوبت سنسور در سریال مانیتور چاپ می شوند. اگر همین پایه را به 5 ولت وصل کنید، پیامک حاوی اطلاعات رطوبت و دما به شماره وارد شده ارسال می شود.

اگر این کد کار نکرد، احتمالا ایراد در اتصال سیم ها دارید یا قطعه ای از مدار شما معیوب است.

17 مهر 02 در 09:48
مجید مرآتی
579

سلام. بسیار ممنونم، مشکل با dht و sim800 حل شده، اما حتما این روش‌شما که قطعا حرفه ای تر است را هم امتحان و احتمالا جایگزین برنامه خودم میکنم.  – راحله 02-07-17 در 10:56

افزودن دیدگاه


انجمن کافه‌ربات © 1400