dominoFiber     domiRobot     Forum


Projeler - Arduino ve PHP İle Röle Kontrol

Arduino ve PHP İle Röle Kontrol
Arduino 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

<a href="http://www.youtube.com/watch?v=iVCOeQkqvHo" target="_blank">http://www.youtube.com/watch?v=iVCOeQkqvHo</a>
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ı
Kod: [Seç]
<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ı
Kod: [Seç]
#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.

Arduino nano satın al

  • Arduino nano satın alArduino nano satın alArduino nano satın al