بسم الله
با عرض سلام خدمت عزیزان
امروز میخوام تجربه ساخت یک شیر خودکار برقی که میتونه برای مصرف خاص که ماده داخل لوله فشار نداشته باشه و جامد هم باشه،
به طوری که از طریق یک سیکنال منفی قابل کنترل (باز و بسته ) باشد با شما به اشتراک بزارم.
با توجه به بررسی که کردم همچین شیری را اگر در بازار بخواهیم تهیه کنیم هزینه هنگفتی باید پرداخت کنیم ولی با وسایل زیر
یک شیر ساده با کلی محاسن در اختیار خواهید داشت.
برآورد هزینه حدود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 عدد پیچ ام دی افی
عزیزان دقت داشته باشن قطعات بالا را میزین داخل مخلوط کن و برنامه زیر هم بهش میدن، انقدر میزنن تا کف کنه.
محصول آماده مصرف هست.
با عرض سلام خدمت عزیزان

امروز میخوام تجربه ساخت یک شیر خودکار برقی که میتونه برای مصرف خاص که ماده داخل لوله فشار نداشته باشه و جامد هم باشه،
به طوری که از طریق یک سیکنال منفی قابل کنترل (باز و بسته ) باشد با شما به اشتراک بزارم.
با توجه به بررسی که کردم همچین شیری را اگر در بازار بخواهیم تهیه کنیم هزینه هنگفتی باید پرداخت کنیم ولی با وسایل زیر
یک شیر ساده با کلی محاسن در اختیار خواهید داشت.
برآورد هزینه حدود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(0x3F, 16, 2);
Servo servo1;
//*********************************************Config Value
boolean open1 = 0;
int Speed_Rotate_Open = EEPROM.get(10, Speed_Rotate_Open); //110°monasebe
int Delay_Rotate_Open = EEPROM.get(15, Delay_Rotate_Open); //1600ms monasebe
int Stay_Open = EEPROM.get(30, Stay_Open); //2000ms monasebe
int Speed_Rotate_Close = EEPROM.get(20, Speed_Rotate_Close); //80°monasebe
int Delay_Rotate_Close = EEPROM.get(25, Delay_Rotate_Close); //2000ms monasebe
int State_Show = 1;
boolean key = 0;
boolean key_SET = 1 , key_DOWN = 1, key_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_PIN, INPUT);
Button b1 = Button(42, &b1Click, &b1Hold, 1500, 2500);//328
Button b2 = Button(228, &b2Click, &b2Hold, 1000, 5);//846
Button b3 = Button(127, &b3Click, &b3Hold, 1000, 5);//700
void setup() {
//Serial.begin(9600);
//Serial.println("Testing your Analog buttons");
digitalWrite(ANALOG_PIN, HIGH);
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(3, 0);
lcd.print("Bismillah");
lcd.blink();
lcd.setCursor(0, 1);
lcd.print("alrahman alrahim");
delay(4000);
lcd.noBacklight();
delay(1000);
lcd.clear();
lcd.backlight();
lcd.clear();
servo1.attach(5);
pinMode(4, INPUT);
digitalWrite(4, HIGH);
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(0, 0);
lcd.print(" Dar Baz va ");
lcd.setCursor(0, 1);
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 == 0 && key_SET == 0 && key_DOWN == 1 && key_UP == 1) {
key_SET = 1;
key = 1;
SET_Speed_Rotate_Open();
}
if (key == 1 && key_SET == 1 && key_DOWN == 1 && key_UP == 1) {
key = 0;
}
switch (State_Show)
{
case 1:
lcd.setCursor(0, 0);
lcd.print("SpeedOpen:");
lcd.print(Speed_Rotate_Open);
lcd.print("\337");
lcd.setCursor(0, 1);
lcd.print("DelayOpen:");
lcd.print(Delay_Rotate_Open);
lcd.print("ms");
return ;
;
case 2:
lcd.setCursor(0, 0);
lcd.print("Stay Open For:");
lcd.setCursor(0, 1);
lcd.print(Stay_Open);
lcd.print(" ms");
return ;
;
case 3:
lcd.setCursor(0, 0);
lcd.print("SpeedClos:");
lcd.print(Speed_Rotate_Close);
lcd.print("\337");
lcd.setCursor(0, 1);
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(0, 0);
lcd.print("Set_Speed_Open");
lcd.setCursor (0, 1);
lcd.print(Speed_Rotate_Open);
lcd.print("\337");
analogButtons.check();
if (key == 0 && key_SET == 1 && key_DOWN == 0 && key_UP == 1) {
key_DOWN = 1;
key = 1;
if (Speed_Rotate_Open == 91) {
Speed_Rotate_Open = 180;
} else {
Speed_Rotate_Open--;
}
}
if (key == 0 && key_SET == 1 && key_DOWN == 1 && key_UP == 0) {
key_UP = 1;
key = 1;
if (Speed_Rotate_Open == 180) {
Speed_Rotate_Open = 91;
} else {
Speed_Rotate_Open++;
}
}
if (key == 0 && key_SET == 0 && key_DOWN == 1 && key_UP == 1) {
key_SET = 1;
key = 1;
break;
}
if (key == 1 && key_SET == 1 && key_DOWN == 1 && 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(0, 0);
lcd.print("Set_Delay_Open");
lcd.setCursor (0, 1);
lcd.print(Delay_Rotate_Open);
lcd.print(" Milliseconds");
analogButtons.check();
if (key == 0 && key_SET == 1 && key_DOWN == 0 && key_UP == 1) {
key_DOWN = 1;
key = 1;
if (Delay_Rotate_Open == 1000) {
Delay_Rotate_Open = 5000;
} else {
Delay_Rotate_Open--;
}
}
if (key == 0 && key_SET == 1 && key_DOWN == 1 && key_UP == 0) {
key_UP = 1;
key = 1;
if (Delay_Rotate_Open == 5000) {
Delay_Rotate_Open = 1000;
} else {
Delay_Rotate_Open++;
}
}
if (key == 0 && key_SET == 0 && key_DOWN == 1 && key_UP == 1) {
key_SET = 1;
key = 1;
break;
}
if (key == 1 && key_SET == 1 && key_DOWN == 1 && key_UP == 1) {
key = 0;
}
}
SET_Stay_Open();
}
//*********************************************Subprogram SET_Stay_Open()
void SET_Stay_Open() {
lcd.clear();
while (1) {
lcd.setCursor(0, 0);
lcd.print("Set_Stay_Open:");
lcd.setCursor (0, 1);
lcd.print(Stay_Open);
lcd.print(" Milliseconds");
analogButtons.check();
if (key == 0 && key_SET == 1 && key_DOWN == 0 && key_UP == 1) {
key_DOWN = 1;
key = 1;
if (Stay_Open == 0) {
Stay_Open = 20000;
} else {
Stay_Open--;
}
}
if (key == 0 && key_SET == 1 && key_DOWN == 1 && key_UP == 0) {
key_UP = 1;
key = 1;
if (Stay_Open == 20000) {
Stay_Open = 0;
} else {
Stay_Open++;
}
}
if (key == 0 && key_SET == 0 && key_DOWN == 1 && key_UP == 1) {
key_SET = 1;
key = 1;
break;
}
if (key == 1 && key_SET == 1 && key_DOWN == 1 && 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(0, 0);
lcd.print("Set_Speed_Close:");
lcd.setCursor (0, 1);
lcd.print(Speed_Rotate_Close);
lcd.print("\337");
analogButtons.check();
if (key == 0 && key_SET == 1 && key_DOWN == 0 && key_UP == 1) {
key_DOWN = 1;
key = 1;
if (Speed_Rotate_Close == 1) {
Speed_Rotate_Close = 89;
} else {
Speed_Rotate_Close--;
}
}
if (key == 0 && key_SET == 1 && key_DOWN == 1 && key_UP == 0) {
key_UP = 1;
key = 1;
if (Speed_Rotate_Close == 89) {
Speed_Rotate_Close = 1;
} else {
Speed_Rotate_Close++;
}
}
if (key == 0 && key_SET == 0 && key_DOWN == 1 && key_UP == 1) {
key_SET = 1;
key = 1;
break;
}
if (key == 1 && key_SET == 1 && key_DOWN == 1 && 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(0, 0);
lcd.print("Set_Delay_Close:");
lcd.setCursor (0, 1);
lcd.print(Delay_Rotate_Close);
lcd.print(" Milliseconds");
analogButtons.check();
if (key == 0 && key_SET == 1 && key_DOWN == 0 && key_UP == 1) {
key_DOWN = 1;
key = 1;
if (Delay_Rotate_Close == 1000) {
Delay_Rotate_Close = 5000;
} else {
Delay_Rotate_Close--;
}
}
if (key == 0 && key_SET == 1 && key_DOWN == 1 && key_UP == 0) {
key_UP = 1;
key = 1;
if (Delay_Rotate_Close == 5000) {
Delay_Rotate_Close = 1000;
} else {
Delay_Rotate_Close++;
}
}
if (key == 0 && key_SET == 0 && key_DOWN == 1 && key_UP == 1) {
key_SET = 1;
key = 1;
break;
}
if (key == 1 && key_SET == 1 && key_DOWN == 1 && key_UP == 1) {
key = 0;
}
}
Save();
}
//*********************************************Subprogram Save()
void Save() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("*Alhamdolellah*");
lcd.setCursor(0, 1);
lcd.print("> Save... ");
EEPROM.put(10, Speed_Rotate_Open);
EEPROM.put(15, Delay_Rotate_Open );
EEPROM.put(30, Stay_Open );
EEPROM.put(20, Speed_Rotate_Close );
EEPROM.put(25, Delay_Rotate_Close );
delay(2500);
lcd.clear();
}