AC giriş Sinyali
  • Merhabalar, yeniyim Arduınoda acaba AC girişi analog girişten verebilir miyiz? Hedefim şebeke gerilimini 5 voltun altına düşürüp bunu input olarak kullanıp analiz yapmak. Kısacası sinus üzerinde analiz yapmak istiyorum. Bu mümkün müdür?
  • ac sinyal genliği 220v olacak once bunu düşürmek gerekecek direnç bölücü ile yapacaksınız diyelim 5v max genliğe düşürdünüz buda yetmeyecek cunku gelen sınyal ac yani hem- deger hem + deger olacak arduıno adc ıse sadece + degerleri okuyacaktır bunu sağlamak ıcın bir opampı araya buffer yapacaksınız ve - değerli voltajları 0 ile+2.5 seviyesine getirmenız lazım. yani sinusun orta 0 noktasında opamp 2.5 volt uretmeli. bunun için ıse opampın ofset gerılımını +2.5 verecek şekılde ayarlarsınız. biraz opmap dverelerını araştırın.

    şöyle bir arama yaptım sonuçları bıraz ınceleyın
    https://www.google.com/search?q=arduino+ac+analog+input&oq=arduıno+ac+ana&aqs=chrome.2.69i57j0l4.6777j0j7&sourceid=chrome&ie=UTF-8
  • Hocam öncelikle teşekkür ederim yorumunuz için. Ben 6 volt trafo kullanacam. gerilim bölücü yaparak Vm=5 voltun altında bir AC girişi Arduınonun analog girişine bağlayacam.
    Opamp yerine Arduıno negatif alternans okuyamayacağı için köprü diyot atmayı düşündüm. Bunu opampsız köprü diyotlada halledebileceğimi düşünüyorum katılır mısınız?
  • Bu konuda bir tecrübem yok ama ilgimi çekti, trafo çıkışı 3 uçlu olsa çıkışın birini bir analog girişe diğerini başka bir analog girişe bağlansa olur mu.
  • @mamuks sınus uzerınde analiz yapacağım demişin diyotla doğrultursan sınus olmaz yarım dalga geçer, sadece voltaj okuyacsaksan köpru diyot ve kondansatorle dogrult gıtsın. soruya gore yorum çözum yazıyoruz kavramları yerınde kullanaırsak ıyı olur.

    @fatihaslamaci trafonun cıkıları bırbırene ters fazda olur işine yarar mı?
  • bana göre işe yarar, elektronikçi değilim. programcıyım. öğrenmeye çalışıyorum
  • @okoman
    const int ON = 2;
    const int OFF = 3;


    const int role = 6;



    void setup() {
    Serial.begin(9600);
    pinMode(ON, INPUT);
    pinMode(OFF, INPUT);
    pinMode(role1, OUTPUT);

    }


    void loop()
    {

    while(1)
    {

    unsigned long R = analogRead(AI);
    float f = (R * 312) / 1023;
    Serial.println(R);

    if(f > = minVoltage && f < = maxVoltage)
    {
    return true;
    }

    }
    }

    // Referens olarak Ilk sinyali referans alıp diğer 0
    {
    if(isVoltageBetween(0, 0, 10))
    {
    if(nextState)
    {
    digitalWrite(role1, HIGH);
    }
    else
    {
    digitalWrite(role1, LOW);
    }
    }


    Hocam yorumlarınız nelerdir bir yerlerde hata yapıyorum. Acaba yardımcı olabilir misiniz?
  • float yerine integer değerleri karşılaştırmak herzaman daha ıyıdır
  • bu verdiğiniz programın doğru oldugundan eminmisiniz compile ederken hata alıyorum eksiklikler ve yanlışlıklar dolu olmaz böyle. adım adım gidin, ya program yazmayı bılmıyorsunuz yada ordan burdan kopyala yapıştırla bişeyler olsun ıstemısınız sankı.

    hataları sıralasam role1 diye değişken tanımlı değil min maxVoltajlar tanımlı değil AI nedir o da yok altta bir fonksiyon yazmaya çalışmışsınız ama başlığı yok.
    while içinden returnla çıkmaya çalışmışsın returnla cıkmaz break olması lazım. her satırda bır hata var. dikkatsızcene yazılmış şeyler
  • @okoman program yazmayı evet bilmiyorum :) kanalları izliyorum yeterli değil evet farkındayım. Ben de çok hata gördüm. Eksikleri yazmışsınız. Teşekkür ederim. Yapmaya çalıştığım aslında gerilimin max genlik degerini digitale donusturup 10 volt 0 volt arasında ki analog input degerlerinde digital output karrsiligindaki digital degerlerde anahtarlama yapmak. Zannedersem biraz daha bakmak lazım. Teşekkürler tekrar
  • ac voltajı nasıl giriyorsunuz gerilim bolucu kullanın mutlaka 5v tan fazlası ve yuksek akımlı girişler arduınoyu ve bağlı bılgısayarı ve portlarını yakar ve tehlıkelıdir dıkkat edin.

    projenızı adım adım yapın once adc degerlerini ekrana yazın kodun başındaki bolum bunu yapıyor zaten o kısımı test edın daha sonra belirledıgınız mın max degerlerin aralıgında bır led yakıp sondurun.

    tabı tum bunları yapabılmek ıcın cok zor bır program olan led blink ornegını yapmış olmanız lazım.

  • const int switchPin = 5;

    const int role1 = 6;
    const int role2 = 7;
    const int role3 = 8;

    boolean switchMode = false;

    void setup() {
    pinMode(switchPin, INPUT_PULLUP);
    pinMode(role1, OUTPUT);
    pinMode(role2, OUTPUT);
    pinMode(role3, OUTPUT);
    }

    void loop()
    {
    readSwitchMode();
    type();
    delay(200);
    }

    void readSwitchMode()
    {
    switchMode = (digitalRead(switchPin) == HIGH);
    }

    boolean isVoltageBetween(int AI, float minVoltage, float maxVoltage)
    {
    while(1)
    {
    unsigned int R = analogRead(AI);
    unsigned char f = (R * 312) / 1024; //ok?Evet
    if(f >= minVoltage && f <= maxVoltage)<br /> {
    return true;
    }
    }
    }
    void type()
    {
    if(isVoltageBetween(0, 0, 10))
    {

    digitalWrite(role1, switchMode ? HIGH : LOW);
    delay(1000);

    if(isVoltageBetween(1, 0, 10))
    {
    digitalWrite(role2, switchMode ? HIGH : LOW);
    delay(1000);

    if(isVoltageBetween(2, 0, 10))
    {
    digitalWrite(role3, switchMode ? HIGH : LOW);
    }
    }
    }
    }


    Hocam bunu inceleyebilir misiniz.

    @okoman
  • AI= Analog input kısaltılmışı İf fonksiyonu içinde A0, A1, A2 yi ayrı ayrı kontrol edecek.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.