• 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
#31
Tu masz z termometrami ale jak odczytać numer czujnika to sobie sam poszukaj

Kod:
//#include <ShiftRegLCD123.h>
//ShiftRegLCD123 lcd( 7, 6, SRLCD123);  

#include <Wire.h>
#include "RTClib.h"

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlightpin, polarity

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Termo1 = { 0x28, 0x6E, 0xC0, 0x03, 0x00, 0x00, 0x80, 0xE8 };  // tutaj i poniżej musisz wstawić numer swojego czujnika bo nie zadziała
DeviceAddress Termo2 = { 0x28, 0x7D, 0xC8, 0x03, 0x00, 0x00, 0x80, 0xD4 };

RTC_DS1307 rtc;
    
  int rok ;
  byte miesiac ;
  byte dzien ;
  byte godzina ;
  byte minuta ;
  byte sekunda ;
  long pm ;
  long zm ;
  byte Lcd = 3;
  int POM[10];
  byte x = 0 ;
  long Pm = 0 ;
  byte Srednia = 0 ;
  byte LPG = 0 ;


void setup () {

  lcd.begin(16,2);  
  lcd.backlight();            
  lcd.clear();
  
  sensors.begin();
  
  sensors.setResolution(Termo1, 10);
  sensors.setResolution(Termo2, 10);
  
  Serial.begin(9600);
  
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    rtc.adjust(DateTime(2016, 5, 6, 18, 15, 0));
  }  
}

void loop () {
  
  sensors.requestTemperatures();
  
  long cm = millis();
  
   if ( cm - zm > 10000 ){
    
      Lcd ++ ;lcd.clear();zm = cm;
      if (Lcd > 3)Lcd = 1;
    
    }
  
  DateTime now = rtc.now();
    
    rok = now.year(),DEC;
    miesiac = now.month(),DEC;
    dzien = now.day(),DEC;
    godzina = now.hour(),DEC;
    minuta = now.minute(),DEC;
    sekunda = now.second(),DEC;
      
    if ( cm - pm >= 500 ){

     int pom = analogRead(A0)/4;
     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,9,201,0,100 ); // podstaw za 2 pierwsze zmienne dla 0 min odczyt z czujnika

switch(Lcd){

case 1:
    
      lcd.setCursor(3, 0);
      lcd.print(zero(dzien));
      lcd.print('/');
      lcd.print(zero(miesiac));
      lcd.print("/");
      lcd.print(rok);
      lcd.print("  ");

      lcd.setCursor(4, 1);
      lcd.print(zero(godzina));
      lcd.print(":");
      lcd.print(zero(minuta));
      lcd.print(":");
      lcd.print(zero(sekunda));
      lcd.print("  ");
  break;

case 2:

      lcd.setCursor(0, 0);
      lcd.print("Poziom     LPG");
      lcd.setCursor(0, 1);
      lcd.print("zbiornika");
      lcd.setCursor(11, 1);
      lcd.print(sto(LPG));
      lcd.print('%');
  break;
  
  
case 3:

float tempC1 = sensors.getTempC(Termo1);
float tempC2 = sensors.getTempC(Termo2);

      lcd.setCursor(0, 0);
      lcd.print("Tem Zew");
      lcd.setCursor(9, 0);
      if ( tempC1 == -127.00 ){lcd.print("Error");}
      else {lcd.print(tempC1);}
      lcd.print(' ');
      lcd.setCursor(0, 1);
      lcd.print("Tem Wew");
      lcd.setCursor(9, 1);
      if ( tempC2 == -127.00 ){lcd.print("Error");}
      else {lcd.print(tempC2);}
      lcd.print(' ');
  break;
  
  
  
    }    
}

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

int sto(int number) {
  
    if (number < 100){lcd.print('0');}
    if (number < 10){lcd.print('0');}
    return number;}

albo niech ci będzie tutaj masz gotowca Wink

