Arduino Polska Forum

Pełna wersja: Przełącznik instalacji lpg na arduino
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
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);
}
dołóż kondziora 10uf (mikro) na pomiar i zobacz czy się uspokoiło .
Coś tam pomogłoSmile Jutro bardziej oblookam
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?
Musisz wstawić więcej kodu.
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);                                  
}
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]
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
Sprubóje , się zastanawiam czy to jakiś błąd odczytu arduino czy czujnik jest uszkodzony
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 
Stron: 1 2