آردوینو آردوینو Arduino Uno پروژه های آردوینو

کنترل ۴ وسیله برقی با شیلد اترنت W5100 آردوینو با خط فرمان ویندوز

Control-4-devices-with-relay-and-ethernet-w5100-arduino-shield-digispark
نوشته شده توسط مهرشاد رکوئی

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

 

هدف از اجرای پروژه

در این پروژه می‌خواهیم با استفاده از شیلد اترنت آردوینو و اتصال با کابل شبکه از طریق وب سرور لوکال و خط فرمان ویندوز ۴ رله را کنترل کنیم. چیپ استفاده شده در شیلد اترنت W5100 می‌باشد. Wiznet W5100 یک آی پی فراهم خواهد کرد. با در اختیار داشتن IP استاتیک امکان کنترل پروژه‌ها از هر مکانی توسط این شیلد میسر خواهد بود.

اتصالات

  •  شیلد اترنت W5100 Ethernet را روی آردوینو UNO قرار دهید.
  • پایه های کنترل رله را به پورت های ۶ تا ۹ دیجیتال آردوینو اتصال دهید.
  • از پایه های GND & 5V  به GND & VCC  برد رله اتصال دهید.

 

اتصالات مدار کنترل وسایل برقی با شیلد اترنت آردوینو W5100 - دیجی اسپارک

 


کد آردوینو اترنت W5100


کدهای زیر را در Aduino IDE کپی کرده و سپس اقدام به کامپایل کدها کنید. پس از آن با انتخاب برد آردوینو از منو Tools اقدام به آپلود کدها کنید.

 

 
#include <SPI.h>
#include <Ethernet.h>
int relay1 = 6;
int relay2 = 7;
int relay3 = 8;
int relay4 = 9;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 200 }; // ip in lan (that's what you need to use in your browser. ("192.168.1.200")
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
readString += c;
//Serial.print(c);
}
//if HTTP request has ended
if (c == '\n') {
Serial.println(readString); //print to serial monitor for debuging
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD align=centre>");
client.println("<META HTTP-EQUIV=REFRESH CONTENT=3 URL=>");
client.println("<TITLE>Home Control Project</TITLE>");
client.println("</HEAD>");
client.println("<BODY align=centre>");
client.println("<H1 ALIGN=CENTER>Home Control Project</H1>");
client.println("<hr />");
client.println("<br />");
client.println("<H2 ALIGN=CENTER>Arduino with Ethernet Shield</H2>");
client.println("<br />");
if (digitalRead(relay1) == HIGH) {
client.println("<p ALIGN=CENTER>");
client.println("<B>Relay 1 is currently <font color='green' size='5'>ON </font></B><br/>");
client.println(F("<input type=button align=centre value='Relay 1 OFF' onmousedown=location.href='/?button1off'><br/><br/>"));
client.println("</p>");
}
else {
client.println("<p ALIGN=CENTER>");
client.println("<B>Relay 1 is currently <font color='red' size='5'>OFF </font></B><br/>");
client.print(F("<input type=button align=centre value='Relay 1 ON' onmousedown=location.href='/?button1on'><br/><br/>"));
}
if (digitalRead(relay2) == HIGH) {
client.println("<p ALIGN=CENTER>");
client.println("<B>Relay 2 is currently <font color='green' size='5'>ON </font></B><br/>");
client.println(F("<input type=button value='Relay 2 OFF' onmousedown=location.href='/?button2off'><br/><br/>"));
client.println("</p>");
}
else {
client.println("<p ALIGN=CENTER>");
client.println("<B>Relay 2 is currently <font color='red' size='5'>OFF </font></B><br/>");
client.print(F("<input type=button value='Relay 2 ON' onmousedown=location.href='/?button2on'><br/><br/>"));
client.println("</p>");
}
if (digitalRead(relay3) == HIGH) {
client.println("<p ALIGN=CENTER>");
client.println("<B>Relay 3 is currently <font color='green' size='5'>ON </font></B><br/>");
client.println(F("<input type=button value='Relay 3 OFF' onmousedown=location.href='/?button3off'><br/><br/>"));
client.println("</p>");
}
else {
client.println("<p ALIGN=CENTER>");
client.println("<B>Relay 3 is currently <font color='red' size='5'>OFF </font></B><br/>");
client.print(F("<input type=button value='Relay 3 ON' onmousedown=location.href='/?button3on'><br/><br/>"));
client.println("</p>");
}
if (digitalRead(relay4) == HIGH) {
client.println("<p ALIGN=CENTER>");
client.println("<B>Relay 4 is currently <font color='green' size='5'>ON </font></B><br/>");
client.println(F("<input type=button value='Relay 4 OFF' onmousedown=location.href='/?button4off'><br/><br/>"));
client.println("</p>");
}
else {
client.println("<p ALIGN=CENTER>");
client.println("<B>Relay 4 is currently <font color='red' size='5'>OFF </font></B><br/>");
client.print(F("<input type=button value='Relay 4 ON' onmousedown=location.href='/?button4on'><br/><br/>"));
client.println("</p>");
}
client.println("<br />");
client.println("<p ALIGN=CENTER>Created by TheROCK</p>");
client.println("<br />");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
//stopping client
client.stop();
//controls the Arduino if you press the buttons
if (readString.indexOf("?button1on") >0){
digitalWrite(relay1, HIGH);
}
if (readString.indexOf("?button1off") >0){
digitalWrite(relay1, LOW);
}
if (readString.indexOf("?button2on") >0){
digitalWrite(relay2, HIGH);
}
if (readString.indexOf("?button2off") >0){
digitalWrite(relay2, LOW);
}
if (readString.indexOf("?button3on") >0){
digitalWrite(relay3, HIGH);
}
if (readString.indexOf("?button3off") >0){
digitalWrite(relay3, LOW);
}
if (readString.indexOf("?button4on") >0){
digitalWrite(relay4, HIGH);
}
if (readString.indexOf("?button4off") >0){
digitalWrite(relay4, LOW);
}
//clearing string for next read
readString="";
}
}
}
}
}
 

 


