summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2022-05-30 22:05:30 +0200
committerAnton Luka Šijanec <anton@sijanec.eu>2022-05-30 22:05:30 +0200
commitbe93772bd4ab8b9af5fa155565d732e5e7cff51e (patch)
tree506445114f1973f2caf44b37d80749197e37c4e4
parentMerge branch 'master' of https://git.šijanec.si/sijanec/sola-gimb-3 (diff)
downloadsola-gimb-3-be93772bd4ab8b9af5fa155565d732e5e7cff51e.tar
sola-gimb-3-be93772bd4ab8b9af5fa155565d732e5e7cff51e.tar.gz
sola-gimb-3-be93772bd4ab8b9af5fa155565d732e5e7cff51e.tar.bz2
sola-gimb-3-be93772bd4ab8b9af5fa155565d732e5e7cff51e.tar.lz
sola-gimb-3-be93772bd4ab8b9af5fa155565d732e5e7cff51e.tar.xz
sola-gimb-3-be93772bd4ab8b9af5fa155565d732e5e7cff51e.tar.zst
sola-gimb-3-be93772bd4ab8b9af5fa155565d732e5e7cff51e.zip
-rw-r--r--fiz/naloga/gl/fragment.glsl8
-rw-r--r--fiz/naloga/gl/helmholtz.c5
-rw-r--r--fiz/naloga/merjenje/.gitignore1
-rw-r--r--fiz/naloga/merjenje/README4
-rw-r--r--fiz/naloga/merjenje/data/index.html19
-rw-r--r--fiz/naloga/merjenje/data/settings.json26
-rw-r--r--fiz/naloga/merjenje/include/README39
-rw-r--r--fiz/naloga/merjenje/lib/README46
-rw-r--r--fiz/naloga/merjenje/platformio.ini29
-rw-r--r--fiz/naloga/merjenje/src/main.cpp171
-rw-r--r--fiz/naloga/merjenje/test/README11
-rw-r--r--fiz/naloga/ročnemeritve.tsv70
12 files changed, 423 insertions, 6 deletions
diff --git a/fiz/naloga/gl/fragment.glsl b/fiz/naloga/gl/fragment.glsl
index 095cb78..eed4bb7 100644
--- a/fiz/naloga/gl/fragment.glsl
+++ b/fiz/naloga/gl/fragment.glsl
@@ -5,7 +5,6 @@
#define SEG 32
-#define I .5
#define n 100.
#define PI 3.1415
@@ -33,14 +32,15 @@ vec3 tuljava (vec3 pz, float R) {
void main () {
+ float I = -.5;
float R = 0.8;
- float R2 = abs(sin((time+8.2)/.6))+0.5;
+ float R2 = (abs(sin((time+8.2)/.6))+0.5)*0+R;
vec2 uv = UVo;
vec2 poz = vec2(uv*2.); // zavrteti moramo tako točke same, kot tudi
vec2 offset = vec2(R/2.,0); // njihove komponente
float kot = time/.4;
float multi = n*I/**abs(sin(time/.2)+0.2)*/;
- vec2 dodatek = vec2(sin(time/.6)*.5, cos(time/.4)*.6);
+ vec2 dodatek = vec2(sin(time/.6)*.5, cos(time/.4)*.6)*0;
vec3 rez = tuljava(
vec3(poz+offset, 1/2*R), R
)*n*I +
@@ -65,7 +65,7 @@ void main () {
1);
rez *= 1000.;
#ifdef show_vec
- fragColor = vec4(rez, 1);
+ fragColor = vec4(rez+0.5, 1);
#else
fragColor = vec4(vec3(length(rez)), 1);
#endif
diff --git a/fiz/naloga/gl/helmholtz.c b/fiz/naloga/gl/helmholtz.c
index 5f8f44d..5858039 100644
--- a/fiz/naloga/gl/helmholtz.c
+++ b/fiz/naloga/gl/helmholtz.c
@@ -29,7 +29,7 @@ int main (void) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 1);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
// glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // forward compat is ogl 3.0+
- GLFWwindow * okno = glfwCreateWindow(800, 600, "okno", NULL, NULL);
+ GLFWwindow * okno = glfwCreateWindow(80, 60, "okno", NULL, NULL);
if (!okno) {
fprintf(stderr, "glfwCreateWindow failed\n");
glfwTerminate();
@@ -123,6 +123,7 @@ int main (void) {
glfwSwapBuffers(okno);
glfwPollEvents(); // wait / poll
frame++;
+ /*
char fn[25];
sprintf(fn, "animacija%04d.ppm", frame);
int fd;
@@ -148,7 +149,7 @@ int main (void) {
if (close(fd) == -1) {
perror("close");
abort();
- }
+ } */
}
glfwDestroyWindow(okno);
glfwTerminate();
diff --git a/fiz/naloga/merjenje/.gitignore b/fiz/naloga/merjenje/.gitignore
new file mode 100644
index 0000000..03f4a3c
--- /dev/null
+++ b/fiz/naloga/merjenje/.gitignore
@@ -0,0 +1 @@
+.pio
diff --git a/fiz/naloga/merjenje/README b/fiz/naloga/merjenje/README
new file mode 100644
index 0000000..41145b3
--- /dev/null
+++ b/fiz/naloga/merjenje/README
@@ -0,0 +1,4 @@
+pio run
+pio run --target uploadfs
+pio run --target upload
+pio run --target clean
diff --git a/fiz/naloga/merjenje/data/index.html b/fiz/naloga/merjenje/data/index.html
new file mode 100644
index 0000000..83d10b8
--- /dev/null
+++ b/fiz/naloga/merjenje/data/index.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang=sl>
+ <head>
+ <meta charset=UTF-8 />
+ <title>
+ spletni vmesnik merilnika magnetnega polja
+ </title>
+ <link rel=stylesheet href=//sijanec.eu/assets/css/styles.css />
+ </head>
+ <body>
+ <h1>
+ spletni vmesnik računalnika projektne naloge pri fiziki v tretjem letniku
+ </h1>
+ <hr>
+ <p>
+ Anton Luka Šijanec 2022 --- <a href=//git.sijanec.eu/sijanec/sola-gimb-3/src/branch/master/fiz/naloga/merjenje>izvorna koda</a>
+ </p>
+ </body>
+</html>
diff --git a/fiz/naloga/merjenje/data/settings.json b/fiz/naloga/merjenje/data/settings.json
new file mode 100644
index 0000000..eb045ba
--- /dev/null
+++ b/fiz/naloga/merjenje/data/settings.json
@@ -0,0 +1,26 @@
+{
+ "ap_ssid": "b",
+ "ap_pass": "",
+ "ap_ch": 1,
+ "ap_hidden": 0,
+ "ap_ip": "10.82.66.1",
+ "ap_gw": "10.82.66.2",
+ "ap_nm": "255.255.255.0",
+ "ap_dns1": "",
+ "ap_dns2": "",
+ "ap_host": "b",
+ "sta_ssid": "OpenWrt",
+ "sta_pass": "",
+ "sta_ip": "",
+ "sta_dns1": "",
+ "sta_dns2": "",
+ "sta_gw": "",
+ "sta_host": "b",
+ "sta_static": 0,
+ "ftp_user": "b",
+ "ftp_pass": "",
+ "http_user": "",
+ "http_pass": "",
+ "host": "b",
+ "mpu_address": 104 // 104 oz. 0x68 ako je AD0 GND, 105 oz. 0x69 ako je AD0 +
+}
diff --git a/fiz/naloga/merjenje/include/README b/fiz/naloga/merjenje/include/README
new file mode 100644
index 0000000..194dcd4
--- /dev/null
+++ b/fiz/naloga/merjenje/include/README
@@ -0,0 +1,39 @@
+
+This directory is intended for project header files.
+
+A header file is a file containing C declarations and macro definitions
+to be shared between several project source files. You request the use of a
+header file in your project source file (C, C++, etc) located in `src` folder
+by including it, with the C preprocessing directive `#include'.
+
+```src/main.c
+
+#include "header.h"
+
+int main (void)
+{
+ ...
+}
+```
+
+Including a header file produces the same results as copying the header file
+into each source file that needs it. Such copying would be time-consuming
+and error-prone. With a header file, the related declarations appear
+in only one place. If they need to be changed, they can be changed in one
+place, and programs that include the header file will automatically use the
+new version when next recompiled. The header file eliminates the labor of
+finding and changing all the copies as well as the risk that a failure to
+find one copy will result in inconsistencies within a program.
+
+In C, the usual convention is to give header files names that end with `.h'.
+It is most portable to use only letters, digits, dashes, and underscores in
+header file names, and at most one dot.
+
+Read more about using header files in official GCC documentation:
+
+* Include Syntax
+* Include Operation
+* Once-Only Headers
+* Computed Includes
+
+https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/fiz/naloga/merjenje/lib/README b/fiz/naloga/merjenje/lib/README
new file mode 100644
index 0000000..6debab1
--- /dev/null
+++ b/fiz/naloga/merjenje/lib/README
@@ -0,0 +1,46 @@
+
+This directory is intended for project specific (private) libraries.
+PlatformIO will compile them to static libraries and link into executable file.
+
+The source code of each library should be placed in a an own separate directory
+("lib/your_library_name/[here are source files]").
+
+For example, see a structure of the following two libraries `Foo` and `Bar`:
+
+|--lib
+| |
+| |--Bar
+| | |--docs
+| | |--examples
+| | |--src
+| | |- Bar.c
+| | |- Bar.h
+| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
+| |
+| |--Foo
+| | |- Foo.c
+| | |- Foo.h
+| |
+| |- README --> THIS FILE
+|
+|- platformio.ini
+|--src
+ |- main.c
+
+and a contents of `src/main.c`:
+```
+#include <Foo.h>
+#include <Bar.h>
+
+int main (void)
+{
+ ...
+}
+
+```
+
+PlatformIO Library Dependency Finder will find automatically dependent
+libraries scanning project source files.
+
+More information about PlatformIO Library Dependency Finder
+- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/fiz/naloga/merjenje/platformio.ini b/fiz/naloga/merjenje/platformio.ini
new file mode 100644
index 0000000..16eaddd
--- /dev/null
+++ b/fiz/naloga/merjenje/platformio.ini
@@ -0,0 +1,29 @@
+; PlatformIO Project Configuration File
+;
+; Build options: build flags, source filter
+; Upload options: custom upload port, speed and extra flags
+; Library options: dependencies, extra library storages
+; Advanced options: extra scripting
+;
+; Please visit documentation for the other options and examples
+; https://docs.platformio.org/page/projectconf.html
+
+[env:myboard]
+platform = espressif8266
+board = nodemcuv2
+monitor_speed = 9600
+upload_speed = 460800
+build_flags = -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_PORT=Serial -DIP_FORWARD=1 -DMONITOR_SPEED=9600
+framework = arduino
+board_build.filesystem = littlefs
+board_build.ldscript = eagle.flash.4m2m.ld
+src_filter = -<*> +<main.cpp>
+# http://git/anonymous/FTPClientServer <= to je mirror sicer nedelujočega
+# http://github.com/dplasa/FTPClientServer <= ta ne dela, trenutni je fork njega
+lib_deps =
+ Time
+ https://github.com/AddioElectronicsForks/FTPClientServer
+ DNSServer
+ ESP Async WebServer
+ ArduinoJson
+ MPU9250
diff --git a/fiz/naloga/merjenje/src/main.cpp b/fiz/naloga/merjenje/src/main.cpp
new file mode 100644
index 0000000..a5209da
--- /dev/null
+++ b/fiz/naloga/merjenje/src/main.cpp
@@ -0,0 +1,171 @@
+#define ARDUINOJSON_ENABLE_COMMENTS 1
+#include <stdlib.h>
+#include <Arduino.h>
+#include <ArduinoJson.h>
+#include "LittleFS.h"
+#include <DNSServer.h>
+#include <ESP8266WiFi.h>
+#include <WiFiClient.h>
+#include <TimeLib.h>
+#include <WiFiUdp.h>
+#include <ESP8266httpUpdate.h>
+#include <ESPAsyncWebServer.h>
+#undef __POLLEDTIMING_H__ // http://github.com/dplasa/FTPClientServer/pull/19
+#include <FTPServer.h>
+#define TEXT_ENC "text/plain"
+#include "MPU9250.h"
+const int str2pin_map[] = { D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, 0, 0, 0, 0, 0, 0, 0, 0, 0, A0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+int str2pin (const char * s) {
+ if (s[0] >= '0' && s[0] <= '9')
+ return atoi(s);
+ return str2pin_map[atoi(s+1) + ((s[0] == 'A') ? 20 : 0)];
+}
+DynamicJsonDocument settings(1024);
+void load_settings () {
+ if (LittleFS.exists("settings.json")) {
+ File s = LittleFS.open("settings.json", "r");
+ if (s)
+ deserializeJson(settings, s);
+ s.close();
+ }
+}
+void store_settings () {
+ File s = LittleFS.open("settings.json", "w");
+ serializeJson(settings, s);
+ s.close();
+}
+void notFound (AsyncWebServerRequest * request) {
+ request->send(404, "text/plain", "404");
+}
+FTPServer ftpServer(LittleFS);
+DNSServer dnsServer;
+AsyncWebServer httpServer(80);
+MPU9250 mpu;
+int do_reload = 0;
+int measure = 0;
+void reload (bool w) {
+ Serial.println("reload");
+ if (!w) {
+ Serial.println("stopping services: ftp");
+ ftpServer.stop();
+ Serial.println("stopping services: http");
+ httpServer.reset();
+ httpServer.end();
+ Serial.println("stopping services: dns");
+ dnsServer.stop();
+ }
+ Serial.println("loading settings");
+ load_settings();
+ pinMode(LED_BUILTIN, OUTPUT);
+ digitalWrite(LED_BUILTIN, HIGH); // izklopi luč
+ Serial.println("access point");
+ const char * ap_pass = settings["ap_pass"].as<String>().c_str();
+ if (ap_pass && strlen(ap_pass) < 8)
+ ap_pass = NULL;
+ WiFi.mode(WIFI_AP);
+ WiFi.softAP(settings["ap_ssid"].as<String>().c_str(), ap_pass, settings["ap_ch"].as<int>(), settings["ap_hidden"].as<int>());
+ Serial.println("WiFi.softAPIP() = " + WiFi.softAPIP().toString());
+ Serial.println("station networking");
+ const char * sta_ssid = settings["sta_ssid"].as<String>().c_str();
+ if (sta_ssid && strlen(sta_ssid)) {
+ Serial.println("setting up wifi station mode");
+ IPAddress sta_ip(10, 69, 69, 82);
+ sta_ip.fromString(settings["sta_ip"].as<String>());
+ IPAddress sta_gw(10, 69, 69, 1);
+ sta_gw.fromString(settings["sta_gw"].as<String>());
+ IPAddress sta_nm(10, 69, 69, 255);
+ sta_nm.fromString(settings["sta_nm"].as<String>());
+ IPAddress sta_dns1(93, 103, 235, 126);
+ sta_dns1.fromString(settings["sta_dns1"].as<String>());
+ IPAddress sta_dns2(89, 212, 146, 168);
+ sta_dns2.fromString(settings["sta_dns2"].as<String>());
+ const char * sta_mac = settings["sta_mac"].as<String>().c_str();
+ if (sta_mac && strlen(sta_mac)) {
+ long long unsigned int mac;
+ uint8_t macar[6];
+ mac = strtoull(sta_mac, NULL, 16);
+ memcpy(macar, (char *) &mac, 6);
+ wifi_set_macaddr(STATION_IF, macar);
+ }
+ WiFi.disconnect(true);
+ WiFi.hostname(settings["sta_host"].as<String>());
+ const char * sta_pass = settings["sta_pass"].as<String>().c_str();
+ if (sta_pass && strlen(sta_pass) < 8)
+ sta_pass = NULL;
+ WiFi.begin(sta_ssid, sta_pass);
+ if (settings["sta_static"].as<int>())
+ if (!WiFi.config(sta_ip, sta_gw, sta_nm, sta_dns1, sta_dns2))
+ Serial.println("failed to wifi config");
+ Serial.println(String("wifi local ip: "+WiFi.localIP().toString()));
+ } else
+ WiFi.disconnect();
+ dnsServer.start(53, settings["host"], WiFi.softAPIP());
+ ftpServer.begin(settings["ftp_user"], settings["ftp_pass"]);
+#define ADD_AUTH(s) s.setAuthentication(settings["http_user"], settings["http_pass"])
+ auto f = httpServer.serveStatic("/", LittleFS, "/").setDefaultFile("index.html");
+ ADD_AUTH(f);
+ auto s = httpServer.on("/s", [](AsyncWebServerRequest * r) {
+ r->send(201, TEXT_ENC, "OK\n");
+ ESP.restart();
+ });
+ ADD_AUTH(s);
+ auto l = httpServer.on("/l", [](AsyncWebServerRequest * r) {
+ r->send(201, TEXT_ENC, "OK\n");
+ do_reload = 1;
+ });
+ ADD_AUTH(l);
+ auto m = httpServer.on("/m", [](AsyncWebServerRequest * r) {
+ if (measure) {
+ r->send(400, TEXT_ENC, "meritev že poteka\n");
+ return;
+ }
+ measure = 1;
+ r->send(201, TEXT_ENC, "OK\n");
+ });
+ ADD_AUTH(m);
+ auto k = httpServer.on("/k", [](AsyncWebServerRequest * r) {
+ if (!measure) {
+ r->send(400, TEXT_ENC, "trenutno ni meritve\n");
+ return;
+ }
+ measure = 0;
+ r->send(201, TEXT_ENC, "OK\n");
+ });
+ ADD_AUTH(k);
+ auto c = httpServer.on("/c", [](AsyncWebServerRequest * r) {
+ r->send(201, TEXT_ENC, "glej sporočila na UART za navodila\n");
+ mpu.calibrateMag();
+ });
+ ADD_AUTH(c);
+ httpServer.begin();
+ Wire.begin();
+ int naslov = settings["mpu_address"].as<int>();
+ if (!mpu.setup(naslov)) {
+ Serial.println("mpu ni dosegljiv na naslovu " + naslov);
+ }
+ mpu.verbose(true);
+ Serial.println("reload: done");
+}
+void handleMeasure () {
+ if (!mpu.update()) {
+ Serial.println("!mpu.update()");
+ }
+ Serial.printf("getMag: X: %f\tY: %f\tZ: %f\n", mpu.getMagX(), mpu.getMagY(), mpu.getMagZ());
+ return;
+}
+void setup () {
+ Serial.begin(MONITOR_SPEED);
+ Serial.println("živ sem");
+ LittleFS.begin();
+ reload(1);
+}
+void loop () {
+ if (measure)
+ handleMeasure();
+ ftpServer.handleFTP();
+ dnsServer.processNextRequest();
+ if (do_reload) {
+ reload(0);
+ do_reload = 0;
+ }
+}
diff --git a/fiz/naloga/merjenje/test/README b/fiz/naloga/merjenje/test/README
new file mode 100644
index 0000000..b94d089
--- /dev/null
+++ b/fiz/naloga/merjenje/test/README
@@ -0,0 +1,11 @@
+
+This directory is intended for PlatformIO Unit Testing and project tests.
+
+Unit Testing is a software testing method by which individual units of
+source code, sets of one or more MCU program modules together with associated
+control data, usage procedures, and operating procedures, are tested to
+determine whether they are fit for use. Unit testing finds problems early
+in the development cycle.
+
+More information about PlatformIO Unit Testing:
+- https://docs.platformio.org/page/plus/unit-testing.html
diff --git a/fiz/naloga/ročnemeritve.tsv b/fiz/naloga/ročnemeritve.tsv
new file mode 100644
index 0000000..324e130
--- /dev/null
+++ b/fiz/naloga/ročnemeritve.tsv
@@ -0,0 +1,70 @@
+ročne meritve, narejene v šoli na šolski helmholtzovi tuljavi pri laborantu
+tok 0.9 A
+navojev 320
+levi stolpec odmik od središča v metrih
+desni stolpec jakost magnetnega pretoka v teslah
+različna merjenja so ločena z iksom, uporabno za split(1)
+x
+0.00 0.0041
+0.01 0.0040
+0.02 0.0038
+0.03 0.0035
+0.04 0.0030
+0.05 0.0025
+0.06 0.0021
+0.07 0.0016
+0.08 0.0013
+0.09 0.0009
+0.10 0.0006
+0.11 0.0005
+0.12 0.0003
+0.13 0.0002
+0.14 0.0001
+0.15 0.0000
+x
+0.00 0.0042
+0.01 0.0042
+0.02 0.0042
+0.03 0.0041
+0.04 0.0039
+0.05 0.0036
+0.06 0.0032
+0.07 0.0026
+0.08 0.0020
+0.09 0.0016
+0.10 0.0012
+0.11 0.0009
+0.12 0.0007
+0.13 0.0005
+0.14 0.0003
+x
+0.14 0.0003
+0.13 0.0004
+0.12 0.0005
+0.11 0.0007
+0.10 0.0009
+0.09 0.0012
+0.08 0.0015
+0.07 0.0019
+0.06 0.0024
+0.05 0.0029
+0.04 0.0034
+0.03 0.0038
+0.02 0.0041
+0.01 0.0042
+0.00 0.0043
+0.01 0.0043
+0.02 0.0043
+0.03 0.0043
+0.04 0.0042
+0.05 0.0039
+0.06 0.0044
+0.07 0.0029
+0.08 0.0025
+0.09 0.0020
+0.10 0.0015
+0.11 0.0012
+0.12 0.0009
+0.13 0.0007
+0.14 0.0005
+0.15 0.0004