• 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
Przełącznik instalacji lpg na arduino
#1
Witam,

Składam automatyczny przełącznik do instalacji lpg do starej instalacji na gaźniku impco w amerykańcu.
Zasada bardzo prosta, szczytuję temperaturę z silnika (czujnik licznika) oraz tps (czujnik położenia przepustnicy)
gdy silnik osiągnie zadaną temperaturę i obroty arduino ma włączyć przekaźnik.
Na załączonym tylko zapłonie wszystko działa, problem występuje po odpaleniu silnika gdy sczytuję wartości temperatury, wygląda mi to na zakłucenia.
Na wejściu czujnika mam dzielnik napięcia z diodą zenera 5.1v.
Arduino nano. Czujnik rezystancyjny jest podłączony pod ecu zegary samochodu.
poniżej screen z odczytu wartości w trakcie odpalania
Jestem świeżakiem w arduino, da się jakoś wyeliminować te zakłucenia?
Kod:
float tempsilnika =0;
float vtps = 0;
float vtempin = 0;
float vtempout = 0;
float vtaver= 0;
float odczyt = 0;
float vLPG = 5.00;
float vtpsLPG = 0.8;

void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT); //led
  pinMode(3, OUTPUT); // przekaznik
  digitalWrite(3, HIGH);
  pinMode(4, INPUT_PULLUP); //przycisk
}

void loop()
{
  
//odczytywanie
  vtps = analogRead(0)*5/1024.0;
  vtempin = analogRead(2)*5/1024.0;
  vtempin = vtempin - 0.5;
  vtempin = vtempin / 0.01;
  
// średnia napiecia temperatury silnika
for (int i=0; i<10; i++)
      {
      tempsilnika = analogRead(1)*5/1024.0 ;

      if (tempsilnika < tempsilnika - 1.5)

      {} else {
        tempsilnika = tempsilnika;
        }
        vtaver = (vtaver+tempsilnika);
      }
        vtaver /= 10;

Serial.print(vtaver); Serial.print(" AVC  ");
Serial.print(tempsilnika); Serial.print(" C ENG  ");
Serial.print(vtps); Serial.print(" TPS  "); Serial.print(vtempin); Serial.println(" C INT  ");
//automatyczne przelaczanie lpg

  if (digitalRead(4) == LOW) {
  
  if (tempsilnika>vLPG)
      {
        digitalWrite(13,HIGH);
        delay(200);
        digitalWrite(13,LOW);
       }

      else if (vtps>=vtpsLPG)

      {      
        digitalWrite(3, LOW);
        digitalWrite(13,HIGH);
     }}

      else
     {
      digitalWrite(3, HIGH);
      digitalWrite(13, LOW);
      }

      

      
    
  

//logi

delay(1000);
}
 
Odpowiedź
#2
dołóż kondziora 10uf (mikro) na pomiar i zobacz czy się uspokoiło .
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#3
Coś tam pomogłoSmile Jutro bardziej oblookam
 
Odpowiedź
#4
Kod:
if (vtempc<vLPG) // temperatura silnika < temperatura zadana
          {
           if (vtps<vtpsLPG) // położenie przepustnicy < położenie zadane
           {
           digitalWrite(3, LOW); //przekaźnik
           
           }
          }

Przełączenie na lpg następuje po przegazowaniu, ale gdy puszczę pedał gazu drugi warunek IF już jest nie spełniony w kolejnej pętli i wyłącza przekaźnik, jak zrobić żeby gdy już spełnią się warunki nie sprawdzać ich drugi raz aż do resetu arduino?
 
Odpowiedź
#5
Musisz wstawić więcej kodu.
Pomogłem? Dodaj punkt reputacji Smile
 
Odpowiedź
#6
Gdzieś masz zdeklarowane że bez spełnienia warunków przekaźnik wyłącza się a jeżeli ma się włączyć i trzymać to nie możesz tak mieć . Poniżej masz kod w którym raz załączony przekaźnik będzie trzymał do resetu arduino . Jeżeli po resecie nie będą spełnione warunki to się nie załączy .

np.

Kod:
int tempc = 0;
int tempin = 7;
int tpssensor = 1;
int vtempLPG = 3.23;
int przepustnica = 0 ;

void setup()
{
Serial.begin(9600);
                  
pinMode(13, OUTPUT); //led
pinMode(3, OUTPUT); // przekaznik

digitalWrite(13, LOW); // ustawienie początkowe przekaźników
digitalWrite(3, HIGH); // ustawienie początkowe przekaźników

}

