oliedruk, temp en koeltemp in een oud jasje.

  • Ronald Damme (GAST)
  • Ronald Damme (GAST)'s Profielfoto
  • Offline
  • Platinum-lid
  • Platinum-lid
Lees meer
01-09-2013 19:11 #131593 door Ronald Damme (GAST)
Beantwoord door Ronald Damme (GAST) in topic oliedruk, temp en koeltemp in een oud jasje.
ik heb beide sensoren aan de bovenkant gemonteerd. Voor de volledigheid ik heb een 4-2-1 uitaat op een b18a met 38/38weber.

Tussen beide sensoren zat bij het opstarten net 0,4 graden verschil (19.1 en 19.4 buitentemperatuur)
Ik heb ze op het bureau gekalibreerd met kokend water. Ik zal binnenkort nog eens ijken naast de auto met kokend water.

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.

Lees meer
07-09-2013 22:30 #131800 door Laurens Zondag
Beantwoord door Laurens Zondag in topic oliedruk, temp en koeltemp in een oud jasje.
ziet er leuk uit.grappig dat je een arduino uno gebruikt hiervoor :O kennis van mij heeft op basis van arduino alles in zijn auto geregeld op secundaire dingen zoals meters, verlichting, ramen, antenne, CV en allemaal van dat soort ongijn als je echt zou willen moet je met een arduino zelfs een injectie computer kunnen maken :O succes verder !!

first car volvo 242 DL 1975
second one volvo 144 1968

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.

  • Ronald Damme (GAST)
  • Ronald Damme (GAST)'s Profielfoto
  • Offline
  • Platinum-lid
  • Platinum-lid
Lees meer
21-09-2013 16:35 #132234 door Ronald Damme (GAST)
Beantwoord door Ronald Damme (GAST) in topic oliedruk, temp en koeltemp in een oud jasje.
Inmiddels heb ik de sensoren een paar weken in de auto zitten en er zaten een paar kleine foutjes in. Deze hadden voornamelijk te maken met een wispelturige knop en een fout afgestelde minimumdruk. Nu deze opgelost te hebben zal ik een beschrijving maken van hoe ik alles geinstalleerd heb en wat ik nodig heb gehad.

Ook ik ben een beginner met electronica, dus als ik volgens iemand een rare stap neem voel je dan vrij om opbouwende kritiek te geven.

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.

  • Ronald Damme (GAST)
  • Ronald Damme (GAST)'s Profielfoto
  • Offline
  • Platinum-lid
  • Platinum-lid
Lees meer
21-09-2013 16:35 - 21-09-2013 17:02 #132235 door Ronald Damme (GAST)
Beantwoord door Ronald Damme (GAST) in topic oliedruk, temp en koeltemp in een oud jasje.
boodschappenlijstje:

De volgende items heb je nodig om hem hardware technisch in orde te maken.

een Arduino (Uno)

2 temperatuur sensoren (die geen massa maken met het frame)
1 oliedruksensor (ook geen massa met het frame)
12V - 5V USB-oplader

3 maal 1kohm weerstand
2 maal 470 ohm weerstand
1 maal een willekeurige weerstand
een tip 120 transistor

Een 2 kleurige LED (ik heb rood/groen gekozen)

Een oude benzinemeter (misschien zelfs 2)
een oude temperatuurmeter met een mooie plaat

een lichtverklikker (met melodie)

een momentary schakelaar (indrukken = aan, loslaten = uit)

een doos waar je alles in kan bouwen (ik heb een lasdoos gebruikt)

Sandwichplate voor tussen het oliefilter en het blok.
Een verloopstuk om de temperatuursensor in het orginele gat te plaatsen

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.

  • Ronald Damme (GAST)
  • Ronald Damme (GAST)'s Profielfoto
  • Offline
  • Platinum-lid
  • Platinum-lid
Lees meer
21-09-2013 16:36 - 21-09-2013 20:59 #132236 door Ronald Damme (GAST)
Beantwoord door Ronald Damme (GAST) in topic oliedruk, temp en koeltemp in een oud jasje.
Hierbij de eerste stappen

Als eerste is het handig om de benzinmeter om te bouwen naar de temeratuurmeter. Dit omdat je onvermijdelijk de stand van de wijzer veranderd en hier dient later rekening mee gehouden te worden.

