Arduino Uno Düzensiz Çalışıyor

Arkadaşlar merhaba, uzun zamandır projemin üzerinde denemeler yapıyorum. Saatte 1 kere sıcaklık verisini alıp GPRS ile client sorgusu yapıp veritabanını yazdırıyor. Fakat bi düzensizlik var, çıldırmak üzereyim. Arduinoya enerjiyi veriyorum verileri saatte bir göndermeye başlıyor sonra bi ara veri gelmiyor 2 saat sonra geliyor, bazen hiç gelmiyor, bazen 5-6 saat sonra gelmemeye başlıyor, gidiyorum ışıkları yanıyor enerji var ama tıkanmış kalmış, resetliyorum düzeliyor falan filan. - Klon arduino kullanıyorum, hunharca kullandım, acaba düzensiz çalışma ondan mı kaynaklanıyor? - Kodlarda mı sıkıntı var? - Watdog tarzı bişey mi kullanmam lazım? Ben bu cihazı evde adaptörle besliyorum, şu düzeni sağladığımda araziye çıkaracağım ama lanet olsun ki güvenemiyorum. 10 Watt Güneş Paneli + Solar Charger Controller + 12V 9A akü ile sistemi bile kurdum. Kullandığım kodları sizinle paylaşıyım belki yanlış olan bir şey vardır, bir fikir verirsiniz: `

include
include
include

define ONE_WIRE_BUS 8
define PINNUMBER “”

// APN data
define GPRS_APN “internet” // replace your GPRS APN
define GPRS_LOGIN “” // replace with your GPRS login
define GPRS_PASSWORD “” // replace with your GPRS password

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
GSMClient client;
GPRS gprs;
GSM gsmAccess;

unsigned long suankizaman,oncekizaman=0;
char server = “semercioglufidancilik.com”;
int port = 80;
int sayac,i=0;

void setup() {
// initialize serial communications and wait for port to open:
Serial.begin(9600);
sensors.begin();

Serial.println(“Arduino Datalogger Hazirlaniyor..”);

}

void loop() {

suankizaman =millis();

if(suankizaman - oncekizaman >= 60000) //1 dakikada bir sayac degiskeni artacak
{
oncekizaman = suankizaman;
sayac++;

}
if(sayac == 60) //60 dakika = 1 saat
{
sayac = 0;
sensors.requestTemperatures();

Serial.println(“Modem aciliyoor!”);

boolean notConnected = true;

while (notConnected) {
if ((gsmAccess.begin(PINNUMBER) == GSM_READY) &
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
notConnected = false;
} else {
Serial.println(“Baglanti hatasi!”);
delay(1000);
}

Serial.println(“baglaniyor…”);
}
i++;
String path;
path= “”;
path += “/arduino/php/add_data.php?id=”;
path += i;
path += “&sicaklik=”;
path += double (sensors.getTempCByIndex(0));

if (client.connect(server, port)) {

// Make a HTTP request:
client.print("GET ");
client.print(path);
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
   Serial.println("veri yazildi..");

} else {
// if you didn’t get a connection to the server:
Serial.println(“veri yazilamadi!”);
}

gsmAccess.shutdown();
Serial.println(“Modem kapatildi!”);
}

}

`

if(suankizaman - oncekizaman >= 60000) yerine şu şekilde dene if(suankizaman - oncekizaman >= 60000L)

