• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Prośba o sprawdzenie kodu i BMP280
#1
Tongue 
Witam,

Mój projekt to "stacja pogodowa" oparta na BMP280(czujnik zew.) oraz wew. DS18B20. Dopiero kupiłem Arduino i ucze się je programować dlatego zależy mi aby ustabilizować cały układ w początkowej fazie zanim zacznę dokładać następne gadżety..

Po wgraniu kodu wyświetlają się wszystkie wartości z czujników , LCD działa ale gdy dotknę BMP280 lub sam wyświetlacz - LCD zaczyna "wariować" zmienia się kontrast lub czasami zawiesza się odczyt. Pytanie czy podłączenie czujnika oraz wyświetlacza pod te same piny (I2C) może powodować problemy z odczytem danych oraz w jaki sposób należy je podłączyć aby się nie zakłócały. Dodatkowo prosiłbym o opinie fachowca czy kod nadaje się do użytku.

(wszystkie informacje poniżej.)


Pozdrawiam


Działam na Pro Mini 3.3V

"Schemat"(opis) podłączenia

BMP280     (I2C)                  -----> piny A4,A5
Wyświetlacz LCD 2x16 I2C  -----> A4,A5
DS18B20  + rezystor 4.7k -----> standardowo GND i VCC , DATA po GPIO 3



Kod:
#include <Wire.h>
#include "i2c.h"
#include <LiquidCrystal_I2C.h>
#include "i2c_BMP280.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

BMP280 bmp280;
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup()
{
// Inicjacja czujnika(DSB18)
sensors.begin();

Serial.begin(9600);

//START LCD
lcd.begin(16, 2);
lcd.clear();

Serial.println("Probe BMP280: ");
Serial.println(" ");
if (bmp280.initialize()) Serial.println("Sensor found");
else
{
Serial.println("Sensor missing");
while (1) {}
}
// onetime-measure:
bmp280.setEnabled(0);
bmp280.triggerMeasurement();
}
void loop()
{
bmp280.awaitMeasurement();

float temperature;
bmp280.getTemperature(temperature);
float pascal;
bmp280.getPressure(pascal);

static float meters, metersold;
bmp280.getAltitude(meters);
metersold = (metersold * 10 + meters)/11;

bmp280.triggerMeasurement();

lcd.setCursor(0, 0);
lcd.print("T1:");
lcd.print(temperature);
lcd.setCursor(0, 1);

lcd.setCursor(0,1);
lcd.print("Cis: ");
lcd.print(pascal/100);
lcd.println(" hPa");

lcd.setCursor(9,0);
lcd.print("T2:");
lcd.print(sensors.getTempCByIndex(0));
lcd.setCursor(14,0);

sensors.requestTemperatures();

delay(5000);
}
 
Odpowiedź
#2
Sprawdź oscyloskopem, co się dzieje na liniach.
Zmierz rezystancje na podciągnięciach. Te gotowe moduły mają zamontowane rezystory podciągające, więc podłączając kilka urządzeń I2C, łączysz te rezystory równolegle i może nie nasycać sygnałów. Dla tego oscyloskop jest niezbędny.
No i jeszcze takie pytanie, które powinno paść na początku: to jest gotowe urządzenie, czy prototyp na płytce stykowej?
Bo jeśli na stykówce, to się nie dziw, że nie działa.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
(23-02-2019, 16:07)Damianpl napisał(a): gdy dotknę BMP280 lub sam wyświetlacz - LCD zaczyna "wariować" zmienia się kontrast lub czasami zawiesza się odczyt.
Objawy typowe dla bramu masy, słabego styku.
Mając sprzęt i wiedzę szybko znajdziesz błąd.


PS
Czy gdy pojawiają się problemy z I2C dostajesz ACK?
A może magistrala ma na stałe SDA = L albo H?
 
Odpowiedź
#4
Jak masz zamiar rozwijać dalej kod w oparciu o zarządzanie czasem z delay to nie, nie nadaje się. Na początek poznaj millis. Można podłączać wiele czujników pod jedną magistralę I2C jeśli tylko mają różne adresy. Te do arduino zwykle mają wlutowane rezystory podciągające do każdego modułu, więc musisz sprawdzić jakie, tak by wypadkowa rezystancja nie była zbyt mała, powyżej 1k powinno działać. Migać/zawieszać się może bo coś możesz mieć nie tak ze stykówką, kabelkami, zimnymi lutami.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
Jestem w trakcie testów aplikacji mobilnej do prezentowania danych pogodowych z własnej stacji pogodowej opartej na arduino lub innych tego typu rozwiązaniach. Sprawdzam jakie jest zainteresowanie tym tematem i niedługo wykupię serwer do tego rozwiązania. Szukam osób które są zainteresowane takim rozwiązaniem i chciałby przetestować aplikację w praktyce (nie jest jeszcze publicznie dostępna). Zapraszam do zapoznania się

simplyclime.gearhostpreview.com/
 