Hoe bouw je de benzinemeter om:
Je draait de 2 schroevenlos waarmee de plaat vast zit. Vervolgens probeer je de plaat zo recht mogelijk omhoog te trekken zodat de wijzer losschiet.

Nu draai je op de plek waar eerst de benzinemeterplaat zat de temperatuurmeter plaat terug. (evt boor je eerst een 8mm gat voor de indicatieLED, op pagina 1 staat een foto waarvan de locatie van het gat afgeleid kan worden)

Vervolgens druk je het wijzertje terug. dit is een stap waar je voorzichtig mee moet zijn, omdat je snel het wijzertje of het pinnetje breekt. Daarom had ik dus 2 benzimeters nodig. Als het goed is heb je het nu resultaat zoals is weergegeven op pagina 1.

Vervolgens bouw je onderstaande testopstelling op:



Zowel de massa van het 5V circuit als die van het 12V circuit zijn met elkaar verbonden.

de temp sensoren hebben maar 2 draden. 1 willekeurige mag rechtstreeks op de 5V. De andere zul je moeten splitsen, een gedeelte via een 1k ohm naar de massa en de andere VOOR de weerstand naar een analoge ingang (A1 voor water, A2 voor olie)

Ook moet er voor nu een schuifweerstand aangesloten worden. Deze heeft een voeding en massa nodig en de uitgang mag direct op A0 aangesloten worden (wat de ingang/uitgang is moet je zelf even uitvogelen omdat dit voor elke schuifweerstand verschillend is)

vanuit poort ~9 gaat ern een kabel via een 1Kohm weerstand naar het 1e pootje (B). Het 2e pootje(C) gaat naar de G op de benzinemeter en het derde pootje(E) gaat naar de massa



Nadat je alles hebt aangesloten moet je de volgende code in de arduino laden.
int Schuifweerstand=A0;   //toewijzing van poorten
int Olietemp=A1;
int Watertemp=A2;

int OT;
int WT;
int SW;

int Transistor=9;

void setup(){
  pinMode(Transistor, OUTPUT); //toewijzing van uitgaande poort
  Serial.begin(9600); //dit zorgt ervoor dat je hem kan uitlezen op de pc
  
}

void loop(){
 OT=analogRead(Olietemp);
 WT=analogRead(Watertemp);
 SW=analogRead(Schuifweerstand)/4; //deelt de lezing door 4 omdat een transistor een bereik heeft van 0-255
 
 analogWrite(Transistor,SW);
 
  Serial.print("Schuifweerstand: ");
  Serial.println(SW);  
  Serial.print("OlieTemp: ");
  Serial.println(OT);
  Serial.print("WaterTemp: ");
  Serial.println(WT);
 // delay(500);   //evt aan of uit te zetten door de "//" weg te halen
}

door na de code geupload te hebben op de arduino kan je middels de toetsencombinatie Ctrl + Shift + M, de seriële monitor starten. Dit is een scherm waarin je de lezingen van de arduino live kan volgen. Door de delay(500) aan te zetten, krijg je 2 metingen per seconde ipv 1000. Aanzetten doe je door de // voor delay weg te halen.

Nu ga je middels de schuifweerstand de waardes opzoeken waarin de wijzer welke positie aanneemt. Voor dit project zijn de waardes van de eerste groene streep, begin rood (of tweede groene streep), halverwege rood, exact midden, uiterst links en uiterst rechts. Zoek al deze waarden op en noteer deze.

Ook ga je bij verschillende temperaturen kijken wel getal de sensoren aan gaan geven. Deze zullen altijd tussen de 0 en 1023 liggen. Neem zowiezo ook kokend water mee. Ijswater heeft volgens de specificaties geen zin omdat hij onder de 40 graden onzuiver wordt.

Noteer ook deze waarden bij de verschillende temperaturen.

Ik had het geluk dat beide sensoren nagenoeg dezelfde waarden gaven dus ik heb dezelfde omreken formule gebruikt.
De temepratuur ga je nu berekenen met temp=ax+b. waarbij x is de gemeten waarde, a de helling en b de startwaarde.

Voorbeeld ik mat 525 bij 38Gr en 895 bij 100Gr. De helling (100-38)/(895-525)=0.1676
temp=0.1676x+b
38=0.1676*525+b= 88+b b=88-38=50

temperatuur formule wordt: temp=0.1676*Temp-50