global değişkenleri loopun içine aldım yani local değişken yaptım bakalım şimdi deneyecem nasıl olacak, Arduinoyaya olan güvenim gitgide azalıyor :((

milis değeri için unsigned long veya long kullansam ne değişir? tanımlanan en son long degerine gelince nolur, sıfırlanır mı? yada hiç milis işine girmeden delay(3600000000); yani 1 saat delay versem, hangisi daha mantıklı :slight_smile: @fatihaslamaci

GSM e baglanmak için While döngüsü var büyük ihtimal oradan da döngüden çıkımıyor vs gibi bişeyler kaynaklanıyor olabilir. HTTP sorgusu yapmak için AT komutlarını bilen varsa paylaşabilir mi?

mumkunse gprs bağlantısını en başta setup kısmında halledin bağlantının devamlı açık olmasının size zararı yok gsm de genel bağlantı kurma ve yaşatma bayağı zordur operatorler bağlantı kopsa bıle bunu rapor etmıyorlar, sunucunuza verı yollasanızda yollamasanızda belirli peryotlarla bır el sıkışma yapın sunucuyu gormuyorsanız bağlantıyı koparıp yenıden kurmayı deneyın. birde sunucunuzsun ayarlarınde keep_alive aktif olsun genelde standart sunucularda port aktif olmasın diye 10-15 dakika sonra port kapatılır hatta port 80 de portu devamlı açıp tutmaz http de verıyı alır atar bırdaha bağlantı kalamaz yenıden bağlanmayı denersın bu sefer sunuc cevap vermez fılan hep dert. websunucu kullanmak yerıne tcp-ip dırek haberleşecegınız bir yapı kurabılırsenız daha sağlıklı olur. web suncularda yoğun bir trafik yoksa uyumaya fılan gecer bağlanmaya çalıştıgınızda sununun tekrar aktif olması dbleri açması fılan bazen 30sn yi gecer bu kısımları halletmezsenız yada test etmezsenız cok sıkıntı yaşarsınız. arduunonun stabılıtesı dusuk kutuphaneleri daha yazmadım bıle. ticari operasyonlara uygun degıl arduıno eğer kullanacaksanız her kutuphanenın ve işin neredeyse kendı işinize uygun versıyonlarını yazmanız şart

Görüşleriniz için teşekkür ederim, yani istediğim aslında cok zor birşeyde degil gibi görünüyor yada bilmiyorum, Arduino ile evet ticari operasyonlara uygun değil ama ev otomasyonlarında bunları sorunsuz kullanan bir sürü insan var, yapan bu işi iyi yapıyor. Artık isyanlardayım yani. - Sunucuyu cogu kez test ettim sorguyu yapar yapmaz veritabanına anında çakıyor veriyi o yandan sıkıntı yok. - Tek sıkıntı şu arduinoyu stabil çalıştırmak. Saatte bir veriyi göndermek için sizce nasıl bi timer kullanmalıyım? http sorgusunu birde AT komutlarıyla yapmayı deneyeceğim. - GSM bağlanma işini setupda yapıp bitirin demişsiniz ama her http sorgusu öncesi bağlanmak istiyor. Kafam allak pullak… Yani aslında Arduinodan kaçış yok, öğrenci işi, ucuz maliyet.. Derin elektronik bilgim olsa kendim için microdenetleyici kart devre vs ile yapardım ama yardımlarınız için teşekkürler. @okoman

milis fonksiyonu ıle gecen her saniyeyi ayrıca sayın ve bır değikende tutun yada sanıyede bir artan bir tımer kurun yada bir rtc modul alın zamanı oradan kontrol edın.

ya RTC modülünede güven olmuyor ki geçen datalogger kurdum sd karta veri yazan 3. günde RTC modülü yanmış, her bi yandan geliyorlar arkadaş

ben olsam karşılıklı konuşmalı yapardım. Örneğin, her webservere data gönderdiğimde alındı diye cevap gönderirdim webserverdan. arduino tarafında ise, her saat dolduğunda datayı gönderir alındı cevabını beklerdim eğer cevap gelmezse tekrar tekrar gönderirdim. Bana kalsa senin problemin şu, senin zaman fonksiyonuna göre 1 saat doluyor ve göndermeyi deniyorsun zamanı da sıfırlıyorsun. Yani olurda en ufak bir aksilikte gönderemezsen tekrar öteki saati bekliyorsun. bu yüzdendir ki bazen 1 saatte bazen 3 bazen 5 saatte gidiyor.

Haklısın @ekmekci Madem öyle diyosun, kodlamada bana yardım et :slight_smile: Veritabanı yazması için http sorgusu yaptığında Web sayfasının html dökümünü okuyoruz oraya ben “veri yazildi!” koydum. Bu okumayı gerçekleştirmezse yeniden okuma yapma komutunu vericez dimi

evet öyle, sıralaman şu olsun. 1) arduinodan servere data gönder. 2)server tarafında data alınırsa bir indikatör ile alındı mesajı oluştur 3)arduinodan tekrar git ve data alındı mı diye kontrol et 4)data alındıysa beklemeye geç ve 1 saat bekle, data alınmadıysa alınana kadar tekrar tekrar gönder

Selamlar ; Üzerinden epey zaman geçmiş ama yeniden cevap bulmak umuduyla yazmak istedim. Stabilite sorunu ve arduinoya güvenimi bende kaybediyorum. Kırsalda doğal enerji kaynakları ile kurmak istediğim basit sensörlü arduino projeleri var. Ancak henüz balkondan öteye gidemedim. Benim devrem sadece SD karta veri yazmak üzerine. Ancak o kadar stabilite sorunu yaşıyorum ki ? her seneryoyu denememe rağmen başarıya ulaşamadım. ilk başlarda 8 güne kadar veri kaydı yapıyordum. Artık 3 günü geçmeden kayıt sistemi duruyor.. Çözüm bulamadım ne yazık ki ?

arduinoda ticari veya uzun vadeli projeler konusunda sıkıntı var bunu aşmanın yolları da bu işe takılmadan çözüm geliştirmenizde yatıyor. önce besleme problemlerini çözmeniz gerekiyor. temiz kesintisiz bir beslemeniz olması lazım. sd karta bir şey yazıyorsanız bu risklidir risk olan sd kartta bir dosya açıp o dosyayı açık birakıp günlerce içine kayıt yapmak hiç uygun değil. projenizde kritik olmayan anlarda açık kayıt dosyalarını kapatıp açarak kayıtlarda belirli bir kararlılık sağlarsınız dosyaları kapadıktan sonra arduinoyu soft resetle yeniden başlatmak da bir çözüm olabilir yazılımından kaynaklanan yığılmaları temizler hatta watchdog kullanmayı adet edinin kitlenme olursa yazılımda en azından yeniden herşey başlamış olur. kolay gelsin

Arduinoda donanımsal olarak bir sıkıntı yok, beslemeyi güzelce filtrelediğiniz sürece yıllarca çalışabilir. Sıkıntı amatörce yazılmış kütüphanelerinde. Bunlarla ticari proje geliştirmek akıl işi değildir.