Arduinoda yardım istiyen gelebilir

Merhabalar. Güneş Enerjisi Takip Sistemi için Robotistandan aldığım bir set bulunmakta idi. Setin linkini ve kurulum PDF'ini aşağıya eklerim. Seti kurup, gerekli düzenlemeleri yapmama rağmen. Sistem hala doğru düzgün çalışmamakta. Tam enerji veriyorum, ışı görecekken, kendinin sağ üstüne doğru dönüp kalıyor ve bişey yapmıyor. Bunun için yardımcı olur musunuz? Arduino kodlarını, aşağıya eklemekteyim. Videodan da durumu izleyebilirsiniz.

(Bu arada Arduino kodlama bilgim bulunmamakta.)

Aldığım Set: https://www.robotistan.com/solarx-gunes-takip-sistemi-elektronikli
Setin Kurulum PDF: https://www.robotistan.com/Data/EditorFiles/SolarXv2.pdf
Arduino Kodları;

#include <Servo.h>
//defining Servoss

#define TOLERANCE 10
#define STEP_DELAY 7
Servo servohori;
int servoh = 0;
int servohLimitHigh = 160;
int servohLimitLow = 20;

Servo servoverti;
int servov = 0;
int servovLimitHigh = 160;
int servovLimitLow = 20;
//Assigning LDRs
int ldrtopl = A0; //top left LDR green
int ldrtopr = A3; //top right LDR yellow
int ldrbotl = A1; // bottom left LDR blue
int ldrbotr = A2; // bottom right LDR orange

void setup ()
{
servohori.attach(10);
servohori.write(45);
servoverti.attach(9);
servoverti.write(45);
Serial.begin(9600);
delay(500);
}

void loop()
{
servoh = servohori.read();
servov = servoverti.read();
//capturing analog values of each LDR
int topl = analogRead(ldrtopl);
int topr = analogRead(ldrtopr);
int botl = analogRead(ldrbotl);
int botr = analogRead(ldrbotr);
// calculating average
int avgtop = (topl + topr) / 2; //average of top LDRs
int avgbot = (botl + botr) / 2; //average of bottom LDRs
int avgleft = (topl + botl) / 2; //average of left LDRs
int avgright = (topr + botr) / 2; //average of right LDRs
Serial.println(avgtop);

if (TOLERANCE < avgbot - avgtop)
{
servoverti.write(servov + 1);
if (servov > servovLimitHigh)
{
servov = servovLimitHigh;
}
delay(STEP_DELAY);
}

else if (TOLERANCE < avgtop - avgbot)
{
servoverti.write(servov - 1);
if (servov < servovLimitLow)
{
servov = servovLimitLow;
}
delay(STEP_DELAY);
}

else
{
servoverti.write(servov);
}

if (avgleft - avgright > TOLERANCE)
{
servohori.write(servoh + 1);

if (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
delay(STEP_DELAY);
}

else if (avgright - avgleft > TOLERANCE)
{
servohori.write(servoh - 1);

if (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
delay(STEP_DELAY);
}

else
{
servohori.write(servoh);
}
delay(STEP_DELAY);
}


 
Serial print yapıp ldr değerleri ve avg değerleri okumanda fayda var. Şu haliyle hiçbir feedback almadan kör dövüşü yapıyorsun. Anolog girişler 1024 üzerinden değer ürettiği için tolerancr değeri 10 küçük kalabilir. Değeri artırıp deneyebilirsin
 
Serial print yapıp ldr değerleri ve avg değerleri okumanda fayda var. Şu haliyle hiçbir feedback almadan kör dövüşü yapıyorsun. Anolog girişler 1024 üzerinden değer ürettiği için tolerancr değeri 10 küçük kalabilir. Değeri artırıp deneyebilirsin
Hocam yanıtınız için çok teşekkür ederim. Ancak kusuruma bakmayın, pek anlamadığım için Arduino kodlamasından ne yapacağımı bilemiyorum. Biraz daha açık şekilde yardımcı olabilir misiniz acaba?
 
Temel bilginiz olmadan yardımcı olunması oldukça zor. Yakınlarda bir yerde bu işlerden anlayan birinden ya da ürünü satın aldığınız yerden destek almayı deneyin.
 
Öncelikle çok minnettarım yardımın için şimdi sorunu çözdüm ve kodu burada paylaşıyorum.
İnşallah birilerinin işine yarar.
Kod:
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "******";
const char* password = "*******";

void setup() {
  Serial.begin(115200);

  //TESTING JSON CREATION
  Serial.println("Starting JSON");
  StaticJsonBuffer<69> jsonBuffer;
  char json[] = "{\"Rfid_ID\":\"E54CEB2361\",\"Door_ID\":\"6\"}"; // göndereceğimiz bilginin yazılışı istenilene göre
  JsonObject& root = jsonBuffer.parseObject(json);
  if(!root.success()) {
    Serial.println("parseObject() failed");
  } else {
    Serial.println("JSON OK");
  }


  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print("Connecting... ");
  }


  //TESTING POST
  //headers={'content-type': 'application/json', 'auth-key': 'My_authentication_key'}
  String sms_service_URL = "link yazıyoruz";


  Serial.println("TESTING POST");
  //Declare an object of class HTTPClient
  WiFiClient client;
  HTTPClient http;

  if (WiFi.status() == WL_CONNECTED) {
    //Specify request destination
    http.begin(client,sms_service_URL);
    http.addHeader("Content-Type", "application/json");
    http.addHeader("auth-key", "My_authentication_key");

    String data;
    root.printTo(data);
    //Send the request
    int httpCode = http.POST(data);

    //Check the returning code
    if (httpCode > 0) {
      //Get the request response payload
      String payload = http.getString();
      //Print the response payload
      Serial.println(payload);
    }
    //Close connection
    http.end();
    Serial.println(httpCode);
  }
}

void loop() {


}
 
Moderatör tarafında düzenlendi:
Arkadaşlar lütfen yardım..
Bir tane sera yazılımın var..arduino r3 uno+dht11+mq135+rtc modülü+4lu relay bağlı..
Nem belli orana düşünce role açıyor
CO2 yükselince 2. Role açıyor
Belli bir saatte 3.4.role açıyor
Yazılım stabil çalışıyor..
Ama esp 8266 kullanıp bylink kullanmak isteyince sıkıntı çekiyorum..program yavaşladı,esp bulunamadı falan.
Bunun yerine 8266 nodemcu kullanıp..
Uno yu yazılım için -
Nudemcu yuda internete bağlanmak ve bylink için ayrı kullanmak istiyorum..
Ama uno ya bağlı sensörler den bilgileri bylink de nasıl göreceğim..bylink den uno ya bağlı roleleri nasıl açıp kapatabilirim..
 

Forum istatistikleri

Konular
129,689
Mesajlar
929,032
Kullanıcılar
452,391
Son üye
girisimci25

Yeni konular

Geri
Üst