• 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
Wskazania poziomu lpg w aucie + zegarek
#1
Witam.
Nie robiąc reklamy użytkownikowi elektro maras z YT chciałem napisać, że zafascynował mnie tym arduino itd.
Zamówiłem sobie więc z płytę uno R3 i mega + wyświetlacz 16x2
Mój zamiar to zrobienie zegarka w aucie + wskazanie poziomu LPG.
Udało mi się już raz uruchomić arduino i wyświetliło napis... JUPI Smile
Ale do rzeczy.
Chcę zrobić zegarek + ewentualnie data w jednej lini.
A druga linia ma być na poziom LPG w butli.
czujnik mam hallotronowy i działa w przedziale 0-5V
0V dla pełnego baku
5V dla pustego
Dokładne wartości jakie są skrajne właśnie mierze.
Przede wszystkim chciałbym kogoś prosić o pomoc bo nie rozumiem jak mam się za to zabrać.
Dodam, że sama wartość z czujnika podczas postoju wskazuje równą wartość ale gorzej jak się jedzie.
Np. na postoju jest 2V ale jadąc wskazuje już przedział od 1,3v do 2,8v więc wynik który będzie wyświetlany musiałby być jakoś uśredniony ale działać z opóźnieniem.
Jako, że to lpg to też nie da się zrobić dokładnie i myślę nad zrobieniem przedziałów dla wskazania.
czyli np. 1/5 baku 2/5 baku czy 5/5 baku względnie czy skrajnie małej wartości napis "rezerwa".
Niestety moja instalacja LPG nie ma możliwości wskazania poziomu i zostało by mi wymienić kompa od lpg i elektryki.
A płyta arduino i tak będzie z zegarkiem.
Bardzo proszę jeżeli się da kogoś o pomoc.

https://www.youtube.com/watch?v=4v91Z29nQ_g

   
 
Odpowiedź
#2
Masz tutaj na początek do zabawy

10 odczytów co 0,5 sek po 10 odczycie zliczenie średniej i mapowanie na 0 - 100 %

Kod:
int POM[10];
byte x = 0 ;
long Pm = 0 ;
byte Srednia = 0 ;
byte LPG = 0 ;

void setup() {

Serial.begin(9600);

}

void loop() {

   long Cm = millis();

// odczyt 10 pomiarów ze zbiornika co 0,5 sekundy (500 milisekund) i zapisanie do tabeli

if ( Cm - Pm >= 500 ){

     int pom = analogRead(A0)/4; // odczyt z pinu A0 można zmienić
     POM[x] = pom ;
     x = x + 1 ;
     Pm = Cm ;
  }

// uśrednienie wyników pomiarów co 10-ty pomiar

if ( x > 9 ){
      
Srednia = (POM[0]+POM[1]+POM[2]+POM[3]+POM[4]+
      POM[5]+POM[6]+POM[7]+POM[8]+POM[9])/10 ;

      x = 0;

  }
  
// zmiana wyniku pomiaru na stan procentowy 0-100%

LPG = map( Srednia,0,255,0,100 ); // podstaw za 2 pierwsze zmienne dla 0 min odczyt z czujnika
// za 255 max odczyt czujnika

// kontrolnie do odczytu można usunąć później

  Serial.print(x);
  Serial.print('-');
  Serial.print(POM[0]);
  Serial.print('/');
  Serial.print(POM[1]);
  Serial.print('/');
  Serial.print(POM[2]);
  Serial.print('/');
  Serial.print(POM[3]);
  Serial.print('/');
  Serial.print(POM[4]);
  Serial.print('/');
  Serial.print(POM[5]);
  Serial.print('/');
  Serial.print(POM[6]);
  Serial.print('/');
  Serial.print(POM[7]);
  Serial.print('/');
  Serial.print(POM[8]);
  Serial.print('/');
  Serial.print(POM[9]);
  Serial.print('~');
  Serial.print(Srednia);
  Serial.print('=');
  Serial.println(LPG);

}

posprzątałem troszkę w kodzie
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#3
Dobra...
Zacznę jednak niżej. 
W piaskownicy chociaż dzieci potrafią się bawić. Mi ciągle błąd kompilacji wyświetla.
   