تحلیل کد آردوینو اترنت W5100


  • پورتهای ۶-۹ برای رله ها بصورت خروجی معرفی شده است. برای دستگاه آی پی ۱۹۲٫۱۶۸٫۱٫۲۰۰ در نظر گرفته شده که بسته به نیاز می‌توان آن را تغییر داد.
  • وب سرور روی پورت ۸۰ دستگاه فعال شده و منتظر ارسال درخواست کاربر است.
  • برای کنترل از آدرس زیر می‌توان رله ها را تحت وب کنترل کرد:
    http:// 192.168.1.200
  • در این صفحه حالت هر رله نمایش داده می‌شود ( ON or OFF ) و برای تغییر وضعیت کافیست روی دکمه مورد نظر کلیک کرد.
  • هر ۳ ثانیه این صفحه بارگذاری شده و حالت رله ها بروزرسانی می‌شود.

 


کنترل با خط فرمان ویندوز


برای کنترل رله ها از طریق خط فرمان ویندوز باید از یک برنامه کمکی برای ارسال درخواست های HTTP به آردوینو استفاده کرد. من برای اینکار از CURL استفاده کردم که از آدرس زیر برای سیستم عامل های مختلف قابل دریافت است:

https://curl.haxx.se/download.html

بطور مثال برای خاموش کردن رله ۲ پیغام زیر را باید از طریق خط فرمان اجرا کنیم:

curl http://192.168.1.200/?button2off

 برای روشن کردن رله ۴ از دستور زیر استفاده می‌کنیم:

curl http://192.168.1.200/?button4on >nul 2>&1

بخاطر محدودیت های حافظه آردوینو UNO، سعی شده تا حد امکان کد ها مختصر و مفید باشد.

 

اتصالات مدار کنترل وسایل برقی با آردوینو اترنت W5100 - دیجی اسپارک

 


وسایل مورد نیاز


آردوینو Arduino UNO

شیلد اترنت آردوینو Arduino Ethernet Shield W5100

ماژول رله چهار کانال با اپتوکوپلر Relay Module 5V

کابل فلت

 

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

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

