USB besleme mi yetmiyor
  • GSP Sensörü [GYNEO6MV2]- DS18B20, DHT11 sensörlerimin bağlı olduğu taşınabilir bir istasyon yaptım. Arduino bilgisayardan güç alıyor USB kablosu ile. Sorun şu ki; DS18B20 9bitte iken yaklaşık 5 satırda bir -127 veriyor. onun dışında eğer 12 bit ayarlarsam sürekli -127 veriyor. 9 bitte bazen seri ekranı açıyorum yine -127 veriyor. serialmonitor u kapatıp yeniden açıyorum düzeliyor. tabi 10 veride bir yada 20 veride bir yine -127 oluyor.. Sorunu rastgele şekilde tespit ettim... harici bir USB çoklayıcı (adaptör ile beslemesi olan) ile arduinoyu bağladığımda sorun düzeldi. Peki ben dışarıda Nasıl böyle bir besleme sağlayabilirim...
  • powerbank la dene
  • Elbette denedim bunu ama tekrar çalışmamaya başladı. Sürekli çalışır durumdayken yine çalışmamaya başladı... Buna sebep olan nedir ?

    Şu kodu kullanıyorum ;

    #include < TinyGPS++.h>
    #include < SoftwareSerial.h>
    #include < dht11.h>
    #define DHT11PIN 5
    #include < OneWire.h>
    #include < DallasTemperature.h>
    #include < SPI.h>
    OneWire oneWire(2);
    DallasTemperature DS18B20(&oneWire);
    DeviceAddress DS18B20adres0;
    dht11 DHT11;

    float chk,santigrat0;
    static const int RXPin = 4, TXPin = 3;
    static const uint32_t GPSBaud = 9600;


    TinyGPSPlus gps;
    SoftwareSerial ss(RXPin, TXPin);

    void setup()
    {
    DS18B20.begin();
    Serial.begin(115200);
    ss.begin(GPSBaud);
    DS18B20.getAddress(DS18B20adres0, 0);
    DS18B20.setResolution(DS18B20adres0, 12);
    }

    void loop()
    {
    static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
    printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
    printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);

    float chk = DHT11.read(DHT11PIN);
    DS18B20.requestTemperatures();
    santigrat0 = DS18B20.getTempC(DS18B20adres0);

    Serial.print(" ");
    Serial.print((float)DHT11.humidity, 2);
    Serial.print(" ");
    Serial.println(santigrat0);

    unsigned long distanceKmToLondon =
    (unsigned long)TinyGPSPlus::distanceBetween(
    gps.location.lat(),
    gps.location.lng(),
    LONDON_LAT,
    LONDON_LON) / 1000;
    double courseToLondon =
    TinyGPSPlus::courseTo(
    gps.location.lat(),
    gps.location.lng(),
    LONDON_LAT,
    LONDON_LON);

    const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon);


    smartDelay(1000);

    if (millis() > 5000 && gps.charsProcessed() < 10)
    Serial.println(F("No GPS data received: check wiring"));
    }
    static void smartDelay(unsigned long ms)
    {
    unsigned long start = millis();
    do
    {
    while (ss.available())
    gps.encode(ss.read());
    } while (millis() - start < ms);
    }

    static void printFloat(float val, bool valid, int len, int prec)
    {
    if (!valid)
    {
    while (len-- > 1)
    Serial.print('*');
    Serial.print(' ');
    }
    else
    {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i Serial.print(' ');
    }
    smartDelay(0);
    }

    static void printInt(unsigned long val, bool valid, int len)
    {
    char sz[32] = "*****************";
    if (valid)
    sprintf(sz, "%ld", val);
    sz[len] = 0;
    for (int i=strlen(sz); i sz[i] = ' ';
    if (len > 0)
    sz[len-1] = ' ';
    Serial.print(sz);
    smartDelay(0);
    }

    static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
    {
    if (!d.isValid())
    {
    Serial.print(F("********** "));
    }
    else
    {
    char sz[32];
    sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year());
    Serial.print(sz);
    }

    if (!t.isValid())
    {
    Serial.print(F("******** "));
    }
    else
    {
    char sz[32];
    sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second());
    Serial.print(sz);
    }

    printInt(d.age(), d.isValid(), 5);
    smartDelay(0);
    }

    static void printStr(const char *str, int len)
    {
    int slen = strlen(str);
    for (int i=0; i Serial.print(i smartDelay(0);



    }


    Aldığım çıktı ise şu şekilde ;


    35.027432 -111.022773 88.00 -127.00
    35.027432 -111.022773 88.00 -127.00
    35.027432 -111.022773 88.00 -127.00
    35.027432 -111.022773 88.00 -127.00
    35.027432 -111.022773 88.00 -127.00
    35.027432 -111.022773 88.00 -127.00

    DHT11 ve DS18B20 yalnızca birlikteyken düzgün çalışıyor. Ancak GPS dahil olunca sorunlar yaşıyorum... Arduino bir baskı devre üzerinde takılı.Arada bir doğru sinyaller vermesi hatalı bir donanımsal sorun olmadığını düşündürüyor.
    Yardımcı olabilir misiniz ?


  • Belki aynı sorunu yaşayan olur diye yazıyorum. Sorunun çözümü güç değil kütüphanelerin muhtemel birlikte çalışamamasıymış. DS18B20 onewire kütüphanesini değiştirdiğimde sorun tamamen çözüldü... *Değerli yardımlarınız için ayrıca teşekkür ederim.

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.