Tak to polutowałem. Miernikiem sprawdzałem i są przejścia.
W module zegarka jest akumulator a nie bateria.
Raz w życiu udało mi się wyświetlić na ekranie według tutoriala "elektromaras"
Dzięki w ogóle za zainteresowanie. Według tego co mówią we filmiku nawet nie potrafię wgrać obsługi zegara a co dopiero wskaźnik LPG. 
Nie wiem jak to ogarnąć. Brakuje mi czasu a to co czytam to nie wiem czy wina, że płyty mam chińskie? Sterowniki są dobre i komputer wykrywa je poprawnie. W programie zmieniam na daną płytę. 
   

Biblioteki jakieś wgrywałem i jakieś program się ładują. Ale nic nie chce działać. Najchętniej bym to komuś wysłał żeby mi ogarnął.

W razie czego mam do wyboru jeszcze płytę UNO R3 też z chin.
Kod:
#include <FastIO.h>
#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>


#include <LiquidCrystal_I2C.h>
#include <Wire.h>


#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(0x27, 2,1,0,4,5,6,7);

void setup() {
 lcd.begin(16,2);
 lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
 lcd.setBacklight(HIGH);

 lcd.home();
 lcd.print("Forum RLKP");
}
void loop() {
 lcd.setCursor(0,1);
 lcd.print(millis()/10);
}
haha takie coś kiedyś pisałem i działa Smile
Ruszyła płyta UNO R3 
   
Kod:
#include <Wire.h>
#include <RTClib.h>


#include <LiquidCrystal_I2C.h>

RTC_DS1307 RTC;
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlightpin, polarity
String dateLcd;

void setup () {
   Serial.begin(9600);
   Wire.begin();
   RTC.begin();
   lcd.begin(16,2);
   lcd.backlight();
   // following line sets the RTC to the date & time this sketch was compiled
   RTC.adjust(DateTime(__DATE__, __TIME__));
  if (! RTC.isrunning()) {
   Serial.println("RTC is NOT running!");
 }
}

void loop () {
   DateTime now = RTC.now();
   dateLcd = String(now.hour(), DEC) + ":" + String(now.minute(), DEC) + ":" + String(now.second(), DEC);
   Serial.println(dateLcd);
   lcd.setCursor(0, 0);
   lcd.print(dateLcd);
   delay(1000);
}
Tak mi to idzie :Smile

   
Teraz problem w tym, że zegarek nie pamięta godziny. Odłączę go a on się resetuje.
I jak połączyć to wszystko w całość?
 
Odpowiedź
#4
w module zegarka jest bateria litowa cr2032 3Volt-y a nie akumulator , jak ma mniej niż 2,5v to zegar ci się zresetuje po odłączeniu zasilania . Poza tym , w linijce poniżej ustawiasz datę i czas i ok ale po ponownym podłączeniu kod programu robi to ponownie . Wgraj program z ustawioną godziną , skasuj linijkę z programu i wgraj jeszcze raz .

RTC.adjust(DateTime(__DATE__, __TIME__));
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#5
Jak kupowałem to własnie ktoś pisałem o baterii i skoro to litowe to też bateria o o niej. Taka jest w środku właśnie Smile
Faktycznie teraz działa super zegarek.
Problem taki mały aby jest Big Grin wyświetla np. 21:2:02 czyli jest jest 1-9min to nie ma 0 przed tym. Rozumiesz?
A pytanie dalsze jak zmierzać ten program do gazu z tym zegarkiem? Bo mi cały czas błąd kombilacji wywala.
 
Odpowiedź
#6
Zerknij czy ci zadziała i daj link do biblioteki zegarka bo mam 3 i żadna nie działa

Kod:
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>

RTC_DS1307 RTC;
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlightpin, polarity
String dateLcd;

int POM[10];
byte x = 0 ;
long Pm = 0 ;
byte Srednia = 0 ;
byte LPG = 0 ;

int Godzina ;
int Minuta ;
int Sekunda ;