Odpowiedź
#6
(25-10-2019, 16:42)loczek111 napisał(a): Jestem w trakcie testów aplikacji mobilnej do prezentowania danych pogodowych z własnej stacji pogodowej opartej na arduino lub innych tego typu rozwiązaniach. Sprawdzam jakie jest zainteresowanie tym tematem i niedługo wykupię serwer do tego rozwiązania. Szukam osób które są zainteresowane takim rozwiązaniem i chciałby przetestować aplikację w praktyce (nie jest jeszcze publicznie dostępna). Zapraszam do zapoznania się

simplyclime.gearhostpreview.com/

Myślę że nikt takim kodem zainteresowany nie będzie.
Pomijam Delay(60000) nawet, ale widzisz że w kodzie nie masz żadnego sprawdzania czy nastąpił poprawny odczyt ? Dzięki temu stworzysz globalna sieć śmieciowych wyników nie mających żadnego pokrycia w rzeczywistości, więc zapomnij by ktoś chciał to użyć Smile
 
Odpowiedź
#7
(25-10-2019, 17:47)PiegowatyGuziec napisał(a):
(25-10-2019, 16:42)loczek111 napisał(a): Jestem w trakcie testów aplikacji mobilnej do prezentowania danych pogodowych z własnej stacji pogodowej opartej na arduino lub innych tego typu rozwiązaniach. Sprawdzam jakie jest zainteresowanie tym tematem i niedługo wykupię serwer do tego rozwiązania. Szukam osób które są zainteresowane takim rozwiązaniem i chciałby przetestować aplikację w praktyce (nie jest jeszcze publicznie dostępna). Zapraszam do zapoznania się

simplyclime.gearhostpreview.com/

Myślę że nikt takim kodem zainteresowany nie będzie.
Pomijam Delay(60000) nawet, ale widzisz że w kodzie nie masz żadnego sprawdzania czy nastąpił poprawny odczyt ? Dzięki temu stworzysz globalna sieć śmieciowych wyników nie mających żadnego pokrycia w rzeczywistości, więc zapomnij by ktoś chciał to użyć Smile
Delay jakiego używam i jaki jest póki co ograniczony wynosi 5 minut - dzięki za informację bo zapomniałem zmienić na stronie. Gdy będzie potrzebny mniejszy - napisz, zmienię choćby indywidualnie dla Ciebie na dowolną wartość.

Co do śmieciowych wyników, osoba dodająca swoją stację pogodową będzie mogła mierzyć wszystko na co będzie miała ochotę - taki jest zamysł. Aby móc używać tego do sensownego odczytu pogody będę potrzebował mnóstwa stacji - wtedy pomyślę nad algorytmami które obrobią tonę danych i aby te były użyteczne, na razie nie zakładam abym osiągnął tylu użytkowników.

Jeśli chciałbyś zwykłą pogodę, bez własnej stacji to aplikacja korzysta z API innych serwisów meteorologicznych.
 
Odpowiedź
#8
Delay w tym wypadku to nie porozumienie, dajesz komuś kod który działa jako tako Sad Tak samo wyniki pomiarów, jedna pętla sprawdzająca i blok na 5min.... tak tego się nie robi bo to śmietnik a nie kod
 
Odpowiedź
#9
(25-10-2019, 20:09)PiegowatyGuziec napisał(a): Delay w tym wypadku to nie porozumienie, dajesz komuś kod który działa jako tako Sad Tak samo wyniki pomiarów, jedna pętla sprawdzająca i blok na 5min.... tak tego się nie robi bo to śmietnik a nie kod
Delay musi być aby baza danych nie padła w 5 minut. Ja swoją stację pogodową mam opartą na powerbanku i panelu słonecznym. Stacja jest w większości czasu w trybie uśpienia (oszczędzanie energii), wybudza się raz na 30 minut, przez 10 sekund robi pomiary, uśrednia je i wysyła do bazy. W takim systemie aplikacja się sprawdza.

Jeśli zależy Ci na wynikach w czasie rzeczywistym to mogę pomyśleć nad rozwiązaniem w którym włączając aplikację, ta odpytuje mikrokontroler i komunikuje się w nim w czasie rzeczywistym, z pominięciem bazy danych (a więc wyniki będą mogły być zapisywane ewentualnie w aplikacji na telefonie).

Szczerze mówiąc podoba mi się ten pomysł, zrealizuje go lecz nie od razu - nie jest to taka prosta sprawa, a ponieważ na razie rozpoczynam rozruch aplikacji więc jestem nastawiony na poprawki błędów w pierwszej kolejności.
 
Odpowiedź
#10
(26-10-2019, 11:53)loczek111 napisał(a): Delay musi być aby baza danych nie padła w 5 minut.....
Są inne sposoby zarządzania czasem, dając delay skazujesz projekt na nie powodzenie, bo prędzej czy później będą z tego powodu błędy....
Jest masa innych sposobów by wysyłać coś do bazy danych z jakimś interwałem a nie blokując program.
Może bardziej obrazowo, gdy stoisz na czerwonym świetle w samochodzie to:
1. Pomijasz dalszą jazdę i czekasz na zielone robiąc coś innego (milis przykładowo)
2. Pomijasz dalszą jazdę (silnik automatycznie gaśnie bo nie musi pracować gdy stoi)  (sleep na czas braku aktywności)
3. Pomijasz dalszą jazdę trzymając pedał w podłodze kręcąc silnik do odcinki i nie robiąc nic innego (delay)
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości