final deployed version

This commit is contained in:
00asdf 2025-05-18 21:13:39 +02:00
parent e1ddbde0da
commit 0e3afbd433
4 changed files with 32 additions and 13 deletions

View File

@ -4,9 +4,9 @@ import java.util.*
object GlobalDataStore { object GlobalDataStore {
@Volatile var targetTemp: Double = 22.5 @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 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 dval: Double = 0.0
@Volatile var isSunny = false @Volatile var isSunny = false

View File

@ -6,15 +6,11 @@ import java.lang.Math.clamp
import java.util.* import java.util.*
class PidController(vararg val controlUnits: Controller) { 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 errorInt = 0.0
private var errorLast = 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 val error = desired - actual
errorInt = clamp(errorInt + error, 0.0 / GlobalDataStore.ival, 1.0 / GlobalDataStore.ival) errorInt = clamp(errorInt + error, 0.0 / GlobalDataStore.ival, 1.0 / GlobalDataStore.ival)
val rv = GlobalDataStore.pval * error + val rv = GlobalDataStore.pval * error +

View File

@ -1,16 +1,13 @@
package dev.asdf00.visionfive.hc.server package dev.asdf00.visionfive.hc.server
import com.sun.net.httpserver.HttpExchange import com.sun.net.httpserver.HttpExchange
import dev.asdf00.visionfive.hc.GlobalDataStore import dev.asdf00.visionfive.hc.GlobalDataStore
import dev.asdf00.visionfive.hc.control.PidController import dev.asdf00.visionfive.hc.control.PidController
import dev.asdf00.visionfive.hc.gpio.Controller import dev.asdf00.visionfive.hc.gpio.Controller
import dev.asdf00.visionfive.hc.gpio.usingPins import dev.asdf00.visionfive.hc.gpio.usingPins
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONException import org.json.JSONException
import org.json.JSONObject import org.json.JSONObject
import java.math.BigDecimal import java.math.BigDecimal
import java.net.URI import java.net.URI
import java.net.http.HttpClient import java.net.http.HttpClient
@ -20,12 +17,10 @@ import java.nio.charset.StandardCharsets
import java.nio.file.Files import java.nio.file.Files
import java.time.Duration import java.time.Duration
import java.util.* import java.util.*
import kotlin.collections.HashMap
import kotlin.io.path.Path import kotlin.io.path.Path
import kotlin.math.max import kotlin.math.max
const val DEBUG = true const val DEBUG = false
const val SENSOR_ID = "sensorId.txt" const val SENSOR_ID = "sensorId.txt"

View File

@ -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 ...")
}