NodeMcu ve Arduino ile akim sensörü ve role kontrol etmek

ogi48

Üye
Katılım
1 Haziran 2023
Mesajlar
11
Akıllı 3’lü priz yapacağım. 3’lü prizimde faz bağlantılarını keserek her prizi bağımsız hale getirdim. 3 adet akım sensörü ile prizlere gelen akımları ölçüyorum. Bu akım değerlerini arduino ile okuyup,Nodemcu’ya aktardıktan sonra wifi üzerinden web sitesine göndereceğim. Web sitesinden örneğin priz 1’i açıp kapatarak akımı keseceğim. Projem bu şekilde. Nodemcu da analog pin 1 adet olduğu için arduino kullanarak nodemcu’ya akım verilerini göndermeyi başardım. Burda şöyle bir sorunla karşılaştım. Wifi bağlantısı kodunu da ekleyince Nodemcu arduino’dan aldığı verileri yazdırmıyor seri monitöre. Dün sadece Nodemcu ile röleleri açıp kapatmayı denedim. İnternetten bir proje buldum onun benzerini yapmaya uğraştım ancak nodemcu’nun ışığı yanıp sönüyor roleler açılıp kapanmıyor. Akım sensorunden aldığım verileri nodemcuya aktarıp daha sonrasında ise verileri wifi üzerinden Web sitesine aktararak. Butonlara bastığımda ise roleleri açıp kapatan bir kod yazmaya çalışıyorum. Yardımcı olabilir misiniz?
 
Röle açıp kapatmak için analog pine ihtiyacın yok ki. Dijital pin kullanabilirsin. Arduinoya da gerek yok. Direk nodemcu kullanabilirsin.

Biraz detay ver. Kullandığın şemayı paylaş, kodları paylaş. Röle modül mü yoksa tek başına bir Röle mi? Resim filan ekle yorumlayalım. Orada ne yaptığını bilmeden buradan yönlendirmek zor.
 
Projem fotoğrafta görüldüğü şekilde. Prize cihaz takıldığında akım sensorlerinjn olctugu veri neticesinde web sitesinde örneğin fon makinesi takılı yazacak diğer prizde şarj aleti gibi. Sonra web sitesindeki butona bastığımda fon makinesinin elektriği kesilecek ve çalışmayacak projenin mantığı bu. 3 adet acs712 akım sensörü ve 3 adet 20A role kartı var elimde.
 

Ekler

  • 16856344244648597700042289429654.jpg
    16856344244648597700042289429654.jpg
    469.6 KB · Görüntüleme: 86
Arduino kodunu bu şekilde yazdım burda Arduino_SoftSerial.print ile verileri Nodemcu'ya göndermeye çalıştım.

C++:
#include <SoftwareSerial.h>

SoftwareSerial Arduino_SoftSerial  (5,6); //RX, TX

void setup(){

  Serial.begin(115200);

  Arduino_SoftSerial.begin(9600);

}

void loop(){

  int adc = analogRead(A0);

  int adc1 = analogRead(A1);

  int adc2 = analogRead(A2);

  float voltage = adc * 5/1023.0;

  float current = (voltage - 2.5)/0.66;

  float voltage1 = adc1 * 5/1023.0;

  float current1 = (voltage1 - 2.5)/0.66;

  float voltage2 = adc2 * 5/1023.0;

  float current2 = (voltage2 - 2.5)/0.66;

  Arduino_SoftSerial.print("Sensör1 : ");

  Arduino_SoftSerial.print(current);

  Arduino_SoftSerial.print("\n");

  Arduino_SoftSerial.print("Sensör2 : ");

  Arduino_SoftSerial.print(current1);

  Arduino_SoftSerial.print("\n");

  Arduino_SoftSerial.print("Sensör3 : ");

  Arduino_SoftSerial.print(current2);

  Arduino_SoftSerial.print("\n");

  Serial.println(current);

  Serial.println(current1);

  Serial.println(current2);

  delay(5000);

}
 
Last edited by a moderator:
Burda da NodeMcu ile Arduino'dan gelen akım verileri yazdırıyorum. Wifi ve server kodu da yazmıştım ancak wifi'a bağlandığında verileri çekemediği için sildim.

1685635690209.png
 