مهرشاد رکوئی

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۵ دیدگاه

  • سلام
    ممنون از سایت خوبتون
    من میخام با نرم افزار اندروید ۸تا وسیله برقی رو کنترل کنم از طریق اینترنت
    بنظر شما از کدوم قطعات استفاده کنم که به نتیجه بهتری برسم

    • سلام دوست عزیز
      شما با اندروید هر کدام از برد های اردوینو رو میتونید کنترل کنید.
      محدودیتی که ممکن هست پیش بیاد مربوط به حافظه برد هست که باید مد نظر داشته باشید.
      برای کنترل ۴ رله با همین برد سعی شد در حد امکان کد ها کوتاه شود تا در هنگام کامپایل مشکل ایجاد نشود.
      پیشنهاد میکنم برای کنترل ۸ رله از برد mega256 استفاده کنید. چون هم با شیلد های توسعه uno سازگار هست و هم حافظه بیشتری در اختیار شما قرار میدهد.

  • سلام من برای انجام یه پروژه دانشجویی از این ماژول های رله استفاده کردم البته من فرمان را از طریق کلید به برد میدم و نیازی به اتصال به اینترنت ندارم، ولی استادم از من خواسته راهی پیدا کنیم که بجای استفاده از سیم های معمولی که سیگنال دیجیتال رو از برد به ماژول میفرستند از کابل اترنت یا همون کابل شبکه استفاده بشه. من تحقیق کردم ظاهرا باید ماژول جدیدی بخرم که پورت اترنت روی ماژول باشه ولی این نوع ماژول ها کنترلشون توسط یک صفحه وب انجام میشه انگار، خواستم بدونم راهی هست که من بتونم یکی از همین ماژول ها رو به شیلد اترنت اردوینو وصل کنم و توسط خود برد فرمان را از اترنت یا شبکه معمولی به ماژول بدم؟ اگه تجربه ای در این زمینه دارین ممنون میشم اگه پاسخ بدین

    • با درود فراوان
      چیزی که من متوجه شدم این هست که شما میخواهید ارتباط بین برد رله و آردوینو رو از طریقی غیر از سیم های معمولی برقرار کنید. در اینصورت باید از شیلد های رله آردوینو استفاده کنید که روی برد قرار میگیره و میتونید همزمان از شیلد رله و شیلد اترنت استفاده کنید.
      تنها محدودیتی که دارید این هست که از پورت های دیجیتال D10 تا D13 که برای ارتباط بین برد آردوینو و شیلد اترنت هست نمیتونید استفاده کنید.
      در اینصورت از طریق خط فرمان ویندوز و ارتباط با کابل اترنت میتونید به رله ها فرمان بدید.https://daneshjookit.com/module/useful/%D8%B1%D9%84%D9%87-relay/2465-arduino-relay-shield.html?search_query=%D8%B4%DB%8C%D9%84%D8%AF+%D8%B1%D9%84%D9%87&results=8&cate=
      از این آدرس میتونیداطلاعات شیلد رله رو مشاهده کنید.

  • سلام و عرض ادب
    بنده ۴ دستگاه رطوبت ساز-هیتر-لامپها-فن را با ۴ رله اردینو بهمراه شیلد اترنت میخوام وصل کنم .سنسور دما رطوبت و نور و co2دارمlلطفا مراحل را راهنمایی فرمایید.امروز اشتراک خریدم.اگه بصورت فیلم باشه خوبه
    با احترام

    • با درود فراوان
      یک راه برای اینکه بتوانید از طریق اینترنت و شبکه کابلی آردوینو رو کنترل کنید استفاده از شیلد اترنت است. ولی اگر بخواهید از طریق سنسور های مختلف ( دما و رطوبت و سنسور گاز و …) آردوینو را کنترل کنید نیازی به استفاده از شیلد اترنت ندارید. البته میتوانید بصورت ترکیبی از هر ۲ طریق رله ها رو کنترل کنید.
      برای راه اندازی ماجول دما/رطوبت و ماجول تشخیص گاز در سایت آموزشهای خوبی موجود است و میتوانید از آنها استفاده کنید. شما میتوانید با چک شرایط مختلف و شرط گذاری در برنامه برای حالتهای مختلف رله ها را خاموش و روشن کنید و از طریق رله ها نیز دستگاههای مرتبط مانند فن و هیتر و رطوبت ساز رو فعال و غیر فعال کنید.
      سپاس

  • سلام
    در متن اشاره فرمودید که با IP استاتیک می توانید از هرجایی از طریق اینترنت کنترل کنیم. با دینامیک IP که در دسترس همگان هست چگونه می تونیم این کار را انجام دهیم لطفا راهنمایی بفرمایید.

      • با سلام و عرض ادب و احترام
        در مورد پروژه کنترل ۴ وسیله برقی با شیلد اترنت W5100 آردوینو با خط فرمان ویندوز
        همیشه یاد بگیریم کلمه تالیف یا توسط یا امثال این را در صورتی بگذاریم که ۱۰۰ درصد از پروژه یا تالیف را خود انجام داده ایم و اگر بخشی از تالیف یا پروژه ( بهتره بگم ۷۰ درصد از تالیف ) از سورس و نویسنده دیگری است حتما و حتما اشاره به منبع اصلی جهت احترام به نویسنده و قوانین تالیف داشته باشیم .
        در مورد این پروژه بهتر بود از یکی از دوستانم جناب آقای رویی سانتوس که بخش اعظم سورس را برای کنترل موتور سروو در ۷ سال پیش ارایه داده نامی برده شود .
        یامان باشه کپی و پاست کردن هم قانون خودش را داره .
        با سپاس

        • با سلام و تشکر از شما
          بنده متوجه نشدم دقیقا منظورتان چیست؟ به هر حال از درسی که به بنده دادید سپاسگزارم. ما در جایی ادعا نکرده‌ایم که این محتوا ۱۰۰ درصد توسط ما ایجاد شده است. به هر حال جنابعالی بخش‌هایی از محتوا و زحماتی که برای آن کشیده شده است را نادیده می‌گیرید. از دوستتون آقای سانتوس هم تشکر کنید که آموزش منتشر میکنند.

      • سلام من این برناگه رو اجرا کردم و خیلی عالی کار کرد از همه چیزش اصی بودم و کمی هم خودم داخلش تعغیرات دادم ok بود حالا میخوام از دور کنترل کنم که اون هم مشکلی نیست فقط میخوام وقتی ای پی زده میشه یه امنیتی داشته باشه چون تو بستر اینترنت هست نمیخوام که هر کی ای پی رو زد یا علی ب ه داخل یه پسوردی چیزی حداقل ازم بخواد تا بشه ازش تو بستر اینترنت استفاده کرد ایا شدنی هست این موضوع