اطلاعیه

Collapse
No announcement yet.

کنترل از راه دور فن PWM با ESP8266

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کنترل از راه دور فن PWM با ESP8266

    برای پروژه‌ای که وضعیت و دور موتورهای فن را ثبت و مانیتور کند، می‌توانید از برد توسعه ESP8266 WEMOS با حافظه 32M بهره ببرید. در این پروژه، ESP8266 WEMOS به عنوان یک دستگاه IOT عمل می‌کند که اطلاعات وضعیت فن‌ها را جمع‌آوری کرده و به یک پلتفرم ابری ارسال می‌کند تا بتوان این اطلاعات را به طور زنده مانیتور کرد و در صورت نیاز آن‌ها را ذخیره و آنالیز کرد.



    مراحل پروژه

    اتصال سنسورها:

    موتورهای فن و هال افکت سنسور:
    موتورهای فن:
    این موتورها باید قابلیت کنترل سرعت و دوران را داشته باشند. معمولاً از موتورهای DC با قابلیت کنترل PWM استفاده می‌شود.

    هال افکت سنسور:
    این سنسورها برای اندازه‌گیری دور موتورها با استفاده از تغییرات میدان مغناطیسی که توسط مغناطیسی استاتور موتور ایجاد می‌شود، استفاده می‌شود.

    اتصال هال افکت سنسور به ESP8266:
    هال افکت سنسورها عموماً دارای دو پایه خروجی هستند که تغییرات میدان مغناطیسی را از آن‌ها خوانده و به برد کنترلی می‌فرستند. این اتصال می‌تواند از طریق پایه‌های GPIO برد ESP8266 WEMOS انجام شود.

    برنامه‌نویسی ESP8266:
    با استفاده از Arduino IDE یا PlatformIO، یک کد برای ESP8266 بنویسید که اطلاعات خوانده شده از هال افکت سنسورها را پردازش کرده و بر اساس آن‌ها، سرعت و دوران موتورهای فن را کنترل کند.
    - نمونه کدی که برای این پروژه می‌تواند استفاده شود به شکل زیر است:


    کد:
    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    
    // WiFi credentials
    const char* ssid = "your_wifi_ssid";
    const char* password = "your_wifi_password";
    
    // MQTT broker configuration
    const char* mqtt_server = "mqtt_server_ip";
    const char* mqtt_username = "mqtt_username";
    const char* mqtt_password = "mqtt_password";
    const int mqtt_port = 1883;
    const char* mqtt_topic = "fan_motors/status";
    
    // Pins for Hall Effect sensors
    const int hallSensorPin1 = D1;  // Hall effect sensor pin 1
    const int hallSensorPin2 = D2;  // Hall effect sensor pin 2
    
    // Motor control pins
    const int fan1Pin = D5;  // Example pin for fan motor 1
    const int fan2Pin = D6;  // Example pin for fan motor 2
    
    // Initialize a WiFiClient and a PubSubClient
    WiFiClient espClient;
    PubSubClient client(espClient);
    
    void setup_wifi() {
      delay(10);
      // Connect to Wi-Fi network with SSID and password
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
      
      WiFi.begin(ssid, password);
      
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
    void reconnect() {
      // Loop until we're reconnected to the MQTT broker
      while (!client.connected()) {
        Serial.print("Attempting MQTT connection...");
        
        // Attempt to connect
        if (client.connect("ESP8266Client", mqtt_username, mqtt_password)) {
          Serial.println("connected");
        } else {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          
          // Wait 5 seconds before retrying
          delay(5000);
        }
      }
    }
    
    void setup() {
      Serial.begin(115200);
      setup_wifi();
      client.setServer(mqtt_server, mqtt_port);
    
      // Initialize motor control pins
      pinMode(fan1Pin, OUTPUT);
      pinMode(fan2Pin, OUTPUT);
    }
    
    void loop() {
      if (!client.connected()) {
        reconnect();
      }
      client.loop();
    
      // Read Hall effect sensor values
      int sensorValue1 = digitalRead(hallSensorPin1);
      int sensorValue2 = digitalRead(hallSensorPin2);
    
      // Example: Control fan motors based on sensor readings
      if (sensorValue1 == HIGH) {
        analogWrite(fan1Pin, 255); // Motor 1 on full speed
      } else {
        analogWrite(fan1Pin, 0);   // Motor 1 off
      }
    
      if (sensorValue2 == HIGH) {
        analogWrite(fan2Pin, 255); // Motor 2 on full speed
      } else {
        analogWrite(fan2Pin, 0);   // Motor 2 off
      }
    
      // Example: Publish sensor values to MQTT topic
      char msg[50];
      snprintf(msg, 50, "Sensor 1: %d, Sensor 2: %d", sensorValue1, sensorValue2);
      client.publish(mqtt_topic, msg);
    
      delay(1000); // Adjust delay as needed
    }
    ​

    ارسال داده‌ها به پلتفرم ابری:
    • پیکربندی ESP8266 WEMOS برای ارسال داده‌های اندازه‌گیری شده به پلتفرم ابری مانند ThingSpeak، Blynk، Firebase یا MQTT broker.
    آنالیز و نمایش داده‌ها:
    • استفاده از پنل کنترل پلتفرم ابری برای مانیتور کردن داده‌های ارسال شده.
    • تنظیم نمودارها و گزارش‌ها برای نمایش دور و وضعیت موتورهای فن به صورت زنده و تاریخچه‌ای.
    تست و اجرا:
    پس از بارگذاری کد بر روی ESP8266، مطمئن شوید که تمام اتصالات صحیح است.
    ارتباط ESP8266 با شبکه WiFi برقرار شده باشد و ESP8266 توانایی ارتباط با MQTT broker را داشته باشد.
    با استفاده از هال افکت سنسورها، موتورها را تست کنید و مطمئن شوید که وضعیت آنها به درستی در MQTT topic منتشر می‌شود.


    فواید این پروژه:
    • مانیتورینگ بهینه: امکان مانیتور کردن وضعیت و دور موتورهای فن به صورت زنده و از راه دور.
    • آنالیز دقیق: بررسی دقیق داده‌های اندازه‌گیری شده برای تحلیل و بهینه‌سازی شرایط کاری موتورهای فن.
    • کنترل از راه دور: امکان کنترل و تنظیم دستگاه‌ها مبتنی بر داده‌های اندازه‌گیری شده.

    این پروژه به شما امکان می‌دهد تا وضعیت و سرعت موتورهای فن را از راه دور مانیتور کنید و از طریق شبکه اینترنت آنها را کنترل کنید، که برای کاربردهای مختلف در زمینه IOT و هوشمندسازی محیط‌های کاری و صنعتی از جمله سیستم‌های خنک کننده و اتوماسیون مناسب است.


    در مقاله زیر می توانید اطلاعات بیشتری در مورد ماژول های ESP8266 اطلاعات بیشتری کسب کنید.
    هسته ESP8266 یک تراشه جهت ایجاد ارتباط بی سیم WiFi می باشد که به راحتی می توان آن را به روتر یا اکسس پوینت وصل نمود و اطلاعاتی را از طریق اینترنت ارسال و یا


    خرید ماژول WIFI وایرلس وای فای ESP8266 WEMOS اینترنت اشیا IOT پروژه شبکه سازی هوشمند سازی ESP8266 شبکه LAN دیتاشیت مشخصات فنی با قیمت مناسب در فروشگاه ECA
    جدیدترین ویرایش توسط Tanrina; ۱۳:۵۰ ۱۴۰۳/۰۴/۱۰.

    #2
    سنسورهای تشخیص میدان مغناطیسی برای تشخیص حضور یا عدم حضور یک میدان مغناطیسی استفاده می‌شوند. این سنسورها معمولاً از یک المان حساس به میدان مغناطیسی استفاده می‌کنند که در حضور یا عدم حضور یک میدان مغناطیسی، تغییر وضعیت می‌دهد و این تغییر را به یک سیگنال الکتریکی تبدیل می‌کند. زیرا این تغییرات به طور مستقیم به تغییرات میدان

    پست در مورد سنسور های اثر هال در مورد این پروژه مفید خواهد بود

    دیدگاه


      #3
      معرفی فن PWM (Pulse Width Modulation)

      فن PWM نوعی فن است که از سیگنال‌های PWM برای کنترل سرعت چرخش خود استفاده می‌کند. در این نوع فن‌ها، سرعت چرخش توسط پالس‌های الکترونیکی که به موتور فن ارسال می‌شوند، کنترل می‌شود. با تغییر عرض این پالس‌ها (Duty Cycle)، سرعت چرخش فن تنظیم می‌شود. این نوع کنترل امکان تنظیم دقیق‌تر و کارآمدتر سرعت فن را نسبت به روش‌های سنتی فراهم می‌کند.

      ویژگی‌ها و مزایای فن‌های PWM

      کنترل دقیق سرعت:
      با تغییر عرض پالس‌ها، می‌توان سرعت فن را با دقت بالا تنظیم کرد. این ویژگی به ویژه در کاربردهایی که نیاز به کنترل دقیق دما دارند، بسیار مفید است.

      کاهش نویز:
      فن‌های PWM می‌توانند با تنظیم سرعت متناسب با نیاز، در مصرف انرژی صرفه‌جویی کرده و نویز را کاهش دهند. این امر در محیط‌های حساس به صدا، مانند کامپیوترهای شخصی و سرورها، بسیار مهم است.

      افزایش عمر مفید فن:
      با کنترل بهینه سرعت و جلوگیری از کارکرد مداوم در سرعت‌های بالا، عمر مفید فن افزایش می‌یابد.

      صرفه‌جویی در انرژی:
      کنترل سرعت فن‌ها به طور مستقیم با کاهش مصرف انرژی مرتبط است. فن‌های PWM تنها در مواقع نیاز با سرعت بالا کار می‌کنند و در بقیه مواقع سرعت خود را کاهش می‌دهند.

      ساختار و عملکرد فن‌های PWM

      فن‌های PWM عموماً دارای چهار سیم هستند:

      1.VCC (تغذیه):
      سیم تغذیه مثبت (معمولاً 12V یا 5V).

      2. GND (زمین):
      سیم زمین.

      3. Tachometer (تاکو):
      سیم خروجی که تعداد دورهای فن را به صورت پالس‌های دیجیتالی به کنترلر گزارش می‌دهد. این سیم برای مانیتورینگ سرعت فن استفاده می‌شود.

      4. PWM (کنترل سرعت):
      سیم ورودی که سیگنال PWM از کنترلر دریافت می‌کند و بر اساس آن، سرعت فن را تنظیم می‌کند.


      کاربردها

      فن‌های PWM در بسیاری از کاربردها استفاده می‌شوند، از جمله:
      • سیستم‌های خنک‌کننده کامپیوتر:
      در کامپیوترهای شخصی، لپ‌تاپ‌ها و سرورها برای کنترل دمای CPU، GPU و سایر اجزای داخلی.
      • تهویه مطبوع:
      در سیستم‌های تهویه مطبوع برای کنترل جریان هوا و بهبود بهره‌وری انرژی.
      • خنک‌کننده‌های صنعتی:
      در دستگاه‌ها و ماشین‌آلات صنعتی که نیاز به کنترل دقیق دما دارند.
      • سیستم‌های تهویه خودرو:
      در خودروها برای کنترل سرعت فن‌های خنک‌کننده موتور و سیستم تهویه مطبوع.

      نمونه پروژه با فن PWM و ESP8266

      کد:
      #include <ESP8266WiFi.h>
      
      // WiFi credentials
      const char* ssid = "your_wifi_ssid";
      const char* password = "your_wifi_password";
      
      // Pin definitions
      const int pwmPin = D1;  // PWM control pin for the fan
      const int tachPin = D2; // Tachometer pin for fan speed monitoring
      
      // Variables to store fan speed
      volatile unsigned long rpm;
      unsigned long lastTime;
      unsigned long pulseCount;
      
      void ICACHE_RAM_ATTR pulseCounter() {
        pulseCount++;
      }
      
      void setup() {
        Serial.begin(115200);
        pinMode(pwmPin, OUTPUT);
        pinMode(tachPin, INPUT_PULLUP);
        attachInterrupt(digitalPinToInterrupt(tachPin), pulseCounter, FALLING);
      
        // Connect to WiFi
        WiFi.begin(ssid, password);
        while (WiFi.status() != WL_CONNECTED) {
          delay(500);
          Serial.print(".");
        }
        Serial.println("WiFi connected");
        Serial.println("IP address: ");
        Serial.println(WiFi.localIP());
      }
      
      void loop() {
        // Calculate fan RPM
        if (millis() - lastTime >= 1000) {
          noInterrupts();
          rpm = (pulseCount / 2) * 60; // Assuming 2 pulses per revolution
          pulseCount = 0;
          interrupts();
          lastTime = millis();
          Serial.print("Fan RPM: ");
          Serial.println(rpm);
        }
      
        // Control fan speed
        analogWrite(pwmPin, 128); // Set fan speed to 50%
        delay(1000);
      }
      ​[SIZE=14px][FONT=Tahoma][COLOR=#333333]برای کنترل فن‌های PWM با استفاده از برد ESP8266 و مانیتورینگ سرعت آن‌ها، می‌توانید از سیگنال‌های PWM برد ESP8266 برای تنظیم سرعت فن‌ها استفاده کنید. در زیر نمونه‌ای از کد Arduino برای کنترل یک فن PWM آورده شده است:
      
      
      این کد ساده، سرعت فن را با استفاده از سیگنال PWM کنترل می‌کند و تعداد دورهای فن را با استفاده از سنسور تاخو (Tachometer) اندازه‌گیری و مانیتور می‌کند. با تغییر مقدار `analogWrite` می‌توانید سرعت فن را تنظیم کنید.​[/FONT][/SIZE][/COLOR]

      دیدگاه


        #4
        سلام دوستان ، خسته نباشید
        بنده یه برد توسعه WeMos D1 با هسته WiFi ESP8266 رو به یک رله 5 ولت متصل کردم
        به این صورت که پایه گراند و 5 ولت رله رو به گراند و 5 ولت برد متصل کردم
        و پایه IN رله رو هم به پین D8 برد متصل کردم
        حالا موقعی که پین D8 رو HIGH و LOW میکنم رله کار نمیکنه و فقط چراغ سبز رله کمرنگ و پر رنگ میشه
        ابتدا فکر کردم Delay رو کم دادم ولی 2000 میلی ثانیه هم Delay دادم فرقی نکرد
        گفتم شاید هنگ میشه
        بهش یه پول داون با یه مقاومت 950 اهم از گراند برد هم دادم تفاوتی نکرد
        مجددا فکر کردم شاید برد تغذیه خوبی نمیرسونه به رله
        برد رو به یه آداپتور 12 ولت 2 آمپر متصل کردم
        باز هم تغییری نکرد
        به رله شک کردم ، با برد آردویینو بدون پول داون کار کرد
        ممنون میشم راهنماییم کنید????​

        دیدگاه


          #5
          سلام دوستان ، خسته نباشید
          بنده یه برد توسعه WeMos D1 با هسته WiFi ESP8266 رو به یک رله 5 ولت متصل کردم
          به این صورت که پایه گراند و 5 ولت رله رو به گراند و 5 ولت برد متصل کردم
          و پایه IN رله رو هم به پین D8 برد متصل کردم
          حالا موقعی که پین D8 رو HIGH و LOW میکنم رله کار نمیکنه و فقط چراغ سبز رله کمرنگ و پر رنگ میشه
          ابتدا فکر کردم Delay رو کم دادم ولی 2000 میلی ثانیه هم Delay دادم فرقی نکرد
          گفتم شاید هنگ میشه
          بهش یه پول داون با یه مقاومت 950 اهم از گراند برد هم دادم تفاوتی نکرد
          مجددا فکر کردم شاید برد تغذیه خوبی نمیرسونه به رله
          برد رو به یه آداپتور 12 ولت 2 آمپر متصل کردم
          باز هم تغییری نکرد
          به رله شک کردم ، با برد آردویینو بدون پول داون کار کرد
          ممنون میشم راهنماییم کنید

          دیدگاه


            #6
            نوشته اصلی توسط amireditor44@gmail.com نمایش پست ها
            سلام دوستان ، خسته نباشید
            بنده یه برد توسعه WeMos D1 با هسته WiFi ESP8266 رو به یک رله 5 ولت متصل کردم
            به این صورت که پایه گراند و 5 ولت رله رو به گراند و 5 ولت برد متصل کردم
            و پایه IN رله رو هم به پین D8 برد متصل کردم
            حالا موقعی که پین D8 رو HIGH و LOW میکنم رله کار نمیکنه و فقط چراغ سبز رله کمرنگ و پر رنگ میشه
            ابتدا فکر کردم Delay رو کم دادم ولی 2000 میلی ثانیه هم Delay دادم فرقی نکرد
            گفتم شاید هنگ میشه
            بهش یه پول داون با یه مقاومت 950 اهم از گراند برد هم دادم تفاوتی نکرد
            مجددا فکر کردم شاید برد تغذیه خوبی نمیرسونه به رله
            برد رو به یه آداپتور 12 ولت 2 آمپر متصل کردم
            باز هم تغییری نکرد
            به رله شک کردم ، با برد آردویینو بدون پول داون کار کرد
            ممنون میشم راهنماییم کنید
            با سلام
            برای راه اندازی رله با میکروکنترلر بایستی از یک ترانزیستور استفاده کنید ، جریان کشی بوبین رله باعث آسیب به کنترلر میشه

            لطفا شماتیک مدارتونم بفرستین

            دیدگاه


              #7
              نوشته اصلی توسط amireditor44@gmail.com نمایش پست ها
              سلام دوستان ، خسته نباشید
              بنده یه برد توسعه WeMos D1 با هسته WiFi ESP8266 رو به یک رله 5 ولت متصل کردم
              به این صورت که پایه گراند و 5 ولت رله رو به گراند و 5 ولت برد متصل کردم
              و پایه IN رله رو هم به پین D8 برد متصل کردم
              حالا موقعی که پین D8 رو HIGH و LOW میکنم رله کار نمیکنه و فقط چراغ سبز رله کمرنگ و پر رنگ میشه
              ابتدا فکر کردم Delay رو کم دادم ولی 2000 میلی ثانیه هم Delay دادم فرقی نکرد
              گفتم شاید هنگ میشه
              بهش یه پول داون با یه مقاومت 950 اهم از گراند برد هم دادم تفاوتی نکرد
              مجددا فکر کردم شاید برد تغذیه خوبی نمیرسونه به رله
              برد رو به یه آداپتور 12 ولت 2 آمپر متصل کردم
              باز هم تغییری نکرد
              به رله شک کردم ، با برد آردویینو بدون پول داون کار کرد
              ممنون میشم راهنماییم کنید
              پست زیر میتونه بهتون کمک کنه




              دیدگاه


                #8
                نوشته اصلی توسط Tanrina نمایش پست ها

                با سلام
                برای راه اندازی رله با میکروکنترلر بایستی از یک ترانزیستور استفاده کنید ، جریان کشی بوبین رله باعث آسیب به کنترلر میشه

                لطفا شماتیک مدارتونم بفرستین
                ممنونم ، یه ترانزیستور توی مسیرش قرار دادم مشکل حل شد ، ظاهرا بخاطر جریان کشی بویین رله بود مشکل ، اما سوال اینجاست چرا با آردوینو کار میکرد و با wemos کار نکرد

                دیدگاه


                  #9
                  نوشته اصلی توسط amireditor44@gmail.com نمایش پست ها

                  ممنونم ، یه ترانزیستور توی مسیرش قرار دادم مشکل حل شد ، ظاهرا بخاطر جریان کشی بویین رله بود مشکل ، اما سوال اینجاست چرا با آردوینو کار میکرد و با wemos کار نکرد
                  به خاطر ولتاژ و جریان کشی
                  ولتاژ آردوینو 5 ولت و wemos هم 3.3 ولت ، ولی در کل بهتره رله مستقیم به کنترلر وصل نشه.علاوه بر جریان کشی بوبین رله، ولتاژ القایی معکوس رله نیز می‌تواند به کنترلر آسیب برساند

                  دیدگاه

                  لطفا صبر کنید...
                  X