void loop()                    
{

int retempc = analogRead(tempc);  
float vtempc = retempc * 5.0;
vtempc /= 1024.0;
Serial.print(vtempc); Serial.println(" V");

if ( vtempc < vtempLPG and przepustnica >= 1500 ) {

           digitalWrite(13, HIGH);
           digitalWrite(3, LOW);
          }
            
delay(1000);                                  
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#7
Dzięki, doszedłem już sam do tego, w pierwszym poście zaktualizowałem kod
Przepiąłem arduino bez dzielników bezpośrednio pod ecu auta.
W dalszym ciągu mam problem z odczytami temperatury, zacząłem liczyć średnią wyników ale też słabo to wygląda
Może by odrzucić niepasujące wyniki do średniej?

log z Coma 

4.47 AV  4.25 C ENG  0.65 TPS  17.38 C INT  
4.47 AV  4.25 C ENG  0.65 TPS  17.38 C INT  
3.93 AV  2.04 C ENG  0.65 TPS  17.38 C INT  
4.45 AV  4.25 C ENG  2.80 TPS  15.92 C INT  
4.47 AV  4.25 C ENG  0.64 TPS  17.38 C INT  
4.48 AV  4.25 C ENG  0.65 TPS  17.38 C INT  
4.48 AV  4.25 C ENG  0.64 TPS  17.38 C INT  
4.48 AV  4.26 C ENG  0.64 TPS  17.38 C INT  
2.23 AV  2.01 C ENG  0.64 TPS  17.38 C INT  
4.37 AV  4.26 C ENG  0.64 TPS  17.38 C INT  
4.47 AV  4.25 C ENG  0.64 TPS  17.38 C INT  
4.48 AV  4.26 C ENG  0.65 TPS  17.38 C INT  
4.48 AV  4.24 C ENG  0.64 TPS  17.38 C INT  
4.48 AV  4.26 C ENG  0.65 TPS  17.38 C INT  
1.84 AV  2.07 C ENG  0.64 TPS  15.43 C INT  
4.37 AV  4.50 C ENG  0.64 TPS  15.43 C INT  
4.49 AV  4.51 C ENG  0.64 TPS  14.94 C INT  
4.50 AV  4.51 C ENG  0.65 TPS  15.43 C INT  
4.50 AV  4.50 C ENG  0.64 TPS  15.43 C INT  
4.50 AV  4.50 C ENG  0.64 TPS  15.43 C INT  
4.50 AV  4.52 C ENG  0.65 TPS  15.43 C INT  
4.50 AV  4.50 C ENG  0.65 TPS  15.43 C INT  
4.50 AV  4.51 C ENG  0.65 TPS  15.43 C INT  
2.06 AV  2.06 C ENG  0.64 TPS  15.43 C INT  
4.38 AV  4.51 C ENG  0.66 TPS  14.94 C INT  
4.50 AV  4.51 C ENG  0.65 TPS  15.43 C INT  
4.50 AV  4.51 C ENG  0.65 TPS  14.94 C INT  
4.50 AV  4.51 C ENG  0.65 TPS  15.43 C INT  
4.50 AV  4.51 C ENG  0.65 TPS  15.43 C INT 
4.28 AV  4.51 C ENG  0.65 TPS  15.92 C INT  
4.49 AV  4.52 C ENG  0.65 TPS  15.43 C INT  
4.50 AV  4.51 C ENG  0.65 TPS  15.92 C INT  
4.51 AV  4.51 C ENG  0.65 TPS  15.43 C INT

Opis czujnika temperatury jest zasilany 5V z ecu
[Obrazek: 4036012588a761e7med.jpg]
 
Odpowiedź
#8
zrób sobie wykluczenie coś jak to :

Kod:
odczyt = analogRead(A0);

if ( odczyt < ( tempsilnika - 1.5  ) ){

tempsilnika = tempsilnika; // w zasadzie linijka nie potrzebna ale tak poglądowo

} else { tempsilnika = odczyt ;

Jeżeli kolejny odczyt będzie różnił się o 1.5 to ją oleje i pozostawi poprzedni odczyt
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#9
Sprubóje , się zastanawiam czy to jakiś błąd odczytu arduino czy czujnik jest uszkodzony
 
Odpowiedź
#10
Dalej coś nie tak z tymi odczytami, chyba kupię nowy czujnik
A drugi błąd to w momencie załączenia przekaźnika odczyty na czujniku temp, tps i temp2 podskakują do góry
po wyłączeniu przekaźnika przyciskiem spadają spowrotem

Kod:
3.01 AVC  2.73 C ENG  0.65 TPS  15.43 C INT  
3.03 AVC  2.72 C ENG  0.64 TPS  14.45 C INT  
3.03 AVC  2.73 C ENG  0.65 TPS  15.43 C INT  
3.03 AVC  2.73 C ENG  0.65 TPS  15.43 C INT  
3.03 AVC  2.73 C ENG  0.65 TPS  15.43 C INT  
3.03 AVC  2.73 C ENG  2.84 TPS  14.45 C INT  
3.03 AVC  2.73 C ENG  2.84 TPS  14.94 C INT  
3.18 AVC  2.89 C ENG  0.70 TPS  19.82 C INT  
3.20 AVC  2.88 C ENG  0.69 TPS  19.82 C INT  
3.20 AVC  2.89 C ENG  0.69 TPS  19.34 C INT  
3.20 AVC  2.89 C ENG  0.69 TPS  19.34 C INT  
3.20 AVC  2.88 C ENG  0.69 TPS  19.82 C INT  
3.20 AVC  2.88 C ENG  0.69 TPS  19.34 C INT  
3.20 AVC  2.88 C ENG  0.68 TPS  19.34 C INT  
3.20 AVC  2.88 C ENG  0.68 TPS  19.34 C INT  
3.20 AVC  2.87 C ENG  0.69 TPS  19.82 C INT  
3.20 AVC  2.89 C ENG  0.68 TPS  18.85 C INT  
3.05 AVC  2.73 C ENG  0.64 TPS  14.94 C INT  
3.04 AVC  2.72 C ENG  0.65 TPS  15.43 C INT  
3.03 AVC  2.73 C ENG  0.64 TPS  15.43 C INT  
3.03 AVC  2.72 C ENG  0.64 TPS  13.48 C INT  
3.03 AVC  2.73 C ENG  0.64 TPS  15.43 C INT  
3.03 AVC  2.73 C ENG  0.65 TPS  15.43 C INT  
3.03 AVC  2.73 C ENG  0.64 TPS  14.94 C INT  
3.03 AVC  2.73 C ENG  0.64 TPS  14.94 C INT 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości