Did anything ever come of this effort?
9
Topic says it all.
|
Arduino Alternatives
15
Erich Shulz mentioned in message #2131 that pairing an arduino with a laptop could improve UI performance. I think laptops, or expanded computing options in general is worth further consideration for future models so I decided to move it to its own topic. To start with, I want to say this is a discussion for future design, not a critique of the current design. I believe the current arduino based system is the best answer to the original design goal of a rapidly designed, rapidly built, and rapidly deployed system which was inexpensive and didn't impinge on the already strained medical supply chain. Improved processing power is something I've been thinking about from the beginning. The current design with the arduino has many limitations, however, it does what it was designed to do. From what I've seen, our device provides the best balance of performance vs simplicity and cost. I don't know of any other system that provides nearly the same functionality while still being build-able from home. Though as others have suggested, there's no reason to settle on one system, there is no one size fits all. For the sake of discussion, I'll outline my thoughts on the subject here Erich, I agree that using a laptop would provide vastly more computing power, but would be a much more expensive and complex system. It also begs the question, why bother with an arduino at all? If you have a laptop connected, we just run everything off that? Another possibility is to include the code for laptop interface in the arudio and let the user decide whether or not to use it. It's something to investigate as the software evolves. One concern I have up front is the fact that connecting or disconnecting a serial device (such as a laptop) automatically reboots the arduino which could be a problem if the laptop is ever disconnected or fell asleep etc. Another possibility that has been brought up here and with other groups is a raspberry pi (RPi), either alone or pared with an Arduino. The Pi Zero can be obtained for around $5 US and has virtually all the capabilities of a laptop including keyboard and mouse support, usb input/output, wifi, bluetooth, HDMI output, and well designed and documented touch screen comparability. I have a personal remote data cloud and ad blocking server running on a Pi zero in my home, they're amazing little devices. And they run on 5v just like the Arduino. However, the programming is a bit more complex, and since it's an actual computer running linux there are many background and underlying processes that need to be taken into account as they could lead to instability. The programming considerations are greater than simple arduino/C++ coding. Additionally, since it's running an OS, it must be shut down properly to avoid system corruption. That being said, there are small relatively cheep hardware systems that can detect loss of mains power and then use a battery to keep the Pi running long enough to properly shut down. This could be a standalone system, or tied into the battery backup already implemented in the current vent design. There were also questions early on about RPi's availability and supply chain. I think for these reasons and others, it made sense to avoid RPi's for the first round, but I think they're a great candidate for V2. I'm also curious what impact a paired computer be it laptop or RPi would have on the arduino speed. Moving the heavy processing off the arduino would obviously help, but on the other hand, serial communication is a bit slow and becomes blocking if the buffer is overloaded. So the process of moving data off the arduino might cause more delays than it fixes. Another option is the use of a more powerful and/or dual core project board. For example ESP-32 boards are about the same price as arduino nanos but include two cores, each far more powerful than the nano's atmega280. They can be programmed with arduino IDE and use very similar code functions. It could be possible to dedicate one core to vent functions and the other to display/io functions. However, dual core programming adds a whole new level of complexity in design, and might make it less accessible as fewer users will be able to understand/modify the code if needed. These are just my thoughts as a hobbyist, I'm curious to hear what others think. Particularly professional programmers. Steve S
|
System cost vs LCD
5
#pcbdesign
The LCD is the most expensive part on the PCB by a fair margin. Has anyone looked at replacing it for lower-cost users with seven-segment and/or discrete LEDs? Is there a spec for what data is required to be displayed? Stay well! Steve
|
updates?
4
Hi Gordon et al, This list has gone a bit quiet. I hope everything is going well. I had been watching progress with great interest! I thought you may be interested that Robert Read and I just had a brief letter accepted (in press shortly) in Anaesthesia on specification of ventilator dynamic response. One of the notable features of your design is that it does not suffer from this common flaw we identified in other approaches. Robert and I are working on a couple of other projects that may interest you. The Public Invention team are starting to work on software to make VentMon into a potentially life saving device initially through simple conventional approaches (ie reproducing existing commercial hardware characteristics), and possibly thereafter with more advanced speculative features encapsulating expert knowledge. They've already got the device in use by some teams working on other ventilator designs and they have telemetry working out of the box. Now things have ?? settled down on your basic design I'd welcome communicating with others around the project of making high quality monitors. At a minimum it would be great to get some peer-review of the minimum specification, but thoughts on possible advanced features would be great too. We're also pursuing some more theoretical models and characterisation of ventilator performance, but this may be less relevant to your solenoid based design. Regardless there is much to be published out of all this activity. Erich Schulz, mbbs, mba, fanzca 0410 277 408
|
Integrated board
15
#pcbdesign
Attached are files for an integrated board, the original unit plus the transducer board, plus many of the various fixes (e.g. the voltage divider for the battery). I also added a voltage divider for the AC supply so that the Arduino can monitor it. One change for assembly ease is that there are only five resistor values, and each is a distinct size (by power rating). Yeah, the 47 ohm resistors are crazy large, but still cheap. Everything is through-hole. The diodes are also unique by size and markings (mostly bidir, one unidir). Because this is intended to be built in places where currently available PCB technology is rather primitive, it's drawn at 30mil/30mil trace/space (not a typo). I think they are printing masks with a laser or inkjet printer and manually aligning them on both sides of the board. I don't want to know how they are doing the drills... Some of the pads are also odd to maintain 30mil spacing. It's pretty crazy, but it's what they asked for. Silkscreen, assembly and fab notes TBD. I have another version coming that also includes an Uno as an alternate processor in case Nanos get short in stock. Stay well!
|
FDA Approval
323
To fill everyone in on the crucial regulatory aspects of this design in the United States: The team at UF has received materials from the FDA outlining their regulatory and testing requirements. The FDA is loosening their requirements JUST FOR THE PERIOD OF COVID19 THERAPY -- and the team at UF has not fully digested the FDA information but they have people working on it. So they are on top of THAT aspect as well. Thanks, Gordon Gibby
|
Transducer board // power supply
8
I had to make a board to hold the transducers (depending on WHICH ONES YOU HAVE AVAIABLE) -- adafruit and a chinese clone of the BMx280 And then I learned I had to have a battery bckup/switchover. So I built a prototype circuit for that. Needs about 14-15 VDC from AC powered supply Shottky diodes switch to whichever supply is best. LED's inform you which one is providing Approx 60 mA trickle charging for a 3AHr sealed let acid, which should run this board for half a day. With a charged marine 12V battery you should be able to go a week. Gordon
|
Interview with Gordon
All: This is a good interview with Gordon and he presents an excellent overview of the project. You can see it, starting at 5:45 into the video at: Ham Nation 454 Val Presents The CQ DX Hall Of Fame Awards! | TWiT.TV Jack, W8TEE
|
#Russian Ventilator News
2
#russian
https://play.stuff.co.nz/details/_6156335684001?cid=facebook.post&fbclid=IwAR3qe7p0mXgi6_OmODDVYBNNuA1pLsrrWuAopxQWAlft80E3brviveie9sY _._
|
Software Development
8
Hey team, I noticed that updated software releases were being posted throughout other topics so I created a separate topic just for software edits and discussion to keep it somewhat organized. I have two updates here. The first is VentCodeVer120_JacksInit. This is Gordons VentCodeVer120 with Jacks additions to reduce blocking during sensor initialization. These are great edits that were overlooked when Jack first sent it around. THANKS JACK! The second file, VentCodeVer120_SDS is Gordons VentCodeVer120 with many of my past edits outlined in the beginning of the file as well as some new ones. New edits - Rearranged the LCD menu so similar options are grouped. IE Assist on/off and assist trigger pressure. - I made some small alterations to speed up the i2c flow sensor measurement code. These change how the sensor is read, NOT how the readings are interpreted. In short, the original code subroutine stared a new measurement then waited to read it. The new subroutine starts a new measurement, lets the loop continue while the measurement occurs in the background, then retrieves the reading on the next run through the subroutine. Details for those who care: The AllSensors library has two primary commands StartMeasurement() and ReadData(). StartMeasurement sends the command to the sensor package to take a reading which is then held until the ReadData() command is issued to retrieve the reading. The ReadData() command can be passed the bool variables true or false. ReadData(true) checks for a reading and waits (blocking) until a reading is available. ReadData(false) just skips it if a reading isn't available. The original code for reading the sensor used a for loop to StartMeasurement() and ReadData(true) three times, then average the readings. Each run through the loop blocked for about 10ms while it waited for the reading, a total of about 30ms. However, the sensor package can take and average multiple readings within the package itself, independent from the arduino. So rather than using a for loop to make a request, await the data, and tally it on the arduino, I eliminated the for loop and instead send the command StartMeasurement(0xAD) (note the 0xAD) which takes and averages 4 measurements within the sensor package offloading it from the arduino. Then, instead of starting a measurement, waiting for it, then retrieving it each time through the ReadI2CFlowPressureSensor() subroutine, I reversed the order. The first StartMeasurement() command is called from vent_slice() at the start of exhalation. The ReadI2CFlowPressureSensor() subroutine has ReadData() first followed by StartMeasurement(). This way subroutine retrieves the waiting reading, initiates another reading, then exits the subroutine to allow the arduino to keep working. Steve S
|
I2C Display Blocking
18
I've been doing some testing of the impact of various parts of the code on the loop rate and it appears that using I2C displays slows the code substantially. When using I2C display the loop time is aprox 25ms with the vent off and jumps up to 250-300ms when the vent is running. Using the standard interface, the loop time is aprox 2ms with the vent off and 25ms with the vent on. The numbers are about the same regardless of display size. I've tested two i2c libraries with the same results. There is a third that is supposed to be faster which I will be testing this evening, but at this point I think we need to avoid using i2c for display, it's just too slow. Of note, I haven't yet found any other factors that substantially impact speed, including changing from the ssense to adafruit bmp280 libraries Steve S
|
#flowsensor
9
#flowsensor
Hey team, my transducer board just arrived, time to get my flow sensor up and running. Does anyone have the dimensions for the flow sensor with the 200pa sensor. There was lots of discussion about details early on, but haven't seen the final plans. What is the orifice diameter? Are we still seating it in a 1" diameter PVC or just the 3/4"? Are the taps right next to the orrifice plate or are we doing the 2 diameters upstream and 8 diameters downstream? Thanks Steve S
|
I2C addressing conflict.
26
Gordon, and others... I just took a look at the Bosch datasheet for the 280 type pressure sensors. That document shows that these sensors are micro-power devices. This means that they can be enabled or disabled by powering them with a port on the Arduino. Set the port HIGH and the device will reset and can be polled for measurement. Set the port LOW and the device is not powered and will not respond on the I2C bus. This may provide a way to add multiple 280 type pressure sensors and poll them on an as-needed basis. Arv _._
|
Barometric pressure corrections
51
I think there's a problem with the way we're assessing airway pressure if the vent is going to be used for more than a few hours. Since the airway pressure sensors are absolute sensors, the measurement has to be corrected for the atmospheric pressure but the atmospheric pressure is only measured on vent startup. I'm concerned that measurement at a single time point won't be sufficient since weather substantially influences atmospheric pressure. Additionally, ambient pressure could change if a patient is moved in or out of a negative pressure room. As an example, according to NOAA the atmospheric pressure at the Minneapolis airport dropped by 0.45inHg (from 30.14inHg to 29.69inHg) over the past three days, that's over 15cm H2O. I think the best way to address this is to replace the BMx 180/280 with a differential pressure sensor with one port connected to the airway and the other port open to the atmosphere. An alternative would be to add a second BMx 180/280 sensor outside the airway to measure atmospheric pressure. Steve S
|
#BMP280 senses both pressure and temperature
#bmp280
The BMP-280 sensor from Bosch is capable of sensing both pressure and temperature. This could be a means to get around earlier complaints that it is inaccurate until it is operating at recommended temperature. Readings of pressure could be adjusted by a temperature versus pressure offset algorithm or table. https://www.adafruit.com/product/2651 Having temperature information readily available might also be useful to provide temperature based offsets for other parts of the ventilator. Since this device is capable of either I2C or SPI operation it does lend itself to operation on a separate bus from other I2C based sensors. In fact the Bosch datasheet does say it is for use on an SPI bus system. This caught my attention because it might be used to correct air path humidity sensor readings for ambient temperature. There are 3 modes of operation for the BMP280, idle mode, periodic sampling mode, and continuous sampling mode. This is interesting because the periodic sampling mode might alleviate one person's complaint that the device has to "warm up" to increase accuracy of pressure measurements. https://www.digikey.com/en/datasheets/bosch-sensortec-bst-bmp280-ds001-19 The datasheet indicates that there are some constraints regarding power to the digital side of things versus power to the analog section. These would have to be taken into consideration if power control is used to disable a BMP280 so that more than two of these devices could operate on one data bus. I was not aware of this when I made my earlier suggestion to turn power off for unwanted devices on a shared bus. But, the constraints are not so serious as to make the idea a non-starter. Arv _._
|
Hi
Hi Martin, your project sounds very worthwhile. Happy to try to help. Sorry I don't have sensor data myself but but Robert Read may be able to give you some pointers. I've also cc'ed your email to the University of Florida group who may have some sensor data for you. Volume 3 of my document does link to singe papers that illustrate various observed patterns.
|
Mechanical ventilator making
3
Query 1:I write a code http://tiny.cc/r85xnz but problem is serial output not giving constant length string although I have fixed the string length.What should I change it to produce proper and constant length string. Query 2:How can I read sensor data and controlling servo independently. In this code When servo delayed ,the sensor no read the data or printing.I also tried to using timer0 and timer1 as servo using timer1 but code did not work.Any hint or suggestion would be appreciated.I am added the output from my arduino code.
|
Orbit valve testing
8
After 2,100,000 cycles the still functioning Rainbirds are off the test bench, replaced by two Orbit Jar Top valves. The test cycle time has been further reduced to 250 milliseconds. We should be able to accumulate more than 300,000 cycles a day. Bob Benedict KD8CGH
|
Missing menu headings?
The F() macro is actually: #define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal))) and is defined in the WString.h header file. The cool thing about it is that, by casting the string literal to a pointer to string, the GCC compiler moves the literal from SRAM and only stores it in flash memory. You can see the impact that has when there are a lot of string constant like menu prompts and error messages. I was very careful when I did that, as the search I used was "Serial.print(". In fact, I then had to do a separate search on "Serial.println(" to make sure I caught the linefeed versions, too. BTW, using a separate statement like the last one here: Serial.print(numberToPrint); Serial.print("\n"); is almost never needed because one change: Serial.println(numberToPrint); accomplishes the same thing with a builtin linefeed as the second statement did. Jack, W8TEE
|
CORRECTION: Airway circuit change to prevent rebreathing
8
Please see, and study, the attached document. Critical Review is requested.
|