http://arduino-info.wikispaces.com/Brick...individual
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#32
Dobra to już jest super.
Ale będę mieć problem bo niestety między 5V a VSS trzeba dać rezystor 4,7k i to pewnie zaburzy współpracę z UKP... więc mniejsze zło i arduino wygrywa potyczkę na władzę nad termometrem Big Grin
Teraz aby poczekam za wyświetlaczem i szpachlowanie daszku pod to.
No arduino wozi się już w aucie. Czeka na ekran 20x4 i montuję obok ukp... ale w ukp muszę niebieski ekran też zmontować bo ten jest kiepski.


Załączone pliki Miniatury
       
 
Odpowiedź
#33
to masz w nagrodę za wytrwałość bo mi się ten poziom paliwa nie podobał Wink

Kod:
//#include <ShiftRegLCD123.h>
//ShiftRegLCD123 lcd( 7, 6, SRLCD123);  

#include <Wire.h>
#include "RTClib.h"

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlightpin, polarity

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Termo1 = { 0x28, 0x6E, 0xC0, 0x03, 0x00, 0x00, 0x80, 0xE8 };
DeviceAddress Termo2 = { 0x28, 0x7D, 0xC8, 0x03, 0x00, 0x00, 0x80, 0xD4 };

RTC_DS1307 rtc;
    
  int rok ;
  byte miesiac ;
  byte dzien ;
  byte godzina ;
  byte minuta ;
  byte sekunda ;
  long pm ;
  long zm ;
  byte Lcd = 2;
  int POM[10];
  byte x = 0 ;
  long Pm = 0 ;
  byte Srednia = 0 ;
  byte LPG = 0 ;
  byte s = 0 ;
  
void setup () {

  lcd.begin(16,2);  
  lcd.backlight();            
  lcd.clear();
  
  sensors.begin();
  
  sensors.setResolution(Termo1, 12);
  sensors.setResolution(Termo2, 12);
  
  Serial.begin(9600);
  
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    rtc.adjust(DateTime(2016, 5, 6, 18, 15, 0));
  }  
}

void loop () {
  
  sensors.requestTemperatures();
  
  long cm = millis();
  
   if ( cm - zm > 10000 ){
    
      Lcd ++ ;lcd.clear();zm = cm;
      if (Lcd > 3)Lcd = 1;
    
    }
  
  DateTime now = rtc.now();
    
    rok = now.year(),DEC;
    miesiac = now.month(),DEC;
    dzien = now.day(),DEC;
    godzina = now.hour(),DEC;
    minuta = now.minute(),DEC;
    sekunda = now.second(),DEC;
      
    if ( cm - pm >= 500 ){

     int pom = analogRead(A0)/4;
     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,9,201,0,100 ); // podstaw za 2 pierwsze zmienne dla 0 min odczyt z czujnika

switch(Lcd){

case 1:
    
      lcd.setCursor(3, 0);
      lcd.print(zero(dzien));
      lcd.print('/');
      lcd.print(zero(miesiac));
      lcd.print("/");
      lcd.print(rok);
      lcd.print("  ");

      lcd.setCursor(4, 1);
      lcd.print(zero(godzina));
      lcd.print(":");
      lcd.print(zero(minuta));
      lcd.print(":");
      lcd.print(zero(sekunda));
      lcd.print("  ");
  break;

case 2:

      lcd.setCursor(0, 0);
      lcd.print("LPG PALIWO");
      lcd.setCursor(12, 0);
      lcd.print(sto(LPG));
      lcd.print('%');
      lcd.setCursor(0, 1);
      lcd.print('E');
      lcd.setCursor(15, 1);
      lcd.print('F');
      
      s = map(LPG,0,100,1,14);
      
      for ( int i = 1 ; i < s ; i++){
      lcd.setCursor(i, 1);
      lcd.print((char)255);
      }          
  break;
  
case 3:

float tempC1 = sensors.getTempC(Termo1);
float tempC2 = sensors.getTempC(Termo2);

      lcd.setCursor(0, 0);
      lcd.print("Tem Zew");
      lcd.setCursor(9, 0);
      if ( tempC1 == -127.00 ){lcd.print("Error");}
      else {lcd.print(tempC1);}
      lcd.print((char)223);
      lcd.print('C');
      lcd.print(' ');
      lcd.setCursor(0, 1);
      lcd.print("Tem Wew");
      lcd.setCursor(9, 1);
      if ( tempC2 == -127.00 ){lcd.print("Error");}
      else {lcd.print(tempC2);}
      lcd.print((char)223);
      lcd.print('C');
      lcd.print(' ');
  break;
   }    
}

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

