Projeler - Arduino ve PHP İle Röle Kontrol
Arduino ve PHP İle Röle KontrolArduino nano röle kontrol kartı ile bluetooth üzerinden 8 adet röleyi kontrol etme kartı yapmıştık. Bu projemizde aynı kontrol kartı ile localhost üzerinden php ve arduino ile 8 adet röleyi açıp kapatmayı öğreneceğiz. Ugulama ethernet shield gerektirmez. Rölelerimizi php formatında hazırlayacağımız bir web sayfası üzerinden kontrol edeceğiz. php sayfalar bir web sunucusu üzerinden çalıştığından eğer ki bilgisayarımızda localhost kurulu değilse sayfayı görüntelememiz mümkün olmaz. Bu nedenle bilgisayartınızda localhost kurulu değilse öncelikle localhostu kurmanız gerekmektedir. Bu uygulamada localhost olarak xampp kurduk. xampp yerine wampserver, easyphp gibi alternatif localhost arayüzlerini kurabilirsiniz. xampp download linki download listesinde mevcuttur. AmaçLocalhost üzerinden 8 adet röleyi kontrol etme becerisi kazanmak. Seviyeİleri seviye Video 1: Arduino ve PHP ile Röle Kontrol Fotoğraf 1: Arduino ve PHP ile Röle Kontrol Fotoğraf 2: Devre malzemeleri Fotoğraf 3: Montaja hazır baskı devre Fotoğraf 4: Montaja hazır baskı devre Şema 1: ARES simüle yerleşim planı Şema 2: ARES baskı devre Şema 3: ISIS devre şeması Resim 1: Kullanıcı arayüzü PHP dosyası kodları<head> <meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" /> <style type="text/css">
body { background: #FFF; }
a { link, a:visited color: #232323; text-decoration: none; }
</style>
</head> <?php function openSerial($command) { $openSerialOK = false; try { exec("mode com6: BAUD=9600 PARITY=n DATA=8 STOP=1 to=off dtr=off rts=off"); $fp =fopen("com6", "w"); //$fp = fopen('/dev/ttyUSB0','r+'); //use this for Linux $openSerialOK = true; } catch(Exception $e) { echo 'Message: ' .$e->getMessage(); }
if($openSerialOK) { fwrite($fp, $command); //write string to serial fclose($fp); } }
openSerial("Without this line, the first control will not work. I don't know way.");
if(isset($_POST['submit1'])) { openSerial("@00 on 1\r"); }
if(isset($_POST['submit2'])) { openSerial("@00 of 1\r"); }
if(isset($_POST['submit3'])) { openSerial("@00 on 2\r"); }
if(isset($_POST['submit4'])) { openSerial("@00 of 2\r"); } if(isset($_POST['submit5'])) { openSerial("@00 on 3\r"); } if(isset($_POST['submit6'])) { openSerial("@00 of 3\r"); } if(isset($_POST['submit7'])) { openSerial("@00 on 4\r"); } if(isset($_POST['submit8'])) { openSerial("@00 of 4\r"); } if(isset($_POST['submit9'])) { openSerial("@00 on 5\r"); } if(isset($_POST['submit10'])) { openSerial("@00 of 5\r"); } if(isset($_POST['submit11'])) { openSerial("@00 on 6\r"); } if(isset($_POST['submit12'])) { openSerial("@00 of 6\r"); } if(isset($_POST['submit13'])) { openSerial("@00 on 7\r"); } if(isset($_POST['submit14'])) { openSerial("@00 of 7\r"); } if(isset($_POST['submit15'])) { openSerial("@00 on 8\r"); } if(isset($_POST['submit16'])) { openSerial("@00 of 8\r"); }
?> <center> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <input type="submit" name="submit1" value="RELAY 1 ON"> <input type="submit" name="submit2" value="RELAY 1 OFF""><br> <input type="submit" name="submit3" value="RELAY 2 ON""> <input type="submit" name="submit4" value="RELAY 2 OFF"><br> <input type="submit" name="submit5" value="RELAY 3 ON""> <input type="submit" name="submit6" value="RELAY 3 OFF"><br> <input type="submit" name="submit7" value="RELAY 4 ON""> <input type="submit" name="submit8" value="RELAY 4 OFF"><br> <input type="submit" name="submit9" value="RELAY 5 ON""> <input type="submit" name="submit10" value="RELAY 5 OFF"><br> <input type="submit" name="submit11" value="RELAY 6 ON""> <input type="submit" name="submit12" value="RELAY 6 OFF"><br> <input type="submit" name="submit13" value="RELAY 7 ON""> <input type="submit" name="submit14" value="RELAY 7 OFF"><br> <input type="submit" name="submit15" value="RELAY 8 ON""> <input type="submit" name="submit16" value="RELAY 8 OFF"><br> </form> <p> <a target="_blank" href="http://temrinlerim.org"> <img border="0" src="http://www.domirobot.com/img/logo.jpg" width="100" height="33"></a><b><br> php ile röle kontrol<br> OCAK 2017<br> All Rights Reserved @ Tüm Hakları Saklıdır. </b><br> <a href="http://www.domirobot.com/">domiRobot</a><br> <br> </p> </center> PHP ile röle kontrol devresi arduino kodları#include <string.h> #include <ctype.h> #include <EEPROM.h> void readdips(void); void writedops(void); void printaddr(char x); void setbaud(char Mybaud); #define ANIN1 6 #define ANIN2 7 #define ANIN3 0 int Analogs[3] = {ANIN1, ANIN2, ANIN3}; #define REL1 5 #define REL2 4 #define REL3 2 #define REL4 7 #define REL5 8 #define REL6 9 #define REL7 10 #define REL8 12 int Relays[8] = {REL1, REL2, REL3, REL4, REL5, REL6, REL7, REL8}; int PWMAble[4] = {2, 4, 5, 8}; #define OI1 15 #define OI2 16 #define OI3 17 #define OI4 18 int Optos[4] = {OI1, OI2, OI3, OI4}; #define TXEN 19 char i = 0, Rxchar, Rxenable, Rxptr, Cmdcomplete, R; char Rxbuf[15]; char adrbuf[3], cmdbuf[3], valbuf[12]; char rxaddress, Unitaddress, Unitbaud; char Dip[5], Dop[9]; char Hold, Mask, Analog =1, Imax; int val = 0, Param; int anreadings[3]; char x; int N, outval; unsigned long RelayStartTime[8], WatchdogStartTime; unsigned char RelayOnTime[8], WatchdogOnTime; void setup() { for (i=0;i<8;i++) { pinMode(Relays[i], OUTPUT); } for (i=0;i<4;i++) { pinMode(Optos[i], INPUT); } pinMode(TXEN, OUTPUT); Unitaddress = EEPROM.read(0); if ((Unitaddress > 99) || (Unitaddress < 0)) { Unitaddress = 0; } Unitbaud = EEPROM.read(1); setbaud(Unitbaud); UCSR0A=UCSR0A |(1 << TXC0); digitalWrite(TXEN, HIGH); delay(1); Serial.println("Ocean Controls"); Serial.println("KTA-223 v3.3"); while (!(UCSR0A & (1 << TXC0))); digitalWrite(TXEN,LOW); } void loop() { if (Serial.available() > 0) { Rxchar = Serial.read();
if (Rxchar == '@') { if (Cmdcomplete != 1) { Rxenable = 1; Rxptr = 1; } } if (Rxenable == 1) { if ((Rxchar != 32) && (Rxchar != '@')) { Rxbuf[Rxptr] = Rxchar; Rxptr++; if (Rxptr > 13) { Rxenable = 0; } } if (Rxchar == 13) { Rxenable = 0; Cmdcomplete = 1; } } } if (Cmdcomplete == 1) { adrbuf[0] = Rxbuf[1]; adrbuf[1] = Rxbuf[2]; adrbuf[2] = 0; rxaddress = atoi(adrbuf); cmdbuf[0] = toupper(Rxbuf[3]); cmdbuf[1] = toupper(Rxbuf[4]); cmdbuf[2] = 0; valbuf[0] = Rxbuf[5]; R = Rxptr - 1; for (i = 6 ; i <= R ; i++) { valbuf[i-5] = Rxbuf[i]; } valbuf[R+1] = 0; Param = atoi(valbuf); if ((rxaddress == Unitaddress) || (rxaddress == 0)) { if (strcmp(cmdbuf,"ON")==0) { if ((Param <= 8) && (Param >= 0)) { if (Param == 0) { for (i = 1 ; i<=8 ; i++) { Dop[i-1] = 1; RelayOnTime[i-1]= 0; } } else { Dop[Param-1] = 1; RelayOnTime[Param-1]= 0; } writedops(); printaddr(1); } } if (strcmp(cmdbuf,"OF")==0) { if ((Param <= 8) && (Param >= 0)) { if (Param == 0) { for (i = 1 ; i<=8 ; i++) { Dop[i-1] = 0; } } else { Dop[Param-1] = 0; } writedops(); printaddr(1); } } if (strcmp(cmdbuf,"TR")==0) { x = Param / 1000; outval = Param % 1000; if (outval>=1 && outval <=255) { RelayStartTime[x-1] = millis(); RelayOnTime[x-1] = outval; Dop[x-1]=1; writedops(); printaddr(1); } } if (strcmp(cmdbuf,"KA")==0) { if (Param>=0 && Param <=255) { WatchdogStartTime = millis(); WatchdogOnTime = Param; printaddr(1); } } if (strcmp(cmdbuf,"WR")==0) { if ((Param <= 255) && (Param >= 0)) { for (i=0 ; i<8 ; i++) { Mask = 1<<i; Hold = Param & Mask; if (Hold == Mask) { Dop[i] = 1; RelayOnTime[i]= 0; } else { Dop[i] = 0; } } } else writedops(); printaddr(1); } if (strcmp(cmdbuf,"RS")==0) { if ((Param > 0) && (Param <= 8)) { printaddr(2); Serial.println(Dop[Param-1], DEC); } else if (Param == 0) { N = 0; for (i=0 ; i<8 ; i++) { if(Dop[i] == 1) { N = N|(1<<i); } } printaddr(2); Serial.println(N, DEC); } } if (strcmp(cmdbuf,"IS")==0) { readdips(); if ((Param > 0) && (Param <= 4)) { printaddr(2); Serial.println(Dip[Param-1], DEC); } else if (Param == 0) { N = 0; if (Analog == 1) { Imax = 3; } else { Imax = 8; }
for (i=0 ; i<=Imax ; i++) { if (Dip[i] == 1) { N = N|(1<<i); } } printaddr(2); Serial.println(N,DEC); } } if (strcmp(cmdbuf,"AI")==0) { if (Analog == 1) { if ((Param >= 0) && (Param <= 3)) { for (i=0 ; i<3 ; i++) { anreadings[i] = analogRead(Analogs[i]); } printaddr(2); if (Param == 0) { Serial.print(anreadings[0], DEC); Serial.print(" "); Serial.print(anreadings[1], DEC); Serial.print(" "); Serial.println(anreadings[2], DEC); } else { Serial.println(anreadings[Param-1], DEC); } } } else { } } if (strcmp(cmdbuf,"SS")==0) { if (Param == 0) { N = 0; for (i=0 ; i<8 ; i++) { if(Dop[i] == 1) { N = N|(1<<i); } } printaddr(2); Serial.print(N, DEC); Serial.print(" "); readdips(); N = 0; if (Analog == 1) { Imax = 3; } else { Imax = 8; } for (i=0 ; i<=Imax ; i++) { if (Dip[i] == 1) { N = N|(1<<i); } } Serial.print(N,DEC); Serial.print(" "); if (Analog == 1) { for (i=0 ; i<3 ; i++) { anreadings[i] = analogRead(Analogs[i]); } Serial.print(anreadings[0], DEC); Serial.print(" "); Serial.print(anreadings[1], DEC); Serial.print(" "); Serial.println(anreadings[2], DEC); } } } if (strcmp(cmdbuf,"SA")==0) { if ((Param >= 0) && (Param <= 99)) { Unitaddress = Param; EEPROM.write(0, Unitaddress); printaddr(1); } } if (strcmp(cmdbuf,"SB")==0) { if ((Param > 0) && (Param <= 10)) { Unitbaud = Param; EEPROM.write(1, Unitbaud); setbaud(Unitbaud); printaddr(1); } } } Cmdcomplete = 0; } while (!(UCSR0A & (1 << TXC0))); digitalWrite(TXEN,LOW); checkTime(); } void checkTime(void) { unsigned long currentTime = millis(); for (i=0 ; i<8 ; i++) { if (RelayOnTime[i] != 0) { if (currentTime - RelayStartTime[i] >= (unsigned long)(RelayOnTime[i]) * 100) { RelayOnTime[i]= 0; Dop[i]= 0; } } } if (WatchdogOnTime != 0) { if (currentTime - WatchdogStartTime >= (unsigned long)(WatchdogOnTime) * 1000) { for (i=0 ; i<8 ; i++) { Dop[i] = 0; } writedops(); WatchdogStartTime = currentTime; } } }
void readdips(void) { for (i=0 ; i<4 ; i++) { if (digitalRead(Optos[i])==LOW) { Dip[i] = 1; } else { Dip[i] = 0; } } }
void writedops(void) { for (i=0 ; i<8 ; i++) { if (Dop[i]==1) { digitalWrite(Relays[i],HIGH); } else { digitalWrite(Relays[i],LOW); } } } void printaddr(char x) { UCSR0A=UCSR0A |(1 << TXC0); digitalWrite(TXEN, HIGH); delay(1); if (Unitaddress < 10) { Serial.print("#0"); Serial.print(Unitaddress, DEC); } else { Serial.print("#"); Serial.print(Unitaddress, DEC); } switch(x) { case 1: Serial.println(); break; case 2: Serial.print(" "); break; } }
void setbaud(char Mybaud) { switch (Mybaud) { case 1 : Serial.begin(1200); break; case 2 : Serial.begin(2400); break; case 3 : Serial.begin(4800); break; case 4 : Serial.begin(9600); break; case 5 : Serial.begin(14400); break; case 6 : Serial.begin(19200); break; case 7 : Serial.begin(28800); break; case 8 : Serial.begin(38400); break; case 9 : Serial.begin(57600); break; case 10 : Serial.begin(115200); break; default: Serial.begin(9600); break; } } PHP dosyasının hazırlanmasıSayfamız için gerekli php kodlarını bir metin editörüne yapıştırıp, phpArduino.php isminde kaydediyoruz. Daha sonra bu dosyayı localhostumuza atacağız. Bu dosya C:\xampp\ dizininde bulunan htdocs isimli klasörün içine atılır. Dosyayı kendisi oluşturmak istemeyenler phpArduino.php isimli oluşturulmuş hazır dosyayı download listesinden indirebilir. İşlem basamakları- Şema 1, şema 2 ve şema3'den faydalanarak baskı devre montajını tamamlayınız.
- Arduino kodunu yükleyiniz.
- PHP sayfasını oluşturup ilgili dizine atınız.
- Localhostu açınız.
- Devreye 13 - 24V DC besleme gerilimi uygulayınız.
- İnternet tarayıcımızın adres çubuğuna http://localhost/phpArduino.php adresini yazıp enterlediğimizde kullanıcı arayüzüne ulaşıyor ve röleleri video 1'de görüldüğü gibi açıp kapatınız.
Malzeme listesi Olası problemler ve çözüm yollarıPHP sayfasının işlev görmemesi durumunda phpArduino.php isimli dosyayı not defteri ya da notepad++ gibi bir metin düzenleyci ile açıp dosyada com6 diye arama yapınız. 2 yerde geçmektedir. Bu port numarasını arduinonuzla iletişim sağlayan port numarası ile değiştirip dosyayı kaydedin ve tekrar deneyiniz. Downloadİhtiyaç duyulması halinde projeye ait dosyalara buraya tıklayıp ulaşabilirsiniz.
|