PID Regulator för frånluftsfläkt.

Post Reply
magadog
Ny medlem
Posts: 4
Joined: 03 May 2018, 12:48
6

Hej!

Är på jakt efter en regulator i LUA som funkar i Fibaro. Har letat som en galning men hittar inget som jag kan översätta. Kanske finns det nån här som kan ge mig en hint eller om det finns nån enkel lösning.

Jag har en Frånluftsfläkt som jag vill styra via en RGBW och en PWM-omvandlare för 0-10V. Det rent fysiska här är löst och jag kan reglera hastigheten i Fibban. I kanalen har jag en C02-sensor som också rapporterar värdet via 0-10V till RGBW'n. Allt detta funkar alltså som det ska.

PROBLEMET: Jag vill styra fläkten så att den reglerar hastigheten så att CO2't ligger runt 800PPM. Önskar att det fanns nåt lätt sätt t.ex "Linked Devices" men när jag rotar runt där kan jag inte välja min sensor eller min varvtalsstyrning så kvar är väl då LUA.

Oerhört tacksam för hjälp!!!
Mattias, Umeå
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Det finns lite att hämta på Fibaros forum. Google translate kan behövas här.
https://forum.fibaro.com/topic/16652-ba ... ment-49535

Och nedanstående scen har jag laddat ned tidigare, men aldrig använt.

Code: Select all

--[[
%% autostart
%% properties
90 value
90 valueSensor
%% globals
BoilerOnTime
--]]

if (fibaro:countScenes()>1) 
then 
fibaro:debug('Killed the second scene!'); 
fibaro:abort(); 
end 

------------------------ Initialise variables ----------------------------
---------------------------- Set by user ---------------------------------
local kP = 400; -- Proportional value
local kI = 10; -- Integral value
local kD = 30; -- derivative value
local StepSize = 10; -- measuring interval in seconds
local CycleTime = 10; -- measure for 10 minutes (6 cycles/h) / 5 minutes (12 cycles/h) / 20 minutes (3 cycles/h)
local Threshold = 1; -- temperature threshold in degrees

------------------------ Measured/Calculated -----------------------------
if CycleTime < 5 then CycleTime = 5 end; -- minimum cycle time is 5 minutes
local ScaleFactor = CycleTime / 5;
local Actual = 0; -- Actual temperature
local SetPoint = 0; -- Set temperature
local Err = 0;
local Integral = 0; -- Calculated Integral value
local Boiler = 0; -- boiler on/off value
local heatingTime = 0;
local LastErr = 0;

fibaro:debug("Running...");
while true do
 Actual = fibaro:getValue(90, "valueSensor"); -- read actual temperature
 SetPoint = fibaro:getValue(90, "value"); -- read set temperature
 fibaro:debug(Actual .. " ... " ..SetPoint);
 Err = SetPoint - Actual; -- calculate temperature difference
 fibaro:debug("Error=".. Err);

 if (math.abs(Err) < Threshold) -- check if out of bounds
   then
     Integral = Integral + Err; -- accumulate the error integral
   else
     Integral = 0; -- zero it if out of bounds
 end

 P = Err*kP; -- proportional term
 fibaro:debug("P="..P);
 I = Integral*kI; -- integral term
 fibaro:debug("I="..I);
 D = (Err - LastErr)*kD; -- derivative term
 fibaro:debug("D="..D);
 heatingTime = P + I + D; -- Total heat = P+I+D
 Integral = 0; -- reset integral
 LastErr = Err; -- store last error value

 if (heatingTime > 0) -- heatingTime must be positive to turn the boiler on
   then    
     if heatingTime > 300 then heatingTime = 300 end
         heatingTime = heatingTime*ScaleFactor;
    -- fibaro:debug("Turning boiler on for "..heatingTime.." seconds."); -- Boiler on
    -- fibaro:call(2,"sendEmail", "Heating", "Boiler on for: "..heatingTime.." seconds");
 else
   fibaro:debug("No heating required");
 end
 fibaro:setGlobal("BoilerOnTime", heatingTime);
 fibaro:startScene(53) -- start boiler activator
 heatingTime = 0; -- reset heatingtime
 fibaro:sleep(CycleTime*60*1000); -- wait
end
--fibaro:abort();
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
magadog
Ny medlem
Posts: 4
Joined: 03 May 2018, 12:48
6

Tusen tack!

Hade missat det i forumen.

Det tråkiga är ju bara att jag skulle vilja ha en reglering på en analog utgång. Alltså ju mer avvikelse ju mer spänning på utgången.

Om jag inte fattar helt fel så reglerar dessa exempel bara en binär (AV/PÅ) utgång.

Om du har nån mer ledtråd så vore det grymt :)
MastrUsr
Medlem
Posts: 202
Joined: 25 Apr 2017, 07:24
7

Kanske du kan jobba vidare med denna?

https://labjack.com/support/software/ex ... id-example

Skickat från min SM-N960F via Tapatalk

Post Reply