Vis indlæg

Denne sektion tillader dig at se alle indlæg oprettet af dette medlem. Bemærk at du kun kan se indlæg der er oprettet i områder du i øjeblikket har adgang til.


Beskeder - dani8303

Sider: 1 [2] 3 4 5
16
Arduino & Lign. / Sv: Gennnemsnit temp.
« Dato: September 24, 2022, 13:29:36 »
Hej Dan

Min umiddelbare mistanke er det bibliotek du bruger til DS18b20 vælger der kun skal bruges 9bit opløsning. Herved fås der hurtigere målinger, men også med større udsving. I din kode kan du dog regne gennemsnit, hvorved det nok undgås. Her er et eksempel på hvordan det kan gøres, dog ikke testet:
#include <OneWire.h>
#include <DallasTemperature.h>

float Temp1 = 22.0;
float Temp2 = 24.0;
float Temp3 = 26.0;
float Temp4 = 28.0;
float Temp5 = 30.0;
float Temp6 = 32.0;
float Temp7 = 29.0;
float Temp8 = 30.0;   
float Temp9 = 31.0;

#define ONE_WIRE_BUS 2
#define K101 3
#define K102 4
#define K103 5
#define K104 6
#define K105 7
#define K106 8
#define K107 9
#define K108 10

// Buffer til opbevaring af værdier mens de behandles
bool K101_buffer = 0;
bool K102_buffer = 0;
bool K103_buffer = 0;
bool K104_buffer = 0;
bool K105_buffer = 0;
bool K106_buffer = 0;

//Værdi der bruges til beregninger:
float current_temp = 0;
float temp_hys = 0.2;//Hysteresis. Prøv at google det. Så står relæerne ikke og danser.

//Bruges til gennemsnit
float temp_avg_sum = 0;//Summen der bruges til beregning af gennemsnit
int temp_avg_runs = 0;//Antal beregninger der indgår i gennemsnittet
int Number_of_runs = 10;//Hvor mange målinger der skal udgøre en gennemsnitsberegning

 
OneWire oneWire(ONE_WIRE_BUS);
 
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
 
void setup(void)
{
  Serial.begin(9600);
  pinMode(K101, OUTPUT);
  pinMode(K102, OUTPUT);
  pinMode(K103, OUTPUT);
  pinMode(K104, OUTPUT);
  pinMode(K105, OUTPUT);
  pinMode(K106, OUTPUT);
  pinMode(K107, OUTPUT);
  pinMode(K108, OUTPUT);
   

  sensors.begin();
}
 
void loop(void)
{
  if(temp_avg_runs<Number_of_runs){
    sensors.requestTemperatures();
    float current_temp_unhandled += sensors.getTempCByIndex(0);
    temp_avg_sum += current_temp_unhandled;//Lægger den nye måling til den summerede værdi.
    temp_avg_runs++; //Der er blevet tilføjet endnu en måling til den summerede værdi.
    Serial.print("Ude Temperatur: ");
    Serial.println(current_temp_unhandled);
  }else{//Der er nu foretaget nok målinger til at beregne et gennemsnit.

    float temp_avg_unhandled = temp_avg_sum / temp_avg_runs;//Beregner gennemsnit. Summerede værdi delt med antal målinger
    temp_avg_sum = 0;//Nulstiller, så der tages nye målinger næste gang loop køres
    temp_avg_runs = 0;
    //Bestemmer om temperaturen skal opdateres. Sikre at relæet ikke danser.
    //ABS() tager længden af værdien 10-> 10 og -10 -> 10. Altså fjerner minus fortegn..
    if(abs(temp_avg_unhandled-current_temp)>temp_hys){
      current_temp = temp_avg_unhandled;
    }else{
      Serial.println("Ingen opdatering af temperatur");
    }
 

    //I udgangspunktet skal de alle være slukket
    K101_buffer = 0;
    K102_buffer = 0;
    K103_buffer = 0;
    K104_buffer = 0;
    K105_buffer = 0;
    K106_buffer = 0;
 

    if(current_temp >= Temp5)
    {
      K106_buffer = 1;
    }
    else if(current_temp >= Temp4)
    {
      K105_buffer = 1;
    }
    else if(current_temp >= Temp3)
    {
      K104_buffer = 1;
    }
    else if(current_temp >= Temp2)
    {
      K103_buffer = 1;
    }
    else if(current_temp >= Temp1)
    {
      K102_buffer = 1;
    }else {
      K101_buffer = 1;
    }

    //Sender buffer til pins
    digitalWrite(K101, K101_buffer);
    digitalWrite(K102, K102_buffer);
    digitalWrite(K103, K103_buffer);
    digitalWrite(K104, K104_buffer);
    digitalWrite(K105, K105_buffer);
    digitalWrite(K106, K106_buffer);
  }
 
   
   
   
    delay(200);//Sat ned fra 2s til 0,2s, da antal målinger til gennemsnit er 10, hvorved relæerne opdateres med samme hastighed.
  }

