رفتن به مطلب

ارسال‌های توصیه شده

c6527679b7cc647a1cc706c27e1b8199.png

در این آموزش، نحوه راه اندازی تعداد 8 و 16 رله راه با استفاده از میکروکنترلر NodeMCU32S و شیفت رجیسترهای 74HC595 تنها با استفاده از 3 پین ESP32 راه اندازی خواهیم کرد. و  هر رله را به صورت جداگانه آدرس دهی می‌کنید تا بتوان هر رله را به صورت جداگانه کنترل کنیم. در نهایت یک رابط وب برای کنترل هر رله از طریق اینترنت ایجاد می کنیم.

 

لوازمی که به آن احتیاج دارید

  • برد توسعه NodeMCU 32S
  • برد بورد (Bread Board)
  • سیم جامپری
  • ماژول رله 8 کانال
  • شیفت رجیستر 74HC595
     

اصول کار این پروژه

برای کنترل ماژول ۸ رله، باید ۸ خروجی دیجیتال از میکروکنترلر رزرو شود. به منظور صرفه جویی در تعداد ورودی/خروجی میکروکنترلر، می توان از مدارهای مجتمع مختلف استفاده کرد. به طور خاص، از رجیستر شیفت استفاده می شود. رجیستر شیفت 74HC595 دارای 8 خروجی قابل برنامه ریزی است که می توانند به 0 یا 5 ولت تنظیم شوند و فقط به 3 ورودی دیجیتال نیاز دارند. بنابراین، این راه حل برای کنترل رله ها و آزاد نگه داشتن خروجی های میکروکنترلر برای سایر عملکردها، ایده آل است.

 

شماتیک
برای کنترل رجیستر شیفت، NodeMCU به صورت زیر متصل می شود:

  • GND : اتصال به زمین مدار مجتمع.
  • Vcc : اتصال به پین منبع تغذیه. معمولاً به 5 ولت متصل می شود.
  • SH_CP یا RCLK : اتصال به پین 33.
  • ST_CP یا SRCLK : اتصال به پین 32.
  • DS یا SER : اتصال به پین 25.

 

نقل قول

خروجی های  Q0-Q7 آیسی 74HC595  مستقیماً به ورودی های ماژول 8 رله متصل می شوند. در این آموزش ما از پین های Enable (OE) و Reset (MR) استفاده نمی کنیم.

 

  • OE : فعال‌سازی خروجی، فعال در سطح پایین. این پین به GND متصل می شود تا خروجی ها فعال شوند.
  • MR : بازنشانی اصلی، فعال در سطح پایین. پین بازنشانی. به 5 ولت متصل می شود.

توجه : جریان خروجی پایه‌های میکروکنترلر محدود هستند, لذا برای راه اندازی تعداد زیادی رله، پیشنهاد می‌شود از یک منبع تعذیه خارجی استفاده شود.

5d636261c6cfc10f3498da349d9bd2d3.png

کد پروژه
در نهایت برای راه اندازی مدار لازم است کد زیر را روی برد خود آپلود کرده با با استفاده از حلقه ایجاد شده در کد, رله‌های به ترتیب فعال و غیرفعال شوند.

//Constants
#define number_of_74hc595s 1
#define numOfRegisterPins number_of_74hc595s * 8
#define SER_Pin 25
#define RCLK_Pin 33
#define SRCLK_Pin 32

//Variables
boolean registers [numOfRegisterPins];

void setup()
{
	//Init Serial USB
	Serial.begin(115200);
	Serial.println(F("Initialize System"));

	//Init register
	pinMode(SER_Pin, OUTPUT);
	pinMode(RCLK_Pin, OUTPUT);
	pinMode(SRCLK_Pin, OUTPUT);
	clearRegisters();
	writeRegisters();
	delay(500);
}

void loop()
{
	writeGrpRelay();
}

void clearRegisters()
{
	//// Clear registers variables 
	for(int i = numOfRegisterPins-1; i >=  0; i--)
	{
		registers[i] = HIGH;//LOW;
	}
}

void writeRegisters()
{
	//// Write register after being set 
	digitalWrite(RCLK_Pin, LOW);

	for(int i = numOfRegisterPins-1; i >=  0; i--)
	{
		digitalWrite(SRCLK_Pin, LOW); int val = registers[i];
		digitalWrite(SER_Pin, val);
		digitalWrite(SRCLK_Pin, HIGH);
	}

	digitalWrite(RCLK_Pin, HIGH);
}

void setRegisterPin(int index,int value)
{
	////Set register variable to HIGH or LOW
	registers[index] = value;
}

void writeGrpRelay()
{
	for(int i = numOfRegisterPins-1; i >=  0; i--)
	{
		Serial.print(F("Relay "));
		Serial.print(i);
		Serial.println(F(" HIGH"));
		setRegisterPin(i, LOW);
		writeRegisters();
		delay(200);
	
		Serial.print(F("Relay "));
		Serial.print(i);
		Serial.println(F(" LOW"));
		setRegisterPin(i, HIGH);
		writeRegisters();
		delay(500);
	}
}

 

توسعه پروژه و کنترل 16 رله با استفاده از 2 آیسی شیفت رجیستر 74hc595

esp32_74HC595x2_16relays_bb-1280x662-1.p

 

برای کنترل 16 رله تنها کافیست مدار را طبق شماتیک بالا بسته و در خط 2 برنامه مقدار number_of_74hc595s را برابر با 2 قرار دهیم

 

#define number_of_74hc595s 2

لطفا برای ارسال دیدگاه وارد شوید

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



ورود به حساب کاربری
×
×
  • اضافه کردن...