Aşağıdaki kodların içinden wifi ye, web'e bağlantı kodlarını alıp kendi projene oturt.
Bunlar daha önce denenmiş kodlar. Bazı kütüphaneleri de indirmen gerekebilir.

C++:
// Sercan & Gökhan
// https://mekatronik.org/forum

#include <ESP8266WiFi.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266HTTPClient.h>
#include "Wire.h"
#include "I2CKeyPad.h"

// WiFi ayarları
    const char* WiFi_Adi="TPLINK_WIFI";
    const char* WiFi_Sifre = "password";
// Verinin gönderileceği SSL URL adresi
    String url_ekle = "http://webadresi.com/int/keypad.php?siparis=";
    String url_sil = "http://webadresi.com/int/keypad.php?id=";
// true seri port ile heberleşir, false kapatır.
    bool konsol = false;
// LCD ekran bilgileri
    LiquidCrystal_I2C lcd(0x27,16,2);
    const uint8_t KEYPAD_ADDRESS = 0x20;
    I2CKeyPad keyPad;
    int ToplamSayi = 0;
    int NoktaSay = 0;
  
void setup()
{
  pinMode(D0, OUTPUT);
  pinMode(D8, OUTPUT);
  digitalWrite(D8, LOW);
  digitalWrite(D0, HIGH);
  delay(300);
  Serial.begin(115200);
  Wire.begin();
  if (keyPad.begin(KEYPAD_ADDRESS) == false)
  {
    Serial.println("\nERROR: cannot communicate to keypad.\nPlease reboot.\n");
    while(1);
  }
  if (konsol) {
        Serial.begin(115200);
        delay(500);
        Serial.println(F("Tusla Gelsin v1"));
    }
    lcd.init();
    lcd.backlight();
    lcd.setCursor(0,0);
    lcd.print("Tusla Gelsin v1");
    WiFi.mode(WIFI_STA);
    WiFi.begin(WiFi_Adi,WiFi_Sifre);
    lcd.setCursor(0,1);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        if (konsol) {
            Serial.print(".");
        }
        if (NoktaSay++ < 20) {
            lcd.print(".");
        } else {
            SatirTemizle(1);
            NoktaSay = 0;
        }
    }
    //if (konsol) {
        SatirTemizle(0);
        lcd.setCursor(0,0);
        lcd.print("WiFi'ya baglandi");
        SatirTemizle(1);
        lcd.setCursor(0,1);
        lcd.print("IP:");
        lcd.setCursor(4,1);
        lcd.print(WiFi.localIP());
        digitalWrite(D8, HIGH);
        delay(5000);
    //}
    SatirTemizle(0);
    lcd.setCursor(0,0);
    lcd.print("Tusla Gelsin v1");
    SatirTemizle(1);
    lcd.setCursor(0,1);
    lcd.print("Urun No Giriniz");
}

void loop()
{
    uint8_t idxx = keyPad.getKey();
    char idx = "D#0*C987B654A321"[idxx];

    if ( isdigit(idx) ) {
        uint8_t sayi = idx - '0';
        ToplamSayi = ((ToplamSayi * 10) + sayi);
        if (konsol) {
            Serial.print( "Tuslanan Sayi:" );
            Serial.println(ToplamSayi);
        }
        SatirTemizle(1);
        lcd.print(ToplamSayi);
    } else if ( idx == '#' ) {
// # tuşu enter gibi davranır
        SatirTemizle(1);
        lcd.print("Urun Ekleniyor.");
        if (konsol) {
            Serial.print(ToplamSayi);
            Serial.println( " Urun Eklendi.\n" );
        }
        int urlEk = ToplamSayi;
        String TamUrl = url_ekle + urlEk;
        SiparisVer(TamUrl, urlEk);
        ToplamSayi = 0;
    } else if ( idx == '*' ) {
// * tuşu yanlış girişi sıfırlar....
        ToplamSayi = 0;
        if (konsol) {
            Serial.print("ToplamSayi ");
            Serial.print(ToplamSayi);
            Serial.println(" sıfırlandı.\n");
        }
        SatirTemizle(1);
        lcd.print("Sayi Silindi...");
        delay(4000);     
        SatirTemizle(1);
        lcd.print("Urun No Giriniz");
    } else if ( idx == 'A' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("A tuşuna basıldı");
            }
        SatirTemizle(1);
        lcd.print("A");
    } else if ( idx == 'B' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("B tuşuna basıldı");
            }
        SatirTemizle(1);
        lcd.print("B");
    } else if ( idx == 'C' ) {
// C Tuşu NodeMCU ya Reset Atar!
        digitalWrite(D0, LOW);
    } else if ( idx == 'D' ) {
// D Tuşu numarası girilen ürünü siler!
        SatirTemizle(1);
        lcd.print("Urun Ekleniyor.");
        if (konsol) {
            Serial.print(ToplamSayi);
            Serial.println( " Urun Eklendi.\n" );
        }
        int urlEk = ToplamSayi;
        String TamUrl = url_sil + urlEk;
        SiparisSil(TamUrl, urlEk);
        ToplamSayi = 0;
    }
    delay(300);
}

