Skocz do zawartości

Arduino UNO + SDS011 + LCD 2x16


Nekrami

Pomocna odpowiedź

Cześć

Mam problem z działaniem czujnika pyłu sds011 z wyświetlaczem lcd. Czujnik sam podpięty do arduino działa i na serial monitorze pojawiają się odczyty. Problem zaczyna się kiedy chcę wyświetlić te odczyty na lcd 2x16. Wtedy na serial monitorze część rzeczy się nie wyświetla.

Korzystam z tych bibliotek:

https://github.com/lewapek/sds-dust-sensors-arduino-library - do obsługi sds011

https://github.com/mathertel/LiquidCrystal_PCF8574 - do obsługi wyświetlacza 2x16

#include "SdsDustSensor.h"

int rxPin = 2;
int txPin = 4;
SdsDustSensor sds(rxPin, txPin);

void setup() {
  Serial.begin(9600);
  sds.begin();

  Serial.println(sds.queryFirmwareVersion().toString()); 
  Serial.println(sds.setActiveReportingMode().toString());
  Serial.println(sds.setCustomWorkingPeriod(3).toString()); // TA PRZERWA W PRACY NA 3 MINUTY DZIAŁA
}

void loop() {
  PmResult pm = sds.readPm();
  if (pm.isOk()) {
    Serial.print("PM2.5 = ");
    Serial.print(pm.pm25);
    Serial.print(", PM10 = ");
    Serial.println(pm.pm10);

    Serial.println(pm.toString());
  } else {
    Serial.print("Could not read values from sensor, reason: ");
    Serial.println(pm.statusToString());
  }

  delay(5000);
}

Kod powyżej działa po wgraniu do UNO. Wynik działania poniżej.

17:36:24.151 -> Firmware version [year.month.day]: 18.1.18
17:36:24.667 -> Mode: active
17:36:25.182 -> Working period: 3 min cycles: work 30 seconds, measure and sleep
17:36:25.698 -> Could not read values from sensor, reason: Not available
17:36:31.182 -> Could not read values from sensor, reason: Not available
17:36:36.666 -> Could not read values from sensor, reason: Not available
17:36:42.197 -> Could not read values from sensor, reason: Not available
17:36:47.699 -> Could not read values from sensor, reason: Not available
17:36:52.668 -> PM2.5 = 15.80, PM10 = 26.70
17:36:52.715 -> pm25: 15.80, pm10: 26.70

Ale gdy dodam bibliotekę do obsługi lcd i kod do wyświetlenia na lcd (chociaż wystarcza dodanie tylko #include <Wire.h> #include <LiquidCrystal_PCF8574.h>) i już serial monitor wygląda tak:

18:10:22.175 -> 
18:10:22.694 -> 
18:10:23.215 -> 
18:10:23.694 -> Could not read values from sensor, reason: 
18:10:29.195 -> Could not read values from sensor, reason: 
18:10:34.695 -> Could not read values from sensor, reason: 
18:10:39.735 -> PM2.5 = 17.60, PM10 = 28.60
18:10:39.735 -> 
18:10:45.255 -> Could not read values from sensor, reason: 
18:10:50.755 -> Could not read values from sensor, reason:

Sprzęt wydaje się działać ok. To znaczy daje odczyty na lcd co zadany interwał, ale nie wiem dlaczego na serial monitorze wyświetla się wtedy tak, a nie inaczej.

Jeśli ktoś potrafi to wytłumaczyć będę wdzięczny.

 

Link do komentarza
Share on other sites

Użyj Arduino Leonardo/Micro/MEGA i Serial1 dla czujnika pyłu, dołączenie działań na I2C może powodować, że gubisz coś z komunikacji na softserial. Softserial bez problemu poradzi sobie z wysłaniem czegokolwiek, ale odbieranie może być problemem. Na UNO/NANO/PROMINI można ewentualnie podłączyć się do czujnika hardware serial0 (po prostu Serial) ale wtedy nie użyjesz go do komunikacji z PC, podłączasz sobie jakąś przejściówkę USB-UART (np. czerwona FTDI z Allegro) do dowolnych innych pinów i  odpalasz soft serial z komunikatami Arduino->PC.

  • Lubię! 1
Link do komentarza
Share on other sites

Dzięki za odpowiedź. Pomysł z USB-UART przetestuję. Jednak jeśli dalej mógłbym podrążyć temat to mam jeszcze kilka pytań. Do obsługi tego czujnika (SDS011) i wyświetlacza lcd wykorzystałem kombinację kilku różnych bibliotek (4 dla czujnika i 3 dla lcd) i w każdej konfiguracji było podobnie tj. poprawnie wyświetlała się tylko jedna linijka z odczytem zanieczyszczenia.

Dlaczego akurat ta linijka z odczytem była ok, a reszta (jakieś testowanie czujnika, info o uruchomieniu wiatraka, o zakończeniu pomiarów, o interwałach pomiarów - zależy co było dostarczone z biblioteki) akurat się nie wyświetlała?

Te odczyty z mojego pierwszego postu zawsze wyglądały tak samo. Wgrywanie sketcha kilkadziesiąt razy i tylko pomiary wyświetlało. Nie było to randomowo, że raz pomiary, innym razem Firmware version. Zawsze gubiłem z softSeriala akurat te dane?

Obejrzałem w internecie różne sposoby na wykorzystanie tego czujnika z arduino uno, nano, esp8266, RasPi. Część miała podpięte na i2c dodatkowo czujniki temperatur, wilgotności, barometry i inne. W sketchach mieli po kilkadziesiąt linijek kodu na serial monitor i to działało, a u mnie nie.

 

Link do komentarza
Share on other sites

Przyczyn niedziałania może być wiele, ale jest prosta zasada, jak masz kaszel to bierzesz najpierw syrop, dopiero jak nie pomaga to robisz prześwietlenia i biopsje. Dodanie bibliotek generuje dodatkowo bufory i zajmuje RAM. Serial ustawiaj na 115200 i nie używaj delay -  naucz się to samo robić z millis() wywołując tylko raz na 5s część programu. Dodatkowo jakby Ci zadziałało na MEGA, a MICRO nie to może być też ilość RAM, choć MICRO ma trochę więcej niż UNO i może zadziałać jeśli to jest przyczyną. Możesz też na MEGA użyć softserial dla porównania i jak zacznie działać to będziesz miał pewność.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.