From 0e3afbd4337c04422518bbfb456eee557cca314d Mon Sep 17 00:00:00 2001 From: 00asdf Date: Sun, 18 May 2025 21:13:39 +0200 Subject: [PATCH] final deployed version --- .../asdf00/visionfive/hc/GlobalDataStore.kt | 4 +-- .../visionfive/hc/control/PidController.kt | 6 +--- .../dev/asdf00/visionfive/hc/server/Main.kt | 7 +---- src/test/kotlin/PidTester.kt | 28 +++++++++++++++++++ 4 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 src/test/kotlin/PidTester.kt diff --git a/src/main/kotlin/dev/asdf00/visionfive/hc/GlobalDataStore.kt b/src/main/kotlin/dev/asdf00/visionfive/hc/GlobalDataStore.kt index 8764513..00068e3 100644 --- a/src/main/kotlin/dev/asdf00/visionfive/hc/GlobalDataStore.kt +++ b/src/main/kotlin/dev/asdf00/visionfive/hc/GlobalDataStore.kt @@ -4,9 +4,9 @@ import java.util.* object GlobalDataStore { @Volatile var targetTemp: Double = 22.5 - @Volatile var reduction: Double = 2.0 + @Volatile var reduction: Double = 2.5 @Volatile var pval: Double = 0.1 - @Volatile var ival: Double = 1.0 / 60 + @Volatile var ival: Double = 0.02 @Volatile var dval: Double = 0.0 @Volatile var isSunny = false diff --git a/src/main/kotlin/dev/asdf00/visionfive/hc/control/PidController.kt b/src/main/kotlin/dev/asdf00/visionfive/hc/control/PidController.kt index c506651..1804c60 100644 --- a/src/main/kotlin/dev/asdf00/visionfive/hc/control/PidController.kt +++ b/src/main/kotlin/dev/asdf00/visionfive/hc/control/PidController.kt @@ -6,15 +6,11 @@ import java.lang.Math.clamp import java.util.* class PidController(vararg val controlUnits: Controller) { - init { - if (controlUnits.size < 1) - throw IllegalArgumentException("PID-Controller needs motor control units to act") - } private var errorInt = 0.0 private var errorLast = 0.0 - private fun step(actual: Double, desired: Double): Double { + fun step(actual: Double, desired: Double): Double { val error = desired - actual errorInt = clamp(errorInt + error, 0.0 / GlobalDataStore.ival, 1.0 / GlobalDataStore.ival) val rv = GlobalDataStore.pval * error + diff --git a/src/main/kotlin/dev/asdf00/visionfive/hc/server/Main.kt b/src/main/kotlin/dev/asdf00/visionfive/hc/server/Main.kt index da8fdbd..b1dc7d1 100644 --- a/src/main/kotlin/dev/asdf00/visionfive/hc/server/Main.kt +++ b/src/main/kotlin/dev/asdf00/visionfive/hc/server/Main.kt @@ -1,16 +1,13 @@ package dev.asdf00.visionfive.hc.server import com.sun.net.httpserver.HttpExchange - import dev.asdf00.visionfive.hc.GlobalDataStore import dev.asdf00.visionfive.hc.control.PidController import dev.asdf00.visionfive.hc.gpio.Controller import dev.asdf00.visionfive.hc.gpio.usingPins - import org.json.JSONArray import org.json.JSONException import org.json.JSONObject - import java.math.BigDecimal import java.net.URI import java.net.http.HttpClient @@ -20,12 +17,10 @@ import java.nio.charset.StandardCharsets import java.nio.file.Files import java.time.Duration import java.util.* -import kotlin.collections.HashMap import kotlin.io.path.Path - import kotlin.math.max -const val DEBUG = true +const val DEBUG = false const val SENSOR_ID = "sensorId.txt" diff --git a/src/test/kotlin/PidTester.kt b/src/test/kotlin/PidTester.kt new file mode 100644 index 0000000..cda2855 --- /dev/null +++ b/src/test/kotlin/PidTester.kt @@ -0,0 +1,28 @@ + +import dev.asdf00.visionfive.hc.GlobalDataStore +import dev.asdf00.visionfive.hc.control.PidController +import java.util.* + + +fun main() { + val pid = PidController() + var myTime = 0 + while (true) { + print("provide current temp (at ${ + Calendar.getInstance().also { + it.set(Calendar.HOUR_OF_DAY, 0) + it.set(Calendar.MINUTE, 0) + it.set(Calendar.SECOND, 0) + it.add(Calendar.MINUTE, myTime) + }.time + }): ") + val t = readln() + if (t.isEmpty()) { + break + } + val nu = pid.step(t.toDouble(), GlobalDataStore.targetTemp) + println("setting the valves to ${(nu * 10_000).toInt().toDouble() / 100}%") + myTime += 2 + } + println("bye ...") +} \ No newline at end of file