void SiparisVer(String TamUrl, int urlEk) {
// Sipariş Verme Fonksiyonu
    SatirTemizle(0);
    lcd.setCursor(0,0);
    lcd.print("Tusla Gelsin v1");
    SatirTemizle(1);
    lcd.setCursor(0,1);
    lcd.print("Baglaniyor...");
    delay(4000);
//TCP bağlantıları oluşturmak için HTTPClient sınıfını kullanın
    HTTPClient http;
    http.begin(TamUrl);
      SatirTemizle(0);
      SatirTemizle(1);
      lcd.setCursor(0,0);
      lcd.print("Baglandi...");
      lcd.setCursor(0,1);
      lcd.print("Urun Ekleniyor..");
      delay(4000);
    int httpCode = http.GET();
    if (httpCode > 0) {
      String payload = http.getString();
      Serial.print("Gönderilen Url: ");
      Serial.println(TamUrl);
      Serial.print("Sayfa yanıtı:");
      Serial.println(payload);
    if(payload == "0"){
        SatirTemizle(0);
        lcd.setCursor(0,0);
        lcd.print("Urun Eklendi");
        SatirTemizle(1);
        lcd.setCursor(0,1);
        lcd.print("Yeni Urun Girinz");
     }else if(payload == "1"){
        SatirTemizle(0);
        lcd.setCursor(0,0);
        lcd.print("Urun Zaten Var");
        SatirTemizle(1);
        lcd.setCursor(0,1);
        lcd.print("Yeni Urun Girinz");
     }else if(payload == "2"){
        lcd.setCursor(0,0);
        lcd.print("Hatali Numara");
        SatirTemizle(1);
        lcd.setCursor(0,1);
        lcd.print("Yeniden Deneyin.");
     }else{
        SatirTemizle(1);
        lcd.setCursor(0,1);
        lcd.print("Baglanti Hatasi.");
        digitalWrite(D0, LOW);
     }
  }
    http.end();
    delay(2000); // 2 saniyede bir işlemi tekrarlayacak
}


void SiparisSil(String TamUrl, int urlEk) {
// Sipariş Silme Fonksiyonu
    SatirTemizle(0);
    lcd.setCursor(0,0);
    lcd.print("Tusla Gelsin v1");
    SatirTemizle(1);
    lcd.setCursor(0,1);
    lcd.print("Baglaniyor...");
    delay(5000);
//TCP bağlantıları oluşturmak için HTTPClient sınıfını kullanın
    HTTPClient http;
    http.begin(TamUrl);
      SatirTemizle(0);
      SatirTemizle(1);
      lcd.setCursor(0,0);
      lcd.print("Baglandi...");
      lcd.setCursor(0,1);
      lcd.print("Urun Siliniyor..");
      delay(4000);
    int httpCode = http.GET();
    if (httpCode > 0) {
      String payload = http.getString();
      Serial.print("Gönderilen Url: ");
      Serial.println(TamUrl);
      Serial.print("Sayfa yanıtı:");
      Serial.println(payload);
    if(payload == "0"){
        SatirTemizle(0);
        lcd.setCursor(0,0);
        lcd.print("Urun Silindi");
        SatirTemizle(1);
        lcd.setCursor(0,1);
        lcd.print("Yeni Urun Girinz");
     }else if(payload == "1"){
        SatirTemizle(0);
        lcd.setCursor(0,0);
        lcd.print("Urun Bulunamadi");
        SatirTemizle(1);
        lcd.setCursor(0,1);
        lcd.print("Yeni Urun Girinz");
       }else if(payload == "2"){
        lcd.setCursor(0,0);
        lcd.print("Hatali Numara");
        SatirTemizle(1);
        lcd.setCursor(0,1);
        lcd.print("Yeniden Deneyin.");
     }else{
        SatirTemizle(1);
        lcd.setCursor(0,1);
        lcd.print("Baglanti Hatasi.");
        digitalWrite(D0, LOW);
     }
  }
    http.end();
    delay(2000); // 2 saniyede bir işlemi tekrarlayacak
}