De druksensor heeft een specificatie blad die de verschillende waardes geeft bij een bepaalde druk. Dus die geeft de volgende formule. Druk= 0.0122x-1.23 (10 bar geeft 921 en 1 bar geeft 184)

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.

  • Ronald Damme (GAST)
  • Ronald Damme (GAST)'s Profielfoto
  • Offline
  • Platinum-lid
  • Platinum-lid
Lees meer
21-09-2013 16:37 - 21-09-2013 20:04 #132237 door Ronald Damme (GAST)
Beantwoord door Ronald Damme (GAST) in topic oliedruk, temp en koeltemp in een oud jasje.
Nu borduren we voor op de 1e opstelling en bouwen we onderstaande (definitieve) opstelling.


Beide temperatuursensoren blijven behouden.
de schuifweerstand is niet meer nodig.
de transistor en de benzinemeter blijven behouden.

de oliedrukmeter heeft 3 draden: rood 5v voeding, groen uitleesdraad en de zwarte massa.
de lichtverklikker gaat rechtstreeks op poort 2 en op de massa.

De leds worden aangestuurd vanuit poort 3(groene lamp) via een 470 ohms weerstand op de middellangste poot, poort 12 (rode lamp) via een 470 ohms weerstand naar de kortste poot. In dit geval is de langste poot de massa. De weerstanden zijn nodig omdat anders de led direct wordt opgeblazen.

De momentary knop heeft een 5V voeding en de massa wordt via een willekeurige weerstand op de massa aangesloten. Voor de weerstand gaat er een aftakking naar poort 13. Deze weerstand is echt nodig zodat hij een eventuele "restspanning"kwijt kan en dus geen valse waardes geeft.

Nu krijgt de arduino spanning via de pc. Hiervoor hebben we straks de usboplader nodig. in de auto soldeer je hem rechtstreeks vast op een vaste voedingsdraad en de oplader zet de 12v om naar een constante 5V voor de arduino.

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.

  • Ronald Damme (GAST)
  • Ronald Damme (GAST)'s Profielfoto
  • Offline
  • Platinum-lid
  • Platinum-lid
Lees meer
21-09-2013 16:37 - 21-09-2013 22:59 #132238 door Ronald Damme (GAST)
Beantwoord door Ronald Damme (GAST) in topic oliedruk, temp en koeltemp in een oud jasje.
Voor bovenstaande opstelling geld in mijn geval onderstaande code.
float Oliedruk=A0;  //aansluiting oliedruksensor
float Olietemp=A2;  //aansluiting watertempsensor
float Watertemp=A1; //aansluiting olietempsensor

int Alarm= 2;       //aansturing pieper
int Knop=13;        //aansluiting schakelknop
int Transistor=9;   

int ledRood=12;
int ledGroen=3;

int teller=LOW;
int lastteller=HIGH;
int menucounter=1;
int reading;
int kteller;

float Odruk;
float Otemp;
float Wtemp;

int WTG;
int OTG;
int ODB;

float middenO = 80; //bedrijfstemp olie
float HroodO = 110; //begin oververhitting olie
  
float middenW = 80; // bedrijfstemp water
float HroodW = 100; // begin oververhitting water

float Brood = 2.5; // minimale oliedruk binnen de tolerantie
float Bgroen= 6.0; // maximale oliedruk binnen de tolerantie
  
float xO;
float xW;
float xD;
  
float xxO;
float xxW;
float xxD;

float OD;
float WT;
float OT;

unsigned long MillisNu;
unsigned long KnipperMillis;
unsigned long MillisKnop;
unsigned long debounce=0;
int storing=50;

unsigned long MillisMeet;
unsigned long MeetMillis;
unsigned long monitortijd;
unsigned long Millismonitor;


int Gstate=LOW;
int Rstate=LOW;

void setup(){
  pinMode(Alarm, OUTPUT);
  pinMode(Knop, INPUT);
  pinMode(Transistor, OUTPUT);
  pinMode(ledRood, OUTPUT);
  pinMode(ledGroen, OUTPUT);
  
  Serial.begin(9600);
}
  
void loop (){
  
  berekening();
  probleem();
  menu();
  digitalWrite(ledRood,Rstate);
  digitalWrite(ledGroen,Gstate);
  monitor();
}


void monitor(){
  Millismonitor=millis();
  
 if(Millismonitor-monitortijd>1000){

  Serial.print("Druk: ");
  Serial.println(Odruk,2);  
  Serial.print("OlieTemp: ");
  Serial.println(Otemp, 2);
  Serial.print("WaterTemp: ");
  Serial.println(Wtemp,2);
  Serial.print("Menu: ");
  Serial.println(menucounter); 

   
 monitortijd=Millismonitor;
  }} 
  