17
Arduino & Lign. / Sv: Gennnemsnit temp.
« Dato: September 24, 2022, 09:43:14 »
Hej Dan

ABS() med 10 var bare et eksempel. Desuden mener jeg også at Dallas biblioteket til Arduino har indbygget CRC kontrol. Det gør at fejlaflæsning ikke skulle kunne opstå i selve kablet til sensoren.

Her er nogle af de udlæsninger som mine sensorer laver. Det er også DS18B20, dog direkte fra Kina. Dem jeg har fået virker ganske fornuftigt.
https://dannerelv.dk/radi/28ae3856b513c6a/2022/266.vlog

18
Arduino & Lign. / Sv: Gennnemsnit temp.
« Dato: September 23, 2022, 20:57:09 »
Som svar til Icecap:
Denne funktionalitet fås ved at bruge abs().
Følgende to udsagn vil give det samme:
abs(current_temp_unhandled-current_temp)>temp_hys

abs(current_temp-current_temp_unhandled)>temp_hys

Altså det virker både ved faldende og stigende værdier i forhold til udgangspunktet.
Lige netop den funktionalitet er jo hvad man er interesseret i med en hysterese. Overstående vil kun være sandt hvis den nye værdi variere for meget fra den gamle.
Ny værdi: current_temp_unhandled
Gammel værdi: current_temp
Hysterese: temp_hys

Håber det giver mening


19
Arduino & Lign. / Sv: Gennnemsnit temp.
« Dato: September 23, 2022, 15:58:56 »
Hej
Du kan sagtens lave noget gennemsnit, men tror ikke det vil hjælpe dig her. Jeg kender DS18B20 og de giver en meget stabil udlæsning. I stedet skal du bruge hysteresis. Desuden tænder og slukker du faktisk udgangene en masser gange. Det går bare så hurtigt at du ikke opdager det  ;). Du skal i stedet overveje at bruge noget "if else". Der er mange måder at gøre det på, men jeg har prøvet lave lidt ændringer i dit kode. Vil ikke garantere at det virker, da jeg ikke har testet det:
#include <OneWire.h>
#include <DallasTemperature.h>

float Temp1 = 22.0;
float Temp2 = 24.0;
float Temp3 = 26.0;
float Temp4 = 28.0;
float Temp5 = 30.0;
float Temp6 = 32.0;
float Temp7 = 29.0;
float Temp8 = 30.0;   
float Temp9 = 31.0;

#define ONE_WIRE_BUS 2
#define K101 3
#define K102 4
#define K103 5
#define K104 6
#define K105 7
#define K106 8
#define K107 9
#define K108 10

// Buffer til opbevaring af værdier mens de behandles
bool K101_buffer = 0;
bool K102_buffer = 0;
bool K103_buffer = 0;
bool K104_buffer = 0;
bool K105_buffer = 0;
bool K106_buffer = 0;

//Værdi der bruges til beregninger:
float current_temp = 0;
float temp_hys = 0.2;//Hysteresis. Prøv at google det. Så står relæerne ikke og danser.

 
OneWire oneWire(ONE_WIRE_BUS);
 
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
 
void setup(void)
{
  Serial.begin(9600);
  pinMode(K101, OUTPUT);
  pinMode(K102, OUTPUT);
  pinMode(K103, OUTPUT);
  pinMode(K104, OUTPUT);
  pinMode(K105, OUTPUT);
  pinMode(K106, OUTPUT);
  pinMode(K107, OUTPUT);
  pinMode(K108, OUTPUT);
   

  sensors.begin();
}
 
