From ece1ed6bbece0cae512d7a01714e09db2ecfb920 Mon Sep 17 00:00:00 2001 From: BOTAlex Date: Mon, 24 Feb 2025 05:19:12 +0100 Subject: [PATCH] started on battery life calculator --- package-lock.json | 37 ++--- package.json | 1 + src/routes/+layout.svelte | 1 + src/routes/tools/+page.svelte | 53 +++++++ .../battery-life-calculator/+page.svelte | 147 ++++++++++++++++++ .../comps/BatteryCalc.js | 108 +++++++++++++ src/routes/tools/comps/ToolButton.svelte | 27 ++++ .../zhen/notes/physics/sharedComps/A4.svelte | 9 +- 8 files changed, 358 insertions(+), 25 deletions(-) create mode 100644 src/routes/tools/+page.svelte create mode 100644 src/routes/tools/battery-life-calculator/+page.svelte create mode 100644 src/routes/tools/battery-life-calculator/comps/BatteryCalc.js create mode 100644 src/routes/tools/comps/ToolButton.svelte diff --git a/package-lock.json b/package-lock.json index bac3219..276d8e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "deprived-main-website", "version": "0.0.1", "dependencies": { + "lucide-svelte": "^0.475.0", "svelte-katex": "^0.1.2", "svelte-media-queries": "^1.6.2", "svelte-parallax": "^0.6.0", @@ -49,7 +50,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -782,7 +782,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -796,7 +795,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -805,7 +803,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -813,14 +810,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1476,7 +1471,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, "license": "MIT" }, "node_modules/@types/pug": { @@ -1489,7 +1483,6 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -1574,7 +1567,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, "dependencies": { "dequal": "^2.0.3" } @@ -1621,7 +1613,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", - "dev": true, "dependencies": { "dequal": "^2.0.3" } @@ -1802,7 +1793,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@types/estree": "^1.0.1", @@ -1916,7 +1906,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -1998,7 +1987,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, "engines": { "node": ">=6" } @@ -2165,7 +2153,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -2501,7 +2488,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dev": true, "dependencies": { "@types/estree": "*" } @@ -2640,8 +2626,7 @@ "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "dev": true + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" }, "node_modules/lodash.castarray": { "version": "4.4.0", @@ -2679,11 +2664,19 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-svelte": { + "version": "0.475.0", + "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.475.0.tgz", + "integrity": "sha512-N5+hFTPHaZe9HhqJDxxxODfYuOmI6v+JIowzERcea/uxytN/JZlehVTcINBNp8wMo7l6ov1Jf5srrDbkI/WsJg==", + "license": "ISC", + "peerDependencies": { + "svelte": "^3 || ^4 || ^5.0.0-next.42" + } + }, "node_modules/magic-string": { "version": "0.30.10", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", - "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } @@ -2691,8 +2684,7 @@ "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" }, "node_modules/merge2": { "version": "1.4.1", @@ -2988,7 +2980,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^3.0.0", @@ -3474,7 +3465,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -3695,7 +3685,6 @@ "version": "4.2.19", "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", - "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.1", diff --git a/package.json b/package.json index 3cfdb37..f658140 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ }, "type": "module", "dependencies": { + "lucide-svelte": "^0.475.0", "svelte-katex": "^0.1.2", "svelte-media-queries": "^1.6.2", "svelte-parallax": "^0.6.0", diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 6501ca1..6b6c8b2 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -60,6 +60,7 @@ Zhen CV + Tools Games diff --git a/src/routes/tools/+page.svelte b/src/routes/tools/+page.svelte new file mode 100644 index 0000000..f4b3bb0 --- /dev/null +++ b/src/routes/tools/+page.svelte @@ -0,0 +1,53 @@ + + +
+ +
+

Tools

+ These are the tools collected from different places of the + internet + + +
+ +
+

MPUs/SoCs

+ Whatever acronym you want lol +
+ + +
+
+ +
+ I if you have tool suggestions, then either create an issue, create a pull request, or send an email. I probably wont add it though, since this is free work lol. +
+
+
+
diff --git a/src/routes/tools/battery-life-calculator/+page.svelte b/src/routes/tools/battery-life-calculator/+page.svelte new file mode 100644 index 0000000..99f8312 --- /dev/null +++ b/src/routes/tools/battery-life-calculator/+page.svelte @@ -0,0 +1,147 @@ + + +
+ +
+

Battery life calculator

+ + Calculates the time a battery will last. Too lazy to explain + more. + + + +
+ +
+

Software

+
+
+ Duration of code execution +
+ +
+ sec +
+
+
+
+ sleep time +
+ +
+ sec +
+
+
+ +
+

Hardware

+
+
Use custom values
+ +
+
+ + {#if !useCustom} + + + {#if selectedText} +

You selected: {selectedText}

+ {/if} + {:else} +
+ Duration of code execution +
+ +
+ sec +
+
+
+
+ sleep time +
+ +
+ sec +
+
+
+ {/if} +
+
+ +
+ Source for the calculations is at this + github + and the + original website. + I just mearly made additions. +
+
+
+
+ + diff --git a/src/routes/tools/battery-life-calculator/comps/BatteryCalc.js b/src/routes/tools/battery-life-calculator/comps/BatteryCalc.js new file mode 100644 index 0000000..2913ab7 --- /dev/null +++ b/src/routes/tools/battery-life-calculator/comps/BatteryCalc.js @@ -0,0 +1,108 @@ +export class BatteryLifeCalculator { + constructor( + timeRunSeconds, + timeSleepSeconds, + consumptionActiveMilliAmpHours, + consumptionSleepMilliAmpHours, + powerBatteryTotalMilliAmpHours, + powerBatteryBufferBeforeEmptyPercent = 20) { + this.timeRunSeconds = timeRunSeconds + this.timeSleepSeconds = timeSleepSeconds + this.consumptionActiveMilliAmpHours = consumptionActiveMilliAmpHours + this.consumptionSleepMilliAmpHours = consumptionSleepMilliAmpHours + this.powerBatteryTotalMilliAmpHours = powerBatteryTotalMilliAmpHours + this.powerBatteryBufferBeforeEmptyPercent = powerBatteryBufferBeforeEmptyPercent + + console.log("The source of this battery calc is here: https://github.com/simonneutert/batterylife-calculator\nI was too lazy to make the math myself."); + } + + // public API + + milliAmpToMicroAmp(milliAmps) { + return milliAmps * 1000 + } + + microAmpToMilliAmp(milliAmps) { + return milliAmps * 0.001 + } + + calculate() { + return { + powerAveragePerHour: this.powerEstimatedHourly(), + runtimeHoursEstimated: this.runtimeHoursEstimated(), + runtimeDaysEstimated: this.runtimeDaysEstimated(), + runtimeDaysRemainingHoursEstimated: this.runtimeDaysRemainingHoursEstimated() + } + } + + powerEstimatedHourly() { + return this.calcPowerEst( + this.powerRun(), + this.consumptionActiveMilliAmpHours, + this.powerSleep(), + this.consumptionSleepMilliAmpHours + ) + } + + runtimeHoursEstimated() { + return parseInt(this.powerLipo() / this.powerEstimatedHourly()) + } + + runtimeDaysEstimated() { + return parseInt(this.runtimeHoursEstimated() / 24) + } + + runtimeDaysRemainingHoursEstimated() { + return parseInt(this.runtimeHoursEstimated() % 24) + } + + // private + + roundOff(x) { + return Math.round(x * 100.0) / 100.0 + } + + calcPowerLipo(x, y) { + return parseFloat((x * (100 - y)) / 100) + } + + calcRuns(x, y) { + return parseFloat(60 / (x + y)) + } + + calcRunsHour(x, y) { + return parseFloat(3600 / (x + y)) + } + + calcPowerRun(x, y) { + return parseFloat((x / (x + y)) * 3600) + } + + calcPowerSleep(x, y) { + return parseFloat((y / (x + y)) * 3600) + } + + powerLipo() { + return this.calcPowerLipo(this.powerBatteryTotalMilliAmpHours, this.powerBatteryBufferBeforeEmptyPercent) + } + + runs() { + return this.calcRuns(this.timeRunSeconds, this.timeSleepSeconds) + } + + runsHour() { + return this.calcRunsHour(this.timeRunSeconds, this.timeSleepSeconds) + } + + powerRun() { + return this.calcPowerRun(this.timeRunSeconds, this.timeSleepSeconds) + } + + powerSleep() { + return this.calcPowerSleep(this.timeRunSeconds, this.timeSleepSeconds) + } + + calcPowerEst(a, b, c, d) { + return parseFloat((a / 3600) * b + (c / 3600) * d) + } +} diff --git a/src/routes/tools/comps/ToolButton.svelte b/src/routes/tools/comps/ToolButton.svelte new file mode 100644 index 0000000..967b4b2 --- /dev/null +++ b/src/routes/tools/comps/ToolButton.svelte @@ -0,0 +1,27 @@ + + +
+
+
+
{title}
+ +
+
{desc}
+ +
+ {#if icon != undefined} + + {/if} + {btnText} +
+
+
\ No newline at end of file diff --git a/src/routes/zhen/notes/physics/sharedComps/A4.svelte b/src/routes/zhen/notes/physics/sharedComps/A4.svelte index 29f46d0..f7ab836 100644 --- a/src/routes/zhen/notes/physics/sharedComps/A4.svelte +++ b/src/routes/zhen/notes/physics/sharedComps/A4.svelte @@ -1,9 +1,16 @@ -
+ + +
+ {#if bottomBorder}
+ {/if}
\ No newline at end of file