From 0761918e6069b713c7111eb38acf67ffde38284d Mon Sep 17 00:00:00 2001 From: Ethan Lewis Date: Tue, 12 Nov 2024 21:26:32 -0500 Subject: [PATCH] New pump control --- .DS_Store | Bin 10244 -> 10244 bytes Arduino to Pi Testing/.DS_Store | Bin 8196 -> 10244 bytes .../pump_primer.ino/pump_primer.ino.ino | 68 ++++++++++++ .../wired_to_pi/.DS_Store | Bin .../wired_to_pi/wired_to_pi.ino | 0 .../wired_to_pi_no_PMP3.ino | 101 ++++++++++++++++++ Engine/.DS_Store | Bin 6148 -> 6148 bytes Engine/wired_to_pi_v5/.DS_Store | Bin 0 -> 6148 bytes 8 files changed, 169 insertions(+) create mode 100644 Arduino to Pi Testing/pump_primer/pump_primer.ino/pump_primer.ino.ino rename {Engine => Arduino to Pi Testing}/wired_to_pi/.DS_Store (100%) rename {Engine => Arduino to Pi Testing}/wired_to_pi/wired_to_pi.ino (100%) create mode 100644 Arduino to Pi Testing/wired_to_pi_no_PMP3/wired_to_pi_no_PMP3/wired_to_pi_no_PMP3.ino create mode 100644 Engine/wired_to_pi_v5/.DS_Store diff --git a/.DS_Store b/.DS_Store index 813e27a63ac6908aad4fd1f52fe0e043fa9f7e90..0c7ec6b3c7a48faa857712b6f897a5d32d77f424 100644 GIT binary patch delta 250 zcmZn(XbIS$CJ?K2g@J*Ag+Y%YogtHS16IIIy`{;4Kr|#x+2W=;RLqQj;eL%kX3}y?Crt1U45YC^Wf7nhR4RK}cZo zIZ<9FMuEwWLi&@xN%LeSftU*u6q;Nk&BKKzoFF7H z`J5;pWCd{rmWGKyhKslYT48w;ng zPi)}b%+A5W!6?4@lYlJKWKA)}&0J!8Sp}JaDu6(O8%Vf)1{rx|Pj diff --git a/Arduino to Pi Testing/pump_primer/pump_primer.ino/pump_primer.ino.ino b/Arduino to Pi Testing/pump_primer/pump_primer.ino/pump_primer.ino.ino new file mode 100644 index 0000000..de6f8a1 --- /dev/null +++ b/Arduino to Pi Testing/pump_primer/pump_primer.ino/pump_primer.ino.ino @@ -0,0 +1,68 @@ +#include +#include + +// Define the pumps +Ezo_board PMP1 = Ezo_board(56, "PMP1"); // pH up +Ezo_board PMP2 = Ezo_board(57, "PMP2"); // pH down +Ezo_board PMP3 = Ezo_board(58, "PMP3"); // Nutrient pump + +// Track the state of each pump +bool pmp1_running = false; +bool pmp2_running = false; +bool pmp3_running = false; + +void setup() { + Serial.begin(9600); + Wire.begin(); + Serial.println("Enter pump number (1, 2, or 3) to toggle it on/off."); +} + +void loop() { + if (Serial.available() > 0) { + char command = Serial.read(); + + switch (command) { + case '1': // Toggle PMP1 + if (!pmp1_running) { + PMP1.send_cmd("d,100"); // Start PMP1 with indefinite dispensing rate + pmp1_running = true; + Serial.println("PMP1 ON"); + } else { + PMP1.send_cmd("d,0"); // Stop PMP1 + pmp1_running = false; + Serial.println("PMP1 OFF"); + } + break; + + case '2': // Toggle PMP2 + if (!pmp2_running) { + PMP2.send_cmd("d,100"); // Start PMP2 with indefinite dispensing rate + pmp2_running = true; + Serial.println("PMP2 ON"); + } else { + PMP2.send_cmd("d,0"); // Stop PMP2 + pmp2_running = false; + Serial.println("PMP2 OFF"); + } + break; + + case '3': // Toggle PMP3 + if (!pmp3_running) { + PMP3.send_cmd("d,100"); // Start PMP3 with indefinite dispensing rate + pmp3_running = true; + Serial.println("PMP3 ON"); + } else { + PMP3.send_cmd("d,0"); // Stop PMP3 + pmp3_running = false; + Serial.println("PMP3 OFF"); + } + break; + + default: + Serial.println("Invalid input. Enter 1, 2, or 3 to toggle a pump."); + break; + } + } + + delay(100); // Short delay to avoid rapid serial checks +} \ No newline at end of file diff --git a/Engine/wired_to_pi/.DS_Store b/Arduino to Pi Testing/wired_to_pi/.DS_Store similarity index 100% rename from Engine/wired_to_pi/.DS_Store rename to Arduino to Pi Testing/wired_to_pi/.DS_Store diff --git a/Engine/wired_to_pi/wired_to_pi.ino b/Arduino to Pi Testing/wired_to_pi/wired_to_pi.ino similarity index 100% rename from Engine/wired_to_pi/wired_to_pi.ino rename to Arduino to Pi Testing/wired_to_pi/wired_to_pi.ino diff --git a/Arduino to Pi Testing/wired_to_pi_no_PMP3/wired_to_pi_no_PMP3/wired_to_pi_no_PMP3.ino b/Arduino to Pi Testing/wired_to_pi_no_PMP3/wired_to_pi_no_PMP3/wired_to_pi_no_PMP3.ino new file mode 100644 index 0000000..f4c9783 --- /dev/null +++ b/Arduino to Pi Testing/wired_to_pi_no_PMP3/wired_to_pi_no_PMP3/wired_to_pi_no_PMP3.ino @@ -0,0 +1,101 @@ +#include +#include + +// Define the sensors and pumps +Ezo_board PH = Ezo_board(99, "PH"); +Ezo_board EC = Ezo_board(100, "EC"); +Ezo_board RTD = Ezo_board(102, "RTD"); +Ezo_board PMP1 = Ezo_board(56, "PMP1"); // pH up +Ezo_board PMP2 = Ezo_board(57, "PMP2"); // pH down + +// Thresholds for pump control +float PH_LOWER_LIMIT = 5.5; +float PH_UPPER_LIMIT = 6.5; +float EC_LOWER_LIMIT = 1000.0; +float EC_UPPER_LIMIT = 2000.0; +float PUMP_DOSE = -0.5; // Example dose + +void setup() { + Serial.begin(9600); + Wire.begin(); + Serial.println("Arduino Ready"); // Signal that Arduino is ready +} + +void loop() { + if (Serial.available() > 0) { + char command = Serial.read(); + if (command == 'R') { // 'R' for Read sensors + poll_sensors(); + } + else if (command == 'P') { // 'P' for Pump control + control_pumps(); + } + } + delay(100); // Small delay for stability +} + +// Function to read and print sensor values +void poll_sensors() { + float ph_value = read_ph(); + float ec_value = read_ec(); + float temp_value = read_temp(); + + Serial.print("pH: "); Serial.println(ph_value); + Serial.print("EC: "); Serial.println(ec_value); + Serial.print("Temperature: "); Serial.println(temp_value); +} + +// Function to control pumps based on thresholds +void control_pumps() { + float ph_value = read_ph(); + + // pH control logic + if (ph_value < PH_LOWER_LIMIT) { + Serial.println("pH below limit. Triggering PMP1..."); + PMP1.send_cmd_with_num("d,", PUMP_DOSE); // Dispense pH up + } else if (ph_value > PH_UPPER_LIMIT) { + Serial.println("pH above limit. Triggering PMP2..."); + PMP2.send_cmd_with_num("d,", PUMP_DOSE); // Dispense pH down + } else { + Serial.println("pH is within range."); + } +} + +// Function to read pH value +float read_ph() { + char sensordata_buffer[32]; + PH.send_read_cmd(); + delay(1000); // Wait for sensor response + if (PH.receive_cmd(sensordata_buffer, sizeof(sensordata_buffer)) == Ezo_board::SUCCESS) { + return String(sensordata_buffer).toFloat(); + } else { + Serial.println("Error reading pH sensor."); + return -1; + } +} + +// Function to read EC value +float read_ec() { + char sensordata_buffer[32]; + EC.send_read_cmd(); + delay(1000); + if (EC.receive_cmd(sensordata_buffer, sizeof(sensordata_buffer)) == Ezo_board::SUCCESS) { + return String(sensordata_buffer).toFloat(); + } else { + Serial.println("Error reading EC sensor."); + return -1; + } +} + +// Function to read Temperature value +float read_temp() { + char sensordata_buffer[32]; + RTD.send_read_cmd(); + delay(1000); + if (RTD.receive_cmd(sensordata_buffer, sizeof(sensordata_buffer)) == Ezo_board::SUCCESS) { + return String(sensordata_buffer).toFloat(); + } else { + Serial.println("Error reading Temperature sensor."); + return -1; + } +} \ No newline at end of file diff --git a/Engine/.DS_Store b/Engine/.DS_Store index e0d30ac3bc0ca91e8f82460b1ea7ae2afaab2ee9..6fde80e10c8b571cf84eb0f018a9d6b76cd32aae 100644 GIT binary patch delta 99 zcmZoMXfc@J&&a(oU^g=(_hcTHzmxUZWhV=;+e{8)JwEv}o9tvCc0MMR{>c;Al_uA* zbFnZmG)$X(fL&$s26i48$B4;*Ve$ty1)j3tqP(2^ymSTz2F8hnZ#T1Z{N)D#=Vu<0 delta 255 zcmZoMXfc@J&nU1lU^g?Pz+@hlzl_|I``E-3Jah7slXCKt7#J7?7#J93fwbO#FaWX` z7{H1qC$S!fC>O~|Hw;eB&n*B;GN?1blt|>}ySPBj;b35B=x)k5=7=Pj0+(F=l|$oO z076ovAOqP*1CYsJTY1WYi}G^v^U{F=jFb1VDNI&lwVCY3#>d3d4dMzQTe-<^>D0-) Z*i-GrN&MfuQzKRnd+#`^K{~-t4n>CQC%BHIBE4>O|y087t2)+#@{CIwvdE zQw1t{M@${cNn;$$MLUOMz%lT@F~Dc{B^8v=ka~3c{3bZXC-iPV)rV24BgAo$_y~P- zEduM2+^850Z0=<=NRv_CX#7?ytCc5Dt6tSx^L~WKx(M@bJ|4BY!*BfbS?e^K+1=<% z(knXkS9?0kyGhm?N2Vg1BsVk@Ud^j@>Kl_ubGNbSZ|^jxoBrf| z6ZX#b?sQu7)?dHfE9P|J8hsuAan9iQ_V40Pw|I?{aG0e!J3`!y3(j$}ybRdy?5!>D7TwMq1CD{e zWPs~~4`mE2mIkGCV2~>SumZOTZ0R*XpB=!!VrdW_h%%`_ld9|$Lz#5=eH#~8EDf4; zQnE7MV^>!8hN5J3_EZkT-6Z$q7;p?M6$7f$4%;nk z$@bQ{&2g{wp+BK499J5Y6b!Z