void loop(void)
{
  sensors.requestTemperatures();
  float current_temp_unhandled = sensors.getTempCByIndex(0);

  Serial.print("Ude Temperatur: ");
  Serial.println(current_temp_unhandled);

    //Bestemmer om temperaturen skal opdateres. Sikre at relæet ikke danser.
    //ABS() tager længden af værdien 10-> 10 og -10 -> 10. Altså fjerner minus fortegn..
    if(abs(current_temp_unhandled-current_temp)>temp_hys){
        current_temp = current_temp_unhandled;
    }else{
        Serial.println("Ingen opdatering af temperatur");
    }
 

    //I udgangspunktet skal de alle være slukket
    K101_buffer = 0;
    K102_buffer = 0;
    K103_buffer = 0;
    K104_buffer = 0;
    K105_buffer = 0;
    K106_buffer = 0;
 

  if(current_temp >= Temp5)
  {
      K106_buffer = 1;
    /*digitalWrite(K101, LOW);
    digitalWrite(K102, HIGH);
    digitalWrite(K103, LOW);
    digitalWrite(K104, LOW);
    digitalWrite(K105, LOW);
    digitalWrite(K106, LOW);*/
   
   }
   else if(current_temp >= Temp4)
  {
      K105_buffer = 1;
    /*digitalWrite(K101, LOW);
    digitalWrite(K102, LOW);
    digitalWrite(K103, HIGH);
    digitalWrite(K104, LOW);
    digitalWrite(K105, LOW);
    digitalWrite(K106, LOW);*/
   
   }
    else if(current_temp >= Temp3)
  {
    K104_buffer = 1;
     
   }
   else if(current_temp >= Temp2)
  {
    K103_buffer = 1;
     
   }
   else if(current_temp >= Temp1)
  {
    K102_buffer = 1;
     
   }else {
       K101_buffer = 1;
   }

   //Sender buffer til pins
   digitalWrite(K101, K101_buffer);
    digitalWrite(K102, K102_buffer);
    digitalWrite(K103, K103_buffer);
    digitalWrite(K104, K104_buffer);
    digitalWrite(K105, K105_buffer);
    digitalWrite(K106, K106_buffer);
   
   
    delay(2000);
  }

20
Generel Elektronik / Sv: PCB Relæ
« Dato: August 12, 2022, 22:02:59 »
Hej

Med lidt held passer følgende:
https://www.conradelektronik.dk/p/afe-bpm1-ss-124l-printrel-24-vdc-10-a-1-x-skiftekontakt-1-stk-1405663

Kan klare flere ampære, men det er jo kun en fordel. Soklen ligner rigtigt meget, men har ikke dobbelttjekket målene. Ellers kan der jo også lodes ledninger på det nye relæ og så ned i printet, så det ikke sidder direkte på.

21
Generel Elektronik / Sv: Hjælp til solcellesystem.
« Dato: Maj 11, 2022, 22:28:33 »
Hej Bjørn

Cirka 2,5 timer. Ved maks ladning fra solceller.
Husk solcellerne yder almindeligvis maks ved en solindstråling på  1kW/m2. Herudover kommer også tab i laderegulator.

12V x 120Ah = 1440 Wh
1440Wh x 50% = 720Wh
720Wh / 290W = 2,48 timer

Venlig hilsen Daniel Dannerelv

22
Generel Elektronik / Sv: 2N3055 fra kina
« Dato: Januar 22, 2022, 10:13:19 »
Hvad med RS Components - Sælger de ikke kun til erhvervskunder?
Jeg burde gerne bare være oprettet som privatkunde, så det burde ikke være noget problem. De er ikke billige, men har et kæmpe udvalg.

23
Generel Elektronik / Sv: 2N3055 fra kina
« Dato: Januar 21, 2022, 23:21:35 »
Pas på med det. Reglerne for import er blevet ændret. Du kommer til at betale moms og importgebyr på alle pakker, uanset værdien.

Har købt meget på aliexpress førhen. Har oplevet kvaliteten som værende fuldt tilfredsstillende de fleste gange på elektronikkomponenter. På aliexpress skal man dog ikke regne med at få tingene til tiden. Nogle sælgere lover korte leveringstider, men holder det ikke. Aliexpress har ikke en tilfredsstillende kundesupport, hvis du spørger mig.

Jeg er gået over til at købe komponenter på "ebay (EU sælgere)", "rs-components" og "conrad elektronik".

24
På billedet af den indtakte er der skrevet "0". Det er altså en 0 ohms modstand. Den kan erstattes af en stump ledning. Spørgsmålet er dog hvorfor de er brædt af. Der må næsten være noget andet der er i stykker.

25
Arduino & Lign. / Sv: Styring af fremløb temp.
« Dato: Oktober 10, 2021, 18:35:19 »
Hej Dan

Så lang tid kabeltrækkene er korte, så brude det ikke give nogle problemer. Du nævner at spjældmotoren har feedback. Det kan sagtens være relevant, da der så kan laves et "pid cascade loop". Det er måske en smule overkill, men kan reguleringsmæssigt give god mening.

