اطلاعیه

Collapse
No announcement yet.

ساخت شیر خودکار برقی با سروو موتور

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

    ساخت شیر خودکار برقی با سروو موتور

    بسم الله
    با عرض سلام خدمت عزیزان

    امروز میخوام تجربه ساخت یک شیر خودکار برقی که میتونه برای مصرف خاص که ماده داخل لوله فشار نداشته باشه و جامد هم باشه،
    به طوری که از طریق یک سیکنال منفی قابل کنترل (باز و بسته ) باشد با شما به اشتراک بزارم.
    با توجه به بررسی که کردم همچین شیری را اگر در بازار بخواهیم تهیه کنیم هزینه هنگفتی باید پرداخت کنیم ولی با وسایل زیر
    یک شیر ساده با کلی محاسن در اختیار خواهید داشت.

    برآورد هزینه حدود450 تا 550 هزار تومان بسته به قطر شیر یکطرفه
    قطعات مورد نیاز به شرح زیر:
    1 عدد سروو موتور 360 درجه
    1 عدد فلنج فلزی سروو موتور
    1 عدد ماژول LCD 2*16
    1 عدد ماژول i2c برای LCD
    1 عدد arduino micro pro
    1 عدد شیریکطرفه قفل دار پوش فیت نارنجی125
    1 عدد قرقره قطر 3سانت و طول 4 سانت
    50 سانت سیم بکسل خیلی نازک
    1 عدد جعبه 10x9x7
    یک عدد فیش آداپتوری توکار مادگی
    1 عدد کاهنده 2596
    3 عدد تک سوئیچ 6x6x10mm
    6 عدد مقاومت رنج مختلف است
    1 عدد اپتوکوپلر
    1 عدد ال ای دی
    1 عدد آداپتور 2 آمپری 6 ولت به بالا
    7 عدد پیچ ام دی افی
    عزیزان دقت داشته باشن قطعات بالا را میزین داخل مخلوط کن و برنامه زیر هم بهش میدن، انقدر میزنن تا کف کنه.
    محصول آماده مصرف هست.

    کد PHP:
    #include "Servo.h"
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <AnalogButtons.h>
    #define ANALOG_PIN 9

    #include <EEPROM.h>
    // Set the LCD address to 0x3F or 0x27 for a 16 chars and 2 line display
    LiquidCrystal_I2C lcd(0x3F162);

    Servo servo1;
    //*********************************************Config Value
    boolean open1 0;
    int Speed_Rotate_Open EEPROM.get(10Speed_Rotate_Open); //110°monasebe
    int Delay_Rotate_Open EEPROM.get(15Delay_Rotate_Open); //1600ms monasebe
    int Stay_Open EEPROM.get(30Stay_Open); //2000ms monasebe
    int Speed_Rotate_Close EEPROM.get(20Speed_Rotate_Close); //80°monasebe
    int Delay_Rotate_Close EEPROM.get(25Delay_Rotate_Close); //2000ms monasebe
    int State_Show 1;
    boolean key 0;
    boolean key_SET key_DOWN 1key_UP 1;
    //**************************************


    void b1Click() {
      
    //Serial.print("button 1 clicked");
      
    if (State_Show == 3) {
        
    State_Show 1;
      } else {
        
    State_Show++;
      }
      
    lcd.clear();
    }
    void b1Hold() {
      
    //Serial.print("button 1 held");
      
    key_SET 0;
    }

    void b2Click() {
      
    //Serial.print("button 2 clicked");
      
    key_DOWN 0;
    }
    void b2Hold() {
      
    //Serial.print("button 2 held");
      
    key_DOWN 0;
    }

    void b3Click() {
      
    //Serial.print("button 3 clicked");
      
    key_UP 0;
    }
    void b3Hold() {
      
    //Serial.print("button 3 held");
      
    key_UP 0;
    }

    AnalogButtons analogButtons(ANALOG_PININPUT);
    Button b1 Button(42, &b1Click, &b1Hold15002500);//328
    Button b2 Button(228, &b2Click, &b2Hold10005);//846
    Button b3 Button(127, &b3Click, &b3Hold10005);//700

    void setup() {
      
    //Serial.begin(9600);
      //Serial.println("Testing your Analog buttons");
      
    digitalWrite(ANALOG_PINHIGH);
      
    analogButtons.add(b1);
      
    analogButtons.add(b2);
      
    analogButtons.add(b3);
      
    // initialize the LCD
      
    lcd.begin();
      
    // Turn on the blacklight and print a message.
      
    lcd.clear();
      
    lcd.backlight();
      
    lcd.setCursor(30);
      
    lcd.print("Bismillah");
      
    lcd.blink();
      
    lcd.setCursor(01);
      
    lcd.print("alrahman alrahim");
      
    delay(4000);
      
    lcd.noBacklight();
      
    delay(1000);
      
    lcd.clear();
      
    lcd.backlight();
      
    lcd.clear();
      
    servo1.attach(5);
      
    pinMode(4INPUT);
      
    digitalWrite(4HIGH);
      
    delay(50);
    }
    void loop() {
      
    // To check values when button are pressed
      
    analogButtons.check();

      if (
    digitalRead(4) == LOW) {
        
    open1 1;
      }
      if (
    open1) {
        
    lcd.clear();
        
    lcd.setCursor(00);
        
    lcd.print("   Dar Baz va   ");
        
    lcd.setCursor(01);
        
    lcd.print("Baste Mishavad.");
        
    lcd.blink();
        
    servo1.write(Speed_Rotate_Open);//Rotate Left****
        
    delay(Delay_Rotate_Open);//2200 taghriban 360 kamel mizane be chap***
        
    servo1.write(90);//Stop
        
    delay(Stay_Open);
        
    servo1.write(Speed_Rotate_Close);//Rotate Right***
        
    delay(Delay_Rotate_Close);// 1820 behtare bashe hodode 375 mizane be rast***
        
    servo1.write(90);//Stop
        
    delay(10000);
        
    lcd.clear();
        
    open1 0;
      }

      
    analogButtons.check();
      if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
        
    key_SET 1;
        
    key 1;

        
    SET_Speed_Rotate_Open();
      }
      if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
        
    key 0;
      }
      switch (
    State_Show)
      {
        case 
    1:
          
    lcd.setCursor(00);
          
    lcd.print("SpeedOpen:");
          
    lcd.print(Speed_Rotate_Open);
          
    lcd.print("\337");
          
    lcd.setCursor(01);
          
    lcd.print("DelayOpen:");
          
    lcd.print(Delay_Rotate_Open);
          
    lcd.print("ms");
          return ;
          ;
        case 
    2:
          
    lcd.setCursor(00);
          
    lcd.print("Stay Open For:");
          
    lcd.setCursor(01);
          
    lcd.print(Stay_Open);
          
    lcd.print(" ms");
          return ;
          ;
        case 
    3:
          
    lcd.setCursor(00);
          
    lcd.print("SpeedClos:");
          
    lcd.print(Speed_Rotate_Close);
          
    lcd.print("\337");
          
    lcd.setCursor(01);
          
    lcd.print("DelayClos:");
          
    lcd.print(Delay_Rotate_Close);
          
    lcd.print("ms");
          return ;
          ;
          
    //default:
          //return 0;
          //;
      
    }
    }

    //*********************************************Subprogram SET_Speed_Rotate_Open()
    void SET_Speed_Rotate_Open() {
      
    lcd.clear();
      
    lcd.cursor();
      while (
    1) {
        
    lcd.setCursor(00);
        
    lcd.print("Set_Speed_Open");
        
    lcd.setCursor (01);
        
    lcd.print(Speed_Rotate_Open);

        
    lcd.print("\337");

        
    analogButtons.check();
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_DOWN 1;
          
    key 1;
          if (
    Speed_Rotate_Open == 91) {
            
    Speed_Rotate_Open 180;
          } else {
            
    Speed_Rotate_Open--;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 0) {
          
    key_UP 1;
          
    key 1;
          if (
    Speed_Rotate_Open == 180) {
            
    Speed_Rotate_Open 91;
          } else {
            
    Speed_Rotate_Open++;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_SET 1;
          
    key 1;
          break;
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key 0;
        }
      }

      
    SET_Delay_Rotate_Open();
    }

    //*********************************************Subprogram SET_Delay_Rotate_Open()
    void SET_Delay_Rotate_Open() {
      
    lcd.clear();

      while (
    1) {
        
    lcd.setCursor(00);
        
    lcd.print("Set_Delay_Open");
        
    lcd.setCursor (01);
        
    lcd.print(Delay_Rotate_Open);
        
    lcd.print(" Milliseconds");

        
    analogButtons.check();
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_DOWN 1;
          
    key 1;
          if (
    Delay_Rotate_Open == 1000) {
            
    Delay_Rotate_Open 5000;
          } else {
            
    Delay_Rotate_Open--;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 0) {
          
    key_UP 1;
          
    key 1;
          if (
    Delay_Rotate_Open == 5000) {
            
    Delay_Rotate_Open 1000;
          } else {
            
    Delay_Rotate_Open++;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_SET 1;
          
    key 1;
          break;
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key 0;
        }
      }
      
    SET_Stay_Open();
    }
    //*********************************************Subprogram SET_Stay_Open()
    void SET_Stay_Open() {
      
    lcd.clear();

      while (
    1) {
      
    lcd.setCursor(00);
      
    lcd.print("Set_Stay_Open:");
      
    lcd.setCursor (01);
      
    lcd.print(Stay_Open);
      
    lcd.print(" Milliseconds");
      
        
    analogButtons.check();
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_DOWN 1;
          
    key 1;
          if (
    Stay_Open == 0) {
            
    Stay_Open 20000;
          } else {
            
    Stay_Open--;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 0) {
          
    key_UP 1;
          
    key 1;
          if (
    Stay_Open == 20000) {
            
    Stay_Open 0;
          } else {
            
    Stay_Open++;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_SET 1;
          
    key 1;
          break;
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key 0;
        }
      }

      
    SET_Speed_Rotate_Close();
    }
    //*********************************************Subprogram SET_Speed_Rotate_Close()
    void SET_Speed_Rotate_Close() {
      
    lcd.clear();

      while (
    1) {
        
    lcd.setCursor(00);
        
    lcd.print("Set_Speed_Close:");
        
    lcd.setCursor (01);
        
    lcd.print(Speed_Rotate_Close);
        
    lcd.print("\337");
        
        
    analogButtons.check();
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_DOWN 1;
          
    key 1;
          if (
    Speed_Rotate_Close == 1) {
            
    Speed_Rotate_Close 89;
          } else {
            
    Speed_Rotate_Close--;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 0) {
          
    key_UP 1;
          
    key 1;
          if (
    Speed_Rotate_Close == 89) {
            
    Speed_Rotate_Close 1;
          } else {
            
    Speed_Rotate_Close++;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_SET 1;
          
    key 1;
          break;
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key 0;
        }
      }

      
    SET_Delay_Rotate_Close();
    }

    //*********************************************Subprogram SET_Delay_Rotate_Close()
    void SET_Delay_Rotate_Close() {
      
    lcd.clear();

      while (
    1) {
        
    lcd.setCursor(00);
        
    lcd.print("Set_Delay_Close:");
        
    lcd.setCursor (01);
        
    lcd.print(Delay_Rotate_Close);
        
    lcd.print(" Milliseconds");
        
        
    analogButtons.check();
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_DOWN 1;
          
    key 1;
          if (
    Delay_Rotate_Close == 1000) {
            
    Delay_Rotate_Close 5000;
          } else {
            
    Delay_Rotate_Close--;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 0) {
          
    key_UP 1;
          
    key 1;
          if (
    Delay_Rotate_Close == 5000) {
            
    Delay_Rotate_Close 1000;
          } else {
            
    Delay_Rotate_Close++;
          }
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key_SET 1;
          
    key 1;
          break;
        }
        if (
    key == && key_SET == && key_DOWN == && key_UP == 1) {
          
    key 0;
        }
      }
      
    Save();
    }

    //*********************************************Subprogram Save()
    void Save() {
      
    lcd.clear();
      
    lcd.setCursor(00);
      
    lcd.print("*Alhamdolellah*");
      
    lcd.setCursor(01);
      
    lcd.print(">    Save...    ");
      
    EEPROM.put(10Speed_Rotate_Open);
      
    EEPROM.put(15Delay_Rotate_Open );
      
    EEPROM.put(30Stay_Open );
      
    EEPROM.put(20Speed_Rotate_Close );
      
    EEPROM.put(25Delay_Rotate_Close );
      
    delay(2500);
      
    lcd.clear();

    جدیدترین ویرایش توسط حمید حمید; ۲۰:۴۵ ۱۳۹۹/۰۱/۱۸. دلیل: تکمیل و رفع چند ایراد کد
لطفا صبر کنید...
X