final deployed version
This commit is contained in:
parent
e1ddbde0da
commit
0e3afbd433
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 +
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
||||||
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