Temperaturændringerne på kedelvand og retur vil netop påvirke den nødvendige åbningsgrad. Det burde dog ikke give de store udfordringer, da PID'en sagtens burde kunne håndtere dette. Når ventilen ændre indstilling, så burde temperaturen relativt hurtigt ændre sig. Den hurtige respons mellem ventilindstilling og temperatur, giver en lav dødtid. En lav dødtid gør at PID'en burde være lettere at trimme.

Venlig hilsen Daniel

26
Arduino & Lign. / Sv: Styring af fremløb temp.
« Dato: Oktober 08, 2021, 17:24:11 »
Hej
Her er mine svar/erfaringer i forhold til dine spørgsmål.

> Er det et okay valg? kom gerne med fordele/ulemper.
Bruger selv DS18B20 til rigtig mange ting. Det er en fantastisk sensor, der bare virker. Bruger det blandt andet til styring af et solfangeranlæg.

> Efter hvad jeg har læst om DS18B20, så skulle en kabel længde på 4 meter ikke være et problem, har tænkt mig at bruge et skærmet 3 leder og føre VCC med ud til alle sensorer, fordele/ulemper.
Jeg bruger uskærmet kabel, hvor den længste forbindelse er cirka 13m. Prøv at læse følgende pdf: https://pdfserv.maximintegrated.com/en/an/AN148.pdf . Den giver en god forståelse af de udfordringer der kan være.

> Skal jeg beholde den og konvertere 0-5v PWM til et analog 0-10v?
> Kunne jo også bygge en 0-180gr servomotor på i stedet, ville det være en fordel eller ulempe?
Hvis du skal bruge et ordentligt 0 - 10V signal, så kunne en AD5231 måske være en ide. En servomotor ville nok være lettere at styre. Har selv bygget "danfoss amv 150" sammen med et "sonoff dual R2"(Har ESP8266 som MCU), hvilket virker rigtig fint.

> Der er vel ikke noget i vejen for at kigge på ”kun en” DS18B20 i bus’en til PID-reguleringen?
Det vil være det eneste rigtige i første omgang.

> Måske Valget af PID-regulering har indflydelse på valget af servomotor kontra 0-10v styring?
Ikke umiddelbart. Det handler mere om at få signalerne behandlet/beregnet korrekt. Det burde kunne lade sig gøre uanset hvad. Det er dog vigtigt at tage stilling til om ventilen skal køre med en absolut indstilling, hvorved den altid ved hvor den er. Alternativt kan bruges relative styring, hvor ventilen bliver bedt om at gå fx. 20% mod mere åbent. Du ved altså ikke ventilen stod på 10%, 30% eller lignende. Den står nu bare 20% ekstra åbent. Begge dele kan dog styres med en PID, dog er en absolut indstilling det bedste. En absolut indstilling er dog afhængig af at aktuatoren understøtter dette.
Måske er en fuld PID ikke nødvendig i første omgang. Ofte vil en PI regulering være nok. Start eventuelt med at programmer en P regulering. Den er nemlig relativ simpel. Når det så virker opgrader så til en PI. Hvis du bruger et færdigt bibliotek, så start med at slå I og D fra, hvorved du kan fokusere på at få trimmet P ledet.

> hvordan jeg kan få det setpunkt til at ændre sig efter ude temperaturen.
Lav et matematisk sammenhæng. Fremløbstemperaturen skal være 30C+ 2C per grad under 20C. Eksempel:
SP_fremløb = 30 + ((20 - T_ude) * 2);

Venlig hilsen Daniel Dannerelv

27
Print & Mekanik / Sv: Printplade på Løbebånd
« Dato: November 13, 2020, 11:21:19 »
Bare du kan få den til at passe i sikringsholderen og har samme mærkestrøm, så skulle det være fint. Dog må der ikke bruges 12V sikringer og lignende, da de ikke er lavet til at bryde højere spænding.

28
Print & Mekanik / Sv: Printplade på Løbebånd
« Dato: November 13, 2020, 11:06:22 »
Det skal være samme fysiske størrelse og mærkestrøm. Mærkestrøm er det antal ampere der står på sikringen. Du må ikke sætte en i på flere ampere, så risikerer du at den ikke beskytter tilstrækkeligt.

29
Print & Mekanik / Sv: Printplade på Løbebånd
« Dato: November 12, 2020, 11:46:20 »
Har du mulighed for at sende billeder af det? Har du adgang til et multimeter. Hvis du har adgang til et multimeter, så mål modstanden mellem de 3 ledninger og send værdierne.

30
Hvis du ønsker at beskytte kredsen med hpfi, så kan du sagtens det. Køb et almindeligt 3faset hpfi. Du kører så bare kun nul og fase gennem denne. Jord skal IKKE køres med gennem hpfi.

Sider: 1 [2] 3 4 5