int sto(int number) {
  
    if (number < 100){lcd.print(' ');}
    if (number < 10){lcd.print(' ');}
    return number;}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#34
Jaka wytrwałość? Trzeba słuchać mądrzejszych od siebieSmile Jeszcze będę się i tak uśmiechać jak chińczyk przyśle mi wyświetlacza... hehe a już wczoraj brat zaczął cisnąć temat czy nie będzie robić sterowania do akwarium CO2 i światłem bo spodobało mi się arduino.

Mam złą wiadomość. Mimo Twojego starania nie działa. Ale na szczęście problem jest w czujniku. Stoi w miejscu i nic nie pokazuje. Zamówiłem inny.
Będzie działać 0V dla pustego i 5V dla pełnego ale co ważniejsze będzie mieć wskazówkę do ustawienia w zaworze...
Pytanie na przód aby takie zadam co się stanie jak na wejście puszczę prąd np. 5.2v?? Spali się coś?

Masz fotkę niżej z czego na co wymieniam... nie umiem tego wyregulować i tyle... szkoda. Smile


Załączone pliki Miniatury
       
 
Odpowiedź
#35
ok to czekam na efekt końcowy Wink
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#36
Kod:
Szkic używa 2 700 bajtów z (8%) pamięci programu. Maksimum to 32 256 bajtów.
Globalne zmienne używają 222 bajtów z (10%) dynamicznej pamięci, pozostawiając 1 826 bajtów dla lokalnych zmiennch. Maksimum to  2 048 bajtów.
avrdude: verification error, first mismatch at byte 0x0000
        0xff != 0x0c
avrdude: verification error; content mismatch
Takie coś mi wywala. Chciałem nowe dane wprowadzić do czujnika
 
Odpowiedź
#37
Normalnie wszystko działało aż nie chciałem teraz mienić danych i wgrać na nowo program.
Cóż MEGA idzie w ruch.
Przerobię aby zasilanie na takie które załącza się dopiero jak auto już jest na chodzie. Może idzie jakoś zabezpieczyć wejście z czujnika LPG? Może tam jakieś napięcie poleciało za duże? Odpalałem auto z miernikiem i nigdy więcej jak 5V nie było.
 
Odpowiedź
#38
jaaaa ale ładny zrobiłeś ten wskaźnik gazu Smile bardzo się mi podoba.
 
Odpowiedź
#39
No więc adaptuje to wszystko na ekran 20x4. I problem pojawił się jeden. Po wyskalowaniu czujnika podczas postoju pokazuje idealnie stan lpg. Ale w trakcie jazdy wkurza mnie wartość która skacze. Więc cyfra procent wyrzucę. Dodatkowy minus jest taki, że podczas jazdy wszystko skacze do tego stopnia, że czasem jest 120% i nagle 80%.
To jak napisałeś na kwadracikach jest idealne.
 
Odpowiedź
#40
Widzę, że masz jakieś uśrednianie, ale może ustaw dłuższe odstępy czasowe i/lub więcej niż 10 pomiarów (skoro zostaje wolna pamięć).
Można też użyć pętli for do zsumowania tablicy, wtedy więcej elementów nie będzie problemem.

Obchodząc problem, może zapamiętać wynik z postoju i nie pozwolić na wyższe wskazanie (pomijając, że powinna być blokada <=100% Smile
 
Odpowiedź
  


Skocz do:


Przeglądający: 2 gości