void probleem(){
    MillisNu=millis();
    
    if (ODB <106){ 
    ODB=106;}
    if (OTG <106){
    OTG=106;}
    if (WTG <106){
    WTG=106;}                             // 106 is maximale waarde van het rood
    
    
    
if (MillisNu>60000){                      //na 1 minuut na starten ka het alarm in werking treden
   if (Odruk<=0.85){                       // alarm treed in werking als druk onder de 0.85 bar komt
   menucounter=3;
   digitalWrite(Alarm,HIGH);
  if(MillisNu-KnipperMillis>250){          //knipperledjes om de kwart seconde
   KnipperMillis=MillisNu;
  
  if (Rstate ==LOW){
   Rstate=HIGH;
  Gstate=LOW;}
 else{
  Rstate=LOW;
 Gstate=HIGH;} 
   
   
  }}
   
   else if (OTG<=126){
     menucounter=2;
   digitalWrite(Alarm,HIGH); 
       if(MillisNu-KnipperMillis>250){
   KnipperMillis=MillisNu;
  
  if (Gstate ==LOW){
   Rstate=HIGH;
  Gstate=HIGH;}
 else{
  Rstate=HIGH;
 Gstate=LOW;} 
   
   
  }
  }
   else if (WTG<=126){
   menucounter=1;
   digitalWrite(Alarm,HIGH); 
   if(MillisNu-KnipperMillis>250){
   KnipperMillis=MillisNu;
  
  if (Rstate ==LOW){
   Rstate=HIGH;
  Gstate=LOW;}
 else{
  Rstate=LOW;
 Gstate=LOW;} 
     
  }
   }else{
    digitalWrite(Alarm,LOW);
   
   }}else{
    digitalWrite(Alarm,LOW);
  }}




