25-03-2016, 18:54
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?
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);
}