Merhaba arkadaşlar, bir sorum olacaktı. Sulama havuzumda şimdilik çalışır durumda bir flatörüm var. Flatör yukarı çıkınca ve aşağı inince devreyi tamamlıyor ve mevcut vanayı açıp kapatıyor. Ben flatörün bu çıkışlarıyla arduinoyu tetikleyip (input) başka vanalar açıp kapatmak istiyorum. Yani flatör bir nevi buton gibi kullanılacak. Butonla arduinoya giriş(input) yapıldığı zaman pull-up ve pull down yapılmaktadır ki sinyal karışıklığı olmasın. Yani artı uç bir dirençle eksi uca bağlanmaktadır. Buton basıldığında pull-up görevi sağlanmaktadır, buton bırakıldığında da direnç rahat bir nefes almaktadır. Şimdi sormak istediğim buton yerine flatörün çıkışlarını ardunioya bağlarsam ve flatör de yaklaşık birkaç saat açık kalırsa bu durumda direnç ısınıp yanmaz mı? Muhtemelen bu kısa devreden dolayı direnç ısınıp yanacak. Direnç kullanamazsam sağlıklı bir çıkış alamayacağım. Bu durumda ne yapmalıyım fikri olan var mı. Basıldığında tek bir sinyal gönderen bir buton bulabilsem de olabilir belki. Bu konuda yardımcı olmak isteyen olursa mutlu olurum, şimdiden teşekkürler.
Kullandığınız direncin türüne ve gücüne bağlı olarak, çok düşük miktarlarda akım akacaktır, bunun sorun yaratacağını sanmıyorum. Burada izleyebileceğiniz başka bir yolda, anahtar olarak transistör ya da MOSFET kullanabilirsiniz. Uzun süreli kullanımlar için hem daha sağlıklı olur, hemde dirençte aklınız kalmaz.
Kod:
const int transistor = 2; void setup() { pinMode (transistor, OUTPUT); } void loop() { digitalWrite (transistor, HIGH); delay(1000); digitalWrite (transistor, LOW); delay(1000); }
Burada anahtarlama arduino üzerinden NPN transistör aracılığı ile yapılmıştır. Sizdeki duruma göre bu tam tersi olarak yapılmalıdır, yani tetiklenme sinyalini flatörden alıp, arduino ile digitalRead fonksiyonu ile okuyup, duruma göre işlem yapabilirsiniz.
Çok teşekkür ederim. Mantıklı bir çözüm olmuş, deneyeceğim inşallah.
Düzeltme 1: Kod formatı düzeltildi.
#include <Arduino.h> #include <Wire.h> #include <SoftwareSerial.h> int butonsay; int butonpin; void setup() { butonsay = 0; pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); pinMode(7, OUTPUT); pinMode(6, OUTPUT); pinMode(5, OUTPUT); pinMode(4, OUTPUT); pinMode(3, OUTPUT); pinMode(2, OUTPUT); pinMode(13, INPUT); digitalWrite(12, 0); digitalWrite(11, 0); digitalWrite(10, 0); digitalWrite(9, 0); digitalWrite(8, 0); digitalWrite(7, 0); digitalWrite(6, 0); digitalWrite(5, 0); digitalWrite(4, 0); digitalWrite(3, 0); digitalWrite(2, 0); while (!(((butonsay) == (22)))) { _loop(); butonpin = digitalRead(13); if (((butonpin) == (1))) { for (int __i__ = 0; __i__ < 1; ++__i__) { butonsay += 1; } _delay(1); if (((butonsay) == (1))) { digitalWrite(12, 1); } if (((butonsay) == ( 2 ))) { _delay(1); digitalWrite(12, 0); } if (((butonsay) == (3))) { _delay(1); digitalWrite(11, 1); } if (((butonsay) == (4))) { _delay(1); digitalWrite(11, 0); } if (((butonsay) == (5))) { _delay(1); digitalWrite(10, 1); } if (((butonsay) == (6))) { _delay(1); digitalWrite(10, 0); } if (((butonsay) == (7))) { _delay(1); digitalWrite(9, 1); } if (((butonsay) == (8))) { _delay(1); digitalWrite(9, 0); } if (((butonsay) == (9))) { _delay(1); digitalWrite(8, 1); } if (((butonsay) == (10))) { _delay(1); digitalWrite(8, 0); } if (((butonsay) == (11))) { _delay(1); digitalWrite(7, 1); } if (((butonsay) == (12))) { _delay(1); digitalWrite(7, 0); } if (((butonsay) == (13))) { _delay(1); digitalWrite(6, 1); } if (((butonsay) == (14))) { _delay(1); digitalWrite(6, 0); } if (((butonsay) == (15))) { _delay(1); digitalWrite(5, 1); } if (((butonsay) == (16))) { _delay(1); digitalWrite(5, 0); } if (((butonsay) == (17))) { _delay(1); digitalWrite(4, 1); } if (((butonsay) == (18))) { _delay(1); digitalWrite(4, 0); } if (((butonsay) == (19))) { _delay(1); digitalWrite(3, 1); } if (((butonsay) == (20))) { _delay(1); digitalWrite(3, 0); } if (((butonsay) == (21))) { _delay(1); digitalWrite(2, 1); } if (((butonsay) == (22))) { _delay(1); digitalWrite(2, 0); } } _delay(1); if (((butonsay) == (22))) { butonsay = 0; } } } void loop() { _loop(); } void _delay(float seconds) { long endTime = millis() + seconds * 1000; while (millis() < endTime)_loop(); } void _loop() { }
Şu programa bir eeprom eklemek istiyorum. Bunu bahçe sulamada kullanacağım. Bu döngü 15 günde bir tamamlanacak. Arduno konusunda çok tecrübem yok, ilk programım ve mblok programında yaptım. 11 adet vanayı sırayla açıp kapatacak bir program. Elektrik kesildiğinde kaldığı yerden devam etsin istiyorum. Eeprom ile ilgili çok çalıştım ama karta zarar verme korkusuyla yükleme yapmadım. Tecrübeli bir arkadaş en azından bir döngüde örnek verirse gerisini yaparım inşallah. Saygılarımla...
Merhaba, öncelikle kodunuza güzel bir algoritma ekleyerek kod kalabalığından ve karmaşadan kurtulabilirsiniz. Arduino Dahili ve Harici eeprom'un kullanılması hakkında daha önceden bir içerik hazırlamıştık, bu bağlantıdan kontrol edebilirsiniz. Eğer eeprom veri yazma işlemini çok hızlı bir döngüye sokarsanız yüksek ihtimalle eeprom bozulacaktır, bu yüzden ilk olarak kodun algoritmasına yönelmenizi öneriyorum.