26-11-2017, 20:18
Cześć
Chciałem sobie zrobić na zimę dodatkowe elektryczne podgrzewanie do auta, 3 świece żarowe po 10A każda zamontowane w aluminiowej obudowie i wpięte szeregowo przed nagrzewnicę w samochodzie.
Sterowanie miało odbywać się na zasadzie pomiaru napięcia akumulatora (ładowany lub nie - silnik odpalony lub nie) oraz temperatury wody w układzie chłodzenia.
Na płytce stykowej wszystko działa perfekcyjnie, pomiar temperatury, pomiar napięcia, sterowanie przekaźnikiem jednak po montażu wartości są niezgodne. Arduino pokazuje napięcie (po dzielniku) 4.25V a faktycznie jest tam 3.85v. Ta rozbieżność prowadzi do nieprzerwanego włączania grzałki.
Kod mimo że nie jest jakiś piękny wydaje mi się być w porządku skoro prototyp na biurku działa.
Będę wdzięczny za każdą pomoc
Chciałem sobie zrobić na zimę dodatkowe elektryczne podgrzewanie do auta, 3 świece żarowe po 10A każda zamontowane w aluminiowej obudowie i wpięte szeregowo przed nagrzewnicę w samochodzie.
Sterowanie miało odbywać się na zasadzie pomiaru napięcia akumulatora (ładowany lub nie - silnik odpalony lub nie) oraz temperatury wody w układzie chłodzenia.
Na płytce stykowej wszystko działa perfekcyjnie, pomiar temperatury, pomiar napięcia, sterowanie przekaźnikiem jednak po montażu wartości są niezgodne. Arduino pokazuje napięcie (po dzielniku) 4.25V a faktycznie jest tam 3.85v. Ta rozbieżność prowadzi do nieprzerwanego włączania grzałki.
Kod mimo że nie jest jakiś piękny wydaje mi się być w porządku skoro prototyp na biurku działa.
Kod:
#define THERMISTORPIN A1
#define THERMISTORNOMINAL 4700
#define TEMPERATURENOMINAL 25
#define NUMSAMPLES 5
#define BCOEFFICIENT 3950
#define SERIESRESISTOR 10000
#include <Wire.h>
#include <math.h>
int temp;
int samples[NUMSAMPLES];
float input_voltage = 0.0;
#define grzalka 7
#define LED1 4 //zielona
#define LED2 6 //czerwona
#define przycisk 2
void setup()
{
pinMode(grzalka, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(przycisk, INPUT_PULLUP);
pinMode(A1, INPUT);
pinMode(A7, INPUT);
Serial.begin(9600);
//analogReference(EXTERNAL);
}
void loop()
{
{
int analog_value = analogRead(A7);
input_voltage = ((analog_value * 5.0)/ 1023.0) * 3.2;
Serial.print("Napiecie: ");
Serial.println(input_voltage);
}
{
uint8_t i;
float average;
for (i=0; i< NUMSAMPLES; i++) {
samples[i] = analogRead(THERMISTORPIN);
delay(10);
}
average = 0;
for (i=0; i< NUMSAMPLES; i++) {
average += samples[i]; }
average /=NUMSAMPLES;
// convert the value to resistance
average = 1023 / average - 1;
average = SERIESRESISTOR / average;
// Serial.print("Thermistor resistance ");
// Serial.println(average);
float steinhart;
steinhart = average / THERMISTORNOMINAL; // (R/Ro)
steinhart = log(steinhart); // ln(R/Ro)
steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro)
steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
steinhart = 1.0 / steinhart; // Invert
steinhart -= 273.15; // convert to C
temp = steinhart;
if(temp < -50 && temp > 150){
temp = 150; }
}
Serial.print("Temperatura: ");
Serial.println(temp);
{
if(input_voltage > 12.8 && input_voltage < 16) {
delay(3000);
digitalWrite(LED1, HIGH);
if(temp < 60){
digitalWrite(grzalka, HIGH);
digitalWrite(LED2, HIGH); }
if(temp >= 60) {
digitalWrite(grzalka, LOW);
digitalWrite(LED2, LOW);}
}
else {
digitalWrite(grzalka, LOW);
digitalWrite(LED1, LOW);}
delay(500);
}
}