Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: KellerDruck_pressure PID PWM-Coil-driver Sensirion_SF04 VL6180
Fork of TestBenchFlow by
Revision 1:d58df8cb271d, committed 2017-07-20
- Comitter:
- dmwahl
- Date:
- Thu Jul 20 20:45:27 2017 +0000
- Parent:
- 0:67debf2ccbc2
- Child:
- 2:471261505b2b
- Commit message:
- Shutoff valve triggers when pot1 > 0.1
Changed in this revision
--- a/PWM-Coil-driver.lib Fri Jul 07 20:52:31 2017 +0000 +++ b/PWM-Coil-driver.lib Thu Jul 20 20:45:27 2017 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/users/dmwahl/code/PWM-Coil-driver/#3dab9e2441e3 +https://developer.mbed.org/users/dmwahl/code/PWM-Coil-driver/#e8395448fc8b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/VL6180.lib Thu Jul 20 20:45:27 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/sburg/code/VL6180/#190457e8c69e
--- a/main.cpp Fri Jul 07 20:52:31 2017 +0000
+++ b/main.cpp Thu Jul 20 20:45:27 2017 +0000
@@ -17,10 +17,10 @@
pump.period(.001); // 1kHz PWM
pump = 0;
ledGrn.period(.001);
-
+
InterruptIn pumpTach(pumpTachPin);
pumpTach.rise(&pumpTachTrigger);
-
+
pump_control_PID.setInputLimits(pumpMinPSI, pumpMaxPSI);
pump_control_PID.setOutputLimits(0.0, 1.0); // Output is a PWM signal ranging from 0-1
pump_control_PID.setMode(AUTO_MODE);
@@ -75,6 +75,29 @@
}
}
+void update_level()
+{
+ Timer timer;
+ timer.start();
+ while (true) {
+ i2c1_m.lock();
+ timer.reset();
+ agentlevel = (float)level;
+ int wait = (1000 - timer.read_ms());
+ i2c1_m.unlock();
+ Thread::wait(wait);
+ }
+}
+
+//float get_level()
+//{
+// i2c1_m.lock();
+// float value = (float)level;
+// i2c1_m.unlock();
+// return value;
+//}
+
+
void print_process_values()
{
//Thread::wait(100); // Wait initially to allow sensors to update, prevents a zero reading from going to serial
@@ -89,8 +112,11 @@
((float)sfm7033.flow.i16 / sfm7033.scaleFactor.u16), sfm7033.flowUnitStr, (double)pot1*18, ((double)pot2-.002)*pumpMaxPSI);*/
pc.printf("%.02fkPa %.02fpsi %.02fC %.02fF %02X %.2f%% %.0fRPM %u %.0f %s %.1f %.3f\r\n",
- pumpPressure.pressureKPA, pumpPressure.pressurePSI, pumpPressure.temperatureC, pumpPressure.temperatureF, pumpPressure.status, pump.read()*100, pumpRpm, sfm7033.flow.u16, (((float)sfm7033.flow.i16 / 2) / sfm7033.scaleFactor.u16), sfm7033.flowUnitStr, (double)pot1*18, ((double)pot2)*pumpMaxPSI);
+ pumpPressure.pressureKPA, pumpPressure.pressurePSI, pumpPressure.temperatureC, pumpPressure.temperatureF, pumpPressure.status, pump.read()*100, pumpRpm,
+ sfm7033.flow.u16, (((float)sfm7033.flow.i16 / 2) / sfm7033.scaleFactor.u16), sfm7033.flowUnitStr,
+ (double)pot1*18, ((double)pot2)*pumpMaxPSI);//, agentlevel;
int wait = (1000 - timer.read_ms());
+
stdio_m.unlock();
Thread::wait(wait);
}
@@ -110,15 +136,37 @@
lcd.locate(0, 0);
lcd.printf("%.2f slpm AA: %.1f", flow, (double)pot1*18);
lcd.locate(0, 14);
- lcd.printf("PV: %.0f", pumpPressure.pressurePSI);
+ lcd.printf("PV: %.1f", pumpPressure.pressurePSI);
lcd.locate(64, 14);
- lcd.printf("SV: %.0f", ((double)pot2)*pumpMaxPSI);
+ lcd.printf("SV: %.1f", ((double)pot2)*pumpMaxPSI);
int wait = (1000 - timer.read_ms());
stdio_m.unlock();
Thread::wait(wait);
}
}
+void update_shutoff()
+{
+ Timer timer;
+ timer.start();
+ while (true) {
+ float threshold = 0.1;
+ timer.reset();
+ if((double)pot1 < 0.05) {
+ shutoff.off();
+ pc.printf("shutoff off\r\n");
+ //Thread::wait(1000);
+ }
+ if((double)pot1 >= 0.1) {
+ shutoff.on();
+ pc.printf("shutoff on\r\n");
+ //Thread::wait(1000);
+ }
+ int wait = (200 - timer.read_ms());
+ Thread::wait(wait);
+ }
+}
+
// main() runs in its own thread in the OS
int main()
{
@@ -129,6 +177,11 @@
pc.printf("Year: %d Month: %d Day: %d Mode: %d\r\n", pumpPressure.year, pumpPressure.month, pumpPressure.day, pumpPressure.mode);
pc.printf("Status: 0x%x\r\n", pumpPressure.getStatus());*/
+
+ // Thread to turn shutoff valve on/off
+ update_shutoff_t.set_priority(osPriorityHigh);
+ update_shutoff_t.start(update_shutoff);
+
// Thread to poll pressure sensors
update_pressures_t.set_priority(osPriorityNormal);
update_pressures_t.start(update_pressures);
@@ -137,6 +190,10 @@
update_airflow_t.set_priority(osPriorityNormal);
update_airflow_t.start(update_airflow);
+ // Thread to poll level sensor
+ //update_level_t.set_priority(osPriorityIdle);
+ //update_level_t.start(update_level);
+
// Thread to update lcd
update_lcd_t.set_priority(osPriorityIdle);
update_lcd_t.start(update_lcd);
@@ -145,10 +202,14 @@
print_process_values_t.set_priority(osPriorityLow);
print_process_values_t.start(&print_process_values);
-
-
while (true) {
//pc.printf("%.02fkPa %.02fpsi %.02fC %.02fF\r\n", pumpPressure.pressureKPA, pumpPressure.pressurePSI, pumpPressure.temperatureC, pumpPressure.temperatureF);
+ /*shutoff.on();
+ pc.printf("shutoff on\r\n");
+ Thread::wait(1000);
+
+ shutoff.off();
+ pc.printf("shutoff off\r\n");*/
Thread::wait(1000);
}
}
--- a/main.h Fri Jul 07 20:52:31 2017 +0000 +++ b/main.h Thu Jul 20 20:45:27 2017 +0000 @@ -6,6 +6,11 @@ #include "sensirion_sf04.h" #include "PID.h" #include "coil-driver.h" +#include "VL6180.h" + +Coil shutoff(PE_5, 5000, 40, 6); // Shutoff valve driven by pin PE_12, 5ms spike time, 25kHz PWM at 15% duty cycle +//Coil injector(PE_14, 200, 40, 3); // Injector valve driven by pin PE_14, 200us spike time, 25kHz PWM at 7.5% duty cycle + // Mbed application shield display #include "C12832A1Z.h" @@ -40,7 +45,7 @@ #define pumpCtrlPin PE_10 // Pump control (white wire) // End Liquid pump defines -Thread print_process_values_t, update_pressures_t, update_airflow_t, update_lcd_t; +Thread print_process_values_t, update_pressures_t, update_airflow_t, update_level_t, update_lcd_t, update_shutoff_t; Mutex i2c1_m, i2c2_m, stdio_m; //DigitalOut myled(LED2); @@ -81,4 +86,8 @@ PwmOut ledRed(PE_11); PwmOut ledGrn(PD_15); DigitalOut ledBlu(PF_12); + +// Level sensor +VL6180 level(i2c1); //I2C object +float agentlevel = 0; #endif \ No newline at end of file