void SatirTemizle(int satir) {
    lcd.setCursor(0,satir);
    lcd.print("                ");
    lcd.setCursor(0,satir);
}
 
Ayrıca sanırım 3 tane analog pine ihtiyacın olduğu için arduino kullanıyorsun. Eğer rölelerin çift bacaklı ise sadece bir tane acs712 kullanrak Nodemcu daki tek analog pini kullanabilirsin. Tek yapman gereken hangi röle aktifse o rölenin ikinci bacağından sinyali acs712 ye göndermek.
 
Ayrıca sanırım 3 tane analog pine ihtiyacın olduğu için arduino kullanıyorsun. Eğer rölelerin çift bacaklı ise sadece bir tane acs712 kullanrak Nodemcu daki tek analog pini kullanabilirsin. Tek yapman gereken hangi röle aktifse o rölenin ikinci bacağından sinyali acs712 ye göndermek.
Rolelerde in, gnd ve vcc bacakları var. Yüksek gerilim tarafında NC'da bağlı. Aslında IP adresi üreten ve wifi ağına bağlanan bir kod ile kendi kodumu entegre etmiştim ancak ilk kodu yüklediğim durumda wifi ağına bağlanıyor. IP gönderiyor. Sonra verileri çekmeye devam ediyor. Bilgisayarın soketinden çıkarıp tekrar taktığımda verileri almayı kesiyor. Anladığım kadarıyla wifi ağına bağlı olduğu için tekrar çalışmıyor diye düşündüm. Şuan nodemcu yanmış durumda olduğu için deneyemiyorum bu yüzden gösteremiyorum. Yarın elime ulaşacaktır. Yarın deneyip sizinle tekrardan paylaşacağım. Yeni düzenleyeceğim kodu da deneyebilirsem paylaşacağım.
 
Aslında unonun esp32 entegreli versiyonu var. Direk onu alsan çok daha rahat edersin.
 
Şuan elime Nodemcu'lar ulaştı. Şipariş verdiğim için değiştiremedim bir de projem için az bir süre kaldı. İnternette bulduğum kod ile sadece role kartlarını kontrol etmek istedim ancak onda da wifi ağına bağlanıyorum. Server çalışıyor ama roleler tetiklenmiyor. 3 adet role kartımdan ikisinin YG tarafını NO, diğerini NC yaptım. AG tarfında ise Vcc ve gndleri ortak bağladım. In'i ise kodda belirttiğim gibi D0,D1,D2 pinlerine bağladım.

#include <ESP8266WiFi.h> // ESP8266 kütüphanesi dahil ediliyor
const char* ssid = "Oguzhan 2.4"; // İnternet Ağının ismi
const char* password = "****"; // internet ağının şifresi
int RolePin1 = D0; // D0 pini RolePin1 ile eşleştiriliyor
int RolePin2 = D1; // D1 pini RolePin2 ile eşleştiriliyor
int RolePin3 = D2; // D2 pini RolePin3 ile eşleştiriliyor