void menu(){
  MillisKnop=millis();
  kteller=digitalRead(Knop);
  
  if(kteller==HIGH){
    debounce=MillisKnop;
    teller=HIGH;
  }
  
  if(kteller==LOW){
    if(MillisKnop-debounce<storing){
      teller=HIGH;}
      else{
      teller=LOW;
  }}
  
  if (teller !=lastteller){
    if (teller==HIGH){
      menucounter++;
    }
  }
  lastteller=teller;
  
 
    
  if (menucounter == 4){
    menucounter = 1;}
    
  else if(menucounter ==1){
     if (WTG > 255){                         //255 minimale groen waarde, grootste waarde die de transistor kan verwerken
       WTG=255;}
       
       if (WTG > 126){                      // wanneer er geen gevaar is, branden de volgende indicatielampjes.
       Rstate=LOW;
       Gstate=LOW;}
              
     analogWrite(Transistor,WTG);
     
           
   }
   
  else if(menucounter ==2){
    analogWrite(Transistor,OTG);
    
     if (OTG > 255){
       OTG=255;}
       
     if (OTG > 126){
       Rstate=HIGH;
       Gstate=HIGH;}
            }
   
  else if(menucounter ==3){
   analogWrite(Transistor,ODB);
   
    if (ODB > 255){
       ODB=255;}
       
     if ((ODB) > 126  || (MillisNu<60000) ){
       Rstate=LOW;
       Gstate=HIGH;}
              
        }
  }
 
  void berekening(){
    
     MillisMeet=millis();
 
 OD=analogRead(Oliedruk);
 OT=analogRead(Olietemp);
 WT=analogRead(Watertemp);
  
 Otemp=(0.1676*OT)-50;          //0.1676 is de helling, -50 is de optelwaarde (y=ax+b)
 Wtemp=(0.1676*WT)-50;          //0.1676 is de helling, -50 is de optelwaarde (y=ax+b)
 Odruk=(0.0122*OD)-1.23;        //0.0122 is de helling, -1.23 is de optelwaarde (y=ax+b)
  
                                //xXis de helling van de transistor 
  xO= 35/(HroodO-middenO);      //35 is het verschil tussen de midden stand en half rood
  xW= 35/(HroodW-middenW);      //35 is het verschil tussen de midden stand en half rood 
  xD= 48/(Bgroen-Brood);        //48 is het verschil tussen de 2 witte strepen.
  
                                //xxX is startwaarde van de transistor
  xxO=155+(middenO*xO);         //155 is de waarde van het midden, middenO is de vastgestelde bedrijfstemp maal de helling
  xxW=155+(middenW*xW);         //155 is de waarde van het midden, middenW is de vastgestelde bedrijfstemp maal de helling
  xxD=(180-(Bgroen*xD);         //180 is de waarde van de eerste streep, Bgroen is de max normale druk maal de helling
  
 if(MillisMeet-MeetMillis>75){
  WTG=(-1*xW)*Wtemp+xxW;          //Transistor vertaling
  OTG=(-1*xO)*Otemp+xxO;
  ODB=(Odruk*xD)+xxD;
  
   MeetMillis=MillisMeet;
 }

}

In mijn geval is:
Standaard menu 1, brand geen led, watertemperatuur
menu 2, gele led, olietemperatuur
menu 3, groene led, oliedruk

via de drukknop schakel je tussen de menu's (1,2,3 - 1,2,3 -1 enz...)

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.

  • Ronald Damme (GAST)
  • Ronald Damme (GAST)'s Profielfoto
  • Offline
  • Platinum-lid
  • Platinum-lid
Lees meer
21-09-2013 16:38 - 21-09-2013 22:59 #132239 door Ronald Damme (GAST)
Beantwoord door Ronald Damme (GAST) in topic oliedruk, temp en koeltemp in een oud jasje.
De code hierboven behoeft enige uitleg omdat er zelf in gesleuteld dient te worden.

We beginnen gewoon van boven af aan:

Mocht je alles heb gemonteerd en erachter komen dat niet elke draad op de juiste plek zit, ga dan niet alles openmaken en verplaatsen. Verander gewoon de adressen in de software.
float Oliedruk=A0;  //aansluiting oliedruksensor
float Olietemp=A2;  //aansluiting watertempsensor
float Watertemp=A1; //aansluiting olietempsensor

int Alarm= 2;       //aansturing pieper
int Knop=13;        //aansluiting schakelknop
int Transistor=9;   

int ledRood=12;
int ledGroen=3;

Verder kan je de voorkeur aanpassen bij welke waarde je wijzer waar staat. Zo wil ik dat bij een olietemp van 80 graden mijn wijzer in het midden staat en dat hij bij 110 graden half in het rood staat. Noot de oliedruk werkt andersom. bij 0 bar staat hij in het rood en hoe hoger de druk wordt hoe meer de wijzer naar links zal bewegen.
float middenO = 80; //bedrijfstemp olie
float HroodO = 110; //begin oververhitting olie
  
float middenW = 80; // bedrijfstemp water
float HroodW = 100; // begin oververhitting water

float Brood = 2.5; // minimale oliedruk binnen de tolerantie
float Bgroen= 6.0; // maximale oliedruk binnen de tolerantie

Mocht het nodig zijn, wil ik in de auto mijn gegevens via de laptop uit kunnen lezen. De 1000 in onderstaand gedeelte geeft het aantal milliseconde aan wanneer er opnieuw een waarde wordt geprint op de seriele monitor. Ik zeg geprint want hij blijft zijn metingen (in mijn geval) om de 1 ms maken. De 1000 kan je zelf vergroten of verkleinen naar wens.
void monitor(){
  Millismonitor=millis();
  
 if(Millismonitor-monitortijd>1000){

  Serial.print("Druk: ");
  Serial.println(Odruk,2);  
  Serial.print("OlieTemp: ");
  Serial.println(Otemp, 2);
  Serial.print("WaterTemp: ");
  Serial.println(Wtemp,2);
  Serial.print("Menu: ");
  Serial.println(menucounter); 

   
 monitortijd=Millismonitor;
  }}

Onderstaand komen we bij de alarm voorwaarden. Allereerst zeg ik dat de waarde niet onder de 106 mag komen (immers 106 is bij mij de uiterst rode waarde en ik wil de benzinemeter niet overdadig belasten)

Verder wil ik rustig kunnen starten zonder dat ik een alarm krijg van een te lage oliedruk. (ik heb de voedende draad aangesloten op een geschakelde contactdraad, zodat de computer alleen aanstaat als de auto aanstaat) Dus ik heb mijzelf een minuut gegeven om te starten (60.000milliseconden)

Bij een warme motor valt mijn druk weg tot 0.85bar (sationair) dit vind ik veilig dus tot deze waarde wil ik geen alarm.
Bij zowel olie als water temperatuur heb ik als trigger de stand van de wijzer gebruikt. in dit geval 126 en dan staat bij mij de wijzer halverwege in het rood. De 126 kan je veranderen naar de eerder eigen gemeten waarde.

Als er een probleem gedecteerd wordt dan zal er een led gaan knipperen, de lichtverklikker piepen en zal de wijzer automatisch datgene weergeven waar het probleem aanwezig is.
void probleem(){
    MillisNu=millis();
    
    if (ODB <106){ 
    ODB=106;}
    if (OTG <106){
    OTG=106;}
    if (WTG <106){
    WTG=106;}                             // 106 is maximale waarde van het rood
    
    
    
if (MillisNu>60000){                      //na 1 minuut na starten ka het alarm in werking treden
   if (Odruk<=0.85){                       // alarm treed in werking als druk onder de 0.85 bar komt
   menucounter=3;
   digitalWrite(Alarm,HIGH);
  if(MillisNu-KnipperMillis>250){          //knipperledjes om de kwart seconde
   KnipperMillis=MillisNu;
  
  if (Rstate ==LOW){
   Rstate=HIGH;
  Gstate=LOW;}
 else{
  Rstate=LOW;
 Gstate=HIGH;} 
   
   
  }}
   
   else if (OTG<=126){
     menucounter=2;
   digitalWrite(Alarm,HIGH); 
       if(MillisNu-KnipperMillis>250){
   KnipperMillis=MillisNu;
  
  if (Gstate ==LOW){
   Rstate=HIGH;
  Gstate=HIGH;}
 else{
  Rstate=HIGH;
 Gstate=LOW;} 
   
   
  }
  }
   else if (WTG<=126){
   menucounter=1;
   digitalWrite(Alarm,HIGH); 
   if(MillisNu-KnipperMillis>250){
   KnipperMillis=MillisNu;
  
  if (Rstate ==LOW){
   Rstate=HIGH;
  Gstate=LOW;}
 else{
  Rstate=LOW;
 Gstate=LOW;} 
     
  }
   }else{
    digitalWrite(Alarm,LOW);
   
   }}else{
    digitalWrite(Alarm,LOW);
  }}

Vervolgens moet je nog de maximale waarde aanpassen. Mocht er via een berekening een hogere waarde uitkomen dan transistor=255. bv. transistor is 256 dan bouwt hij dit zelf om naar 1 en gaat de wijzer dus naar het rood, terwijl het eigenlijk betekend dat de motor ijskoud is. Daarom staat er de regel in dat alles hoger dan 255 omgevormd wordt naar 255. Dit is de uiterst linkse waarde. Deze dient ook vervangen te worden door de eigen gemeten waarde.

Vervolgens staat er een voorwaarde in wat er moet gebeuren als de waarde lager is dan halverwege rood. Heb je de "126" bij bovenstaande stap veranderd dan moet je dat hier ook doen. Verder staat er bij ODB: if ((ODB) > 126 || (MillisNu<60000) ){
hier staat: "doe onderstaande als hij de waarde onder half rood komt OF als de startminuut nog niet voorbij is. Ook hier kan je de startminuut aanpassen.
else if(menucounter ==1){
     if (WTG > 255){                         //255 minimale groen waarde, grootste waarde die de transistor kan verwerken
       WTG=255;}
       
       if (WTG > 126){                      // wanneer er geen gevaar is, branden de volgende indicatielampjes.
       Rstate=LOW;
       Gstate=LOW;}
              
     analogWrite(Transistor,WTG);
     
           
   }
   
  else if(menucounter ==2){
    analogWrite(Transistor,OTG);
    
     if (OTG > 255){
       OTG=255;}
       
     if (OTG > 126){
       Rstate=HIGH;
       Gstate=HIGH;}
            }
   
  else if(menucounter ==3){
   analogWrite(Transistor,ODB);
   
    if (ODB > 255){
       ODB=255;}
       
     if ((ODB) > 126  || (MillisNu<60000) ){
       Rstate=LOW;
       Gstate=HIGH;}

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.

  • Ronald Damme (GAST)
  • Ronald Damme (GAST)'s Profielfoto
  • Offline
  • Platinum-lid
  • Platinum-lid
Lees meer
21-09-2013 20:37 - 21-09-2013 23:00 #132243 door Ronald Damme (GAST)
Beantwoord door Ronald Damme (GAST) in topic oliedruk, temp en koeltemp in een oud jasje.
Nu het gedeelte waar alles omdraait: de berekeningen.
Als iemand op of aanmerkingen heeft, graag!

Ik neem verschillende stappen, ze zijn eigenlijk overbodig. Maar zo kan ik tussendoor makkelijker controleren of het klopt.

Bij de ijking zijn we in ieder geval al tot de volgende formules gekomen.
OD=analogRead(Oliedruk);
 OT=analogRead(Olietemp);
 WT=analogRead(Watertemp);
  
 Otemp=(0.1676*OT)-50;          //0.1676 is de helling, -50 is de optelwaarde (y=ax+b)
 Wtemp=(0.1676*WT)-50;          //0.1676 is de helling, -50 is de optelwaarde (y=ax+b)
 Odruk=(0.0122*OD)-1.23;        //0.0122 is de helling, -1.23 is de optelwaarde (y=ax+b)

Vervolgens ga ik de helling bepalen ,per menu, voor de wijzer.
In mijn geval is het verschil tussen de wijzer in de middenstand en halverwege het rood een waarde van 35. In het begin heb ik gezegd dat voor olie de wijzer bij 80Gr in het moet staan en bij 110Gr halverwege het rood. Zo rekenen onderstaande formules uit welke wijzerbeweging er moet komen bij een stijging van 1 Graad.
//xXis de helling van de transistor 
  xO= 35/(HroodO-middenO);      //35 is het verschil tussen de midden stand en half rood
  xW= 35/(HroodW-middenW);      //35 is het verschil tussen de midden stand en half rood 
  xD= 48/(Bgroen-Brood);        //48 is het verschil tussen de 2 witte strepen.

Nu moeten we de lineaire vergelijking (y=ax+b) opstellen voor de wijzer beweging.
in mijn geval staat bij 155 de wijzer in het midden. Ik wil hem bij 80 graden (=middenO) in het midden hebben, net hebben we de helling berekend en via onderstaande formule rekenen we "b" van de lineaire vergelijking uit.

Voor de olie werkt hij ongeveer hetzelfde, alleen gaat hier de wijzer van rechts naar links. De 155 en 132 dienen aangepast te worden naar de eigen gemeten waardes.
//xxX is startwaarde van de transistor
  xxO=155+(middenO*xO);         //155 is de waarde van het midden, middenO is de vastgestelde bedrijfstemp maal de helling
  xxW=155+(middenW*xW);         //155 is de waarde van het midden, middenW is de vastgestelde bedrijfstemp maal de helling
  xxD=(180-(Bgroen*xD);         //180 is de waarde van de eerste streep, Bgroen is de max normale druk maal de helling

Nu worden alle berekingen vertaald naar de waarde die naar de transistor wordt verstuurd en dus de stand van de wijzer bepalen. De 75 geeft aan om de hoeveel tijd de wijzerstand wordt ververst. ik koos om de 75ms omdat om de 1ms de wijzer heel zenuwachtig wordt. Want per arbeidsslag verandert de druk minuscuul en door de snelheid van de aanpassing schiet dan de wijzer door. bij 100ms vond ik de wijzer te hakerig bewegen. Kortom dit kan je aanpassen naar eigen inzicht.
if(MillisMeet-MeetMillis>75){
  WTG=(-1*xW)*Wtemp+xxW;          //Transistor vertaling
  OTG=(-1*xO)*Otemp+xxO;
  ODB=(Odruk*xD)+xxD;

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.

  • Ronald Damme (GAST)
  • Ronald Damme (GAST)'s Profielfoto
  • Offline
  • Platinum-lid
  • Platinum-lid
Lees meer
21-09-2013 21:05 #132245 door Ronald Damme (GAST)
Beantwoord door Ronald Damme (GAST) in topic oliedruk, temp en koeltemp in een oud jasje.
Dit was het einde van de tutorial. Bij het schrijven van de tutorial kwam ik nog 2 grove fouten tegen in mijn formules. Dus mocht iemand de berekeningen na willen rekenen dan graag!

Ik zou het een eer vinden als iemand dit probeert na te maken of als inspiratie bron gebruikt. Natuurlijk wil ik dan graag mee denken. Ook ere wie ere toe komt, dankzij de ombouw van de oliedruk en temperatuurmeter van Rob Spoon ben ik op dit idee gekomen.

Gelieve Inloggen of een account aanmaken om deel te nemen aan het gesprek.