void setup () {
   Serial.begin(9600);
   Wire.begin();
   RTC.begin();
   lcd.begin(16,2);
   lcd.backlight();
   // following line sets the RTC to the date & time this sketch was compiled
   RTC.adjust(DateTime(__DATE__, __TIME__));
  if (! RTC.isrunning()) {
   Serial.println("RTC is NOT running!");
}
}

void loop () {
  
       long Cm = millis();

if ( Cm - Pm >= 500 ){

     int pom = analogRead(A0)/4; // odczyt z pinu A0 można zmienić
     POM[x] = pom ;
     x = x + 1 ;
     Pm = Cm ;
  }

if ( x > 9 ){
      
Srednia = (POM[0]+POM[1]+POM[2]+POM[3]+POM[4]+
      POM[5]+POM[6]+POM[7]+POM[8]+POM[9])/10 ;
      x = 0;
  }
  
LPG = map( Srednia,0,255,0,100 ); // podstaw za 2 pierwsze zmienne dla 0 min odczyt z czujnika
  
   DateTime now = RTC.now();
  
   Godzina = (now.hour(),DEC);
   Minuta = (now.minute(),DEC);
   Sekunda = (now.second(),DEC);
  
   lcd.setCursor(0, 0);
   zero(Godzina);
   lcd.print(':');
   zero(Minuta);
   lcd.print(':');
   zero(Sekunda);
  
   lcd.setCursor(0, 1);
   lcd.print(LPG);
}

void zero(int number) {
  
if (number < 10){lcd.print('0');lcd.print(number);}
  else {lcd.print(number);}

}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#7
Masz bibliotekę. Chyba to ta jest. 
Więc problem bo zegarek stoi w miejscu jak widać na zdjęciu.
Natomiast pod spodem pokazuje się wynik i naprawdę to działa... ale.
Będzie problem albo i nie. Wskazania dla pustego baku to ok 5V a dla pełnego ok 0V.
Więc kurdę odwrotnie. Może to utrudnić albo i nie.
Na razie sygnał generuje przetwornicą z potencjometrem i kręcąc wynik wyświetla po chwili i jest uśredniony więc naprawdę jest super i w ogóle dla mnie jesteś Bogiem programowania. 
Za ok tydzień będę mieć pusty bak gazu w aucie i poznam dokładne wartości dla pustego i pełnego.


Załączone pliki Miniatury
   

.zip   rtclib.zip (Rozmiar: 44.25 KB / Pobrań: 0)
 
Odpowiedź
#8
no to problem nie jest

zamień LPG = map( Srednia,0,255,0,100 ); na LPG = map( Srednia,0,255,100,0 );

co do zegara szukaj gdzieś jest błąd , nie mam żadnego ds-a na stanie to nie sprawdzę
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#9
Chciałem jeszcze na wstępie zapytać czy jak już będzie zasuwać program i takie tam. To zmieniając wyświetlacz z 16x2 na 20x4 nie będzie problemu z dodaniem innych funkcji?
mam w aucie czujniki NTC od temperatury w aucie i na zewnątrz. Może da się też to podłączyć pod arduino i bym zrobił taki wyświetlacz z informacjami ?
http://www.reveltronics.com/pl/sklep/49/...taw-detail
Takie coś posiadam i pod to jest podłączone. Generalnie tam korzystam ze spalania i dystansów trasy.
Ale czujniki NTC są podłączone pod to z napięcie 5V. Więc do arduno bym aby podłączyć sygnałowe i np. Za datą wrzucił wyświetlanie obu wartości po ukośniku.
A jak się ma sprawa z podłączeniem tego pod jakiś lepszy ekranik?
Są jakieś LCD ciekłokrystaliczne w kolorze 3.2 cala 320x480 a tam pewnie jakieś grafiki można zrobić.
Tylko czy to nie będzie już za ambitnie?
Samo dorzucenie temperatury będzie już fajne i w ogóle super że tyle się udało uruchomić.
Jak pisałem wcześniej posiadam jeszcze płytę mega 2560
 
Odpowiedź
#10
Granicą możliwości jest tylko wyobraźnia ...............
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości