Compare commits

...

36 commits

Author SHA1 Message Date
d81eb5ca4c fix calibration check in ec timing 2025-05-01 22:16:29 +02:00
6b2e074d46 add wifi settings template 2025-05-01 22:14:36 +02:00
bdce0530e2 calibrate waterlevel offset 2025-04-19 15:28:25 +02:00
8249bfb79f change tof sensor and new calibration 2025-04-15 22:23:10 +02:00
14134f1e32 stop automatic ec reading when calibrationoutput true 2025-04-10 20:18:42 +02:00
70b0b0f1a8 fix send mqtt errors only when mqtt enabled 2025-04-10 20:05:34 +02:00
111758b4ae small changes 2025-03-04 07:28:25 +01:00
0bbe791430 add BOM 2024-09-22 00:09:43 +02:00
852d11bf7b add BOM 2024-09-22 00:09:21 +02:00
4e48df4017 Merge branch 'master' of git.ctdo.de:interfisch/hydroponic-controller 2024-08-20 11:33:44 +02:00
3541a04777 fix esp32 pinheader spacing 2024-08-20 11:33:34 +02:00
18032c7f1a Update README.md 2024-08-18 18:32:09 +00:00
bc42c530f0 Update README.md 2024-08-18 18:31:49 +00:00
eb24fe3d23 calibrations 2024-07-30 13:41:41 +02:00
629a8940e7 fix code for new pcb 2024-07-28 21:32:22 +02:00
bd74d4bbe0 change lm317 resistor values for E6 availability 2024-07-26 01:08:20 +02:00
5c840fc5c2 create pcb for manufacturing 2024-07-13 17:29:03 +02:00
0badd25d6e make temperature request async 2024-06-27 20:39:12 +02:00
435cb714e1 enable waterlevel again 2024-06-27 20:38:59 +02:00
25fb036215 fix ec 2024-06-25 21:41:12 +02:00
bb63a0780b only one hydroponic system per esp 2024-06-25 21:10:12 +02:00
a505fb471d improve timing values 2024-05-16 19:11:06 +02:00
cf583e8117 do not send waterlevel if not available 2024-05-16 07:52:35 +02:00
cf4e949089 add valueerror debug outputs 2024-05-13 20:32:14 +02:00
792733527d fix wrong calibration 2024-05-13 19:42:34 +02:00
38d9a4374b calibrate waterlevel sensors and fix new mqtt functions 2024-05-12 11:51:59 +02:00
d2b73982ac add reboot via mqtt 2024-05-12 09:37:24 +02:00
c2d28b5b39 add error acknowledgment via mqtt 2024-05-12 09:23:41 +02:00
2e337e85e7 fix missing include 2024-05-11 09:22:12 +02:00
7436739acb add seconds waterlevel sensor 2024-05-11 09:20:37 +02:00
5eccedef46 add second hydroponic system 2024-05-04 13:04:05 +02:00
393b1df8cf small modifications 2024-04-24 00:14:20 +02:00
63ebefe686 revert code to normal 2024-04-24 00:13:14 +02:00
76c1562245 add information 2024-04-24 00:12:24 +02:00
e1e71ef353 calibration 2024-04-23 23:39:55 +02:00
33e4deb0f1 ec probe calibration 2024-04-23 23:39:18 +02:00
48 changed files with 92337 additions and 4099 deletions

2
.gitignore vendored
View file

@ -7,3 +7,5 @@
.piolibdeps
.clang_complete
.gcc-flags.json
messung/*
include/wifi_settings.h

View file

@ -1,3 +1,6 @@
{
"cmake.configureOnOpen": false
"cmake.configureOnOpen": false,
"files.associations": {
"vl53l1x.h": "c"
}
}

View file

@ -1,8 +1,8 @@
# ESP32 for reading Hydroponic sensors
- EC: https://git.ctdo.de/interfisch/conductivity-sensor
- Temperature: DS18B20
- Waterlevel: Ultrasonic HC-SR04
- Flow
- etc.
# ESP32 for reading Hydroponic sensors
- EC
- Temperature
- Waterlevel
- Flow
- etc.

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

View file

@ -0,0 +1,39 @@
"Reference","Value","Footprint","Qty","Description"
"C1,C2","2.2uF","Capacitor_THT:CP_Radial_Tantal_D4.5mm_P2.50mm","2",""
"C3","100uF","Capacitor_THT:CP_Radial_D10.0mm_P5.00mm","1",""
"C4,C5","100nF","Capacitor_THT:C_Disc_D3.4mm_W2.1mm_P2.50mm","2",""
"C6","220uF","Capacitor_THT:CP_Radial_D8.0mm_P2.50mm","1",""
"C7","100uF","Capacitor_THT:CP_Radial_D8.0mm_P3.80mm","1",""
"C8,C9","1u","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","2","Unpolarized capacitor from ADS1115 PCB"
"D1,D2,D3","1N4148","Diode_THT:D_DO-35_SOD27_P12.70mm_Horizontal","3",""
"D4","LED Relay","LED_SMD:LED_1206_3216Metric_Pad1.42x1.75mm_HandSolder","1",""
"F1","Polyfuse","Fuse:Fuse_1812_4532Metric_Pad1.30x3.40mm_HandSolder","1",""
"FB1,FB2","FerriteBead","Inductor_SMD:L_0805_2012Metric_Pad1.15x1.40mm_HandSolder","2","Ferrite bead from ADS1115 PCB"
"J1","probe","TerminalBlock:TerminalBlock_bornier-2_P5.08mm","1",""
"J3","Waterlevel","TerminalBlock:TerminalBlock_bornier-4_P5.08mm","1",""
"J6","Vin","TerminalBlock:TerminalBlock_bornier-2_P5.08mm","1",""
"J7","Temperature","TerminalBlock:TerminalBlock_bornier-3_P5.08mm","1",""
"J8","Display","Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical","1",""
"J9","Flow","TerminalBlock:TerminalBlock_bornier-3_P5.08mm","1",""
"J10","SW_Push","Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical","1",""
"J11","Analog In","TerminalBlock:TerminalBlock_bornier-5_P5.08mm","1",""
"K1","Zettler AZ822-2C5DSE","Relay_THT:Relay_DPDT_Omron_G5V-2","1",""
"Q1","BC547","Package_TO_SOT_THT:TO-92_HandSolder","1",""
"R1,R2,R27,R28,R29","10k","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","5",""
"R3,R10,R11,R12,R14,R15,R17","1k","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","7",""
"R4,R5,Rcal1","1k2","Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal","3",""
"R6,R7","NC","Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal","2",""
"R8,R9","1M","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","2",""
"R18","4k7","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
"R19","820","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
"R20","270","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
"R21","10R","Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal","1",""
"R22,R23,R24,R25","10k","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","4","Resistor from ADS1115 PCB"
"R26","220","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
"SW1","SW_Push","Button_Switch_SMD:SW_SPST_B3SL-1002P","1",""
"U1,U2","MCP604","Package_SO:SOIC-14_3.9x8.7mm_P1.27mm","2",""
"U3","ESP32-S3-DevKitC","PCM_Espressif:ESP32-S3-DevKitC","1","ESP32-S3-DevKitC-1 (N16R8)"
"U4","LM317_TO-220","Package_TO_SOT_THT:TO-220-3_Vertical","1",""
"U5","L78L33_TO92","Package_TO_SOT_THT:TO-92_Inline","1",""
"U6","DS18B20","Package_TO_SOT_THT:TO-92_Inline","1","Programmable Resolution 1-Wire Digital Thermometer TO-92"
"U7","ADS1115IDGS","Package_SO:TSSOP-10_3x3mm_P0.5mm","1","ADS1115 from ADS1115 PCB"
1 Reference Value Footprint Qty Description
2 C1,C2 2.2uF Capacitor_THT:CP_Radial_Tantal_D4.5mm_P2.50mm 2
3 C3 100uF Capacitor_THT:CP_Radial_D10.0mm_P5.00mm 1
4 C4,C5 100nF Capacitor_THT:C_Disc_D3.4mm_W2.1mm_P2.50mm 2
5 C6 220uF Capacitor_THT:CP_Radial_D8.0mm_P2.50mm 1
6 C7 100uF Capacitor_THT:CP_Radial_D8.0mm_P3.80mm 1
7 C8,C9 1u Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder 2 Unpolarized capacitor from ADS1115 PCB
8 D1,D2,D3 1N4148 Diode_THT:D_DO-35_SOD27_P12.70mm_Horizontal 3
9 D4 LED Relay LED_SMD:LED_1206_3216Metric_Pad1.42x1.75mm_HandSolder 1
10 F1 Polyfuse Fuse:Fuse_1812_4532Metric_Pad1.30x3.40mm_HandSolder 1
11 FB1,FB2 FerriteBead Inductor_SMD:L_0805_2012Metric_Pad1.15x1.40mm_HandSolder 2 Ferrite bead from ADS1115 PCB
12 J1 probe TerminalBlock:TerminalBlock_bornier-2_P5.08mm 1
13 J3 Waterlevel TerminalBlock:TerminalBlock_bornier-4_P5.08mm 1
14 J6 Vin TerminalBlock:TerminalBlock_bornier-2_P5.08mm 1
15 J7 Temperature TerminalBlock:TerminalBlock_bornier-3_P5.08mm 1
16 J8 Display Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical 1
17 J9 Flow TerminalBlock:TerminalBlock_bornier-3_P5.08mm 1
18 J10 SW_Push Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical 1
19 J11 Analog In TerminalBlock:TerminalBlock_bornier-5_P5.08mm 1
20 K1 Zettler AZ822-2C5DSE Relay_THT:Relay_DPDT_Omron_G5V-2 1
21 Q1 BC547 Package_TO_SOT_THT:TO-92_HandSolder 1
22 R1,R2,R27,R28,R29 10k Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder 5
23 R3,R10,R11,R12,R14,R15,R17 1k Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder 7
24 R4,R5,Rcal1 1k2 Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal 3
25 R6,R7 NC Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal 2
26 R8,R9 1M Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder 2
27 R18 4k7 Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder 1
28 R19 820 Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder 1
29 R20 270 Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder 1
30 R21 10R Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal 1
31 R22,R23,R24,R25 10k Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder 4 Resistor from ADS1115 PCB
32 R26 220 Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder 1
33 SW1 SW_Push Button_Switch_SMD:SW_SPST_B3SL-1002P 1
34 U1,U2 MCP604 Package_SO:SOIC-14_3.9x8.7mm_P1.27mm 2
35 U3 ESP32-S3-DevKitC PCM_Espressif:ESP32-S3-DevKitC 1 ESP32-S3-DevKitC-1 (N16R8)
36 U4 LM317_TO-220 Package_TO_SOT_THT:TO-220-3_Vertical 1
37 U5 L78L33_TO92 Package_TO_SOT_THT:TO-92_Inline 1
38 U6 DS18B20 Package_TO_SOT_THT:TO-92_Inline 1 Programmable Resolution 1-Wire Digital Thermometer TO-92
39 U7 ADS1115IDGS Package_SO:TSSOP-10_3x3mm_P0.5mm 1 ADS1115 from ADS1115 PCB

View file

@ -0,0 +1 @@
For ESP32-S3-DevKitM-1 footprint install espressif library zip file via kicad plugin and content manager from here https://github.com/espressif/kicad-libraries

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,278 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*
G04 #@! TF.CreationDate,2024-08-20T11:31:22+02:00*
G04 #@! TF.ProjectId,hydrocontroller_schematic,68796472-6f63-46f6-9e74-726f6c6c6572,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Soldermask,Bot*
G04 #@! TF.FilePolarity,Negative*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.3) date 2024-08-20 11:31:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
%AMFreePoly0*
4,1,19,0.550000,-0.750000,0.000000,-0.750000,0.000000,-0.744911,-0.071157,-0.744911,-0.207708,-0.704816,-0.327430,-0.627875,-0.420627,-0.520320,-0.479746,-0.390866,-0.500000,-0.250000,-0.500000,0.250000,-0.479746,0.390866,-0.420627,0.520320,-0.327430,0.627875,-0.207708,0.704816,-0.071157,0.744911,0.000000,0.744911,0.000000,0.750000,0.550000,0.750000,0.550000,-0.750000,0.550000,-0.750000,
$1*%
%AMFreePoly1*
4,1,19,0.000000,0.744911,0.071157,0.744911,0.207708,0.704816,0.327430,0.627875,0.420627,0.520320,0.479746,0.390866,0.500000,0.250000,0.500000,-0.250000,0.479746,-0.390866,0.420627,-0.520320,0.327430,-0.627875,0.207708,-0.704816,0.071157,-0.744911,0.000000,-0.744911,0.000000,-0.750000,-0.550000,-0.750000,-0.550000,0.750000,0.000000,0.750000,0.000000,0.744911,0.000000,0.744911,
$1*%
G04 Aperture macros list end*
%ADD10C,1.600000*%
%ADD11R,1.700000X1.700000*%
%ADD12O,1.700000X1.700000*%
%ADD13R,1.400000X1.400000*%
%ADD14C,1.400000*%
%ADD15O,1.600000X1.600000*%
%ADD16R,3.000000X3.000000*%
%ADD17C,3.000000*%
%ADD18R,1.600000X1.600000*%
%ADD19C,3.200000*%
%ADD20R,2.000000X2.000000*%
%ADD21C,2.000000*%
%ADD22R,2.000000X1.905000*%
%ADD23O,2.000000X1.905000*%
%ADD24R,1.100000X1.800000*%
%ADD25RoundRect,0.275000X-0.275000X-0.625000X0.275000X-0.625000X0.275000X0.625000X-0.275000X0.625000X0*%
%ADD26R,1.500000X1.050000*%
%ADD27O,1.500000X1.050000*%
%ADD28R,2.000000X1.200000*%
%ADD29O,2.000000X1.200000*%
%ADD30R,1.050000X1.500000*%
%ADD31O,1.050000X1.500000*%
%ADD32FreePoly0,270.000000*%
%ADD33R,1.500000X1.000000*%
%ADD34FreePoly1,270.000000*%
G04 APERTURE END LIST*
D10*
X78105000Y-66363674D03*
X78105000Y-63863674D03*
D11*
X117475000Y-66403674D03*
D12*
X117475000Y-63863674D03*
X117475000Y-61323674D03*
X117475000Y-58783674D03*
D13*
X69215000Y-74978674D03*
D14*
X69215000Y-67358674D03*
X69215000Y-62278674D03*
X69215000Y-57198674D03*
X61595000Y-57198674D03*
X61595000Y-62278674D03*
X61595000Y-67358674D03*
X61595000Y-74978674D03*
D10*
X67310000Y-80373674D03*
D15*
X67310000Y-90533674D03*
D16*
X86026000Y-38735000D03*
D17*
X80946000Y-38735000D03*
D18*
X83185000Y-96883674D03*
D10*
X85685000Y-96883674D03*
X88265000Y-78468674D03*
X90765000Y-78468674D03*
D19*
X60960000Y-119380000D03*
D16*
X86995000Y-114663674D03*
D17*
X92075000Y-114663674D03*
X97155000Y-114663674D03*
X102235000Y-114663674D03*
D10*
X70485000Y-52118674D03*
D15*
X60325000Y-52118674D03*
D16*
X74295000Y-114663674D03*
D17*
X79375000Y-114663674D03*
D16*
X132715000Y-114663674D03*
D17*
X137795000Y-114663674D03*
X142875000Y-114663674D03*
D18*
X83185000Y-60053674D03*
D10*
X80685000Y-60053674D03*
D18*
X83185000Y-72753674D03*
D10*
X80685000Y-72753674D03*
D20*
X104775000Y-52433674D03*
D21*
X104775000Y-57433674D03*
D19*
X158960000Y-119380000D03*
D18*
X81915000Y-77833674D03*
D15*
X81915000Y-90533674D03*
D10*
X70485000Y-80373674D03*
D15*
X70485000Y-90533674D03*
D18*
X95885000Y-52433674D03*
D15*
X83185000Y-52433674D03*
D22*
X74295000Y-104503674D03*
D23*
X74295000Y-101963674D03*
X74295000Y-99423674D03*
D18*
X95250000Y-106306325D03*
D10*
X95250000Y-102506325D03*
D24*
X74930000Y-58868674D03*
D25*
X76200000Y-56798674D03*
X77470000Y-58868674D03*
D18*
X100965000Y-77833674D03*
D15*
X100965000Y-90533674D03*
D16*
X112395000Y-114663674D03*
D17*
X117475000Y-114663674D03*
X122555000Y-114663674D03*
D10*
X73660000Y-80373674D03*
D15*
X73660000Y-90533674D03*
D19*
X158960000Y-35980000D03*
D11*
X158115000Y-64818674D03*
D12*
X160655000Y-64818674D03*
D16*
X116125000Y-38862000D03*
D17*
X111045000Y-38862000D03*
X105965000Y-38862000D03*
X100885000Y-38862000D03*
X95805000Y-38862000D03*
D10*
X73025000Y-75613674D03*
D15*
X73025000Y-65453674D03*
D26*
X86995000Y-106408674D03*
D27*
X86995000Y-105138674D03*
X86995000Y-103868674D03*
D10*
X76835000Y-80373674D03*
D15*
X76835000Y-90533674D03*
D19*
X60960000Y-35980000D03*
D28*
X151765000Y-99423674D03*
X149265000Y-99423674D03*
D29*
X151765000Y-96883674D03*
X149265000Y-96883674D03*
X151765000Y-94343674D03*
X149265000Y-94343674D03*
X151765000Y-91803674D03*
X149265000Y-91803674D03*
X151765000Y-89263674D03*
X149265000Y-89263674D03*
X151765000Y-86723674D03*
X149265000Y-86723674D03*
X151765000Y-84183674D03*
X149265000Y-84183674D03*
X151765000Y-81643674D03*
X149265000Y-81643674D03*
X151765000Y-79103674D03*
X149265000Y-79103674D03*
X151765000Y-76563674D03*
X149265000Y-76563674D03*
X151765000Y-74023674D03*
X149265000Y-74023674D03*
X151765000Y-71483674D03*
X149265000Y-71483674D03*
X151765000Y-68943674D03*
X149265000Y-68943674D03*
X151765000Y-66403674D03*
X149265000Y-66403674D03*
X151765000Y-63863674D03*
X149265000Y-63863674D03*
X151765000Y-61323674D03*
X149265000Y-61323674D03*
X151765000Y-58783674D03*
X149265000Y-58783674D03*
X151765000Y-56243674D03*
X149265000Y-56243674D03*
X151765000Y-53703674D03*
X149265000Y-53703674D03*
X151768680Y-51166394D03*
X149268680Y-51166394D03*
X151768680Y-48626394D03*
X149268680Y-48626394D03*
X151768680Y-46086394D03*
X149268680Y-46086394D03*
X126365000Y-46083674D03*
X126365000Y-48623674D03*
X126365000Y-51163674D03*
X126365000Y-53703674D03*
X126365000Y-56243674D03*
X126365000Y-58783674D03*
X126365000Y-61323674D03*
X126365000Y-63863674D03*
X126365000Y-66403674D03*
X126365000Y-68943674D03*
X126365000Y-71483674D03*
X126365000Y-74023674D03*
X126365000Y-76563674D03*
X126365000Y-79103674D03*
X126365000Y-81643674D03*
X126365000Y-84183674D03*
X126365000Y-86723674D03*
X126365000Y-89263674D03*
X126365000Y-91803674D03*
X126365000Y-94343674D03*
X126365000Y-96883674D03*
X126365000Y-99423674D03*
D30*
X139065000Y-94343674D03*
D31*
X137795000Y-94343674D03*
X136525000Y-94343674D03*
D32*
X133985000Y-66264000D03*
D33*
X133985000Y-67564000D03*
D34*
X133985000Y-68864000D03*
M02*

View file

@ -0,0 +1,15 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*
G04 #@! TF.CreationDate,2024-08-20T11:31:22+02:00*
G04 #@! TF.ProjectId,hydrocontroller_schematic,68796472-6f63-46f6-9e74-726f6c6c6572,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Paste,Bot*
G04 #@! TF.FilePolarity,Positive*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.3) date 2024-08-20 11:31:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 APERTURE END LIST*
M02*

View file

@ -0,0 +1,448 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*
G04 #@! TF.CreationDate,2024-08-20T11:31:22+02:00*
G04 #@! TF.ProjectId,hydrocontroller_schematic,68796472-6f63-46f6-9e74-726f6c6c6572,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Legend,Bot*
G04 #@! TF.FilePolarity,Positive*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.3) date 2024-08-20 11:31:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
%AMFreePoly0*
4,1,19,0.550000,-0.750000,0.000000,-0.750000,0.000000,-0.744911,-0.071157,-0.744911,-0.207708,-0.704816,-0.327430,-0.627875,-0.420627,-0.520320,-0.479746,-0.390866,-0.500000,-0.250000,-0.500000,0.250000,-0.479746,0.390866,-0.420627,0.520320,-0.327430,0.627875,-0.207708,0.704816,-0.071157,0.744911,0.000000,0.744911,0.000000,0.750000,0.550000,0.750000,0.550000,-0.750000,0.550000,-0.750000,
$1*%
%AMFreePoly1*
4,1,19,0.000000,0.744911,0.071157,0.744911,0.207708,0.704816,0.327430,0.627875,0.420627,0.520320,0.479746,0.390866,0.500000,0.250000,0.500000,-0.250000,0.479746,-0.390866,0.420627,-0.520320,0.327430,-0.627875,0.207708,-0.704816,0.071157,-0.744911,0.000000,-0.744911,0.000000,-0.750000,-0.550000,-0.750000,-0.550000,0.750000,0.000000,0.750000,0.000000,0.744911,0.000000,0.744911,
$1*%
G04 Aperture macros list end*
%ADD10C,0.150000*%
%ADD11C,0.120000*%
%ADD12C,1.600000*%
%ADD13R,1.700000X1.700000*%
%ADD14O,1.700000X1.700000*%
%ADD15R,1.400000X1.400000*%
%ADD16C,1.400000*%
%ADD17O,1.600000X1.600000*%
%ADD18R,3.000000X3.000000*%
%ADD19C,3.000000*%
%ADD20R,1.600000X1.600000*%
%ADD21C,3.200000*%
%ADD22R,2.000000X2.000000*%
%ADD23C,2.000000*%
%ADD24R,2.000000X1.905000*%
%ADD25O,2.000000X1.905000*%
%ADD26R,1.100000X1.800000*%
%ADD27RoundRect,0.275000X-0.275000X-0.625000X0.275000X-0.625000X0.275000X0.625000X-0.275000X0.625000X0*%
%ADD28R,1.500000X1.050000*%
%ADD29O,1.500000X1.050000*%
%ADD30R,2.000000X1.200000*%
%ADD31O,2.000000X1.200000*%
%ADD32R,1.050000X1.500000*%
%ADD33O,1.050000X1.500000*%
%ADD34FreePoly0,270.000000*%
%ADD35R,1.500000X1.000000*%
%ADD36FreePoly1,270.000000*%
G04 APERTURE END LIST*
D10*
X137363030Y-65417819D02*
X137839220Y-65417819D01*
X137839220Y-65417819D02*
X137886839Y-65894009D01*
X137886839Y-65894009D02*
X137839220Y-65846390D01*
X137839220Y-65846390D02*
X137743982Y-65798771D01*
X137743982Y-65798771D02*
X137505887Y-65798771D01*
X137505887Y-65798771D02*
X137410649Y-65846390D01*
X137410649Y-65846390D02*
X137363030Y-65894009D01*
X137363030Y-65894009D02*
X137315411Y-65989247D01*
X137315411Y-65989247D02*
X137315411Y-66227342D01*
X137315411Y-66227342D02*
X137363030Y-66322580D01*
X137363030Y-66322580D02*
X137410649Y-66370200D01*
X137410649Y-66370200D02*
X137505887Y-66417819D01*
X137505887Y-66417819D02*
X137743982Y-66417819D01*
X137743982Y-66417819D02*
X137839220Y-66370200D01*
X137839220Y-66370200D02*
X137886839Y-66322580D01*
X136982077Y-65751152D02*
X136743982Y-66417819D01*
X136743982Y-66417819D02*
X136505887Y-65751152D01*
X137934458Y-68465819D02*
X137315411Y-68465819D01*
X137315411Y-68465819D02*
X137648744Y-68846771D01*
X137648744Y-68846771D02*
X137505887Y-68846771D01*
X137505887Y-68846771D02*
X137410649Y-68894390D01*
X137410649Y-68894390D02*
X137363030Y-68942009D01*
X137363030Y-68942009D02*
X137315411Y-69037247D01*
X137315411Y-69037247D02*
X137315411Y-69275342D01*
X137315411Y-69275342D02*
X137363030Y-69370580D01*
X137363030Y-69370580D02*
X137410649Y-69418200D01*
X137410649Y-69418200D02*
X137505887Y-69465819D01*
X137505887Y-69465819D02*
X137791601Y-69465819D01*
X137791601Y-69465819D02*
X137886839Y-69418200D01*
X137886839Y-69418200D02*
X137934458Y-69370580D01*
X136982077Y-68799152D02*
X136743982Y-69465819D01*
X136743982Y-69465819D02*
X136505887Y-68799152D01*
X136220172Y-68465819D02*
X135601125Y-68465819D01*
X135601125Y-68465819D02*
X135934458Y-68846771D01*
X135934458Y-68846771D02*
X135791601Y-68846771D01*
X135791601Y-68846771D02*
X135696363Y-68894390D01*
X135696363Y-68894390D02*
X135648744Y-68942009D01*
X135648744Y-68942009D02*
X135601125Y-69037247D01*
X135601125Y-69037247D02*
X135601125Y-69275342D01*
X135601125Y-69275342D02*
X135648744Y-69370580D01*
X135648744Y-69370580D02*
X135696363Y-69418200D01*
X135696363Y-69418200D02*
X135791601Y-69465819D01*
X135791601Y-69465819D02*
X136077315Y-69465819D01*
X136077315Y-69465819D02*
X136172553Y-69418200D01*
X136172553Y-69418200D02*
X136220172Y-69370580D01*
X131639819Y-66730666D02*
X132354104Y-66730666D01*
X132354104Y-66730666D02*
X132496961Y-66683047D01*
X132496961Y-66683047D02*
X132592200Y-66587809D01*
X132592200Y-66587809D02*
X132639819Y-66444952D01*
X132639819Y-66444952D02*
X132639819Y-66349714D01*
X132639819Y-67206857D02*
X131639819Y-67206857D01*
X131639819Y-67206857D02*
X131639819Y-67587809D01*
X131639819Y-67587809D02*
X131687438Y-67683047D01*
X131687438Y-67683047D02*
X131735057Y-67730666D01*
X131735057Y-67730666D02*
X131830295Y-67778285D01*
X131830295Y-67778285D02*
X131973152Y-67778285D01*
X131973152Y-67778285D02*
X132068390Y-67730666D01*
X132068390Y-67730666D02*
X132116009Y-67683047D01*
X132116009Y-67683047D02*
X132163628Y-67587809D01*
X132163628Y-67587809D02*
X132163628Y-67206857D01*
X132639819Y-68730666D02*
X132639819Y-68159238D01*
X132639819Y-68444952D02*
X131639819Y-68444952D01*
X131639819Y-68444952D02*
X131782676Y-68349714D01*
X131782676Y-68349714D02*
X131877914Y-68254476D01*
X131877914Y-68254476D02*
X131925533Y-68159238D01*
D11*
X132985000Y-68964000D02*
X132985000Y-66164000D01*
X133685000Y-65514000D02*
X134285000Y-65514000D01*
X134285000Y-69614000D02*
X133685000Y-69614000D01*
X134985000Y-66164000D02*
X134985000Y-68964000D01*
X135485000Y-66064000D02*
X135185000Y-66364000D01*
X135485000Y-66664000D02*
X135185000Y-66364000D01*
X135485000Y-66664000D02*
X135485000Y-66064000D01*
X132985000Y-66214000D02*
G75*
G02*
X133685000Y-65514000I699999J1D01*
G01*
X133685000Y-69614000D02*
G75*
G02*
X132985000Y-68914000I0J700000D01*
G01*
X134285000Y-65514000D02*
G75*
G02*
X134985000Y-66214000I1J-699999D01*
G01*
X134985000Y-68914000D02*
G75*
G02*
X134285000Y-69614000I-700000J0D01*
G01*
%LPC*%
D12*
X78105000Y-66363674D03*
X78105000Y-63863674D03*
D13*
X117475000Y-66403674D03*
D14*
X117475000Y-63863674D03*
X117475000Y-61323674D03*
X117475000Y-58783674D03*
D15*
X69215000Y-74978674D03*
D16*
X69215000Y-67358674D03*
X69215000Y-62278674D03*
X69215000Y-57198674D03*
X61595000Y-57198674D03*
X61595000Y-62278674D03*
X61595000Y-67358674D03*
X61595000Y-74978674D03*
D12*
X67310000Y-80373674D03*
D17*
X67310000Y-90533674D03*
D18*
X86026000Y-38735000D03*
D19*
X80946000Y-38735000D03*
D20*
X83185000Y-96883674D03*
D12*
X85685000Y-96883674D03*
X88265000Y-78468674D03*
X90765000Y-78468674D03*
D21*
X60960000Y-119380000D03*
D18*
X86995000Y-114663674D03*
D19*
X92075000Y-114663674D03*
X97155000Y-114663674D03*
X102235000Y-114663674D03*
D12*
X70485000Y-52118674D03*
D17*
X60325000Y-52118674D03*
D18*
X74295000Y-114663674D03*
D19*
X79375000Y-114663674D03*
D18*
X132715000Y-114663674D03*
D19*
X137795000Y-114663674D03*
X142875000Y-114663674D03*
D20*
X83185000Y-60053674D03*
D12*
X80685000Y-60053674D03*
D20*
X83185000Y-72753674D03*
D12*
X80685000Y-72753674D03*
D22*
X104775000Y-52433674D03*
D23*
X104775000Y-57433674D03*
D21*
X158960000Y-119380000D03*
D20*
X81915000Y-77833674D03*
D17*
X81915000Y-90533674D03*
D12*
X70485000Y-80373674D03*
D17*
X70485000Y-90533674D03*
D20*
X95885000Y-52433674D03*
D17*
X83185000Y-52433674D03*
D24*
X74295000Y-104503674D03*
D25*
X74295000Y-101963674D03*
X74295000Y-99423674D03*
D20*
X95250000Y-106306325D03*
D12*
X95250000Y-102506325D03*
D26*
X74930000Y-58868674D03*
D27*
X76200000Y-56798674D03*
X77470000Y-58868674D03*
D20*
X100965000Y-77833674D03*
D17*
X100965000Y-90533674D03*
D18*
X112395000Y-114663674D03*
D19*
X117475000Y-114663674D03*
X122555000Y-114663674D03*
D12*
X73660000Y-80373674D03*
D17*
X73660000Y-90533674D03*
D21*
X158960000Y-35980000D03*
D13*
X158115000Y-64818674D03*
D14*
X160655000Y-64818674D03*
D18*
X116125000Y-38862000D03*
D19*
X111045000Y-38862000D03*
X105965000Y-38862000D03*
X100885000Y-38862000D03*
X95805000Y-38862000D03*
D12*
X73025000Y-75613674D03*
D17*
X73025000Y-65453674D03*
D28*
X86995000Y-106408674D03*
D29*
X86995000Y-105138674D03*
X86995000Y-103868674D03*
D12*
X76835000Y-80373674D03*
D17*
X76835000Y-90533674D03*
D21*
X60960000Y-35980000D03*
D30*
X151765000Y-99423674D03*
X149265000Y-99423674D03*
D31*
X151765000Y-96883674D03*
X149265000Y-96883674D03*
X151765000Y-94343674D03*
X149265000Y-94343674D03*
X151765000Y-91803674D03*
X149265000Y-91803674D03*
X151765000Y-89263674D03*
X149265000Y-89263674D03*
X151765000Y-86723674D03*
X149265000Y-86723674D03*
X151765000Y-84183674D03*
X149265000Y-84183674D03*
X151765000Y-81643674D03*
X149265000Y-81643674D03*
X151765000Y-79103674D03*
X149265000Y-79103674D03*
X151765000Y-76563674D03*
X149265000Y-76563674D03*
X151765000Y-74023674D03*
X149265000Y-74023674D03*
X151765000Y-71483674D03*
X149265000Y-71483674D03*
X151765000Y-68943674D03*
X149265000Y-68943674D03*
X151765000Y-66403674D03*
X149265000Y-66403674D03*
X151765000Y-63863674D03*
X149265000Y-63863674D03*
X151765000Y-61323674D03*
X149265000Y-61323674D03*
X151765000Y-58783674D03*
X149265000Y-58783674D03*
X151765000Y-56243674D03*
X149265000Y-56243674D03*
X151765000Y-53703674D03*
X149265000Y-53703674D03*
X151768680Y-51166394D03*
X149268680Y-51166394D03*
X151768680Y-48626394D03*
X149268680Y-48626394D03*
X151768680Y-46086394D03*
X149268680Y-46086394D03*
X126365000Y-46083674D03*
X126365000Y-48623674D03*
X126365000Y-51163674D03*
X126365000Y-53703674D03*
X126365000Y-56243674D03*
X126365000Y-58783674D03*
X126365000Y-61323674D03*
X126365000Y-63863674D03*
X126365000Y-66403674D03*
X126365000Y-68943674D03*
X126365000Y-71483674D03*
X126365000Y-74023674D03*
X126365000Y-76563674D03*
X126365000Y-79103674D03*
X126365000Y-81643674D03*
X126365000Y-84183674D03*
X126365000Y-86723674D03*
X126365000Y-89263674D03*
X126365000Y-91803674D03*
X126365000Y-94343674D03*
X126365000Y-96883674D03*
X126365000Y-99423674D03*
D32*
X139065000Y-94343674D03*
D33*
X137795000Y-94343674D03*
X136525000Y-94343674D03*
D34*
X133985000Y-66264000D03*
D35*
X133985000Y-67564000D03*
D36*
X133985000Y-68864000D03*
%LPD*%
M02*

View file

@ -0,0 +1,23 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*
G04 #@! TF.CreationDate,2024-08-20T11:31:22+02:00*
G04 #@! TF.ProjectId,hydrocontroller_schematic,68796472-6f63-46f6-9e74-726f6c6c6572,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Profile,NP*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.3) date 2024-08-20 11:31:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 #@! TA.AperFunction,Profile*
%ADD10C,0.200000*%
G04 #@! TD*
G04 APERTURE END LIST*
D10*
X55880000Y-30480000D02*
X165100000Y-30480000D01*
X165100000Y-124460000D01*
X55880000Y-124460000D01*
X55880000Y-30480000D01*
M02*

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,399 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*
G04 #@! TF.CreationDate,2024-08-20T11:31:22+02:00*
G04 #@! TF.ProjectId,hydrocontroller_schematic,68796472-6f63-46f6-9e74-726f6c6c6572,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Soldermask,Top*
G04 #@! TF.FilePolarity,Negative*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.3) date 2024-08-20 11:31:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10RoundRect,0.250001X0.462499X0.624999X-0.462499X0.624999X-0.462499X-0.624999X0.462499X-0.624999X0*%
%ADD11RoundRect,0.237500X-0.250000X-0.237500X0.250000X-0.237500X0.250000X0.237500X-0.250000X0.237500X0*%
%ADD12RoundRect,0.237500X-0.237500X0.250000X-0.237500X-0.250000X0.237500X-0.250000X0.237500X0.250000X0*%
%ADD13R,1.100000X0.250000*%
%ADD14C,1.600000*%
%ADD15RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
%ADD16R,1.700000X1.700000*%
%ADD17O,1.700000X1.700000*%
%ADD18R,1.400000X1.400000*%
%ADD19C,1.400000*%
%ADD20O,1.600000X1.600000*%
%ADD21RoundRect,0.237500X0.250000X0.237500X-0.250000X0.237500X-0.250000X-0.237500X0.250000X-0.237500X0*%
%ADD22R,3.000000X3.000000*%
%ADD23C,3.000000*%
%ADD24R,1.600000X1.600000*%
%ADD25R,1.000000X2.750000*%
%ADD26C,3.200000*%
%ADD27RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*%
%ADD28R,2.000000X2.000000*%
%ADD29C,2.000000*%
%ADD30RoundRect,0.250000X0.337500X0.475000X-0.337500X0.475000X-0.337500X-0.475000X0.337500X-0.475000X0*%
%ADD31R,2.000000X1.905000*%
%ADD32O,2.000000X1.905000*%
%ADD33R,1.100000X1.800000*%
%ADD34RoundRect,0.275000X-0.275000X-0.625000X0.275000X-0.625000X0.275000X0.625000X-0.275000X0.625000X0*%
%ADD35RoundRect,0.250000X-0.450000X0.325000X-0.450000X-0.325000X0.450000X-0.325000X0.450000X0.325000X0*%
%ADD36RoundRect,0.250000X1.450000X-0.400000X1.450000X0.400000X-1.450000X0.400000X-1.450000X-0.400000X0*%
%ADD37R,1.500000X1.050000*%
%ADD38O,1.500000X1.050000*%
%ADD39R,2.000000X1.200000*%
%ADD40O,2.000000X1.200000*%
%ADD41R,1.050000X1.500000*%
%ADD42O,1.050000X1.500000*%
G04 APERTURE END LIST*
D10*
X93780000Y-57198674D03*
X90805000Y-57198674D03*
D11*
X90805000Y-60053674D03*
X92630000Y-60053674D03*
D12*
X78105000Y-104503674D03*
X78105000Y-106328674D03*
D13*
X108095000Y-91303674D03*
X108095000Y-91803674D03*
X108095000Y-92303674D03*
X108095000Y-92803674D03*
X108095000Y-93303674D03*
X112395000Y-93303674D03*
X112395000Y-92803674D03*
X112395000Y-92303674D03*
X112395000Y-91803674D03*
X112395000Y-91303674D03*
D14*
X78105000Y-66363674D03*
X78105000Y-63863674D03*
D15*
X95885000Y-87278674D03*
X95885000Y-85453674D03*
D16*
X117475000Y-66403674D03*
D17*
X117475000Y-63863674D03*
X117475000Y-61323674D03*
X117475000Y-58783674D03*
D18*
X69215000Y-74978674D03*
D19*
X69215000Y-67358674D03*
X69215000Y-62278674D03*
X69215000Y-57198674D03*
X61595000Y-57198674D03*
X61595000Y-62278674D03*
X61595000Y-67358674D03*
X61595000Y-74978674D03*
D14*
X67310000Y-80373674D03*
D20*
X67310000Y-90533674D03*
D21*
X82470000Y-56243674D03*
X80645000Y-56243674D03*
D11*
X86995000Y-74023674D03*
X88820000Y-74023674D03*
D22*
X86026000Y-38735000D03*
D23*
X80946000Y-38735000D03*
D24*
X83185000Y-96883674D03*
D14*
X85685000Y-96883674D03*
X88265000Y-78468674D03*
X90765000Y-78468674D03*
D25*
X161480000Y-50213674D03*
X161480000Y-55963674D03*
X157480000Y-50213674D03*
X157480000Y-55963674D03*
D26*
X60960000Y-119380000D03*
D22*
X86995000Y-114663674D03*
D23*
X92075000Y-114663674D03*
X97155000Y-114663674D03*
X102235000Y-114663674D03*
D11*
X135970000Y-98153674D03*
X137795000Y-98153674D03*
X111045000Y-46124500D03*
X112870000Y-46124500D03*
D14*
X70485000Y-52118674D03*
D20*
X60325000Y-52118674D03*
D22*
X74295000Y-114663674D03*
D23*
X79375000Y-114663674D03*
D22*
X132715000Y-114663674D03*
D23*
X137795000Y-114663674D03*
X142875000Y-114663674D03*
D15*
X98425000Y-65688674D03*
X98425000Y-63863674D03*
D27*
X87060000Y-82913674D03*
X87060000Y-84183674D03*
X87060000Y-85453674D03*
X87060000Y-86723674D03*
X87060000Y-87993674D03*
X87060000Y-89263674D03*
X87060000Y-90533674D03*
X92010000Y-90533674D03*
X92010000Y-89263674D03*
X92010000Y-87993674D03*
X92010000Y-86723674D03*
X92010000Y-85453674D03*
X92010000Y-84183674D03*
X92010000Y-82913674D03*
D24*
X83185000Y-60053674D03*
D14*
X80685000Y-60053674D03*
D24*
X83185000Y-72753674D03*
D14*
X80685000Y-72753674D03*
D28*
X104775000Y-52433674D03*
D29*
X104775000Y-57433674D03*
D15*
X120015000Y-93628674D03*
X120015000Y-91803674D03*
X95885000Y-63863674D03*
X95885000Y-62038674D03*
D11*
X81915000Y-65133674D03*
X83740000Y-65133674D03*
X99060000Y-45847000D03*
X100885000Y-45847000D03*
D26*
X158960000Y-119380000D03*
D24*
X81915000Y-77833674D03*
D20*
X81915000Y-90533674D03*
D14*
X70485000Y-80373674D03*
D20*
X70485000Y-90533674D03*
D11*
X81915000Y-67673674D03*
X83740000Y-67673674D03*
D30*
X112395000Y-99423674D03*
X110320000Y-99423674D03*
D24*
X95885000Y-52433674D03*
D20*
X83185000Y-52433674D03*
D31*
X74295000Y-104503674D03*
D32*
X74295000Y-101963674D03*
X74295000Y-99423674D03*
D24*
X95250000Y-106306325D03*
D14*
X95250000Y-102506325D03*
D12*
X80645000Y-102678674D03*
X80645000Y-104503674D03*
D21*
X105965000Y-45847000D03*
X104140000Y-45847000D03*
D30*
X112395000Y-107043674D03*
X110320000Y-107043674D03*
D33*
X74930000Y-58868674D03*
D34*
X76200000Y-56798674D03*
X77470000Y-58868674D03*
D24*
X100965000Y-77833674D03*
D20*
X100965000Y-90533674D03*
D35*
X109855000Y-101963674D03*
X109855000Y-104013674D03*
D22*
X112395000Y-114663674D03*
D23*
X117475000Y-114663674D03*
X122555000Y-114663674D03*
D36*
X66675000Y-106728674D03*
X66675000Y-102278674D03*
D14*
X73660000Y-80373674D03*
D20*
X73660000Y-90533674D03*
D26*
X158960000Y-35980000D03*
D16*
X158115000Y-64818674D03*
D17*
X160655000Y-64818674D03*
D22*
X116125000Y-38862000D03*
D23*
X111045000Y-38862000D03*
X105965000Y-38862000D03*
X100885000Y-38862000D03*
X95805000Y-38862000D03*
D12*
X104775000Y-90533674D03*
X104775000Y-92358674D03*
X86995000Y-55016174D03*
X86995000Y-56841174D03*
D15*
X117475000Y-93628674D03*
X117475000Y-91803674D03*
X98425000Y-85453674D03*
X98425000Y-83628674D03*
D14*
X73025000Y-75613674D03*
D20*
X73025000Y-65453674D03*
D11*
X86995000Y-60053674D03*
X88820000Y-60053674D03*
D35*
X112395000Y-101963674D03*
X112395000Y-104013674D03*
D37*
X86995000Y-106408674D03*
D38*
X86995000Y-105138674D03*
X86995000Y-103868674D03*
D27*
X87060000Y-62593674D03*
X87060000Y-63863674D03*
X87060000Y-65133674D03*
X87060000Y-66403674D03*
X87060000Y-67673674D03*
X87060000Y-68943674D03*
X87060000Y-70213674D03*
X92010000Y-70213674D03*
X92010000Y-68943674D03*
X92010000Y-67673674D03*
X92010000Y-66403674D03*
X92010000Y-65133674D03*
X92010000Y-63863674D03*
X92010000Y-62593674D03*
D14*
X76835000Y-80373674D03*
D20*
X76835000Y-90533674D03*
D21*
X105687500Y-96883674D03*
X103862500Y-96883674D03*
D26*
X60960000Y-35980000D03*
D39*
X151765000Y-99423674D03*
X149265000Y-99423674D03*
D40*
X151765000Y-96883674D03*
X149265000Y-96883674D03*
X151765000Y-94343674D03*
X149265000Y-94343674D03*
X151765000Y-91803674D03*
X149265000Y-91803674D03*
X151765000Y-89263674D03*
X149265000Y-89263674D03*
X151765000Y-86723674D03*
X149265000Y-86723674D03*
X151765000Y-84183674D03*
X149265000Y-84183674D03*
X151765000Y-81643674D03*
X149265000Y-81643674D03*
X151765000Y-79103674D03*
X149265000Y-79103674D03*
X151765000Y-76563674D03*
X149265000Y-76563674D03*
X151765000Y-74023674D03*
X149265000Y-74023674D03*
X151765000Y-71483674D03*
X149265000Y-71483674D03*
X151765000Y-68943674D03*
X149265000Y-68943674D03*
X151765000Y-66403674D03*
X149265000Y-66403674D03*
X151765000Y-63863674D03*
X149265000Y-63863674D03*
X151765000Y-61323674D03*
X149265000Y-61323674D03*
X151765000Y-58783674D03*
X149265000Y-58783674D03*
X151765000Y-56243674D03*
X149265000Y-56243674D03*
X151765000Y-53703674D03*
X149265000Y-53703674D03*
X151768680Y-51166394D03*
X149268680Y-51166394D03*
X151768680Y-48626394D03*
X149268680Y-48626394D03*
X151768680Y-46086394D03*
X149268680Y-46086394D03*
X126365000Y-46083674D03*
X126365000Y-48623674D03*
X126365000Y-51163674D03*
X126365000Y-53703674D03*
X126365000Y-56243674D03*
X126365000Y-58783674D03*
X126365000Y-61323674D03*
X126365000Y-63863674D03*
X126365000Y-66403674D03*
X126365000Y-68943674D03*
X126365000Y-71483674D03*
X126365000Y-74023674D03*
X126365000Y-76563674D03*
X126365000Y-79103674D03*
X126365000Y-81643674D03*
X126365000Y-84183674D03*
X126365000Y-86723674D03*
X126365000Y-89263674D03*
X126365000Y-91803674D03*
X126365000Y-94343674D03*
X126365000Y-96883674D03*
X126365000Y-99423674D03*
D12*
X95885000Y-70213674D03*
X95885000Y-72038674D03*
D41*
X139065000Y-94343674D03*
D42*
X137795000Y-94343674D03*
X136525000Y-94343674D03*
M02*

View file

@ -0,0 +1,168 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*
G04 #@! TF.CreationDate,2024-08-20T11:31:22+02:00*
G04 #@! TF.ProjectId,hydrocontroller_schematic,68796472-6f63-46f6-9e74-726f6c6c6572,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Paste,Top*
G04 #@! TF.FilePolarity,Positive*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.3) date 2024-08-20 11:31:22*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10RoundRect,0.250001X0.462499X0.624999X-0.462499X0.624999X-0.462499X-0.624999X0.462499X-0.624999X0*%
%ADD11RoundRect,0.237500X-0.250000X-0.237500X0.250000X-0.237500X0.250000X0.237500X-0.250000X0.237500X0*%
%ADD12RoundRect,0.237500X-0.237500X0.250000X-0.237500X-0.250000X0.237500X-0.250000X0.237500X0.250000X0*%
%ADD13R,1.100000X0.250000*%
%ADD14RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
%ADD15RoundRect,0.237500X0.250000X0.237500X-0.250000X0.237500X-0.250000X-0.237500X0.250000X-0.237500X0*%
%ADD16R,1.000000X2.750000*%
%ADD17RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*%
%ADD18RoundRect,0.250000X0.337500X0.475000X-0.337500X0.475000X-0.337500X-0.475000X0.337500X-0.475000X0*%
%ADD19RoundRect,0.250000X-0.450000X0.325000X-0.450000X-0.325000X0.450000X-0.325000X0.450000X0.325000X0*%
%ADD20RoundRect,0.250000X1.450000X-0.400000X1.450000X0.400000X-1.450000X0.400000X-1.450000X-0.400000X0*%
G04 APERTURE END LIST*
D10*
X93780000Y-57198674D03*
X90805000Y-57198674D03*
D11*
X90805000Y-60053674D03*
X92630000Y-60053674D03*
D12*
X78105000Y-104503674D03*
X78105000Y-106328674D03*
D13*
X108095000Y-91303674D03*
X108095000Y-91803674D03*
X108095000Y-92303674D03*
X108095000Y-92803674D03*
X108095000Y-93303674D03*
X112395000Y-93303674D03*
X112395000Y-92803674D03*
X112395000Y-92303674D03*
X112395000Y-91803674D03*
X112395000Y-91303674D03*
D14*
X95885000Y-87278674D03*
X95885000Y-85453674D03*
D15*
X82470000Y-56243674D03*
X80645000Y-56243674D03*
D11*
X86995000Y-74023674D03*
X88820000Y-74023674D03*
D16*
X161480000Y-50213674D03*
X161480000Y-55963674D03*
X157480000Y-50213674D03*
X157480000Y-55963674D03*
D11*
X135970000Y-98153674D03*
X137795000Y-98153674D03*
X111045000Y-46124500D03*
X112870000Y-46124500D03*
D14*
X98425000Y-65688674D03*
X98425000Y-63863674D03*
D17*
X87060000Y-82913674D03*
X87060000Y-84183674D03*
X87060000Y-85453674D03*
X87060000Y-86723674D03*
X87060000Y-87993674D03*
X87060000Y-89263674D03*
X87060000Y-90533674D03*
X92010000Y-90533674D03*
X92010000Y-89263674D03*
X92010000Y-87993674D03*
X92010000Y-86723674D03*
X92010000Y-85453674D03*
X92010000Y-84183674D03*
X92010000Y-82913674D03*
D14*
X120015000Y-93628674D03*
X120015000Y-91803674D03*
X95885000Y-63863674D03*
X95885000Y-62038674D03*
D11*
X81915000Y-65133674D03*
X83740000Y-65133674D03*
X99060000Y-45847000D03*
X100885000Y-45847000D03*
X81915000Y-67673674D03*
X83740000Y-67673674D03*
D18*
X112395000Y-99423674D03*
X110320000Y-99423674D03*
D12*
X80645000Y-102678674D03*
X80645000Y-104503674D03*
D15*
X105965000Y-45847000D03*
X104140000Y-45847000D03*
D18*
X112395000Y-107043674D03*
X110320000Y-107043674D03*
D19*
X109855000Y-101963674D03*
X109855000Y-104013674D03*
D20*
X66675000Y-106728674D03*
X66675000Y-102278674D03*
D12*
X104775000Y-90533674D03*
X104775000Y-92358674D03*
X86995000Y-55016174D03*
X86995000Y-56841174D03*
D14*
X117475000Y-93628674D03*
X117475000Y-91803674D03*
X98425000Y-85453674D03*
X98425000Y-83628674D03*
D11*
X86995000Y-60053674D03*
X88820000Y-60053674D03*
D19*
X112395000Y-101963674D03*
X112395000Y-104013674D03*
D17*
X87060000Y-62593674D03*
X87060000Y-63863674D03*
X87060000Y-65133674D03*
X87060000Y-66403674D03*
X87060000Y-67673674D03*
X87060000Y-68943674D03*
X87060000Y-70213674D03*
X92010000Y-70213674D03*
X92010000Y-68943674D03*
X92010000Y-67673674D03*
X92010000Y-66403674D03*
X92010000Y-65133674D03*
X92010000Y-63863674D03*
X92010000Y-62593674D03*
D15*
X105687500Y-96883674D03*
X103862500Y-96883674D03*
D12*
X95885000Y-70213674D03*
X95885000Y-72038674D03*
M02*

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,911 @@
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.3*%
%TF.CreationDate,2024-08-20T11:31:27+02:00*%
%TF.ProjectId,hydrocontroller_schematic,68796472-6f63-46f6-9e74-726f6c6c6572,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Drillmap*%
%TF.FilePolarity,Positive*%
%FSLAX45Y45*%
G04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.3) date 2024-08-20 11:31:27*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.200000*%
%ADD11C,0.320000*%
G04 APERTURE END LIST*
D10*
X5588000Y-3048000D02*
X16510000Y-3048000D01*
X16510000Y-12446000D01*
X5588000Y-12446000D01*
X5588000Y-3048000D01*
D11*
X5936000Y-3438000D02*
X6256000Y-3758000D01*
X6256000Y-3438000D02*
X5936000Y-3758000D01*
X5936000Y-11778000D02*
X6256000Y-12098000D01*
X6256000Y-11778000D02*
X5936000Y-12098000D01*
X15736000Y-3438000D02*
X16056000Y-3758000D01*
X16056000Y-3438000D02*
X15736000Y-3758000D01*
X15736000Y-11778000D02*
X16056000Y-12098000D01*
X16056000Y-11778000D02*
X15736000Y-12098000D01*
D10*
X5838777Y-12767484D02*
X5838777Y-12567484D01*
X5838777Y-12567484D02*
X5886396Y-12567484D01*
X5886396Y-12567484D02*
X5914967Y-12577008D01*
X5914967Y-12577008D02*
X5934015Y-12596055D01*
X5934015Y-12596055D02*
X5943539Y-12615103D01*
X5943539Y-12615103D02*
X5953062Y-12653198D01*
X5953062Y-12653198D02*
X5953062Y-12681769D01*
X5953062Y-12681769D02*
X5943539Y-12719865D01*
X5943539Y-12719865D02*
X5934015Y-12738912D01*
X5934015Y-12738912D02*
X5914967Y-12757960D01*
X5914967Y-12757960D02*
X5886396Y-12767484D01*
X5886396Y-12767484D02*
X5838777Y-12767484D01*
X6038777Y-12767484D02*
X6038777Y-12634150D01*
X6038777Y-12672246D02*
X6048301Y-12653198D01*
X6048301Y-12653198D02*
X6057824Y-12643674D01*
X6057824Y-12643674D02*
X6076872Y-12634150D01*
X6076872Y-12634150D02*
X6095920Y-12634150D01*
X6162586Y-12767484D02*
X6162586Y-12634150D01*
X6162586Y-12567484D02*
X6153062Y-12577008D01*
X6153062Y-12577008D02*
X6162586Y-12586531D01*
X6162586Y-12586531D02*
X6172110Y-12577008D01*
X6172110Y-12577008D02*
X6162586Y-12567484D01*
X6162586Y-12567484D02*
X6162586Y-12586531D01*
X6286396Y-12767484D02*
X6267348Y-12757960D01*
X6267348Y-12757960D02*
X6257824Y-12738912D01*
X6257824Y-12738912D02*
X6257824Y-12567484D01*
X6391158Y-12767484D02*
X6372110Y-12757960D01*
X6372110Y-12757960D02*
X6362586Y-12738912D01*
X6362586Y-12738912D02*
X6362586Y-12567484D01*
X6619729Y-12767484D02*
X6619729Y-12567484D01*
X6619729Y-12567484D02*
X6686396Y-12710341D01*
X6686396Y-12710341D02*
X6753062Y-12567484D01*
X6753062Y-12567484D02*
X6753062Y-12767484D01*
X6934015Y-12767484D02*
X6934015Y-12662722D01*
X6934015Y-12662722D02*
X6924491Y-12643674D01*
X6924491Y-12643674D02*
X6905443Y-12634150D01*
X6905443Y-12634150D02*
X6867348Y-12634150D01*
X6867348Y-12634150D02*
X6848301Y-12643674D01*
X6934015Y-12757960D02*
X6914967Y-12767484D01*
X6914967Y-12767484D02*
X6867348Y-12767484D01*
X6867348Y-12767484D02*
X6848301Y-12757960D01*
X6848301Y-12757960D02*
X6838777Y-12738912D01*
X6838777Y-12738912D02*
X6838777Y-12719865D01*
X6838777Y-12719865D02*
X6848301Y-12700817D01*
X6848301Y-12700817D02*
X6867348Y-12691293D01*
X6867348Y-12691293D02*
X6914967Y-12691293D01*
X6914967Y-12691293D02*
X6934015Y-12681769D01*
X7029253Y-12634150D02*
X7029253Y-12834150D01*
X7029253Y-12643674D02*
X7048301Y-12634150D01*
X7048301Y-12634150D02*
X7086396Y-12634150D01*
X7086396Y-12634150D02*
X7105443Y-12643674D01*
X7105443Y-12643674D02*
X7114967Y-12653198D01*
X7114967Y-12653198D02*
X7124491Y-12672246D01*
X7124491Y-12672246D02*
X7124491Y-12729388D01*
X7124491Y-12729388D02*
X7114967Y-12748436D01*
X7114967Y-12748436D02*
X7105443Y-12757960D01*
X7105443Y-12757960D02*
X7086396Y-12767484D01*
X7086396Y-12767484D02*
X7048301Y-12767484D01*
X7048301Y-12767484D02*
X7029253Y-12757960D01*
X7210205Y-12748436D02*
X7219729Y-12757960D01*
X7219729Y-12757960D02*
X7210205Y-12767484D01*
X7210205Y-12767484D02*
X7200682Y-12757960D01*
X7200682Y-12757960D02*
X7210205Y-12748436D01*
X7210205Y-12748436D02*
X7210205Y-12767484D01*
X7210205Y-12643674D02*
X7219729Y-12653198D01*
X7219729Y-12653198D02*
X7210205Y-12662722D01*
X7210205Y-12662722D02*
X7200682Y-12653198D01*
X7200682Y-12653198D02*
X7210205Y-12643674D01*
X7210205Y-12643674D02*
X7210205Y-12662722D01*
X5378000Y-12996000D02*
X5578000Y-13196000D01*
X5578000Y-12996000D02*
X5378000Y-13196000D01*
X5819729Y-12987484D02*
X5943539Y-12987484D01*
X5943539Y-12987484D02*
X5876872Y-13063674D01*
X5876872Y-13063674D02*
X5905443Y-13063674D01*
X5905443Y-13063674D02*
X5924491Y-13073198D01*
X5924491Y-13073198D02*
X5934015Y-13082722D01*
X5934015Y-13082722D02*
X5943539Y-13101769D01*
X5943539Y-13101769D02*
X5943539Y-13149388D01*
X5943539Y-13149388D02*
X5934015Y-13168436D01*
X5934015Y-13168436D02*
X5924491Y-13177960D01*
X5924491Y-13177960D02*
X5905443Y-13187484D01*
X5905443Y-13187484D02*
X5848301Y-13187484D01*
X5848301Y-13187484D02*
X5829253Y-13177960D01*
X5829253Y-13177960D02*
X5819729Y-13168436D01*
X6029253Y-13168436D02*
X6038777Y-13177960D01*
X6038777Y-13177960D02*
X6029253Y-13187484D01*
X6029253Y-13187484D02*
X6019729Y-13177960D01*
X6019729Y-13177960D02*
X6029253Y-13168436D01*
X6029253Y-13168436D02*
X6029253Y-13187484D01*
X6114967Y-13006531D02*
X6124491Y-12997008D01*
X6124491Y-12997008D02*
X6143539Y-12987484D01*
X6143539Y-12987484D02*
X6191158Y-12987484D01*
X6191158Y-12987484D02*
X6210205Y-12997008D01*
X6210205Y-12997008D02*
X6219729Y-13006531D01*
X6219729Y-13006531D02*
X6229253Y-13025579D01*
X6229253Y-13025579D02*
X6229253Y-13044627D01*
X6229253Y-13044627D02*
X6219729Y-13073198D01*
X6219729Y-13073198D02*
X6105443Y-13187484D01*
X6105443Y-13187484D02*
X6229253Y-13187484D01*
X6353062Y-12987484D02*
X6372110Y-12987484D01*
X6372110Y-12987484D02*
X6391158Y-12997008D01*
X6391158Y-12997008D02*
X6400682Y-13006531D01*
X6400682Y-13006531D02*
X6410205Y-13025579D01*
X6410205Y-13025579D02*
X6419729Y-13063674D01*
X6419729Y-13063674D02*
X6419729Y-13111293D01*
X6419729Y-13111293D02*
X6410205Y-13149388D01*
X6410205Y-13149388D02*
X6400682Y-13168436D01*
X6400682Y-13168436D02*
X6391158Y-13177960D01*
X6391158Y-13177960D02*
X6372110Y-13187484D01*
X6372110Y-13187484D02*
X6353062Y-13187484D01*
X6353062Y-13187484D02*
X6334015Y-13177960D01*
X6334015Y-13177960D02*
X6324491Y-13168436D01*
X6324491Y-13168436D02*
X6314967Y-13149388D01*
X6314967Y-13149388D02*
X6305443Y-13111293D01*
X6305443Y-13111293D02*
X6305443Y-13063674D01*
X6305443Y-13063674D02*
X6314967Y-13025579D01*
X6314967Y-13025579D02*
X6324491Y-13006531D01*
X6324491Y-13006531D02*
X6334015Y-12997008D01*
X6334015Y-12997008D02*
X6353062Y-12987484D01*
X6543539Y-12987484D02*
X6562586Y-12987484D01*
X6562586Y-12987484D02*
X6581634Y-12997008D01*
X6581634Y-12997008D02*
X6591158Y-13006531D01*
X6591158Y-13006531D02*
X6600682Y-13025579D01*
X6600682Y-13025579D02*
X6610205Y-13063674D01*
X6610205Y-13063674D02*
X6610205Y-13111293D01*
X6610205Y-13111293D02*
X6600682Y-13149388D01*
X6600682Y-13149388D02*
X6591158Y-13168436D01*
X6591158Y-13168436D02*
X6581634Y-13177960D01*
X6581634Y-13177960D02*
X6562586Y-13187484D01*
X6562586Y-13187484D02*
X6543539Y-13187484D01*
X6543539Y-13187484D02*
X6524491Y-13177960D01*
X6524491Y-13177960D02*
X6514967Y-13168436D01*
X6514967Y-13168436D02*
X6505443Y-13149388D01*
X6505443Y-13149388D02*
X6495920Y-13111293D01*
X6495920Y-13111293D02*
X6495920Y-13063674D01*
X6495920Y-13063674D02*
X6505443Y-13025579D01*
X6505443Y-13025579D02*
X6514967Y-13006531D01*
X6514967Y-13006531D02*
X6524491Y-12997008D01*
X6524491Y-12997008D02*
X6543539Y-12987484D01*
X6695920Y-13187484D02*
X6695920Y-13054150D01*
X6695920Y-13073198D02*
X6705443Y-13063674D01*
X6705443Y-13063674D02*
X6724491Y-13054150D01*
X6724491Y-13054150D02*
X6753063Y-13054150D01*
X6753063Y-13054150D02*
X6772110Y-13063674D01*
X6772110Y-13063674D02*
X6781634Y-13082722D01*
X6781634Y-13082722D02*
X6781634Y-13187484D01*
X6781634Y-13082722D02*
X6791158Y-13063674D01*
X6791158Y-13063674D02*
X6810205Y-13054150D01*
X6810205Y-13054150D02*
X6838777Y-13054150D01*
X6838777Y-13054150D02*
X6857824Y-13063674D01*
X6857824Y-13063674D02*
X6867348Y-13082722D01*
X6867348Y-13082722D02*
X6867348Y-13187484D01*
X6962586Y-13187484D02*
X6962586Y-13054150D01*
X6962586Y-13073198D02*
X6972110Y-13063674D01*
X6972110Y-13063674D02*
X6991158Y-13054150D01*
X6991158Y-13054150D02*
X7019729Y-13054150D01*
X7019729Y-13054150D02*
X7038777Y-13063674D01*
X7038777Y-13063674D02*
X7048301Y-13082722D01*
X7048301Y-13082722D02*
X7048301Y-13187484D01*
X7048301Y-13082722D02*
X7057824Y-13063674D01*
X7057824Y-13063674D02*
X7076872Y-13054150D01*
X7076872Y-13054150D02*
X7105443Y-13054150D01*
X7105443Y-13054150D02*
X7124491Y-13063674D01*
X7124491Y-13063674D02*
X7134015Y-13082722D01*
X7134015Y-13082722D02*
X7134015Y-13187484D01*
X7524491Y-12977960D02*
X7353063Y-13235103D01*
X7781634Y-12987484D02*
X7800682Y-12987484D01*
X7800682Y-12987484D02*
X7819729Y-12997008D01*
X7819729Y-12997008D02*
X7829253Y-13006531D01*
X7829253Y-13006531D02*
X7838777Y-13025579D01*
X7838777Y-13025579D02*
X7848301Y-13063674D01*
X7848301Y-13063674D02*
X7848301Y-13111293D01*
X7848301Y-13111293D02*
X7838777Y-13149388D01*
X7838777Y-13149388D02*
X7829253Y-13168436D01*
X7829253Y-13168436D02*
X7819729Y-13177960D01*
X7819729Y-13177960D02*
X7800682Y-13187484D01*
X7800682Y-13187484D02*
X7781634Y-13187484D01*
X7781634Y-13187484D02*
X7762586Y-13177960D01*
X7762586Y-13177960D02*
X7753063Y-13168436D01*
X7753063Y-13168436D02*
X7743539Y-13149388D01*
X7743539Y-13149388D02*
X7734015Y-13111293D01*
X7734015Y-13111293D02*
X7734015Y-13063674D01*
X7734015Y-13063674D02*
X7743539Y-13025579D01*
X7743539Y-13025579D02*
X7753063Y-13006531D01*
X7753063Y-13006531D02*
X7762586Y-12997008D01*
X7762586Y-12997008D02*
X7781634Y-12987484D01*
X7934015Y-13168436D02*
X7943539Y-13177960D01*
X7943539Y-13177960D02*
X7934015Y-13187484D01*
X7934015Y-13187484D02*
X7924491Y-13177960D01*
X7924491Y-13177960D02*
X7934015Y-13168436D01*
X7934015Y-13168436D02*
X7934015Y-13187484D01*
X8134015Y-13187484D02*
X8019729Y-13187484D01*
X8076872Y-13187484D02*
X8076872Y-12987484D01*
X8076872Y-12987484D02*
X8057825Y-13016055D01*
X8057825Y-13016055D02*
X8038777Y-13035103D01*
X8038777Y-13035103D02*
X8019729Y-13044627D01*
X8210206Y-13006531D02*
X8219729Y-12997008D01*
X8219729Y-12997008D02*
X8238777Y-12987484D01*
X8238777Y-12987484D02*
X8286396Y-12987484D01*
X8286396Y-12987484D02*
X8305444Y-12997008D01*
X8305444Y-12997008D02*
X8314967Y-13006531D01*
X8314967Y-13006531D02*
X8324491Y-13025579D01*
X8324491Y-13025579D02*
X8324491Y-13044627D01*
X8324491Y-13044627D02*
X8314967Y-13073198D01*
X8314967Y-13073198D02*
X8200682Y-13187484D01*
X8200682Y-13187484D02*
X8324491Y-13187484D01*
X8495920Y-12987484D02*
X8457825Y-12987484D01*
X8457825Y-12987484D02*
X8438777Y-12997008D01*
X8438777Y-12997008D02*
X8429253Y-13006531D01*
X8429253Y-13006531D02*
X8410206Y-13035103D01*
X8410206Y-13035103D02*
X8400682Y-13073198D01*
X8400682Y-13073198D02*
X8400682Y-13149388D01*
X8400682Y-13149388D02*
X8410206Y-13168436D01*
X8410206Y-13168436D02*
X8419729Y-13177960D01*
X8419729Y-13177960D02*
X8438777Y-13187484D01*
X8438777Y-13187484D02*
X8476872Y-13187484D01*
X8476872Y-13187484D02*
X8495920Y-13177960D01*
X8495920Y-13177960D02*
X8505444Y-13168436D01*
X8505444Y-13168436D02*
X8514968Y-13149388D01*
X8514968Y-13149388D02*
X8514968Y-13101769D01*
X8514968Y-13101769D02*
X8505444Y-13082722D01*
X8505444Y-13082722D02*
X8495920Y-13073198D01*
X8495920Y-13073198D02*
X8476872Y-13063674D01*
X8476872Y-13063674D02*
X8438777Y-13063674D01*
X8438777Y-13063674D02*
X8419729Y-13073198D01*
X8419729Y-13073198D02*
X8410206Y-13082722D01*
X8410206Y-13082722D02*
X8400682Y-13101769D01*
X8638777Y-12987484D02*
X8657825Y-12987484D01*
X8657825Y-12987484D02*
X8676872Y-12997008D01*
X8676872Y-12997008D02*
X8686396Y-13006531D01*
X8686396Y-13006531D02*
X8695920Y-13025579D01*
X8695920Y-13025579D02*
X8705444Y-13063674D01*
X8705444Y-13063674D02*
X8705444Y-13111293D01*
X8705444Y-13111293D02*
X8695920Y-13149388D01*
X8695920Y-13149388D02*
X8686396Y-13168436D01*
X8686396Y-13168436D02*
X8676872Y-13177960D01*
X8676872Y-13177960D02*
X8657825Y-13187484D01*
X8657825Y-13187484D02*
X8638777Y-13187484D01*
X8638777Y-13187484D02*
X8619729Y-13177960D01*
X8619729Y-13177960D02*
X8610206Y-13168436D01*
X8610206Y-13168436D02*
X8600682Y-13149388D01*
X8600682Y-13149388D02*
X8591158Y-13111293D01*
X8591158Y-13111293D02*
X8591158Y-13063674D01*
X8591158Y-13063674D02*
X8600682Y-13025579D01*
X8600682Y-13025579D02*
X8610206Y-13006531D01*
X8610206Y-13006531D02*
X8619729Y-12997008D01*
X8619729Y-12997008D02*
X8638777Y-12987484D01*
X8781634Y-12987484D02*
X8781634Y-13025579D01*
X8857825Y-12987484D02*
X8857825Y-13025579D01*
X9153063Y-13263674D02*
X9143539Y-13254150D01*
X9143539Y-13254150D02*
X9124491Y-13225579D01*
X9124491Y-13225579D02*
X9114968Y-13206531D01*
X9114968Y-13206531D02*
X9105444Y-13177960D01*
X9105444Y-13177960D02*
X9095920Y-13130341D01*
X9095920Y-13130341D02*
X9095920Y-13092246D01*
X9095920Y-13092246D02*
X9105444Y-13044627D01*
X9105444Y-13044627D02*
X9114968Y-13016055D01*
X9114968Y-13016055D02*
X9124491Y-12997008D01*
X9124491Y-12997008D02*
X9143539Y-12968436D01*
X9143539Y-12968436D02*
X9153063Y-12958912D01*
X9314968Y-13054150D02*
X9314968Y-13187484D01*
X9267349Y-12977960D02*
X9219730Y-13120817D01*
X9219730Y-13120817D02*
X9343539Y-13120817D01*
X9572111Y-13187484D02*
X9572111Y-12987484D01*
X9657825Y-13187484D02*
X9657825Y-13082722D01*
X9657825Y-13082722D02*
X9648301Y-13063674D01*
X9648301Y-13063674D02*
X9629253Y-13054150D01*
X9629253Y-13054150D02*
X9600682Y-13054150D01*
X9600682Y-13054150D02*
X9581634Y-13063674D01*
X9581634Y-13063674D02*
X9572111Y-13073198D01*
X9781634Y-13187484D02*
X9762587Y-13177960D01*
X9762587Y-13177960D02*
X9753063Y-13168436D01*
X9753063Y-13168436D02*
X9743539Y-13149388D01*
X9743539Y-13149388D02*
X9743539Y-13092246D01*
X9743539Y-13092246D02*
X9753063Y-13073198D01*
X9753063Y-13073198D02*
X9762587Y-13063674D01*
X9762587Y-13063674D02*
X9781634Y-13054150D01*
X9781634Y-13054150D02*
X9810206Y-13054150D01*
X9810206Y-13054150D02*
X9829253Y-13063674D01*
X9829253Y-13063674D02*
X9838777Y-13073198D01*
X9838777Y-13073198D02*
X9848301Y-13092246D01*
X9848301Y-13092246D02*
X9848301Y-13149388D01*
X9848301Y-13149388D02*
X9838777Y-13168436D01*
X9838777Y-13168436D02*
X9829253Y-13177960D01*
X9829253Y-13177960D02*
X9810206Y-13187484D01*
X9810206Y-13187484D02*
X9781634Y-13187484D01*
X9962587Y-13187484D02*
X9943539Y-13177960D01*
X9943539Y-13177960D02*
X9934015Y-13158912D01*
X9934015Y-13158912D02*
X9934015Y-12987484D01*
X10114968Y-13177960D02*
X10095920Y-13187484D01*
X10095920Y-13187484D02*
X10057825Y-13187484D01*
X10057825Y-13187484D02*
X10038777Y-13177960D01*
X10038777Y-13177960D02*
X10029253Y-13158912D01*
X10029253Y-13158912D02*
X10029253Y-13082722D01*
X10029253Y-13082722D02*
X10038777Y-13063674D01*
X10038777Y-13063674D02*
X10057825Y-13054150D01*
X10057825Y-13054150D02*
X10095920Y-13054150D01*
X10095920Y-13054150D02*
X10114968Y-13063674D01*
X10114968Y-13063674D02*
X10124492Y-13082722D01*
X10124492Y-13082722D02*
X10124492Y-13101769D01*
X10124492Y-13101769D02*
X10029253Y-13120817D01*
X10200682Y-13177960D02*
X10219730Y-13187484D01*
X10219730Y-13187484D02*
X10257825Y-13187484D01*
X10257825Y-13187484D02*
X10276873Y-13177960D01*
X10276873Y-13177960D02*
X10286396Y-13158912D01*
X10286396Y-13158912D02*
X10286396Y-13149388D01*
X10286396Y-13149388D02*
X10276873Y-13130341D01*
X10276873Y-13130341D02*
X10257825Y-13120817D01*
X10257825Y-13120817D02*
X10229253Y-13120817D01*
X10229253Y-13120817D02*
X10210206Y-13111293D01*
X10210206Y-13111293D02*
X10200682Y-13092246D01*
X10200682Y-13092246D02*
X10200682Y-13082722D01*
X10200682Y-13082722D02*
X10210206Y-13063674D01*
X10210206Y-13063674D02*
X10229253Y-13054150D01*
X10229253Y-13054150D02*
X10257825Y-13054150D01*
X10257825Y-13054150D02*
X10276873Y-13063674D01*
X10353063Y-13263674D02*
X10362587Y-13254150D01*
X10362587Y-13254150D02*
X10381634Y-13225579D01*
X10381634Y-13225579D02*
X10391158Y-13206531D01*
X10391158Y-13206531D02*
X10400682Y-13177960D01*
X10400682Y-13177960D02*
X10410206Y-13130341D01*
X10410206Y-13130341D02*
X10410206Y-13092246D01*
X10410206Y-13092246D02*
X10400682Y-13044627D01*
X10400682Y-13044627D02*
X10391158Y-13016055D01*
X10391158Y-13016055D02*
X10381634Y-12997008D01*
X10381634Y-12997008D02*
X10362587Y-12968436D01*
X10362587Y-12968436D02*
X10353063Y-12958912D01*
X10714968Y-13263674D02*
X10705444Y-13254150D01*
X10705444Y-13254150D02*
X10686396Y-13225579D01*
X10686396Y-13225579D02*
X10676873Y-13206531D01*
X10676873Y-13206531D02*
X10667349Y-13177960D01*
X10667349Y-13177960D02*
X10657825Y-13130341D01*
X10657825Y-13130341D02*
X10657825Y-13092246D01*
X10657825Y-13092246D02*
X10667349Y-13044627D01*
X10667349Y-13044627D02*
X10676873Y-13016055D01*
X10676873Y-13016055D02*
X10686396Y-12997008D01*
X10686396Y-12997008D02*
X10705444Y-12968436D01*
X10705444Y-12968436D02*
X10714968Y-12958912D01*
X10791158Y-13054150D02*
X10791158Y-13187484D01*
X10791158Y-13073198D02*
X10800682Y-13063674D01*
X10800682Y-13063674D02*
X10819730Y-13054150D01*
X10819730Y-13054150D02*
X10848301Y-13054150D01*
X10848301Y-13054150D02*
X10867349Y-13063674D01*
X10867349Y-13063674D02*
X10876873Y-13082722D01*
X10876873Y-13082722D02*
X10876873Y-13187484D01*
X11000682Y-13187484D02*
X10981634Y-13177960D01*
X10981634Y-13177960D02*
X10972111Y-13168436D01*
X10972111Y-13168436D02*
X10962587Y-13149388D01*
X10962587Y-13149388D02*
X10962587Y-13092246D01*
X10962587Y-13092246D02*
X10972111Y-13073198D01*
X10972111Y-13073198D02*
X10981634Y-13063674D01*
X10981634Y-13063674D02*
X11000682Y-13054150D01*
X11000682Y-13054150D02*
X11029254Y-13054150D01*
X11029254Y-13054150D02*
X11048301Y-13063674D01*
X11048301Y-13063674D02*
X11057825Y-13073198D01*
X11057825Y-13073198D02*
X11067349Y-13092246D01*
X11067349Y-13092246D02*
X11067349Y-13149388D01*
X11067349Y-13149388D02*
X11057825Y-13168436D01*
X11057825Y-13168436D02*
X11048301Y-13177960D01*
X11048301Y-13177960D02*
X11029254Y-13187484D01*
X11029254Y-13187484D02*
X11000682Y-13187484D01*
X11124492Y-13054150D02*
X11200682Y-13054150D01*
X11153063Y-12987484D02*
X11153063Y-13158912D01*
X11153063Y-13158912D02*
X11162587Y-13177960D01*
X11162587Y-13177960D02*
X11181634Y-13187484D01*
X11181634Y-13187484D02*
X11200682Y-13187484D01*
X11419730Y-13054150D02*
X11419730Y-13254150D01*
X11419730Y-13063674D02*
X11438777Y-13054150D01*
X11438777Y-13054150D02*
X11476873Y-13054150D01*
X11476873Y-13054150D02*
X11495920Y-13063674D01*
X11495920Y-13063674D02*
X11505444Y-13073198D01*
X11505444Y-13073198D02*
X11514968Y-13092246D01*
X11514968Y-13092246D02*
X11514968Y-13149388D01*
X11514968Y-13149388D02*
X11505444Y-13168436D01*
X11505444Y-13168436D02*
X11495920Y-13177960D01*
X11495920Y-13177960D02*
X11476873Y-13187484D01*
X11476873Y-13187484D02*
X11438777Y-13187484D01*
X11438777Y-13187484D02*
X11419730Y-13177960D01*
X11629253Y-13187484D02*
X11610206Y-13177960D01*
X11610206Y-13177960D02*
X11600682Y-13158912D01*
X11600682Y-13158912D02*
X11600682Y-12987484D01*
X11791158Y-13187484D02*
X11791158Y-13082722D01*
X11791158Y-13082722D02*
X11781634Y-13063674D01*
X11781634Y-13063674D02*
X11762587Y-13054150D01*
X11762587Y-13054150D02*
X11724492Y-13054150D01*
X11724492Y-13054150D02*
X11705444Y-13063674D01*
X11791158Y-13177960D02*
X11772111Y-13187484D01*
X11772111Y-13187484D02*
X11724492Y-13187484D01*
X11724492Y-13187484D02*
X11705444Y-13177960D01*
X11705444Y-13177960D02*
X11695920Y-13158912D01*
X11695920Y-13158912D02*
X11695920Y-13139865D01*
X11695920Y-13139865D02*
X11705444Y-13120817D01*
X11705444Y-13120817D02*
X11724492Y-13111293D01*
X11724492Y-13111293D02*
X11772111Y-13111293D01*
X11772111Y-13111293D02*
X11791158Y-13101769D01*
X11857825Y-13054150D02*
X11934015Y-13054150D01*
X11886396Y-12987484D02*
X11886396Y-13158912D01*
X11886396Y-13158912D02*
X11895920Y-13177960D01*
X11895920Y-13177960D02*
X11914968Y-13187484D01*
X11914968Y-13187484D02*
X11934015Y-13187484D01*
X12076873Y-13177960D02*
X12057825Y-13187484D01*
X12057825Y-13187484D02*
X12019730Y-13187484D01*
X12019730Y-13187484D02*
X12000682Y-13177960D01*
X12000682Y-13177960D02*
X11991158Y-13158912D01*
X11991158Y-13158912D02*
X11991158Y-13082722D01*
X11991158Y-13082722D02*
X12000682Y-13063674D01*
X12000682Y-13063674D02*
X12019730Y-13054150D01*
X12019730Y-13054150D02*
X12057825Y-13054150D01*
X12057825Y-13054150D02*
X12076873Y-13063674D01*
X12076873Y-13063674D02*
X12086396Y-13082722D01*
X12086396Y-13082722D02*
X12086396Y-13101769D01*
X12086396Y-13101769D02*
X11991158Y-13120817D01*
X12257825Y-13187484D02*
X12257825Y-12987484D01*
X12257825Y-13177960D02*
X12238777Y-13187484D01*
X12238777Y-13187484D02*
X12200682Y-13187484D01*
X12200682Y-13187484D02*
X12181634Y-13177960D01*
X12181634Y-13177960D02*
X12172111Y-13168436D01*
X12172111Y-13168436D02*
X12162587Y-13149388D01*
X12162587Y-13149388D02*
X12162587Y-13092246D01*
X12162587Y-13092246D02*
X12172111Y-13073198D01*
X12172111Y-13073198D02*
X12181634Y-13063674D01*
X12181634Y-13063674D02*
X12200682Y-13054150D01*
X12200682Y-13054150D02*
X12238777Y-13054150D01*
X12238777Y-13054150D02*
X12257825Y-13063674D01*
X12334015Y-13263674D02*
X12343539Y-13254150D01*
X12343539Y-13254150D02*
X12362587Y-13225579D01*
X12362587Y-13225579D02*
X12372111Y-13206531D01*
X12372111Y-13206531D02*
X12381634Y-13177960D01*
X12381634Y-13177960D02*
X12391158Y-13130341D01*
X12391158Y-13130341D02*
X12391158Y-13092246D01*
X12391158Y-13092246D02*
X12381634Y-13044627D01*
X12381634Y-13044627D02*
X12372111Y-13016055D01*
X12372111Y-13016055D02*
X12362587Y-12997008D01*
X12362587Y-12997008D02*
X12343539Y-12968436D01*
X12343539Y-12968436D02*
X12334015Y-12958912D01*
M02*

View file

@ -0,0 +1,19 @@
M48
; DRILL file {KiCad 8.0.3} date 2024-08-20T11:31:25+0200
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2024-08-20T11:31:25+02:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.3
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
METRIC
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
T1C3.200
%
G90
G05
T1
X60.96Y-35.98
X60.96Y-119.38
X158.96Y-35.98
X158.96Y-119.38
M30

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,203 @@
M48
; DRILL file {KiCad 8.0.3} date 2024-08-20T11:31:25+0200
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2024-08-20T11:31:25+02:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.3
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
METRIC
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T1C0.700
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T2C0.750
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T3C0.800
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T4C0.800
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T5C1.000
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T6C1.100
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T7C1.520
%
G90
G05
T1
X61.595Y-57.199
X61.595Y-62.279
X61.595Y-67.359
X61.595Y-74.979
X69.215Y-57.199
X69.215Y-62.279
X69.215Y-67.359
X69.215Y-74.979
T2
X74.93Y-58.469
X76.2Y-57.199
X77.47Y-58.469
X86.995Y-103.869
X86.995Y-105.139
X86.995Y-106.409
X136.525Y-94.344
X137.795Y-94.344
X139.065Y-94.344
T3
X75.311Y-94.344
X84.455Y-80.374
X84.455Y-84.184
X84.455Y-87.994
X85.725Y-76.249
X94.615Y-74.93
X95.885Y-89.264
X98.425Y-81.644
X99.06Y-48.26
X100.965Y-94.344
X102.235Y-69.899
X104.775Y-77.834
X104.775Y-86.724
X104.775Y-103.234
X106.045Y-110.854
X107.95Y-45.72
X109.855Y-67.994
X111.76Y-67.994
X113.665Y-49.53
X113.665Y-67.994
X113.665Y-88.949
X113.665Y-96.569
X114.935Y-61.324
X116.205Y-88.949
X116.205Y-96.569
X157.48Y-60.374
X157.48Y-103.234
T4
X60.325Y-52.119
X67.31Y-80.374
X67.31Y-90.534
X70.485Y-52.119
X70.485Y-80.374
X70.485Y-90.534
X73.025Y-65.454
X73.025Y-75.614
X73.66Y-80.374
X73.66Y-90.534
X76.835Y-80.374
X76.835Y-90.534
X78.105Y-63.864
X78.105Y-66.364
X80.685Y-60.054
X80.685Y-72.754
X81.915Y-77.834
X81.915Y-90.534
X83.185Y-52.434
X83.185Y-60.054
X83.185Y-72.754
X83.185Y-96.884
X85.685Y-96.884
X88.265Y-78.469
X90.765Y-78.469
X95.25Y-102.506
X95.25Y-106.306
X95.885Y-52.434
X100.965Y-77.834
X100.965Y-90.534
X126.365Y-46.084
X126.365Y-48.624
X126.365Y-51.164
X126.365Y-53.704
X126.365Y-56.244
X126.365Y-58.784
X126.365Y-61.324
X126.365Y-63.864
X126.365Y-66.404
X126.365Y-68.944
X126.365Y-71.484
X126.365Y-74.024
X126.365Y-76.564
X126.365Y-79.104
X126.365Y-81.644
X126.365Y-84.184
X126.365Y-86.724
X126.365Y-89.264
X126.365Y-91.804
X126.365Y-94.344
X126.365Y-96.884
X126.365Y-99.424
X149.265Y-53.704
X149.265Y-56.244
X149.265Y-58.784
X149.265Y-61.324
X149.265Y-63.864
X149.265Y-66.404
X149.265Y-68.944
X149.265Y-71.484
X149.265Y-74.024
X149.265Y-76.564
X149.265Y-79.104
X149.265Y-81.644
X149.265Y-84.184
X149.265Y-86.724
X149.265Y-89.264
X149.265Y-91.804
X149.265Y-94.344
X149.265Y-96.884
X149.265Y-99.424
X149.269Y-46.086
X149.269Y-48.626
X149.269Y-51.166
X151.765Y-53.704
X151.765Y-56.244
X151.765Y-58.784
X151.765Y-61.324
X151.765Y-63.864
X151.765Y-66.404
X151.765Y-68.944
X151.765Y-71.484
X151.765Y-74.024
X151.765Y-76.564
X151.765Y-79.104
X151.765Y-81.644
X151.765Y-84.184
X151.765Y-86.724
X151.765Y-89.264
X151.765Y-91.804
X151.765Y-94.344
X151.765Y-96.884
X151.765Y-99.424
X151.769Y-46.086
X151.769Y-48.626
X151.769Y-51.166
T5
X104.775Y-52.434
X104.775Y-57.434
X117.475Y-58.784
X117.475Y-61.324
X117.475Y-63.864
X117.475Y-66.404
X158.115Y-64.819
X160.655Y-64.819
T6
X74.295Y-99.424
X74.295Y-101.964
X74.295Y-104.504
T7
X74.295Y-114.664
X79.375Y-114.664
X80.946Y-38.735
X86.026Y-38.735
X86.995Y-114.664
X92.075Y-114.664
X95.805Y-38.862
X97.155Y-114.664
X100.885Y-38.862
X102.235Y-114.664
X105.965Y-38.862
X111.045Y-38.862
X112.395Y-114.664
X116.125Y-38.862
X117.475Y-114.664
X122.555Y-114.664
X132.715Y-114.664
X137.795Y-114.664
X142.875Y-114.664
M30

File diff suppressed because it is too large Load diff

View file

@ -1,12 +1,14 @@
{
"board": {
"active_layer": 0,
"active_layer": 37,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
@ -65,6 +67,12 @@
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "hydrocontroller_schematic.kicad_prl",
"version": 3

View file

@ -1,29 +1,245 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.1,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.15,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"drc_exclusions": [
"courtyards_overlap|135065001|92333675|f06e700e-6430-4fd6-ba47-6e1007a58652|f44ab942-fdc3-4f16-8326-7879207cdaca",
"courtyards_overlap|135232501|97423675|f06e700e-6430-4fd6-ba47-6e1007a58652|3dc6a7fc-a9a2-43fd-862b-c8bd3b2ace25",
"lib_footprint_mismatch|139065000|71531594|f06e700e-6430-4fd6-ba47-6e1007a58652|00000000-0000-0000-0000-000000000000"
],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.5,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"track_widths": [],
"via_dimensions": []
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0,
0.25,
0.5,
1.5
],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
},
{
"diameter": 0.8,
"drill": 0.5
},
{
"diameter": 1.2,
"drill": 0.8
}
],
"zones_allow_external_fillets": false
},
"layer_presets": []
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
@ -210,15 +426,21 @@
"bus_label_syntax": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
@ -228,6 +450,7 @@
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
@ -245,42 +468,154 @@
"net_settings": {
"classes": [
{
"bus_width": 12.0,
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_gap": 0.5,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"diff_pair_width": 0.25,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6.0
"track_width": 1.0,
"via_diameter": 1.2,
"via_drill": 0.8,
"wire_width": 6
},
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.5,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.25,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Power",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 1.5,
"via_diameter": 1.2,
"via_drill": 0.8,
"wire_width": 6
}
],
"meta": {
"version": 2
"version": 3
},
"net_colors": null
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": [
{
"netclass": "Power",
"pattern": "+5V"
},
{
"netclass": "Power",
"pattern": "GND"
},
{
"netclass": "Power",
"pattern": "+3V3"
},
{
"netclass": "Power",
"pattern": "VCC"
}
]
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "gerbers/",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "20240921_hydrocontroller_schematic_BOM.csv",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": false
},
{
"group_by": true,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": false
},
{
"group_by": false,
"label": "#",
"name": "${ITEM_NUMBER}",
"show": false
},
{
"group_by": true,
"label": "Description",
"name": "Description",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
@ -291,6 +626,11 @@
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
@ -306,20 +646,29 @@
"meta": {
"version": 0
},
"model_mode": 0,
"model_mode": 4,
"workbook_filename": ""
},
"page_layout_descr_file": "",
"plot_directory": "",
"plot_directory": "plot/",
"spice_adjust_passive_values": false,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"754364af-53ba-432d-8f40-e098124c9685",
""
"Root"
],
[
"7a00f13c-a700-45ca-9974-48b050769647",
"conductivity_sensor"
]
],
"text_variables": {}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,95 @@
#ifndef _WATERLEVEL_H_
#define _WATERLEVEL_H_
#include <Wire.h>
#include <VL6180X.h> //https://github.com/pololu/vl6180x-arduino
VL6180X sensor;
// To try different scaling factors, change the following define.
// Valid scaling factors are 1, 2, or 3.
#define SCALING 1
#define READINTERVAL_WATERLEVEL 200
#define WATERLEVELMEAN_SIZE 32
#define WATERLEVELMEAN_FILTER_CUTOFF 8 //max value is around WATERLEVELMEAN_SIZE/2
float waterlevelMean_array[WATERLEVELMEAN_SIZE];
uint16_t waterlevelMean_array_pos=0;
#define WATERLEVEL_UNAVAILABLE -1
float waterlevel=WATERLEVEL_UNAVAILABLE; //distance from floor to water surface [mm]
float watervolume=WATERLEVEL_UNAVAILABLE; //calculated Volume in Reservoir
//Calibration
float waterlevel_calib_offset_measured=86; //Sollwert
float waterlevel_calib_offset_sensor=78; //Istwert
//raw reading is 78mm, ruler reads 86mm. VL8160 sensor is 169mm above bottom of reservoir.
float waterlevel_calib_reservoirArea=27*36.5; //area in cm^2
float waterlevel_heightToVolume(float distance);
mqttValueTiming timing_waterlevel;
void waterlevel_setup() {
timing_waterlevel.minchange=0.0;
timing_waterlevel.maxchange=3.0;
timing_waterlevel.mintime=30*000;
timing_waterlevel.maxtime=60*60*1000;
Wire.begin();
sensor.init();
sensor.configureDefault();
sensor.setScaling(SCALING);
sensor.setTimeout(500);
for (uint16_t i=0;i<WATERLEVELMEAN_SIZE;i++) {
waterlevelMean_array[i]=-1; //-1 is also timeout value
}
}
void waterlevel_loop(unsigned long loopmillis) {
static unsigned long last_read_waterlevel;
if (loopmillis>=last_read_waterlevel+READINTERVAL_WATERLEVEL) {
last_read_waterlevel=loopmillis;
uint16_t distance=sensor.readRangeSingleMillimeters();
Serial.print("Distance reading:"); Serial.println(distance);
if (distance!=WATERLEVEL_UNAVAILABLE) { //successful
waterlevelMean_array[waterlevelMean_array_pos]=distance;
waterlevelMean_array_pos++;
waterlevelMean_array_pos%=WATERLEVELMEAN_SIZE;
}
if (isValueArrayOKf(waterlevelMean_array,WATERLEVELMEAN_SIZE,WATERLEVEL_UNAVAILABLE)){
float _filteredDistance=getFilteredf(waterlevelMean_array,WATERLEVELMEAN_SIZE,WATERLEVELMEAN_FILTER_CUTOFF);
//Invert distance and offset
waterlevel=(waterlevel_calib_offset_sensor+waterlevel_calib_offset_measured)-_filteredDistance;
watervolume=waterlevel_heightToVolume(waterlevel);
//float _meanWaterlevel=getMeanf(waterlevelMean,WATERLEVELMEAN_SIZE);
//Serial.print("\t Dist="); Serial.print(_filteredWaterlevel); Serial.print("mm"); Serial.print("(+- "); Serial.print((getMaxf(waterlevelMean,WATERLEVELMEAN_SIZE)-getMinf(waterlevelMean,WATERLEVELMEAN_SIZE))/2.0); Serial.print(")"); Serial.print(" [mean="); Serial.print(_meanWaterlevel); Serial.print("]");
}
}
}
float waterlevel_heightToVolume(float distance){
return waterlevel_calib_reservoirArea/100 * distance/100; //area[cm^2] in dm^2 * height in dm = dm^3= L
}
#endif

View file

@ -2,11 +2,15 @@
#define _EC_H_
#include <Arduino.h>
extern bool eccalibrationoutput;
/*
mqttValueTiming timing_ec_adc;
mqttValueTiming timing_ec_calibadc;
mqttValueTiming timing_ec_adcadjusted;
mqttValueTiming timing_ec_ec;
mqttValueTiming timing_ec_sc;
*/
@ -16,12 +20,12 @@ bool ec_flag_measurement_available=false;
#define EC_UNAVAILABLE -1
#define EC_PIN_RELAY_PROBE 27
//#define EC_PIN_RELAY_PROBE 27 //moved to platformio.ini
//#define EC_PIN_ADC 4
#define EC_ADS_CHANNEL 0
#define EC_PIN_FREQ 5
//#define EC_PIN_FREQ 5 //move to platformio.ini
#define EC_PWM_CH 0
#define EC_RESOLUTION 8
#define EC_FREQUENCY 5000
@ -31,13 +35,13 @@ uint16_t ec_calib_array[EC_CALIB_ARRAY_SIZE];
uint16_t ec_calib_array_pos=0;
#define EC_CALIB_READ_INTERVAL 250 //interval of reading adc value inside a measurement
#define EC_ARRAY_SIZE 256
#define EC_ARRAY_SIZE 64
uint16_t ec_array[EC_ARRAY_SIZE];
uint16_t ec_array_pos=EC_ARRAY_SIZE;
unsigned long last_measurement_ec=0;
#define EC_MEASUREMENT_INTERVAL 10*60*1000 //complete filtered measurement every x ms
#define EC_MEASUREMENT_INTERVAL 10*60*1000 //complete filtered measurement every x ms
//One filtered measurement takes EC_READ_INTERVAL*EC_ARRAY_SIZE*4
#define EC_READ_INTERVAL 10 //interval of reading adc value inside a measurement. one reading takes about 9-10ms
#define EC_READ_INTERVAL 50 //interval of reading adc value inside a measurement. one reading takes about 9-10ms
#define EC_RELAY_SWITCH_SETTLETIME 500 //time until voltage of ec circuit has settled
@ -48,16 +52,20 @@ unsigned long ec_last_change_relay=0; //millis of last relay change
enum ECState{IDLE,MEASURE};
ECState ecstate=IDLE;
float ec_calib_adc;
float ec_adc;
float ec_adc_adjusted; //adjusted for reference resistor
float ec_calib_adc;
float ec; //ec value after adjustment for reference (at current temperature)
float ec25; //ec value but temperature adjusted for 25 degC
float ec_tempadjust_alpa=0.02;
float ec_reference_adc=6016.88; //adc reference value for the calibration resistor measurement.
float ec_reference_adc=EC_REFERENCE_ADC; //adc reference value for the calibration resistor measurement.
//EC short circuit adc value: 17497, 17861.4 (for connection resistance testing)
//EC open circuit adc value: 738, 730, 737.27
@ -66,21 +74,35 @@ float ec_reference_adc=6016.88; //adc reference value for the calibration resist
//float ec_calibration_polynom[]={1033.928052655456,-3.8909104921922895,0.005627541436014758,-4.103988840997024e-06,1.7231981870816133e-09,-4.433707707721975e-13,7.203892111369395e-17,-7.406549810844244e-21,4.667420606439905e-25,-1.6439457516812463e-29,2.477292190335455e-34}; //20220505
//float ec_calibration_polynom[]={-323.68589929771457,0.5836096440900665,-0.000279737392438965,5.98673062873e-08,-5.4460235093798435e-12,1.8535134644431135e-16}; //20230509
//float ec_calibration_polynom[]={212.6826331524675,-0.6043878865263305,0.000571551634082491,-1.827897106718841e-07,2.682337041246909e-11,-1.8368511021965982e-15,4.8269168538877025e-20}; //20230509 manuell
float ec_calibration_polynom[]={-202.42892340068445,0.3775267988688599,-0.0001603031198536654,3.398964768344757e-08,-3.0277753798278316e-12,1.0137804308289433e-16}; //20230620, graphite electrodes
float ec_calibration_linearize_below_adc=4000; //use linear approximation below this adc value. 0=disable
float ec_calibration_linear_lowADC=746; //x0
float ec_calibration_linear_lowEC=0; //y0
//float ec_calibration_polynom[]={8.718380956513695,-0.026463423062356713,3.425216464107108e-05,-4.069826379094172e-09,2.478900495960682e-13}; //20240423, graphite electrodes
// 20240423, graphite electrodes DB {8.718380956513695,-0.026463423062356713,3.425216464107108e-05,-4.069826379094172e-09,2.478900495960682e-13}
// 20240423, graphite electrodes NFT {18.785904241636743,-0.04069178351449846,3.528797358514823e-05,-4.214254847500995e-09,2.543662736303669e-13}
float ec_calibration_polynom[]=EC_CALIBRATION_POLYNOM;
float ec_calibration_linearize_below_adc=EC_CALIBRATION_LINEARIZE_BELOW_ADC; //use linear approximation below this adc value. 0=disable
float ec_calibration_linear_lowADC=EC_CALIBRATION_LINEAR_LOWADC; //x0
float ec_calibration_linear_lowEC=EC_CALIBRATION_LINEAR_LOWEC; //y0
/*
float ec_calibration_polynom_B[]={18.785904241636743,-0.04069178351449846,3.528797358514823e-05,-4.214254847500995e-09,2.543662736303669e-13}; //20240423, graphite electrodes
float ec_calibration_linearize_below_adc_B=2000; //use linear approximation below this adc value. 0=disable
float ec_calibration_linear_lowADC_B=728; //x0
float ec_calibration_linear_lowEC_B=0; //y0
*/
bool ec_measurementReady();
void ec_startMeasurement();
void ec_setRange(uint8_t range);
void ec_connectProbe(bool);
void ec_releaseRelay();
float ec_getECfromADC(float adc);
float ec_getECfromADC(float adc, float ec_calibration_polynom[], size_t len_ec_calibration_polynom, float ec_calibration_linearize_below_adc, float ec_calibration_linear_lowADC, float ec_calibration_linear_lowEC);
float ec_calculateEC25(float pEC,float pTemp);
bool ec_measurementRunning();
void ec_setup() {
/*
timing_ec_adc.minchange=0.0;
timing_ec_adc.maxchange=250;
timing_ec_adc.mintime=10*000;
@ -105,18 +127,27 @@ void ec_setup() {
timing_ec_sc.maxchange=50;
timing_ec_sc.mintime=10*000;
timing_ec_sc.maxtime=60*60*1000;
*/
ledcSetup(EC_PWM_CH, EC_FREQUENCY, EC_RESOLUTION);
ledcAttachPin(EC_PIN_FREQ, EC_PWM_CH);
ledcWrite(EC_PWM_CH, 127); //50% duty cycle
pinMode(EC_PIN_RELAY_PROBE,OUTPUT); //LOW=Calibration/idle, HIGH=Probe connected
//Test Relay
digitalWrite(EC_PIN_RELAY_PROBE,HIGH);
delay(500);
digitalWrite(EC_PIN_RELAY_PROBE,LOW);
ec_releaseRelay();
}
void ec_loop(unsigned long loopmillis) {
if (!adsenabled) {
return;
}
static unsigned long last_read_ec=0;
@ -124,11 +155,13 @@ void ec_loop(unsigned long loopmillis) {
switch (ecstate) {
case IDLE:
if (loopmillis>last_measurement_ec+EC_MEASUREMENT_INTERVAL || force_ec_measurement) { //start measurement if idle
if ( (loopmillis>last_measurement_ec+EC_MEASUREMENT_INTERVAL) || force_ec_measurement) { //start measurement if idle
//Serial.println("DEBUG: Start measurement");
last_measurement_ec=loopmillis;
force_ec_measurement=false;
ec_startMeasurement();
ec_connectProbe(true);
ecstate=MEASURE;
}
@ -136,23 +169,35 @@ void ec_loop(unsigned long loopmillis) {
case MEASURE:
if (ec_measurementReady()) {
//Serial.println("DEBUG: Measurement Ready");
ec_releaseRelay();
ec_adc=getMean(ec_array,EC_ARRAY_SIZE);
//Serial.print("ec_adc="); Serial.println(ec_adc);
if (isValueArrayOK(ec_calib_array,EC_CALIB_ARRAY_SIZE,EC_ADC_UNAVAILABLE)){
ec_calib_adc=getMean(ec_calib_array,EC_CALIB_ARRAY_SIZE);
//Serial.print("ec_calib_adc="); Serial.println(ec_calib_adc);
ec_adc_adjusted=mapf(ec_adc,0,ec_calib_adc,0,ec_reference_adc);
ec=ec_getECfromADC(ec_adc_adjusted);
//Serial.print("ec_adc_adjusted="); Serial.println(ec_adc_adjusted);
ec=ec_getECfromADC(ec_adc_adjusted, ec_calibration_polynom, sizeof(ec_calibration_polynom), ec_calibration_linearize_below_adc, ec_calibration_linear_lowADC, ec_calibration_linear_lowEC);
//Serial.print("ec="); Serial.println(ec);
ec25=ec_calculateEC25(ec,tempC_reservoir);
//Serial.println("DEBUG: EC OK");
}else{
ec_calib_adc=EC_ADC_UNAVAILABLE;
ec_adc_adjusted=EC_ADC_UNAVAILABLE;
ec=EC_UNAVAILABLE;
ec25=EC_UNAVAILABLE;
//Serial.println("DEBUG: EC unavailable");
}
ec_flag_measurement_available=true;
ecstate=IDLE;
}
break;
@ -160,12 +205,19 @@ void ec_loop(unsigned long loopmillis) {
}
if (ec_array_pos<EC_ARRAY_SIZE) { //measurement running
if (ec_measurementRunning()) { //measurement running
if (loopmillis>last_read_ec+EC_READ_INTERVAL) { //take reading into array
last_read_ec=loopmillis;
if (loopmillis>ec_last_change_relay+EC_RELAY_SWITCH_SETTLETIME) { //values have settled
if (loopmillis>ec_last_change_relay+EC_RELAY_SWITCH_SETTLETIME) { //values have settled
//Serial.print("Get ADC Reading");
uint16_t value = ADS.readADC(EC_ADS_CHANNEL);
//Serial.print(". Write to pos ");
//Serial.print(ec_array_pos);
//Serial.print(" = ");
//Serial.println(value);
ec_array[ec_array_pos]=value;
@ -213,17 +265,20 @@ void ec_connectProbe(bool relay) {
bool val=digitalRead(EC_PIN_RELAY_PROBE);
if (val!=relay) { //write only if different
digitalWrite(EC_PIN_RELAY_PROBE,relay);
//Serial.print("DEBUG: Set Relay to "); Serial.println(relay);
ec_last_change_relay=millis();
}
}
void ec_releaseRelay() {
digitalWrite(EC_PIN_RELAY_PROBE,LOW);
//Serial.println("DEBUG: Released Relays");
ec_last_change_relay=millis();
}
float ec_getECfromADC(float adc) {
uint8_t polynom_order=sizeof(ec_calibration_polynom) / sizeof(ec_calibration_polynom[0]);
float ec_getECfromADC(float adc, float ec_calibration_polynom[], size_t len_ec_calibration_polynom, float ec_calibration_linearize_below_adc, float ec_calibration_linear_lowADC, float ec_calibration_linear_lowEC) {
//uint8_t polynom_order=sizeof(ec_calibration_polynom) / sizeof(ec_calibration_polynom[0]);
uint8_t polynom_order=len_ec_calibration_polynom / sizeof(ec_calibration_polynom[0]);
double _ec=0;
if (adc>=ec_calibration_linearize_below_adc) { //adc is in range where polynomial approximation fits well
for (uint8_t i=0;i<polynom_order;i++) {
@ -253,5 +308,8 @@ float ec_calculateEC25(float pEC,float pTemp)
return pEC/(1.0+ec_tempadjust_alpa*(pTemp-25.0));
}
bool ec_measurementRunning() {
return (ec_array_pos<EC_ARRAY_SIZE);
}
#endif

View file

@ -0,0 +1,312 @@
#ifndef _EC_H_
#define _EC_H_
#include <Arduino.h>
#define EC_PIN_RELAY_PROBE 27
#define EC_PIN_RELAY_CALIBRATION 26
#define EC_PIN_RELAY_RANGE 25
#define EC_PIN_ADC 4
#define EC_PIN_FREQ 5
#define EC_PWM_CH 0
#define EC_RESOLUTION 8
#define EC_FREQUENCY 5000
#define EC_ARRAY_SIZE 128
uint16_t ec_array_rangeLow[EC_ARRAY_SIZE];
uint16_t ec_array_rangeHigh[EC_ARRAY_SIZE];
uint16_t ec_array_pos=EC_ARRAY_SIZE*2;
#define EC_MEASUREMENT_INTERVAL 10000 //complete filtered measurement every x ms
//One filtered measurement takes EC_READ_INTERVAL*EC_ARRAY_SIZE*2
#define EC_READ_INTERVAL 5 //interval of reading adc value inside a measurement
float ec_calib_rangeLow_Rlow=0; //adc value for low value resistor on low resistor value range
float ec_calib_rangeLow_Rhigh=0; //adc value for high value resistor on low resistor value range
float ec_calib_rangeHigh_Rlow=0; //adc value for low value resistor on high resistor value range
float ec_calib_rangeHigh_Rhigh=0; //adc value for high value resistor on high resistor value range
const float ec_calibresistor_low=990; //value of low value calibration resistor. Low is Relay NO
const float ec_calibresistor_high=9943; //value of high value calibration resistor. HIGH is Relay NC
unsigned long ec_last_calibration=0; //millis of last calibration
#define EC_CALIBRATION_VALID_TIME 120000 //time in ms a calibration is valid for
#define EC_RELAY_SWITCH_SETTLETIME 500 //time until voltage of ec circuit has settled
unsigned long ec_last_change_relay=0; //millis of last relay change
enum ECState{IDLE,CALIBRATELOW,CALIBRATEHIGH,MEASURE};
ECState ecstate=CALIBRATELOW;
bool ec_measurementReady();
void ec_startMeasurement();
void ec_setRange(bool);
void ec_connectProbe(bool);
void ec_setCalibration(bool calib);
void ec_releaseRelay();
void ec_startCalibration();
void ec_checkIfSettleTimeOK();
float ec_getResistance(float adc,float caliblow,float resistorlow,float calibhigh,float resistorhigh);
void ec_setup() {
pinMode(EC_PIN_ADC,INPUT);
ledcSetup(EC_PWM_CH, EC_FREQUENCY, EC_RESOLUTION);
ledcAttachPin(EC_PIN_FREQ, EC_PWM_CH);
ledcWrite(EC_PWM_CH, 127); //50% duty cycle
pinMode(EC_PIN_RELAY_PROBE,OUTPUT); //LOW=Calibration/idle, HIGH=Probe connected
pinMode(EC_PIN_RELAY_CALIBRATION,OUTPUT); //LOW=NC Calibration Resistor, HIGH=NO Calib. Res.
pinMode(EC_PIN_RELAY_RANGE,OUTPUT); //LOW=NC Range Resistor, HIGH=NO Range Resistor
ec_releaseRelay();
ec_startCalibration();
}
void ec_loop(unsigned long loopmillis) {
static unsigned long last_measurement_ec=0;
static unsigned long last_read_ec=0;
switch (ecstate) {
case IDLE:
if (loopmillis>ec_last_calibration+EC_CALIBRATION_VALID_TIME) { //calibration needed
ec_last_calibration=loopmillis;
ecstate=CALIBRATELOW;
ec_startCalibration();
}
if (loopmillis>last_measurement_ec+EC_MEASUREMENT_INTERVAL && ecstate==IDLE) { //start measurement if idle
last_measurement_ec=loopmillis;
ec_startMeasurement();
ec_connectProbe(true);
ecstate=MEASURE;
Serial.println("EC Take Measurement");
}
break;
case CALIBRATELOW:
if (ec_measurementReady()) {
//Serial.println("EC CALIBRATELOW measurement ready");
//save measurement
ec_calib_rangeLow_Rlow=getMean(ec_array_rangeLow,EC_ARRAY_SIZE);
ec_calib_rangeHigh_Rlow=getMean(ec_array_rangeHigh,EC_ARRAY_SIZE);
//ec_checkIfSettleTimeOK();
//Switch to High calibration
ecstate=CALIBRATEHIGH;
ec_setCalibration(HIGH);
ec_setRange(LOW);
ec_startMeasurement();
//Serial.println("EC Start calibration high");
}
break;
case CALIBRATEHIGH:
if (ec_measurementReady()) {
//Serial.println("EC CALIBRATEHIGH measurement ready");
//save measurement
ec_calib_rangeLow_Rhigh=getMean(ec_array_rangeLow,EC_ARRAY_SIZE);
ec_calib_rangeHigh_Rhigh=getMean(ec_array_rangeHigh,EC_ARRAY_SIZE);
//ec_checkIfSettleTimeOK();
//Serial.println("EC Release Relay");
ec_releaseRelay();
ecstate=IDLE;
/*
Serial.println("EC Calibration done");
Serial.print("ec_calib_rangeLow_Rlow="); Serial.println(ec_calib_rangeLow_Rlow);
Serial.print("ec_calib_rangeHigh_Rlow="); Serial.println(ec_calib_rangeHigh_Rlow);
Serial.print("ec_calib_rangeLow_Rhigh="); Serial.println(ec_calib_rangeLow_Rhigh);
Serial.print("ec_calib_rangeHigh_Rhigh="); Serial.println(ec_calib_rangeHigh_Rhigh);
*/
Serial.println("EC Calibration Result: ");
Serial.print(ec_calib_rangeLow_Rlow);
Serial.print(", "); Serial.print(ec_calib_rangeHigh_Rlow);
Serial.print(", "); Serial.print(ec_calib_rangeLow_Rhigh);
Serial.print(", "); Serial.println(ec_calib_rangeHigh_Rhigh);
}
break;
case MEASURE:
if (ec_measurementReady()) {
ec_releaseRelay();
float adc_rangelow=getMean(ec_array_rangeLow,EC_ARRAY_SIZE);
float adc_rangehigh=getMean(ec_array_rangeHigh,EC_ARRAY_SIZE);
Serial.println();
float resistance_rangelow=ec_getResistance(adc_rangelow,ec_calib_rangeLow_Rlow,ec_calibresistor_low,ec_calib_rangeLow_Rhigh,ec_calibresistor_high);
Serial.print("Range Low: ADC="); Serial.print(adc_rangelow); Serial.print(", resistance="); Serial.println(resistance_rangelow);
Serial.println();
float resistance_rangehigh=ec_getResistance(adc_rangehigh,ec_calib_rangeHigh_Rlow,ec_calibresistor_low,ec_calib_rangeHigh_Rhigh,ec_calibresistor_high);
Serial.print("Range High: ADC="); Serial.print(adc_rangehigh); Serial.print(", resistance="); Serial.println(resistance_rangehigh);
ecstate=IDLE;
}
break;
}
if (loopmillis>last_read_ec+EC_READ_INTERVAL && ec_array_pos/2<EC_ARRAY_SIZE) { //take reading into array if measurement running
last_read_ec=loopmillis;
//flag_print= ec_array_pos==EC_ARRAY_SIZE;
//ec_array_pos%=EC_ARRAY_SIZE;
if (ec_array_pos<EC_ARRAY_SIZE){ //low range
ec_setRange(LOW);
}else{ //high range
ec_setRange(HIGH);
}
if (loopmillis>ec_last_change_relay+EC_RELAY_SWITCH_SETTLETIME) { //values have settled
uint16_t value=analogRead(EC_PIN_ADC);
if (ec_array_pos<EC_ARRAY_SIZE){ //low range
ec_array_rangeLow[ec_array_pos%EC_ARRAY_SIZE]=value;
}else{ //high range
ec_array_rangeHigh[ec_array_pos%EC_ARRAY_SIZE]=value;
}
/*
if (ec_array_pos==0) {
Serial.println(""); Serial.print("Lowrange:");
}
if (ec_array_pos==EC_ARRAY_SIZE) {
Serial.println(""); Serial.print("Highrange:");
}
Serial.print(value); Serial.print(" ");
if (ec_array_pos==EC_ARRAY_SIZE*2-1) {
Serial.println("");
}
*/
ec_array_pos++;
}
}
}
void ec_startCalibration() {
//Switch to Low calibration
ec_setCalibration(LOW);
ec_setRange(LOW);
ec_startMeasurement();
Serial.println("EC Started Calibration");
}
void ec_startMeasurement() {
ec_array_pos=0;
}
bool ec_measurementReady(){
if (ec_array_pos>=EC_ARRAY_SIZE*2) { //reached end of both arrays
return true;
}else{
return false;
}
}
void ec_setRange(bool range) {
//range low means low resistor value -> NO -> relay High
bool val=digitalRead(EC_PIN_RELAY_RANGE);
if (val!=!range) { //write only if different
digitalWrite(EC_PIN_RELAY_RANGE,!range);
ec_last_change_relay=millis();
}
}
void ec_connectProbe(bool relay) {
bool val=digitalRead(EC_PIN_RELAY_PROBE);
if (val!=relay) { //write only if different
digitalWrite(EC_PIN_RELAY_PROBE,relay);
ec_last_change_relay=millis();
}
}
void ec_setCalibration(bool calib) {
//calib low means low resistor value -> NO -> relay high
ec_connectProbe(false);
bool val=digitalRead(EC_PIN_RELAY_CALIBRATION);
if (val!=!calib) { //write only if different
digitalWrite(EC_PIN_RELAY_CALIBRATION,!calib);
ec_last_change_relay=millis();
}
}
void ec_releaseRelay() {
digitalWrite(EC_PIN_RELAY_PROBE,LOW);
digitalWrite(EC_PIN_RELAY_CALIBRATION,LOW);
digitalWrite(EC_PIN_RELAY_RANGE,LOW);
ec_last_change_relay=millis();
}
void ec_checkIfSettleTimeOK() {
/*
Serial.print("ec_array_rangeLow[0]="); Serial.println(ec_array_rangeLow[0]);
Serial.print("rangeLow min="); Serial.println(getMin(ec_array_rangeLow,EC_ARRAY_SIZE));
Serial.print("rangeLow max="); Serial.println(getMax(ec_array_rangeLow,EC_ARRAY_SIZE));
*/
if (ec_array_rangeLow[0]<=getMin(ec_array_rangeLow,EC_ARRAY_SIZE) || ec_array_rangeLow[0]>=getMax(ec_array_rangeLow,EC_ARRAY_SIZE)){
//is first value the highest or lowest?
Serial.println("Warning: EC_RELAY_SWITCH_SETTLETIME might be too low! (ec_calib_rangeLow_Rlow)");
}
/*
Serial.print("ec_array_rangeHigh[0]="); Serial.println(ec_array_rangeHigh[0]);
Serial.print("rangeHigh min="); Serial.println(getMin(ec_array_rangeHigh,EC_ARRAY_SIZE));
Serial.print("rangeHigh max="); Serial.println(getMax(ec_array_rangeHigh,EC_ARRAY_SIZE));
*/
if (ec_array_rangeHigh[0]<=getMin(ec_array_rangeHigh,EC_ARRAY_SIZE) || ec_array_rangeHigh[0]>=getMax(ec_array_rangeHigh,EC_ARRAY_SIZE)){
//is first value the highest or lowest?
Serial.println("Warning: EC_RELAY_SWITCH_SETTLETIME might be too low! (ec_array_rangeHigh)");
}
}
float ec_getResistance(float adc,float caliblow,float resistorlow,float calibhigh,float resistorhigh)
{
//adc = adc reading to calculate resistance for
//caliblow = adc value from calibration. Low resistance
//resistorlow = actual resistor value. Low resistance
//calibhjgh = adc value from calibration. High resistance
//resistorhigh = actual resistor value. High resistance
//y=mx+a;
//resistorlow=m*caliblow+a;
//resistorhigh=m*calibhigh+a;
//linear interpolation interpolate
double m=(resistorhigh-resistorlow)/(calibhigh-caliblow);
float a=resistorlow-m*caliblow;
Serial.print("m="); Serial.println(m);
Serial.print("a="); Serial.println(a);
return m*adc+a;
}
#endif

View file

@ -3,9 +3,11 @@
mqttValueTiming timing_flow;
#define FLOW_PIN 19
//#define FLOW_PIN 16 //move to platformio.ini
uint16_t flow_counter=0; //maximum counts/s measured with Eden 128 Pump was 171
void IRAM_ATTR isr_flow();
unsigned long last_read_flow=0;
#define READINTERVAL_FLOW 10000
float flow_factor=7.5; //F=7.5*flowrate[L/min]
@ -15,14 +17,18 @@ uint32_t flow_counter_sum=0;
void flow_setup() {
timing_flow.minchange=0.0;
timing_flow.maxchange=0.3;
timing_flow.mintime=10*000;
timing_flow.mintime=10*1000;
timing_flow.maxtime=30*60*1000;
pinMode(FLOW_PIN, INPUT_PULLUP);
attachInterrupt(FLOW_PIN, isr_flow, CHANGE);
}
@ -34,6 +40,7 @@ void flow_loop(unsigned long loopmillis) {
flow_counter=0;
last_read_flow=loopmillis;
}
}
void IRAM_ATTR isr_flow() {
@ -42,4 +49,5 @@ void IRAM_ATTR isr_flow() {
}
#endif

View file

@ -120,4 +120,43 @@ float mapf(float x, float in_min, float in_max, float out_min, float out_max)
}
void i2cscan()
{
byte error, address;
int nDevices;
delay(500);
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
}
#endif

View file

@ -3,7 +3,6 @@
mqttValueTiming timing_temperature_reservoir;
mqttValueTiming timing_temperature_air;
mqttValueTiming timing_temperature_case;
#include <OneWire.h>
@ -14,12 +13,12 @@ void printAddress(DeviceAddress deviceAddress);
//first address: 28FF6C1C7216058B
//second address:
#define ONE_WIRE_BUS 18 //GPIO pin
//#define ONE_WIRE_BUS_PIN 18 //GPIO pin moved to platformio.ini
#define TEMPERATURE_PRECISION 12 //max is 12
#define READINTERVAL_DS18B20 1000 //ms
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
OneWire oneWire(ONE_WIRE_BUS_PIN);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
@ -28,19 +27,17 @@ DallasTemperature sensors(&oneWire);
#define TEMPMEAN_SIZE 16
uint16_t tempCmean_pos=0;
// arrays to hold device addresses
DeviceAddress thermometerReservoir={0x28,0xFF,0x30,0xBA,0x85,0x16,0x03,0xB5};
//DeviceAddress thermometerAir={0x28,0xFF,0x6C,0x1C,0x72,0x16,0x05,0x8B};
//DeviceAddress thermometerReservoirA={0x28,0xFF,0x6F,0x19,0x72,0x16,0x05,0x44}; //NFT
//DeviceAddress thermometerReservoirB={0x28,0xFF,0x30,0xBA,0x85,0x16,0x03,0xB5}; //DB
DeviceAddress thermometerReservoir=THERMOMETER_ADDR_RESERVOIR;
float tempC_reservoir; //last reading
float tempCmean_reservoir_array[TEMPMEAN_SIZE];
float tempCmean_reservoir=DEVICE_DISCONNECTED_C;
DeviceAddress thermometerAir={0x28,0xFF,0x6C,0x1C,0x72,0x16,0x05,0x8B};
float tempC_air; //last reading
float tempCmean_air_array[TEMPMEAN_SIZE];
float tempCmean_air=DEVICE_DISCONNECTED_C;
DeviceAddress thermometerCase={0x10,0x7E,0x22,0x99,0x01,0x08,0x00,0xA4};
DeviceAddress thermometerCase=THERMOMETER_ADDR_CASE;
float tempC_case; //last reading
float tempCmean_case_array[TEMPMEAN_SIZE];
float tempCmean_case=DEVICE_DISCONNECTED_C;
@ -54,10 +51,6 @@ void temperature_setup() {
timing_temperature_reservoir.mintime=2*1000;
timing_temperature_reservoir.maxtime=60*60*1000;
timing_temperature_air.minchange=0.0;
timing_temperature_air.maxchange=0.5;
timing_temperature_air.mintime=2*1000;
timing_temperature_air.maxtime=60*60*1000;
timing_temperature_case.minchange=0.0;
timing_temperature_case.maxchange=0.5;
@ -67,7 +60,6 @@ void temperature_setup() {
//initialize mean array
for (uint16_t i=0;i<TEMPMEAN_SIZE;i++) {
tempCmean_reservoir_array[i]=-127;
tempCmean_air_array[i]=-127;
tempCmean_case_array[i]=-127;
}
@ -96,6 +88,9 @@ void temperature_setup() {
DeviceAddress _addr;
if (!oneWire.search(_addr)) {
Serial.print("Error: Device not found");
String _text="Error: Device not found. id=";
_text.concat(i);
publishInfo("error/temperature",_text);
}else{
Serial.print("Found device. Address:");
printAddress(_addr);
@ -105,22 +100,27 @@ void temperature_setup() {
}
sensors.setResolution(thermometerReservoir, TEMPERATURE_PRECISION);
sensors.setResolution(thermometerAir, TEMPERATURE_PRECISION);
sensors.setResolution(thermometerCase, TEMPERATURE_PRECISION);
}
void temperature_loop(unsigned long loopmillis) {
static unsigned long last_read_ds18b20;
static unsigned long last_read_ds18b20=0;
static bool flag_requestTemperatures=false;
if (loopmillis>last_read_ds18b20+READINTERVAL_DS18B20) {
if (loopmillis>last_read_ds18b20+READINTERVAL_DS18B20*10) { //timeout
Serial.println("Warn: Request Temperatures Timeout!");
if (mqtt) {
publishInfo("error/temperature","Warn: Request Temperatures Timeout!");
}
flag_requestTemperatures=false;
last_read_ds18b20=loopmillis;
}
if (!flag_requestTemperatures) {
sensors.requestTemperatures(); //this takes ~600ms
sensors.setWaitForConversion(false); //make async
sensors.requestTemperatures(); //this takes ~600ms in non async mode. about 2ms in async mode
sensors.setWaitForConversion(true);
flag_requestTemperatures=true;
}
if (sensors.isConversionComplete()) {
@ -130,7 +130,8 @@ void temperature_loop(unsigned long loopmillis) {
tempC_reservoir = sensors.getTempC(thermometerReservoir);
if (tempC_reservoir == DEVICE_DISCONNECTED_C)
{
Serial.print(" Error reading: "); printAddress(thermometerReservoir);
Serial.print(" Error reading: "); printAddress(thermometerReservoir); Serial.println();
publishInfo("error/temperature","Error reading thermometerReservoir");
}else{
tempCmean_reservoir_array[tempCmean_pos]=tempC_reservoir;
if (isValueArrayOKf(tempCmean_reservoir_array,TEMPMEAN_SIZE,DEVICE_DISCONNECTED_C)) {
@ -140,23 +141,12 @@ void temperature_loop(unsigned long loopmillis) {
}
}
tempC_air = sensors.getTempC(thermometerAir);
if (tempC_air == DEVICE_DISCONNECTED_C)
{
Serial.print(" Error reading: "); printAddress(thermometerAir);
}else{
tempCmean_air_array[tempCmean_pos]=tempC_air;
if (isValueArrayOKf(tempCmean_air_array,TEMPMEAN_SIZE,DEVICE_DISCONNECTED_C)) {
tempCmean_air=getMeanf(tempCmean_air_array,TEMPMEAN_SIZE);
}else{
tempCmean_air=DEVICE_DISCONNECTED_C;
}
}
tempC_case = sensors.getTempC(thermometerCase);
if (tempC_case == DEVICE_DISCONNECTED_C)
{
Serial.print(" Error reading: "); printAddress(thermometerCase);
publishInfo("error/temperature","Error reading thermometerCase");
}else{
tempCmean_case_array[tempCmean_pos]=tempC_case;
if (isValueArrayOKf(tempCmean_case_array,TEMPMEAN_SIZE,DEVICE_DISCONNECTED_C)) {

View file

@ -2,32 +2,74 @@
#define _WATERLEVEL_H_
#include <Wire.h>
#include <VL6180X.h>
#ifdef WATERLEVELSENSOR_VL53L0X
//#include <VL53L0X.h> //pololu/VL53L0X@^1.3.1
#endif
#ifdef WATERLEVELSENSOR_VL53L1X
#include <VL53L1X.h> //pololu/VL53L1X@^1.3.1
#endif
VL6180X sensor;
// To try different scaling factors, change the following define.
// Valid scaling factors are 1, 2, or 3.
#define SCALING 1
#define READINTERVAL_WATERLEVEL 200
#define WATERLEVELMEAN_SIZE 32
#define WATERLEVELMEAN_FILTER_CUTOFF 8 //max value is around WATERLEVELMEAN_SIZE/2
// +++++++++++++++ Common Parameters ++++++++++
#define READINTERVAL_WATERLEVEL 500
#define WATERLEVELMEAN_SIZE 16
#define WATERLEVELMEAN_FILTER_CUTOFF 4 //max value is around WATERLEVELMEAN_SIZE/2
#define WATERLEVEL_UNAVAILABLE -1 //-1 is also timeout value
// +++++++++++++++ VL53L0X +++++++++++++++
#ifdef WATERLEVELSENSOR_VL53L0X
VL53L0X tofsensor;
#endif
#ifdef WATERLEVELSENSOR_VL53L1X
VL53L1X tofsensor;
#endif
// Uncomment this line to use long range mode. This
// increases the sensitivity of the sensor and extends its
// potential range, but increases the likelihood of getting
// an inaccurate reading because of reflections from objects
// other than the intended target. It works best in dark
// conditions.
//#define LONG_RANGE
// Uncomment ONE of these two lines to get
// - higher speed at the cost of lower accuracy OR
// - higher accuracy at the cost of lower speed
//#define HIGH_SPEED
#define HIGH_ACCURACY
float waterlevelMean_array[WATERLEVELMEAN_SIZE];
uint16_t waterlevelMean_array_pos=0;
#define WATERLEVEL_UNAVAILABLE -1
float waterlevel=WATERLEVEL_UNAVAILABLE; //distance from floor to water surface [mm]
float watervolume=WATERLEVEL_UNAVAILABLE; //calculated Volume in Reservoir
float waterlevel=WATERLEVEL_UNAVAILABLE;
float watervolume=WATERLEVEL_UNAVAILABLE;
#define DISTANCE_UNAVAILABLE 65535
uint16_t distance=DISTANCE_UNAVAILABLE;
//Calibration
float waterlevel_calib_offset_measured=86; //Sollwert
float waterlevel_calib_offset_sensor=78; //Istwert
//raw reading is 78mm, ruler reads 86mm. VL8160 sensor is 169mm above bottom of reservoir.
float waterlevel_calib_offset=WATERLEVEL_OFFSET; //c
float waterlevel_calib_factor=WATERLEVEL_FACTOR; //m
float waterlevel_calib_reservoirArea=27*36.5; //area in cm^2
float waterlevel_calib_reservoirArea=RES_AREA; //area in cm^2
uint16_t distance_unsuccessful_count=0;
bool tofenabled=true;
float waterlevel_heightToVolume(float distance);
@ -37,59 +79,154 @@ mqttValueTiming timing_waterlevel;
void waterlevel_setup() {
/*
Wire.begin();
byte error, address;
int nDevices;
delay(500);
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
*/
timing_waterlevel.minchange=0.0;
timing_waterlevel.maxchange=3.0;
timing_waterlevel.maxchange=7.0;
timing_waterlevel.mintime=30*000;
timing_waterlevel.maxtime=60*60*1000;
Wire.begin();
sensor.init();
sensor.configureDefault();
sensor.setScaling(SCALING);
sensor.setTimeout(500);
for (uint16_t i=0;i<WATERLEVELMEAN_SIZE;i++) {
waterlevelMean_array[i]=-1; //-1 is also timeout value
waterlevelMean_array[i]=WATERLEVEL_UNAVAILABLE; //-1 is also timeout value
}
delay(50);
tofsensor.setTimeout(2000);
if (!tofsensor.init())
{
Serial.println("Failed to detect and initialize tofsensor!");
publishInfo("error/waterlevel","Failed to detect and initialize tofsensor");
delay(1000);
tofenabled=false;
return;
}
#if defined LONG_RANGE
// lower the return signal rate limit (default is 0.25 MCPS)
tofsensor.setSignalRateLimit(0.1);
// increase laser pulse periods (defaults are 14 and 10 PCLKs)
tofsensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
tofsensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
#endif
#if defined HIGH_SPEED
// reduce timing budget to 20 ms (default is about 33 ms)
tofsensor.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
// increase timing budget to 200 ms
tofsensor.setMeasurementTimingBudget(200000);
#endif
#if defined ROISIZE_WIDTH
tofsensor.setROISize(ROISIZE_WIDTH,ROISIZE_HEIGHT); //default/maximum is 16x16
#endif
}
void waterlevel_loop(unsigned long loopmillis) {
if (!tofenabled) {
return;
}
static unsigned long last_read_waterlevel;
if (loopmillis>=last_read_waterlevel+READINTERVAL_WATERLEVEL) {
last_read_waterlevel=loopmillis;
static unsigned long last_read_waterlevelB;
if (loopmillis>=last_read_waterlevelB+READINTERVAL_WATERLEVEL) {
last_read_waterlevelB=loopmillis;
uint16_t distance=sensor.readRangeSingleMillimeters();
distance=tofsensor.readRangeSingleMillimeters(); //out of range =255
//Serial.print("Distance reading:"); Serial.println(distance);
//Serial.print("Distance reading B="); Serial.print(distance);Serial.println();
if (distance!=WATERLEVEL_UNAVAILABLE) { //successful
if (distance!=DISTANCE_UNAVAILABLE) { //successful
waterlevelMean_array[waterlevelMean_array_pos]=distance;
waterlevelMean_array_pos++;
waterlevelMean_array_pos%=WATERLEVELMEAN_SIZE;
distance_unsuccessful_count=0;
}else{
distance_unsuccessful_count++;
if (distance_unsuccessful_count%20==0) {
String _text="Distance unsuccessful count=";
_text.concat(distance_unsuccessful_count);
_text.concat(" distance=");
_text.concat(distance);
publishInfo("error/waterlevel",_text);
}
}
if (isValueArrayOKf(waterlevelMean_array,WATERLEVELMEAN_SIZE,WATERLEVEL_UNAVAILABLE)){
float _filteredDistance=getFilteredf(waterlevelMean_array,WATERLEVELMEAN_SIZE,WATERLEVELMEAN_FILTER_CUTOFF);
//Invert distance and offset
waterlevel=(waterlevel_calib_offset_sensor+waterlevel_calib_offset_measured)-_filteredDistance;
waterlevel=constrain(waterlevel_calib_offset+waterlevel_calib_factor*_filteredDistance,0,1000);
watervolume=waterlevel_heightToVolume(waterlevel);
//Serial.print("Filtered reading B="); Serial.print(_filteredDistance); Serial.print(" fixed="); Serial.println(waterlevelB); Serial.println();
//float _meanWaterlevel=getMeanf(waterlevelMean,WATERLEVELMEAN_SIZE);
//Serial.print("\t Dist="); Serial.print(_filteredWaterlevel); Serial.print("mm"); Serial.print("(+- "); Serial.print((getMaxf(waterlevelMean,WATERLEVELMEAN_SIZE)-getMinf(waterlevelMean,WATERLEVELMEAN_SIZE))/2.0); Serial.print(")"); Serial.print(" [mean="); Serial.print(_meanWaterlevel); Serial.print("]");
}else{
waterlevel=WATERLEVEL_UNAVAILABLE;
}
}
}
float waterlevel_heightToVolume(float distance){
return waterlevel_calib_reservoirArea/100 * distance/100; //area[cm^2] in dm^2 * height in dm = dm^3= L
}
#endif

View file

@ -31,6 +31,7 @@ bool enableTiming=true;
bool publishValueTimed(String topic,float value,uint8_t decimals,mqttValueTiming &mqttvt,unsigned long loopmillis);
void publishValue(String topic,float value,uint8_t decimals);
void publishInfo(String topic,String text);
void connect() {
Serial.print("checking wifi...");
@ -57,7 +58,8 @@ void connect() {
Serial.println("\nconnected!");
client.subscribe((String)client_id+"/sendall");
client.subscribe((String)client_id+"/ec/trigger");
// client.unsubscribe("/hello");
client.subscribe((String)client_id+"/errorack");
client.subscribe((String)client_id+"/reboot");
}
@ -75,6 +77,15 @@ void messageReceived(String &topic, String &payload) {
force_ec_measurement=true;
Serial.println("Forced EC Measurement");
}
if (topic==((String)client_id+"/errorack") && payload=="true") { //error acknowledge
valueError=false;
Serial.println("Reset value error flag");
}
if (topic==((String)client_id+"/reboot") && payload=="true") { //error acknowledge
Serial.println("Reboot by mqtt");
delay(100);
ESP.restart();
}
}
bool mqtt_loop(unsigned long loopmillis) {
@ -97,6 +108,13 @@ bool mqtt_loop(unsigned long loopmillis) {
return false;
}
bool publishValueTimedOverride(String topic,float value,uint8_t decimals,mqttValueTiming &mqttvt,unsigned long loopmillis) {
mqttvt.lasttime=loopmillis;
mqttvt.lastvalue=value;
publishValue(topic,value,decimals);
return true;
}
bool publishValueTimed(String topic,float value,uint8_t decimals,mqttValueTiming &mqttvt,unsigned long loopmillis) {
unsigned long timediff=loopmillis-mqttvt.lasttime;
float valuediff=abs(value-mqttvt.lastvalue);
@ -122,4 +140,9 @@ void publishValue(String topic,float value,uint8_t decimals) {
Serial.print("Publish Topic="); Serial.print((String)client_id+"/"+topic); Serial.print(" Message="); Serial.println(buffer);
}
void publishInfo(String topic,String text) {
client.publish((String)client_id+"/"+topic, text);
Serial.print("Publish Topic="); Serial.print((String)client_id+"/"+topic); Serial.print(" Message="); Serial.println(text);
}
#endif

View file

@ -1,6 +0,0 @@
const char ssid[] = "";
const char pass[] = "";
const char mqtt_host[] = "10.0.0.1";
const char client_id[] = "hydroponic";

View file

@ -0,0 +1,6 @@
const char ssid[] = "network";
const char pass[] = "password";
const char mqtt_host[] = "10.0.0.1";
const char client_id[] = CLIENT_ID;

BIN
messung/20240423_A.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
messung/20240423_B.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View file

@ -0,0 +1,61 @@
time,tempReservoir,ECadcCalib,ECadc_A,ECadcAdjusted_A,ECadc_B,ECadcAdjusted_B,solutionAdded
4198570,24.05,6021.19,736.05,735.52,736.82,736.30,0.0
4296735,24.28,6021.19,741.08,740.55,743.13,742.60,0.1
4347858,24.37,6022.41,756.32,755.63,761.81,761.11,0.2
4393976,24.44,6022.34,769.87,769.17,779.88,779.17,0.3
4441095,24.51,6021.16,787.24,786.68,804.25,803.68,0.4
4481207,24.56,6021.78,807.27,806.62,836.09,835.41,0.5
4525323,24.62,6020.94,832.99,832.43,890.25,889.65,0.6
4567437,24.65,6021.25,867.22,866.59,980.75,980.04,0.7
4615552,24.69,6021.44,928.14,927.44,1076.18,1075.36,0.8
4654663,24.69,6022.38,1015.45,1014.52,1176.16,1175.09,0.9
4729805,24.75,6022.47,1108.50,1107.47,1280.05,1278.87,1.0
4768916,24.75,6022.19,1180.36,1179.32,1358.77,1357.58,1.1
4800019,24.75,6022.63,1245.61,1244.42,1431.78,1430.41,1.2
4832123,24.75,6022.34,1314.57,1313.38,1507.76,1506.39,1.3
4865228,24.78,6022.13,1380.22,1379.02,1577.54,1576.17,1.4
4899334,24.79,6022.41,1437.05,1435.73,1639.54,1638.03,1.5
4938445,24.81,6022.66,1488.52,1487.10,1695.89,1694.27,1.6
4984563,24.79,6022.13,1539.55,1538.21,1750.91,1749.39,1.7
5024670,24.80,6021.88,1585.69,1584.37,1802.22,1800.73,1.8
5065778,24.79,6022.00,1615.91,1614.54,1839.94,1838.38,1.9
5098883,24.76,6022.16,1642.89,1641.46,1867.62,1865.98,2.0
5204060,24.75,6022.28,1759.43,1757.86,1994.89,1993.10,2.5
5243166,24.75,6021.84,1892.17,1890.61,2136.23,2134.47,3.0
5283273,24.75,6021.16,2019.71,2018.27,2272.46,2270.84,3.5
5331393,24.69,6022.75,2117.66,2115.60,2378.03,2375.71,4.0
5378115,24.69,6023.34,2240.07,2237.67,2507.23,2504.54,4.5
5420229,24.69,6022.56,2347.43,2345.22,2621.71,2619.24,5.0
5482363,24.69,6022.81,2451.96,2449.55,2730.02,2727.33,5.5
5537490,24.63,6021.94,2581.04,2578.87,2865.74,2863.33,6.1
5683703,24.62,6021.72,2754.81,2752.59,3045.83,3043.38,7.0
5731823,24.62,6023.03,2963.67,2960.64,3264.57,3261.24,8.0
5819983,24.75,6021.56,3148.24,3145.79,3461.06,3458.37,9.0
5860095,24.81,6021.47,3340.23,3337.69,3656.93,3654.15,10.0
5907214,24.81,6022.00,3531.55,3528.54,3854.92,3851.64,11
5938317,24.81,6021.56,3706.43,3703.55,4031.33,4028.19,12
5968419,24.82,6021.97,3872.51,3869.24,4199.72,4196.17,13
6068591,24.87,6021.47,4027.79,4024.72,4352.64,4349.32,14
6113708,24.87,6021.94,4156.05,4152.56,4540.04,4536.23,15
6151818,24.87,6021.00,4305.14,4302.19,4698.46,4695.25,16
6227961,24.92,6021.72,4451.08,4447.51,4835.06,4831.18,17
6282087,24.94,6021.19,4579.90,4576.63,4965.65,4962.10,18
6332209,24.94,6022.09,4716.77,4712.69,5108.17,5103.75,19
6380324,24.94,6021.75,4856.32,4852.39,5241.48,5237.24,20
6465481,24.87,6021.75,5461.44,5457.02,5854.96,5850.23,25
6528616,24.81,6021.94,5972.65,5967.63,6362.16,6356.81,30
6654814,24.73,6021.22,6429.49,6424.86,6808.07,6803.16,35
6743975,24.69,6020.84,6836.34,6831.84,7210.02,7205.27,40
6837140,24.61,6021.56,7199.32,7193.73,7570.69,7564.80,45
6886256,24.67,6022.13,7523.59,7517.03,7883.69,7876.82,50
6952394,24.73,6021.84,8102.05,8095.37,8436.61,8429.66,60
6999513,24.70,6021.25,8563.79,8557.57,8887.04,8880.58,70
7051637,24.71,6022.16,8969.54,8961.68,9269.24,9261.12,80
7098756,24.78,6022.19,9320.85,9312.63,9606.04,9597.58,90
7138863,24.82,6021.66,9614.32,9606.70,9888.67,9880.82,100
7270066,24.91,6021.84,10148.45,10140.08,10395.20,10386.63,120
7328196,24.80,6021.75,10538.89,10530.37,10766.18,10757.47,140
7392327,24.69,6020.97,10848.27,10840.90,11058.58,11051.07,160
7449451,24.56,6023.06,11121.81,11110.40,11312.32,11300.70,180
7505579,24.44,6021.81,11314.32,11305.06,11513.90,11504.47,200
1 time tempReservoir ECadcCalib ECadc_A ECadcAdjusted_A ECadc_B ECadcAdjusted_B solutionAdded
2 4198570 24.05 6021.19 736.05 735.52 736.82 736.30 0.0
3 4296735 24.28 6021.19 741.08 740.55 743.13 742.60 0.1
4 4347858 24.37 6022.41 756.32 755.63 761.81 761.11 0.2
5 4393976 24.44 6022.34 769.87 769.17 779.88 779.17 0.3
6 4441095 24.51 6021.16 787.24 786.68 804.25 803.68 0.4
7 4481207 24.56 6021.78 807.27 806.62 836.09 835.41 0.5
8 4525323 24.62 6020.94 832.99 832.43 890.25 889.65 0.6
9 4567437 24.65 6021.25 867.22 866.59 980.75 980.04 0.7
10 4615552 24.69 6021.44 928.14 927.44 1076.18 1075.36 0.8
11 4654663 24.69 6022.38 1015.45 1014.52 1176.16 1175.09 0.9
12 4729805 24.75 6022.47 1108.50 1107.47 1280.05 1278.87 1.0
13 4768916 24.75 6022.19 1180.36 1179.32 1358.77 1357.58 1.1
14 4800019 24.75 6022.63 1245.61 1244.42 1431.78 1430.41 1.2
15 4832123 24.75 6022.34 1314.57 1313.38 1507.76 1506.39 1.3
16 4865228 24.78 6022.13 1380.22 1379.02 1577.54 1576.17 1.4
17 4899334 24.79 6022.41 1437.05 1435.73 1639.54 1638.03 1.5
18 4938445 24.81 6022.66 1488.52 1487.10 1695.89 1694.27 1.6
19 4984563 24.79 6022.13 1539.55 1538.21 1750.91 1749.39 1.7
20 5024670 24.80 6021.88 1585.69 1584.37 1802.22 1800.73 1.8
21 5065778 24.79 6022.00 1615.91 1614.54 1839.94 1838.38 1.9
22 5098883 24.76 6022.16 1642.89 1641.46 1867.62 1865.98 2.0
23 5204060 24.75 6022.28 1759.43 1757.86 1994.89 1993.10 2.5
24 5243166 24.75 6021.84 1892.17 1890.61 2136.23 2134.47 3.0
25 5283273 24.75 6021.16 2019.71 2018.27 2272.46 2270.84 3.5
26 5331393 24.69 6022.75 2117.66 2115.60 2378.03 2375.71 4.0
27 5378115 24.69 6023.34 2240.07 2237.67 2507.23 2504.54 4.5
28 5420229 24.69 6022.56 2347.43 2345.22 2621.71 2619.24 5.0
29 5482363 24.69 6022.81 2451.96 2449.55 2730.02 2727.33 5.5
30 5537490 24.63 6021.94 2581.04 2578.87 2865.74 2863.33 6.1
31 5683703 24.62 6021.72 2754.81 2752.59 3045.83 3043.38 7.0
32 5731823 24.62 6023.03 2963.67 2960.64 3264.57 3261.24 8.0
33 5819983 24.75 6021.56 3148.24 3145.79 3461.06 3458.37 9.0
34 5860095 24.81 6021.47 3340.23 3337.69 3656.93 3654.15 10.0
35 5907214 24.81 6022.00 3531.55 3528.54 3854.92 3851.64 11
36 5938317 24.81 6021.56 3706.43 3703.55 4031.33 4028.19 12
37 5968419 24.82 6021.97 3872.51 3869.24 4199.72 4196.17 13
38 6068591 24.87 6021.47 4027.79 4024.72 4352.64 4349.32 14
39 6113708 24.87 6021.94 4156.05 4152.56 4540.04 4536.23 15
40 6151818 24.87 6021.00 4305.14 4302.19 4698.46 4695.25 16
41 6227961 24.92 6021.72 4451.08 4447.51 4835.06 4831.18 17
42 6282087 24.94 6021.19 4579.90 4576.63 4965.65 4962.10 18
43 6332209 24.94 6022.09 4716.77 4712.69 5108.17 5103.75 19
44 6380324 24.94 6021.75 4856.32 4852.39 5241.48 5237.24 20
45 6465481 24.87 6021.75 5461.44 5457.02 5854.96 5850.23 25
46 6528616 24.81 6021.94 5972.65 5967.63 6362.16 6356.81 30
47 6654814 24.73 6021.22 6429.49 6424.86 6808.07 6803.16 35
48 6743975 24.69 6020.84 6836.34 6831.84 7210.02 7205.27 40
49 6837140 24.61 6021.56 7199.32 7193.73 7570.69 7564.80 45
50 6886256 24.67 6022.13 7523.59 7517.03 7883.69 7876.82 50
51 6952394 24.73 6021.84 8102.05 8095.37 8436.61 8429.66 60
52 6999513 24.70 6021.25 8563.79 8557.57 8887.04 8880.58 70
53 7051637 24.71 6022.16 8969.54 8961.68 9269.24 9261.12 80
54 7098756 24.78 6022.19 9320.85 9312.63 9606.04 9597.58 90
55 7138863 24.82 6021.66 9614.32 9606.70 9888.67 9880.82 100
56 7270066 24.91 6021.84 10148.45 10140.08 10395.20 10386.63 120
57 7328196 24.80 6021.75 10538.89 10530.37 10766.18 10757.47 140
58 7392327 24.69 6020.97 10848.27 10840.90 11058.58 11051.07 160
59 7449451 24.56 6023.06 11121.81 11110.40 11312.32 11300.70 180
60 7505579 24.44 6021.81 11314.32 11305.06 11513.90 11504.47 200

View file

@ -0,0 +1,118 @@
4198570,24.05,6021.19,736.05,735.52,736.82,736.30
4296735,24.28,6021.19,741.08,740.55,743.13,742.60
4347858,24.37,6022.41,756.32,755.63,761.81,761.11
4393976,24.44,6022.34,769.87,769.17,779.88,779.17
4441095,24.51,6021.16,787.24,786.68,804.25,803.68
4481207,24.56,6021.78,807.27,806.62,836.09,835.41
4525323,24.62,6020.94,832.99,832.43,890.25,889.65
4567437,24.65,6021.25,867.22,866.59,980.75,980.04
4615552,24.69,6021.44,928.14,927.44,1076.18,1075.36
4654663,24.69,6022.38,1015.45,1014.52,1176.16,1175.09
4729805,24.75,6022.47,1108.50,1107.47,1280.05,1278.87
4768916,24.75,6022.19,1180.36,1179.32,1358.77,1357.58
4800019,24.75,6022.63,1245.61,1244.42,1431.78,1430.41
4832123,24.75,6022.34,1314.57,1313.38,1507.76,1506.39
4865228,24.78,6022.13,1380.22,1379.02,1577.54,1576.17
4899334,24.79,6022.41,1437.05,1435.73,1639.54,1638.03
4938445,24.81,6022.66,1488.52,1487.10,1695.89,1694.27
4984563,24.79,6022.13,1539.55,1538.21,1750.91,1749.39
5024670,24.80,6021.88,1585.69,1584.37,1802.22,1800.73
5065778,24.79,6022.00,1615.91,1614.54,1839.94,1838.38
5098883,24.76,6022.16,1642.89,1641.46,1867.62,1865.98
5204060,24.75,6022.28,1759.43,1757.86,1994.89,1993.10
5243166,24.75,6021.84,1892.17,1890.61,2136.23,2134.47
5283273,24.75,6021.16,2019.71,2018.27,2272.46,2270.84
5331393,24.69,6022.75,2117.66,2115.60,2378.03,2375.71
5378115,24.69,6023.34,2240.07,2237.67,2507.23,2504.54
5420229,24.69,6022.56,2347.43,2345.22,2621.71,2619.24
5482363,24.69,6022.81,2451.96,2449.55,2730.02,2727.33
5537490,24.63,6021.94,2581.04,2578.87,2865.74,2863.33
5683703,24.62,6021.72,2754.81,2752.59,3045.83,3043.38
5731823,24.62,6023.03,2963.67,2960.64,3264.57,3261.24
5819983,24.75,6021.56,3148.24,3145.79,3461.06,3458.37
5860095,24.81,6021.47,3340.23,3337.69,3656.93,3654.15
5907214,24.81,6022.00,3531.55,3528.54,3854.92,3851.64
5938317,24.81,6021.56,3706.43,3703.55,4031.33,4028.19
5968419,24.82,6021.97,3872.51,3869.24,4199.72,4196.17
6068591,24.87,6021.47,4027.79,4024.72,4352.64,4349.32
6113708,24.87,6021.94,4156.05,4152.56,4540.04,4536.23
6151818,24.87,6021.00,4305.14,4302.19,4698.46,4695.25
6227961,24.92,6021.72,4451.08,4447.51,4835.06,4831.18
6282087,24.94,6021.19,4579.90,4576.63,4965.65,4962.10
6332209,24.94,6022.09,4716.77,4712.69,5108.17,5103.75
6380324,24.94,6021.75,4856.32,4852.39,5241.48,5237.24
6465481,24.87,6021.75,5461.44,5457.02,5854.96,5850.23
6528616,24.81,6021.94,5972.65,5967.63,6362.16,6356.81
6654814,24.73,6021.22,6429.49,6424.86,6808.07,6803.16
6743975,24.69,6020.84,6836.34,6831.84,7210.02,7205.27
6837140,24.61,6021.56,7199.32,7193.73,7570.69,7564.80
6886256,24.67,6022.13,7523.59,7517.03,7883.69,7876.82
6952394,24.73,6021.84,8102.05,8095.37,8436.61,8429.66
6999513,24.70,6021.25,8563.79,8557.57,8887.04,8880.58
7051637,24.71,6022.16,8969.54,8961.68,9269.24,9261.12
7098756,24.78,6022.19,9320.85,9312.63,9606.04,9597.58
7138863,24.82,6021.66,9614.32,9606.70,9888.67,9880.82
7270066,24.91,6021.84,10148.45,10140.08,10395.20,10386.63
7328196,24.80,6021.75,10538.89,10530.37,10766.18,10757.47
7392327,24.69,6020.97,10848.27,10840.90,11058.58,11051.07
7449451,24.56,6023.06,11121.81,11110.40,11312.32,11300.70
7505579,24.44,6021.81,11314.32,11305.06,11513.90,11504.47

View file

@ -0,0 +1,156 @@
Kalibrierung der zwei neuen EC Probes für NFT und Dutch Bucket 2024.
Probe A: Die Längere
Probe B: Die etwas kürzere
Lösung laut https://www.researchgate.net/profile/Sameer-Sayyad-2/post/How-is-it-possible-to-convert-conductivity-of-NaCl-solution-in-uS-to-its-salinity-NaCl-concentration-in-ppm/attachment/5abdeaedb53d2f63c3c2e08c/AS%3A609786693443585%401522395885345/download/conductivity+vs+concentration+NaCl+25+degress.pdf
3g NaCl auf 1L H2O sind 5690 uS/cm @ 25°C
Also 7,5g auf 0,25L H2O (für die 10 fache konzentration)
Dann 50mL davon mit 450mL H2O auf 1L auffüllen (wieder 10fach runterverdünnen)
Einige Messwerte genommen, ohne dass die EC Sensoren in Flüssigkeit sind.
time,tempReservoir,ECadcCalib,ECadc_A,ECadcAdjusted_A,ECadc_B,ECadcAdjusted_B
1524060,14.73,6021.09,729.21,728.70,729.16,728.65
1555158,14.69,6021.75,729.20,728.61,729.05,728.46
1577247,14.63,6021.88,728.94,728.33,728.96,728.35
1620362,14.56,6021.88,728.95,728.34,728.87,728.27
minimum adc rawA= 728.87
ca. 300mL dest. Wasser in 500mL Becherglas auf Magnetrührer
Wasser temperiert auf 25°C und durchgehend temperatur gehalten
Temperatursensor und DIY EC-Probe in Flüssigkeit platziert
Magnetrührer auf langsamer Stufe (keine Strudelbildung)
Messwert per Tastendruck erfasst (time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted)
zeit
temperatur d. flüssigkeit
referenz adc wert (geschalteter fester widerstand statt probe)
Roher ADC Messwert (Probe A)
angepasster ADC Messwert (linear gemappt nach abweichung vom referenz adc wert, referenz adc wert vorher ermittelt und eingegeben in code) (Probe A)
Roher ADC Messwert (Probe B)
angepasster ADC Messwert (Probe B)
manuell notiert und später der csv angefügt: "solutionAdded"
Erster Messwert nur dest. Wasser.
Weitere Messwerte jew. nach hinzufügen erst wenigen tropfen NaCl Lösung. Später mehr bis zu 10mL pro Messung.
time,mL added
4198000,0
4296000,0.1
4347000,0.2
4393000,0.3
4441000,0.4
4481000,0.5
4525000,0.6
4567000,0.7
4615000,0.8
4654000,0.9
4729000,1.0
4768000,1.1
4800000,1.2
4832000,1.3
4865000,1.4
4899000,1.5
4938000,1.6
4984000,1.7
5024000,1.8
5065000,1.9
5098000,2.0
5204000,2.5
5243000,3.0
5283000,3.5
5331000,4.0
5378000,4.5
5420000,5.0
5482000,5.5
5537000,6.1
5683000,7.0
5731000,8.0
5819000,9.0
5860000,10.0
5907000,11
5938000,12
5968000,13
6068000,14
6113000,15
6151000,16
6227000,17
6282000,18
6332000,19
6380000,20
6465000,25
6528000,30
6654000,35
6743000,40
6837000,45
6886000,50
6952000,60
6999000,70
7051000,80
7098000,90
7138000,100
7270000,120
7328000,140
7392000,160
7449000,180
7505000,200
Werte in 20240423_EC_Calibration_Raw.txt
Zusammengeführt in 20240423_EC_Calibration.csv
Auswertung in 20240423_EC_Calibration_with_graph.ods
Polynom x. Grades erstellt mit python approximate.py
für approximate.py numpy==1.22 notwendig. venv benutzen.
Probe A:
model order=4
+2.478900495960682e-13*x^4 -4.069826379094172e-09*x^3 +3.425216464107108e-05*x^2 -0.026463423062356713*x^1 +8.718380956513695*x^0
Excel:
2.478900495960682e-13
-4.069826379094172e-09
3.425216464107108e-05
-0.026463423062356713
8.718380956513695
Array:
{8.718380956513695,-0.026463423062356713,3.425216464107108e-05,-4.069826379094172e-09,2.478900495960682e-13}
Probe B:
model order=4
+2.543662736303669e-13*x^4 -4.214254847500995e-09*x^3 +3.528797358514823e-05*x^2 -0.04069178351449846*x^1 +18.785904241636743*x^0
Excel:
2.543662736303669e-13
-4.214254847500995e-09
3.528797358514823e-05
-0.04069178351449846
18.785904241636743
Array:
{18.785904241636743,-0.04069178351449846,3.528797358514823e-05,-4.214254847500995e-09,2.543662736303669e-13}
polynom in c++ code übernommen und punktuelle ergebnisse aus adc zu ec funktion ausgegeben und geplottet zur kontrolle, ob rechnung funktioniert.
bei lowADC den niedrigsten adc wert genommen in luft (siehe erste messungen).
float ec_calibration_polynom_A[]={18.953002079376887,-0.057529180570340156,7.44612274805891e-05,-8.847448650204697e-09,5.388914121653647e-13}; //20240423, graphite electrodes
float ec_calibration_linearize_below_adc_A=2000; //use linear approximation below this adc value. 0=disable
float ec_calibration_linear_lowADC_A=728; //x0
float ec_calibration_linear_lowEC_A=0; //y0
float ec_calibration_polynom_B[]={40.838922264426685,-0.08846039894456156,7.671298605466989e-05,-9.161423581523883e-09,5.529701600660142e-13}; //20240423, graphite electrodes
float ec_calibration_linearize_below_adc_B=2000; //use linear approximation below this adc value. 0=disable
float ec_calibration_linear_lowADC_B=728; //x0
float ec_calibration_linear_lowEC_B=0; //y0
Funktion getestet. Ergebnis in 20240423_FunctionTest.ods

Binary file not shown.

View file

@ -1,3 +1,5 @@
#Use venv
import numpy as np
from scipy.optimize import curve_fit
@ -8,32 +10,46 @@ import matplotlib.pyplot as plt
from pandas import *
# reading CSV file
data = read_csv("20230620_NaCl_raw.csv")
# converting column data to list
#solutionAdded = data['solutionAdded'].tolist() #in ml
tempReservoir = data['tempReservoir'].tolist() #in C
adc = data['ECadcAdjusted'].tolist() #adc reading
data = read_csv("2025/20250415_db_2025_B.csv")
solutionConcentration=5924.8 #mg/L NaCl
startWaterAmount=0.3 #L
# converting column data to list
solutionAdded = data['solutionAdded'].tolist() #in ml
tempReservoir = data['tempReservoir'].tolist() #in C
adc = data['ECadcAdjusted_A'].tolist() #adc reading
#solutionEC=5924.8 #mg/L NaCl
solutionEC=5690 #mg/L NaCl
startWaterAmount=300 #mL (same unit as solutionAded)
ppmToECfactor=1/0.46
#concentration = [x*solutionConcentration/(startWaterAmount+x) for x in solutionAdded]
#ECcalculated = [x*ppmToECfactor for x in concentration] #uS/cm
ECmeasured = data['ecMeasured'].tolist() #in C
## EC Calutation
'''
concentration = [x*solutionConcentration/(startWaterAmount+x) for x in solutionAdded]
ECcalculated = [x*ppmToECfactor for x in concentration] #uS/cm
'''
### OR
## EC of solution given
ECcalculated = [x*solutionEC/(startWaterAmount+x) for x in solutionAdded] #uS/cm
#ECmeasured = data['ecMeasured'].tolist() #in C
#print("Concentration")
#print(concentration)
#print(ECcalculated)
print("")
print("ECcalculated")
print(ECcalculated)
x = adc
#y = ECcalculated
y = ECmeasured
y = ECcalculated
#y = ECmeasured

4
messung/requirements.txt Normal file
View file

@ -0,0 +1,4 @@
numpy==1.22
scipy
matplotlib
pandas

View file

@ -8,16 +8,140 @@
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:esp32doit-devkit-v1]
[env:esp32doit-devkit-v1_NFT_2024]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
monitor_speed = 115200
monitor_port = /dev/ttyUSB0
build_flags=
'-D CLIENT_ID="hydroponic-NFT"'
-D PIN_BUTTON=12
-D PIN_LED=13
-D EC_PIN_RELAY_PROBE=27
-D EC_PIN_FREQ=5
-D EC_CALIBRATION_POLYNOM={18.785904241636743,-0.04069178351449846,3.528797358514823e-05,-4.214254847500995e-09,2.543662736303669e-13}
-D EC_CALIBRATION_LINEARIZE_BELOW_ADC=2000
-D EC_CALIBRATION_LINEAR_LOWADC=728
-D EC_CALIBRATION_LINEAR_LOWEC=0
-D EC_REFERENCE_ADC=6016.88
-D FLOW_PIN=16
-D ONE_WIRE_BUS_PIN=18
-D THERMOMETER_ADDR_RESERVOIR={0x28,0xFF,0x6F,0x19,0x72,0x16,0x05,0x44}
-D THERMOMETER_ADDR_CASE={0x10,0x7E,0x22,0x99,0x01,0x08,0x00,0xA4}
-D PIN_SDA=21
-D PIN_SCL=22
-D WATERLEVEL_OFFSET=500.0
-D WATERLEVEL_FACTOR=-1.0
-D RES_AREA=20*20*3.1416
-D WATERLEVELSENSOR_VL53L0X
lib_deps =
https://github.com/milesburton/Arduino-Temperature-Control-Library/
https://github.com/emilv/ArduinoSort/
robtillaart/ADS1X15@^0.3.9
256dpi/MQTT@^2.5.1
https://github.com/pololu/vl6180x-arduino
256dpi/MQTT@^2.5.1
pololu/VL53L0X@^1.3.1
[env:esp32-s3-devkitm-1_DB]
platform = platformio/espressif32@^6.7
board = esp32-s3-devkitm-1
;Devboard is ESP32-S3-DevKitC-1 (N16R8). board=esp32-s3-devkitm-1 works fine
framework = arduino
monitor_port = /dev/ttyACM0
monitor_speed = 115200
build_flags=
'-D CLIENT_ID="hydroponic-DB"'
-D PIN_BUTTON=12
-D EC_PIN_RELAY_PROBE=35
-D EC_PIN_FREQ=38
-D EC_CALIBRATION_POLYNOM={66.39669240599893,-0.09954956470655674,5.934040501689804e-05,-8.587883382454424e-09,4.448631030971983e-13}
-D EC_CALIBRATION_LINEARIZE_BELOW_ADC=3600
-D EC_CALIBRATION_LINEAR_LOWADC=465.97
-D EC_CALIBRATION_LINEAR_LOWEC=0
-D EC_REFERENCE_ADC=5908
-D FLOW_PIN=17
-D ONE_WIRE_BUS_PIN=18
-D THERMOMETER_ADDR_RESERVOIR={0x28,0xFF,0x30,0xBA,0x85,0x16,0x03,0xB5}
-D THERMOMETER_ADDR_CASE={0x28,0xFF,0x64,0x0E,0x75,0x83,0x09,0x6F}
-D PIN_SDA=1
-D PIN_SCL=2
-D WATERLEVEL_OFFSET=252.0
-D WATERLEVEL_FACTOR=-1.0
-D RES_AREA=37*56
-D WATERLEVELSENSOR_VL53L1X
-D ROISIZE_WIDTH=8
-D ROISIZE_HEIGHT=8
lib_deps =
https://github.com/milesburton/Arduino-Temperature-Control-Library/
https://github.com/emilv/ArduinoSort/
robtillaart/ADS1X15@^0.3.9
256dpi/MQTT@^2.5.2
pololu/VL53L1X@^1.3.1
adafruit/Adafruit NeoPixel
[env:esp32-s3-devkitm-1_NFT]
platform = platformio/espressif32@^6.7
board = esp32-s3-devkitm-1
;Devboard is ESP32-S3-DevKitC-1 (N16R8). board=esp32-s3-devkitm-1 works fine
framework = arduino
monitor_speed = 115200
monitor_port = /dev/ttyACM0
build_flags=
'-D CLIENT_ID="hydroponic-NFT"'
-D PIN_BUTTON=12
-D EC_PIN_RELAY_PROBE=35
-D EC_PIN_FREQ=38
-D EC_CALIBRATION_POLYNOM={93.96528045244023,-0.1442265098262804,8.016698711210758e-05,-1.1609651235703859e-08,5.945632995842434e-13}
-D EC_CALIBRATION_LINEARIZE_BELOW_ADC=3600
-D EC_CALIBRATION_LINEAR_LOWADC=452.71
-D EC_CALIBRATION_LINEAR_LOWEC=0
-D EC_REFERENCE_ADC=5782.9
-D FLOW_PIN=17
-D ONE_WIRE_BUS_PIN=18
-D THERMOMETER_ADDR_RESERVOIR={0x28,0xFF,0x6F,0x19,0x72,0x16,0x05,0x44}
-D THERMOMETER_ADDR_CASE={0x28,0xFF,0x64,0x0E,0x75,0x90,0xDE,0x02}
-D PIN_SDA=1
-D PIN_SCL=2
-D WATERLEVEL_OFFSET=470.0
-D WATERLEVEL_FACTOR=-1.0
-D RES_AREA=20*20*3.1416
-D WATERLEVELSENSOR_VL53L1X
-D ROISIZE_WIDTH=8
-D ROISIZE_HEIGHT=8
lib_deps =
https://github.com/milesburton/Arduino-Temperature-Control-Library/
https://github.com/emilv/ArduinoSort/
robtillaart/ADS1X15@^0.3.9
256dpi/MQTT@^2.5.2
pololu/VL53L1X@^1.3.1
adafruit/Adafruit NeoPixel

View file

@ -1,62 +1,100 @@
#include <Arduino.h>
#include <Wire.h>
bool valueError=false;
unsigned long last_check=0;
#include "wifi_functions.h"
bool debug=true; //print Serial information
bool debug=false; //print Serial information
bool mqtt=true;
bool eccalibrationoutput=false; //serial output for ec calibration
/* Write to file with:
sudo stty -F /dev/ttyUSB0 115200
cat /dev/ttyUSB0 | tee received.txt
falls nicht geht, vorher einmal kurz per screen verbinden
*/
bool valuesStabilized=false; //gets set true when values are stable (avaeraging arrays filled)
#include "helpfunctions.h"
#include "ADS1X15.h"
ADS1115 ADS(0x48);
// ######## Temperature
#include "temperature.h"
// ######## Water Level
#include "waterlevel.h"
// ######## EC
ADS1115 ADS(0x48);
bool adsenabled=true;
#include "ec.h"
// ######## Water Level
#include "waterlevel.h"
// ######## Flow Rate
#include "flow.h"
// ######## Soilmoisture
#include "soilmoisture.h"
//#include "soilmoisture.h"
#ifdef PIN_NEOPIXEL
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel pixels(1, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
#endif
unsigned long last_check=0;
bool valueError=false;
#define PIN_BUTTON 12
#define PIN_LED 13
void setup() {
pinMode(PIN_BUTTON,INPUT_PULLUP);
#ifdef PIN_LED
pinMode(PIN_LED,OUTPUT);
digitalWrite(PIN_LED,LOW);
#endif
#if defined(NEOPIXEL_POWER)
// If this board has a power control pin, we must set it to output and high
// in order to enable the NeoPixels. We put this in an #if defined so it can
// be reused for other boards without compilation errors
pinMode(NEOPIXEL_POWER, OUTPUT);
digitalWrite(NEOPIXEL_POWER, HIGH);
#endif
#ifdef PIN_NEOPIXEL
pixels.begin();
pixels.setBrightness(100); // not so bright
pixels.clear();
//Flash colors for debug
pixels.setPixelColor(0, pixels.Color(255, 0,0));
pixels.show();
delay(250);
pixels.setPixelColor(0, pixels.Color(0, 255,0));
pixels.show();
delay(250);
pixels.setPixelColor(0, pixels.Color(0, 0,255));
pixels.show();
delay(250);
pixels.clear();
pixels.show();
#endif
Serial.begin(115200);
if (mqtt) {
WiFi.begin(ssid, pass);
@ -65,18 +103,34 @@ void setup() {
connect();
}
Wire.begin(PIN_SDA,PIN_SCL);
Serial.print("I2C Clock Speed=");
Serial.println(Wire.getClock());
i2cscan();
Serial.println("Setup Waterlevel");
waterlevel_setup();
//init ADS1115
if (!ADS.begin()) {
Serial.println("Error:"); delay(2000); Serial.println("ADS1115 Init Error!");
if (mqtt){
publishInfo("error/general","ADS1115 Init Error");
}
adsenabled=false;
}
if (adsenabled){
ADS.setGain(0);
}
ADS.setGain(0);
Serial.println("Setup EC");
ec_setup();
Serial.println("Setup Waterlevel");
waterlevel_setup();
Serial.println("Setup Temperature");
temperature_setup();
@ -84,22 +138,28 @@ void setup() {
Serial.println("Setup Flow");
flow_setup();
/*
Serial.println("Setup Soilmoisture");
sm_setup();
*/
Serial.println("Finished Setup");
delay(200);
//Test adc to ec function output
/*
Serial.println();
for (int i=750;i<14183;i+=100) {
float _ec=ec_getECfromADC(i);
Serial.print(i); Serial.print(","); Serial.print(_ec); Serial.println();
if (eccalibrationoutput) {
Serial.println();
Serial.print("adc"); Serial.print(","); Serial.print("ec"); Serial.println();
for (int i=728;i<14000;i+=100) {
//float _ec=ec_getECfromADC(i);
float _ec=ec_getECfromADC(i, ec_calibration_polynom, sizeof(ec_calibration_polynom), ec_calibration_linearize_below_adc, ec_calibration_linear_lowADC, ec_calibration_linear_lowEC);
Serial.print(i); Serial.print(","); Serial.print(_ec); Serial.println();
}
Serial.println("Waiting 10 seconds because eccalibrationoutput is enabled");
delay(10000);
}
delay(100000);
*/
//Serial.println("time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted,EC,EC25");
@ -110,41 +170,108 @@ void setup() {
void loop() {
unsigned long loopmillis=millis();
enableTiming=true; //reactivate
ec_loop(loopmillis);
temperature_loop(loopmillis);
waterlevel_loop(loopmillis);
if (!ec_measurementRunning()){ //skip tof read when ec measurement running, because vlxx sensor reading takes quite long per cycle
waterlevel_loop(loopmillis);
}
flow_loop(loopmillis);
sm_loop(loopmillis);
//sm_loop(loopmillis);
static bool getReading=false;
if (!eccalibrationoutput && !digitalRead(PIN_BUTTON)) {
valueError=false;
Serial.println("Reset ValueError flag by user");
digitalWrite(PIN_LED,valueError);
delay(100);
if (!eccalibrationoutput) { //Is in normal operation mode
if (!digitalRead(PIN_BUTTON)) { //button pressed
valueError=false;
Serial.println("Reset ValueError flag by user");
#ifdef PIN_LED
digitalWrite(PIN_LED,valueError); //set led before delay to blink if error persists
#endif
#ifdef PIN_NEOPIXEL
pixels.setPixelColor(0, pixels.Color(255*valueError, 0,0));
pixels.show();
#endif
delay(100);
}
static bool last_valueError=true;
if (!valuesStabilized) { //if values are not okay since boot
#ifdef PIN_LED
digitalWrite(PIN_LED,(loopmillis/250)%2==0); //blink led
#endif
#ifdef PIN_NEOPIXEL
pixels.setPixelColor(0, pixels.Color(((loopmillis/250)%2==0)*255,((loopmillis/250)%2==0)*255,0));
pixels.show();
#endif
}else{ //LED shows valueError flag status when values were okay once
if (last_valueError!=valueError) { //update led if valueerror flag changed
last_valueError=valueError;
#ifdef PIN_LED
digitalWrite(PIN_LED,valueError);
#endif
#ifdef PIN_NEOPIXEL
pixels.setPixelColor(0, pixels.Color((loopmillis/250)%2==0,(loopmillis/250)%2==0,0));
pixels.show();
#endif
}
}
}
if (eccalibrationoutput && !digitalRead(PIN_BUTTON) && !getReading) {
getReading=true;
force_ec_measurement=true;
ec_flag_measurement_available=false;
digitalWrite(PIN_LED,HIGH);
if (eccalibrationoutput && !digitalRead(PIN_BUTTON) && !getReading) { //Calibration UI . Button Pressed
if (!isValueArrayOK(ec_calib_array,EC_CALIB_ARRAY_SIZE,EC_ADC_UNAVAILABLE)) { //Calibration Array filled?
for (uint8_t blink=0;blink<5;blink++) { //Error Blink
#ifdef PIN_LED
digitalWrite(PIN_LED,HIGH);
delay(100);
digitalWrite(PIN_LED,LOW);
delay(100);
#endif
#ifdef PIN_NEOPIXEL
pixels.setPixelColor(0, pixels.Color(0,0,255));
pixels.show();
delay(100);
pixels.setPixelColor(0, pixels.Color(0,0,0));
pixels.show();
delay(100);
#endif
}
}else{ //Calibration Array is ok, initiate ec reading
getReading=true;
force_ec_measurement=true;
ec_flag_measurement_available=false;
#ifdef PIN_LED
digitalWrite(PIN_LED,HIGH);
#endif
#ifdef PIN_NEOPIXEL
pixels.setPixelColor(0, pixels.Color(0,255,0));
pixels.show();
#endif
}
}
if (eccalibrationoutput && ec_flag_measurement_available && getReading) {
if (eccalibrationoutput && ec_flag_measurement_available && getReading) { //Calibration UI
ec_flag_measurement_available=false;
getReading=false;
#ifdef PIN_LED
digitalWrite(PIN_LED,LOW);
#endif
#ifdef PIN_NEOPIXEL
pixels.setPixelColor(0, pixels.Color(0,0,0));
pixels.show();
#endif
Serial.print(CLIENT_ID); Serial.print(",");
Serial.print(loopmillis); Serial.print(",");
Serial.print(tempCmean_reservoir); Serial.print(",");
Serial.print(ec_calib_adc); Serial.print(",");
@ -156,40 +283,91 @@ void loop() {
if (loopmillis>last_check+2000) { //check values
last_check=loopmillis;
if (tempCmean_air==DEVICE_DISCONNECTED_C || tempCmean_reservoir==DEVICE_DISCONNECTED_C || tempCmean_case==DEVICE_DISCONNECTED_C) {
bool _noErrorsDuringLoop=true;
if (tempCmean_reservoir==DEVICE_DISCONNECTED_C || tempCmean_case==DEVICE_DISCONNECTED_C) {
if (!valueError && valuesStabilized) { //error just appeared
if (tempCmean_reservoir==DEVICE_DISCONNECTED_C) {
Serial.println("valueError tempCmean_reservoir");
if (mqtt){
publishInfo("error/temperature","valueError tempCmean_reservoir");
}
}
if (tempCmean_case==DEVICE_DISCONNECTED_C) {
Serial.println("valueError tempCmean_case");
if (mqtt){
publishInfo("error/temperature","valueError tempCmean_case");
}
}
}
valueError=true;
_noErrorsDuringLoop=false;
}
/*
if (sm_mean1==SM_DISCONNECTED || sm_mean2==SM_DISCONNECTED) {
valueError=true;
}
}*/
if (ec==EC_UNAVAILABLE){
if (!valueError && valuesStabilized) { //error just appeared
if (ec==EC_UNAVAILABLE){
Serial.println("valueError ec");
if (mqtt){
publishInfo("error/ec","valueError ec");
}
}
}
valueError=true;
_noErrorsDuringLoop=false;
}
if (!eccalibrationoutput) {
digitalWrite(PIN_LED,valueError);
if (distance_unsuccessful_count>20) {
if (!valueError && valuesStabilized) { //error just appeared
Serial.println("valueError distance");
if (mqtt){
publishInfo("error/waterlevel","valueError distance");
}
}
valueError=true;
_noErrorsDuringLoop=false;
}
if (_noErrorsDuringLoop && !valuesStabilized) {
valuesStabilized=true; //gets only set to true once
valueError=false; //clear error flag once after boot
Serial.println("Values Stable, clear error flag");
}
if (debug) {
Serial.println("_______________________");
Serial.print(millis()/1000.0,2); Serial.println(":");
Serial.print("temperature reservoir,air = ");
Serial.print(tempCmean_reservoir); Serial.print(","); Serial.print(tempCmean_air);
Serial.print("temperature reservoir = ");
Serial.print(tempCmean_reservoir);
Serial.println();
Serial.print("temperature case = ");
Serial.print(tempCmean_case);
Serial.println();
/*
Serial.print("sm_mean 1,2,3 = ");
Serial.print(sm_mean1); Serial.print(",");
Serial.print(sm_mean2); Serial.print(",");
Serial.print(sm_mean3);
Serial.println();
*/
/*
Serial.print("sm_mean 1,2,3 = ");
@ -223,16 +401,17 @@ void loop() {
Serial.print(ec25);
Serial.println();
Serial.print("Waterlevel,Volume = ");
Serial.print("distance,Waterlevel,Volume = ");
Serial.print(distance); Serial.print(",");
Serial.print(waterlevel); Serial.print(",");
Serial.print(watervolume);
Serial.print(watervolume); Serial.println();
Serial.println();
}
@ -245,12 +424,10 @@ void loop() {
if (tempCmean_reservoir!=DEVICE_DISCONNECTED_C) {
publishValueTimed("temperature/reservoir",tempCmean_reservoir,2,timing_temperature_reservoir,loopmillis);
}
if (tempCmean_air!=DEVICE_DISCONNECTED_C) {
publishValueTimed("temperature/air",tempCmean_air,2,timing_temperature_air,loopmillis);
}
if (tempCmean_case!=DEVICE_DISCONNECTED_C) {
publishValueTimed("temperature/case",tempCmean_case,2,timing_temperature_case,loopmillis);
publishValueTimed("case/temperature",tempCmean_case,2,timing_temperature_case,loopmillis);
}
/*
if (sm_mean1!=SM_DISCONNECTED) {
publishValueTimed("soilmoisture/sm1",sm_mean1,3,timing_soilmoisture_sm1,loopmillis);
}
@ -260,9 +437,22 @@ void loop() {
if (sm_mean3!=SM_DISCONNECTED) {
publishValueTimed("soilmoisture/sm3",sm_mean3,3,timing_soilmoisture_sm3,loopmillis);
}
*/
publishValueTimed("flow/flow",flow,2,timing_flow,loopmillis);
static float last_flow=0;
if (valuesStabilized){
if (flow==0.0 && last_flow!=flow) {
publishValueTimedOverride("flow",flow,2,timing_flow,loopmillis); //publish without waiting if flow is 0
}else{
publishValueTimed("flow",flow,2,timing_flow,loopmillis);
}
last_flow=flow;
}
if (waterlevel!=WATERLEVEL_UNAVAILABLE) {
bool _published=publishValueTimed("waterlevel/height",waterlevel,2,timing_waterlevel,loopmillis);
if (_published) { //use height for timing. send calculated volume with it
@ -271,14 +461,19 @@ void loop() {
}
if (ec_flag_measurement_available){
ec_flag_measurement_available=false;
if (ec_adc!=0) {
publishValue("ec/adc",ec_adc,0);
}
if (ec_calib_adc!=0) {
publishValue("ec/eccalibadc",ec_calib_adc,0);
}
//Probe A
if (ec_adc!=0) {
publishValue("ec/adc",ec_adc,0);
}
if (ec_adc_adjusted!=0) {
publishValue("ec/adcadjusted",ec_adc_adjusted,0);
}
@ -287,6 +482,7 @@ void loop() {
publishValue("ec/sc",ec25,0);
}
}
/*
@ -305,13 +501,6 @@ void loop() {
}*/
}
}
}