final deployed version
This commit is contained in:
parent
e1ddbde0da
commit
0e3afbd433
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 +
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
28
src/test/kotlin/PidTester.kt
Normal file
28
src/test/kotlin/PidTester.kt
Normal 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 ...")
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user