int RoleDeger1= LOW; // 1.Rölenin durumu lojik-0 yapılıyor
int RoleDeger2= LOW; // 2.Rölenin durumu lojik-0 yapılıyor
int RoleDeger3= LOW; // 3.Rölenin durumu lojik-0 yapılıyor
WiFiServer server(80); // WiFi ağına 80. porttan bağlınılıyor
void setup() {
Serial.begin(115200); //Seri iletişim başlatılıyor ve Baundrate hızı : 115200
delay(10); // 10 ms bekleme
pinMode(RolePin1, OUTPUT); // D0 pini çıkış olarak ayarlanıyor
pinMode(RolePin2, OUTPUT); // D1 pini çıkış olarak ayarlanıyor
pinMode(RolePin3, OUTPUT); // D2 pini çıkış olarak ayarlanıyor
digitalWrite(RolePin1, LOW); // D0 pini lojik-0 olarak ayarlanıyor
digitalWrite(RolePin2, LOW); // D1 pini lojik-0 olarak ayarlanıyor
digitalWrite(RolePin3, LOW); // D2 pini lojik-0 olarak ayarlanıyor
// WiFi ağına bağlanma bölümü
Serial.println();
Serial.println();
Serial.print("Baglanilan ag :");
Serial.println(ssid);
WiFi.begin(ssid, password); // Bağlanılan Ağın adı ve şifresi girilen internet ağına bağlanılıp ardından WiFi başlatılıyor
while (WiFi.status() != WL_CONNECTED) { // Ağa bağlanılıncaya kadar "." gönderilir
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi baglanildi…");
//Server başlatılıyor
server.begin();
Serial.println("Server baslatildi….");
// NodeMCU ait IP adresi alınıyor
Serial.print("Baglanmak icin kullanilacak IP : ");
Serial.print("http://");
Serial.print(WiFi.localIP()); // Yerel ağ içerisindeki IP alınıyor
Serial.println("/");
}
void loop() {
//NodeMCu WiFi agina baglanilip baglanilmadagi kontrol ediliyor
WiFiClient client = server.available();
if (!client) {
return;
}
// NodeMCU veri gelnceye kadar bekleme bölümü
Serial.println("Yeni cihaz");
while(!client.available()){
delay(1);
}
// Url Adresin ilk satırının alındığı bölüm
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// 1.Rölenin ilk satırına göre açılma veya kapatılma bölümü
if (request.indexOf("/1.Role=ON") != -1) {
digitalWrite(RolePin1, HIGH);
RoleDeger1 = HIGH;
}
if (request.indexOf("/1.Role=OFF") != -1) {
digitalWrite(RolePin1, LOW);
RoleDeger1 = LOW;
}
// 2.Rölenin ilk satırına göre açılma veya kapatılma bölümü
if (request.indexOf("/2.Role=ON") != -1) {
digitalWrite(RolePin2, HIGH);
RoleDeger2 = HIGH;
}
if (request.indexOf("/2.Role=OFF") != -1) {
digitalWrite(RolePin2, LOW);
RoleDeger2 = LOW;
}
// 3.Rölenin ilk satırına göre açılma veya kapatılma bölümü
if (request.indexOf("/3.Role=ON") != -1) {
digitalWrite(RolePin3, HIGH);
RoleDeger3 = HIGH;
}
if (request.indexOf("/3.Role=OFF") != -1) {
digitalWrite(RolePin3, LOW);
RoleDeger3 = LOW;
}
// Node MCU yayımladığı Web sitesi
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<HEAD><TITLE>WI-FI Uygulamasi</TITLE>");
client.println("<BODY><H1>WI-FI ILE ROLE KONTROL PROJESINE HOSGELDINIZ</H1>");
// Web sayfasında 1.Röleye ait kontrol paneli
client.println("<fieldset>");
client.println("<legend>1.Role Kontrol</legend>");
client.print("1. Röle Durum :");
if(RoleDeger1 == HIGH) {
client.print("Acik");
} else {
client.print("Kapali");
}
client.println("<br><br>");
client.println("<a href=\"/1.Role=ON\"\"><button>Role Ac </button></a>");
client.println("<a href=\"/1.Role=OFF\"\"><button>Role Kapat</button></a><br />");
client.println("</fieldset>");
delay(25);
// Web sayfasında 2.Röleye ait kontrol paneli
client.println("<fieldset>");
client.println("<legend>2.Role Kontrol</legend>");
client.print("2. Role Durum : ");
if(RoleDeger2 == HIGH) {
client.print("Acık");
} else {
client.print("Kapali");
}
client.println("<br><br>");
client.println("<a href=\"/2.Role=ON\"\"><button>Role Ac </button></a>");
client.println("<a href=\"/2.Role=OFF\"\"><button>Role Kapat</button></a><br />");
client.println("</fieldset>");
delay(25);
// Web sayfasında 3.Röleye ait kontrol paneli
client.println("<fieldset>");
client.println("<legend>3.Role Kontrol</legend>");
client.print("3.Role Durum : ");
if(RoleDeger3 == HIGH) {
client.print("Acık");
} else {
client.print("Kapali");
}
client.println("<br><br>");
client.println("<a href=\"/3.Role=ON\"\"><button>Role Ac </button></a>");
client.println("<a href=\"/3.Role=OFF\"\"><button>Role Kapat </button></a><br />");
client.println("</fieldset>");
client.println("</BODY>");
client.println("</HEAD>");
client.println("</html>");
delay(100);
Serial.println("Client bağlantı kapatıldı");
Serial.println("");
}

Neden tetiklenmiyor olabilir sizce?
 
Program kodunu "kod" olarak eklersen okumak mümkün hale gelir. Şu anda okunup anlaşılması mümkün değil.

1685878988343.png
 
Nodemcu kaynaklı problem yaşamak istemiyorsanız esp32 karta geçin. Hem Arduino hem de Micropython ile kodlayabilirsiniz. ADC giriş ve pin sayısı olarak daha rahattır. Nodemcu ile kendinizi heder etmeyin.
 
Nodemcu role kontrolü:
#include <ESP8266WiFi.h> // ESP8266 kütüphanesi dahil ediliyor
const char* ssid = "Oguzhan 2.4"; // İnternet Ağının ismi
const char* password = "****"; // internet ağının şifresi
int RolePin1 = D0; // D0 pini RolePin1 ile eşleştiriliyor
int RolePin2 = D1; // D1 pini RolePin2 ile eşleştiriliyor
int RolePin3 = D2; // D2 pini RolePin3 ile eşleştiriliyor

int RoleDeger1= LOW; // 1.Rölenin durumu lojik-0 yapılıyor
int RoleDeger2= LOW; // 2.Rölenin durumu lojik-0 yapılıyor
int RoleDeger3= LOW; // 3.Rölenin durumu lojik-0 yapılıyor
WiFiServer server(80); // WiFi ağına 80. porttan bağlınılıyor
void setup() {
Serial.begin(115200); //Seri iletişim başlatılıyor ve Baundrate hızı : 115200
delay(10); // 10 ms bekleme
pinMode(RolePin1, OUTPUT); // D0 pini çıkış olarak ayarlanıyor
pinMode(RolePin2, OUTPUT); // D1 pini çıkış olarak ayarlanıyor
pinMode(RolePin3, OUTPUT); // D2 pini çıkış olarak ayarlanıyor
digitalWrite(RolePin1, LOW); // D0 pini lojik-0 olarak ayarlanıyor
digitalWrite(RolePin2, LOW); // D1 pini lojik-0 olarak ayarlanıyor
digitalWrite(RolePin3, LOW); // D2 pini lojik-0 olarak ayarlanıyor
// WiFi ağına bağlanma bölümü
Serial.println();
Serial.println();
Serial.print("Baglanilan ag :");
Serial.println(ssid);
WiFi.begin(ssid, password); // Bağlanılan Ağın adı ve şifresi girilen internet ağına bağlanılıp ardından WiFi başlatılıyor
while (WiFi.status() != WL_CONNECTED) { // Ağa bağlanılıncaya kadar "." gönderilir
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi baglanildi…");
//Server başlatılıyor
server.begin();
Serial.println("Server baslatildi….");
// NodeMCU ait IP adresi alınıyor
Serial.print("Baglanmak icin kullanilacak IP : ");
Serial.print("http://");
Serial.print(WiFi.localIP()); // Yerel ağ içerisindeki IP alınıyor
Serial.println("/");
}
void loop() {
//NodeMCu WiFi agina baglanilip baglanilmadagi kontrol ediliyor
WiFiClient client = server.available();
if (!client) {
return;
}
// NodeMCU veri gelnceye kadar bekleme bölümü
Serial.println("Yeni cihaz");
while(!client.available()){
delay(1);
}
// Url Adresin ilk satırının alındığı bölüm
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// 1.Rölenin ilk satırına göre açılma veya kapatılma bölümü
if (request.indexOf("/1.Role=ON") != -1) {
digitalWrite(RolePin1, HIGH);
RoleDeger1 = HIGH;
}
if (request.indexOf("/1.Role=OFF") != -1) {
digitalWrite(RolePin1, LOW);
RoleDeger1 = LOW;
}
// 2.Rölenin ilk satırına göre açılma veya kapatılma bölümü
if (request.indexOf("/2.Role=ON") != -1) {
digitalWrite(RolePin2, HIGH);
RoleDeger2 = HIGH;
}
if (request.indexOf("/2.Role=OFF") != -1) {
digitalWrite(RolePin2, LOW);
RoleDeger2 = LOW;
}
// 3.Rölenin ilk satırına göre açılma veya kapatılma bölümü
if (request.indexOf("/3.Role=ON") != -1) {
digitalWrite(RolePin3, HIGH);
RoleDeger3 = HIGH;
}
if (request.indexOf("/3.Role=OFF") != -1) {
digitalWrite(RolePin3, LOW);
RoleDeger3 = LOW;
}
// Node MCU yayımladığı Web sitesi
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<HEAD><TITLE>WI-FI Uygulamasi</TITLE>");
client.println("<BODY><H1>WI-FI ILE ROLE KONTROL PROJESINE HOSGELDINIZ</H1>");
// Web sayfasında 1.Röleye ait kontrol paneli
client.println("<fieldset>");
client.println("<legend>1.Role Kontrol</legend>");
client.print("1. Röle Durum :");
if(RoleDeger1 == HIGH) {
client.print("Acik");
} else {
client.print("Kapali");
}
client.println("<br><br>");
client.println("<a href=\"/1.Role=ON\"\"><button>Role Ac </button></a>");
client.println("<a href=\"/1.Role=OFF\"\"><button>Role Kapat</button></a><br />");
client.println("</fieldset>");
delay(25);
// Web sayfasında 2.Röleye ait kontrol paneli
client.println("<fieldset>");
client.println("<legend>2.Role Kontrol</legend>");
client.print("2. Role Durum : ");
if(RoleDeger2 == HIGH) {
client.print("Acık");
} else {
client.print("Kapali");
}
client.println("<br><br>");
client.println("<a href=\"/2.Role=ON\"\"><button>Role Ac </button></a>");
client.println("<a href=\"/2.Role=OFF\"\"><button>Role Kapat</button></a><br />");
client.println("</fieldset>");
delay(25);
// Web sayfasında 3.Röleye ait kontrol paneli
client.println("<fieldset>");
client.println("<legend>3.Role Kontrol</legend>");
client.print("3.Role Durum : ");
if(RoleDeger3 == HIGH) {
client.print("Acık");
} else {
client.print("Kapali");
}
client.println("<br><br>");
client.println("<a href=\"/3.Role=ON\"\"><button>Role Ac </button></a>");
client.println("<a href=\"/3.Role=OFF\"\"><button>Role Kapat </button></a><br />");
client.println("</fieldset>");
client.println("</BODY>");
client.println("</HEAD>");
client.println("</html>");
delay(100);
Serial.println("Client bağlantı kapatıldı");
Serial.println("");
}
 
Nodemcu kaynaklı problem yaşamak istemiyorsanız esp32 karta geçin. Hem Arduino hem de Micropython ile kodlayabilirsiniz. ADC giriş ve pin sayısı olarak daha rahattır. Nodemcu ile kendinizi heder etmeyin.
Yaklaşık 2 aydır uğraşıyorum. 2 kere nodemcu bozuldu. 2 kez de esp8266 aldım kullandım wifi'a bağlantı sorunu yaşadım. Satan şirketin teknik desteğiyle yaklaşık 1 hafta uğraştık wifi'a bağlanmak için. Şuan tekrar nodemcu'ya geçtim zamanım az kaldığı için bu şekilde bitirmeye çalışıyorum projeyi en azından web sitesine akım verilerini gönderen ve roleleri açıp katan bir devre çalışsa bana yeterli şuanda
 
Aslında Nodemcu'yu bilgisayarın portundan beslediğimde ve roleleri arduino üzerinden yine bilgisayar portundan beslediğimde sistem çalışıyor. Beslemem mi yetersiz geliyor acaba?
 
3 tane röle için nodemcu yada arduino beslemesi yetmeyebilir. Harici bir besleme bağlayıp tüm - (GND) hatlarını birleştirip dene.

Birde adım adım git. Önce nodemcu'yu wifi ye bağla ve herhangi bir veri gönderip al.
Bunu başardıktan sonra röleleri tek tek bağla ve kodlarını sisteme dahil et.
Sonra webden aldığın bilgi ile röleleri aç-kapa.
Ve en son ACS712 leri dahil et sisteme.
Her birini teker teker ekleyip test et. Böylece tıkandığın yerde neyin sorun çıkardığını anlamış olursun.
 
3 tane röle için nodemcu yada arduino beslemesi yetmeyebilir. Harici bir besleme bağlayıp tüm - (GND) hatlarını birleştirip dene.

Birde adım adım git. Önce nodemcu'yu wifi ye bağla ve herhangi bir veri gönderip al.
Bunu başardıktan sonra röleleri tek tek bağla ve kodlarını sisteme dahil et.
Sonra webden aldığın bilgi ile röleleri aç-kapa.
Ve en son ACS712 leri dahil et sisteme.
Her birini teker teker ekleyip test et. Böylece tıkandığın yerde neyin sorun çıkardığını anlamış olursun.
Teşekkür ederim bu şekilde ilerleyince sonuçlara ulaşmaya başladım. Şuan akım verilerini de alabiliyorum tek eksik kaldığım nokta sanırım yeterli besleme yapamadığım için wifi üzerinden roleleri açıp kapama işlemi, onun da ölçümlerini bugün yapacağım bakalım nasıl besleyebilirim onu deneyeceğim. Bir de akım verilerini öğrenen bir algoritma yazıp bu algoritmanın sonucunda tahmin ettirerek web sitesine yazdırmam lazım bu konuda bir öneriniz var mı?
 
Bir de akım verilerini öğrenen bir algoritma yazıp bu algoritmanın sonucunda tahmin ettirerek web sitesine yazdırmam lazım
Anlamadım.
Yani kodlamada tahmin yoktur. Belirli bir matematiksel işlemin sonucunu alırsın. Akım verilerini bir değişkene aktarırsın sonra nasıl kullanmak istiyorsan matematiksel bir işleme tabi tutarsın. Mesela akımı 50 defa okursun ve bunun ortalamasını alırsın gibi.
 
Anlamadım.
Yani kodlamada tahmin yoktur. Belirli bir matematiksel işlemin sonucunu alırsın. Akım verilerini bir değişkene aktarırsın sonra nasıl kullanmak istiyorsan matematiksel bir işleme tabi tutarsın. Mesela akımı 50 defa okursun ve bunun ortalamasını alırsın gibi.
Makine öğrenimi algortiması yazacağım önce akım sensöründen gelen verileri csv formatında kaydedip. Örneğin sarj makinesi veya saç kurutma makinesi gibi belli başlı cihazlar için öğreteceğim. Sonrasında bu algoritmayı tasarladığım 3'lü prize aktarıp prize saç kurutma makinesi takıp çalıştırıldığında web server'da prizde saç kurutma makinesi takılı yazmasını istiyorum. Çektiği akımdan onu anlamasını istiyorum. Projede belirli cihazları kullanacağım için akım değerleri birbirine yakın cihazlar olmayacak şuanlık. İlerde geliştirebilirim tabi ki.
 
Saç kurutma makinesi çeşitli kombinasyonlarda çeşitli akım çekecektir. Soğuk çalışınca, sıcak çalışınca, deviri düşükken, deviri yüksekken vs. Bunları ayrı ayrı ölçüp ayrı ayrı değişkenlere atman gerek. Sonra akım eşitse 2 Ampere fön makinesi takılı ve sıcak üflüyor gibi bir şey yazdırman gerek.
Şarj aleti taktığında telefon doldukça akım çekimi düşecektir. Karışık iş. Beni aşar gibi duruyor.
 

Forum istatistikleri

Konular
5,842
Mesajlar
99,663
Üyeler
2,480
Son üye
mozcelikors

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top