DIY for hobby use
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
Good news, project is alive and goes forward :). PCB works and can show all those nice things from simulator, with subpixel font smoothing:
USB uploader also works. Very convenient for users - ST-Link/V2 not needed at all.
I started to write assembly manual. It's not complete, but enough to understand simplicity. Feel free to PR grammar fixes, because english language is not native for me :).
Found small issues, not enough to create next PCB version, but worth to remember for future works:
Plan is to learn how to use 3D printer, and print all plastic components (openscad drafts have been pulished on github. Then we can start debug dispense algorithm. Goal is to auto-tune on the fly all params (speed, retract level) via motor current sensor. But it's difficult to predict in advance, is it possible to to this with desired quality or not. I think, in 2-3 months we should get something final, ready to use.
Assembled third version of PCB:
My friend, second author of our sensor-less speed control for grinder decided to join this project too. He will help with drivers debug (current firmware runs in simulator only). And i will continue with reflow micro table for this time.
Sorry for slow updates - that's specific of OSS development. Instead of doing single project, i prefer to do multiple things in parallel. This allows to share efforts, and each can pick preferable parts where he is most qualified.
Everything become better if done by professionals :). Since i have no illusions about my own skills, i usually forward art-related parts to designer. Here are screenshots of new interface:
IMO looks nice. Current demo will be updated soon.
After some reviews, decided to do one more iteration prior to start bare metal debug. Updated schematic & PCB https://easyeda.com/puzrin/dispenser:
Will take couple of days to recheck everything, and then order new PCB, SMT stencil & components.
Received new PCBs. Still not final, but looks sweet:
And with 1cc syringe (supports are not final, only for prototyping):
Also, i got very useful advice about align SMT stencil with reference points:
I did two 0.7 mm holes and used 22 Ga (0.65 mm) SS wire from vape to pin PCB & stencil to cork sheet. That position stencil very easy and very precise. When you make order at JLCPCB, stencil adds ~ 8$ - very low price for comfort assembly. The only thing you need to do - select custom size and reduce default to minimal possible.
Note, PCB still needs some care. Don't order now if you have no plans to join development :)
With all those changes, i probably will add 5mm to PCB tail.
It may sound strange, but in many devices the most time-consuming task is interface prototyping and polishing. Good news is, there exist embedded GUI libs with desktop support. If you design application properly, you can do almost everything on PC, without real hardware at all. That reduces development and debugging time in x10 times and more.
I selected LittlevGL. It's not ideal, but can work on MCUs with small memory.
As perfectionist, i don't like compromises about quality. So, to make LVGL "useable", i had to design new storage format for bitmap fonts and create appropriate font convertor. Here is the result:
This tool properly uses kerning, autohinting and allows create nice texts on display. See animated demo above. Now you can just take TTF or WOFF font, and convert it for embedded use without quality loss. Of cause, convertor allows merge multiple fonts, select subsets and so on. Data format is universal and not limited to LVGL only.
Lets return to dispenser interface. As you can see on image, it has 3 "screens":
Controls is done with 5-way tactile switch + dispense button:
Seems convenient. Next step is to ask designer draw everything "properly".
Source code with current progress available on github: https://github.com/puzrin/dispenser. If you need more details about abstracting hardware, you can find those there.
That's a side note, not directly related to dispenser, but very useful. When we not use syringe, needle should be closed to protect content from drying. Here is a recipe, how to organize things with ease.
First, if you need professional use, and have a lot of space, the best approach would be to keep syringes vertical, with needle in glycerine bath. But.. let's be honest... that's too much for rare hobbyist's use :). And most of us don't care to keep soldering paste in refrigerator. We just need small cap to restrict air access.
This can be done with heat shrink tubes. Original recipe, i was advised, suggested use one fat pipe and thermal glue to close the end. I used a bit different approach:
First, shrink small tube to needle and cut it at needle end. Then shrink bigger one and squeeze the end. See result:
Then add a drop of silicone oil for additional safety. You can vary approach, use 1:2 ratio tubes and so on. But principle is the same.
Hope this helps!
Since PCB-s are very cheap, it's convenient to make draft prototype and check how it fits in hands. Here is photo with different syringes:
This is NOT expected to work, only to test mechanics, materials, size and so on.
Thoughts and observations:
That's the most notable things. Here is render of reworked PCB (source - https://easyeda.com/puzrin/dispenser):
Seems nice. Need to meditate some days before new order, may be new ideas appear.
There are 2 major pusher approaches - with rotating rod and rotating tube. Let's leave aside rotating tube, as it's more complicated for DIY. So, we need cylinder with M3 inside. Here are 2 choices again:
All appropriate drawing for 3d print are available on github. But for 1cc syringe detail will be too thin - metal pusher needed. Can we do it good enough without lathe? Yes. We need suitable tube and make thread inside.
After experimenting with lot of available materials, it seems optimal use SS tube ID 4mm OD 2mm (description says ID 2.5 mm but it's 2mm). This material is a bit not convenient for drilling, but nothing impossible. So, we need:
To make holes straight, put tube into screwdriver and push with static drill bit (use separate chuck to hold it). After some training, that's not difficult:
Here is a result:
Small pieces of soft adhesive tape add friction with syringe body and exclude rotation on install.
So, even for 1cc syringe, everything can be done at home, without advanced and expensive tools.
Next step is prototype assembly & testing to it fits in hand.
To push paste out of syringe, we need threaded shaft. There are 2 ways:
Coupler with threaded rod
You can take this coupler 2.3mm to 3mm. Use 2.5 mm drill bit to enlarge hole, then tap M3 thread and insert 60mm M3 rod or screw with loctite.
Disadvantage is loosing 20mm of movement length (or increase length of device). Let's leave this for Plan B.
Gearbox with built-in long shaft
There are no ready mini stepper solutions with M3 shafts, but we can assemble it from two donors:
In may sound strange, but those parts are compatible!
See photo. Donors are on left side, result on right side. Total cost with delivery will be about 10$. Not ideal price, but acceptable, requires zero efforts and is the most compact.
If you decide to combine other components - check gearbox sizes, those should be equal (the most popular can have 10x12mm or 12x14mm plates).
If components go out of stock - we still have Plan B with coupler. Both solutions do not require complicated tools and can be reproduced by anyone.
Many hand made dispensers use 28BYJ-48 motors. Those are very cheap, but not enough small and not convenient to mount. We need something better:
Let's estimate desired gearbox ratio.
All small 10-15mm steppers usually have 18° step (20 steps per turn). Gearbox can be:
Other data:
Desired portion size per single motor step is 0.006 mm³.
Let's calculate, what stepper with plastic gearbox 1:50 can give us:
(3.14 * 15² / 4) * 0.5 / 50 / 20 => 0.09
0.09 mm³ is very bad. It's 1.5x more than portion size and 15x more than desired precision. What can we do?
1cc syringe has dia about 5mm. Portion per step will decrease in 9x. Better, but not perfect. Let's use metal gearbox 1:295.
Estimate for 3cc syringe (9mm inner dia):
(3.14 * 9² / 4) * 0.5 / 295 / 20 => 0.005
Estimate for 1cc syringe (5mm inner dia):
(3.14 * 5² / 4) * 0.5 / 295 / 20 => 0.001
In total:
Of cause, we could use dynamic model (quick step forward and back) and cheat with paste viscosity. But that's much more complicated and result will depend on paste temperature. Also, it's not good idea to use micro stepping, because it's not precise with cheap motors and consumes more power.
Conclusion
That's all with boring maths, next time I'll try to post some pictures :)
Create an account to leave a comment. Already have an account? Log In.
Could you help me. Maybe you have a ready-made HEX, BIN, DFu firmware file. Thank you in advance. Sincerely, Valery.
Hello Vitaly. Interested in pash project . I decided to repeat it, but there were difficulties with downloading the firmware of the microcontroller. I used Visual Studio Code when filling it gives the following message.
crazoff8:16 AM
* Executing task: C:\Users\Crazoff\.platformio\penv\Scripts\platformio.exe run --target upload
Warning! `src_build_flags` configuration option in section [env:emulator] is deprecated and will be removed in the next release! Please use `build_src_flags` instead
Warning! `src_filter` configuration option in section [env:emulator] is deprecated and will be removed in the next release! Please use `build_src_filter` instead
Warning! `src_filter` configuration option in section [env:hardware_stlink] is deprecated and will be removed in the next release! Please use `build_src_filter` instead
Processing emulator (platform: native)
--------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Library Manager: Installing Embedded Template Library @ ~18.3.2
Warning! Could not find the package with 'Embedded Template Library @ ~18.3.2' requirements for your system 'windows_amd64'
Found 2 compatible libraries
Scanning dependencies...
Dependency Graph
|-- lvgl @ 6.1.1
|-- lv_drivers @ 6.1.1
| |-- lvgl @ 6.1.1
Building in release mode
Compiling .pio\build\emulator\hal\sdl2\app_hal.o
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\app.o
Compiling .pio\build\emulator\src\doses.o
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\fonts\my_font_icons_18.o
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\fonts\my_font_roboto_12.o
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\fonts\my_font_roboto_14.o
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\fonts\my_font_roboto_num_18.o
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\screen_dose.o
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\screen_flow.o
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\screen_settings.o
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\libc67\lvgl\lv_core\lv_debug.o
Compiling .pio\build\emulator\libc67\lvgl\lv_core\lv_disp.o
*** [.pio\build\emulator\hal\sdl2\app_hal.o] Error 1
*** [.pio\build\emulator\src\app.o] Error 1
*** [.pio\build\emulator\src\doses.o] Error 1
*** [.pio\build\emulator\src\fonts\my_font_icons_18.o] Error 1
*** [.pio\build\emulator\src\fonts\my_font_roboto_12.o] Error 1
*** [.pio\build\emulator\src\fonts\my_font_roboto_14.o] Error 1
*** [.pio\build\emulator\src\fonts\my_font_roboto_num_18.o] Error 1
*** [.pio\build\emulator\src\screen_dose.o] Error 1
*** [.pio\build\emulator\src\screen_flow.o] Error 1
*** [.pio\build\emulator\src\screen_settings.o] Error 1
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
*** [.pio\build\emulator\libc67\lvgl\lv_core\lv_debug.o] Error 1
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
*** [.pio\build\emulator\libc67\lvgl\lv_core\lv_disp.o] Error 1
========================== [FAILED] Took 4.17 seconds ==========================
Environment Status Duration
------------- -------- ------------
emulator FAILED 00:00:04.174
==================== 1 failed, 0 succeeded in 00:00:04.174 ====================
* The terminal process "C:\Users\Crazoff\.platformio\penv\Scripts\platformio.exe 'run', '--target', 'upload'" terminated with exit code: 1. * Terminal will be reused by tasks, press any key to close it.
* Executing task: C:\Users\Crazoff\.platformio\penv\Scripts\platformio.exe run --target upload
Warning! `src_build_flags` configuration option in section [env:emulator] is deprecated and will be removed in the next release! Please use `build_src_flags` instead
Warning! `src_filter` configuration option in section [env:emulator] is deprecated and will be removed in the next release! Please use `build_src_filter` instead
Warning! `src_filter` configuration option in section [env:hardware_stlink] is deprecated and will be removed in the next release! Please use `build_src_filter` instead
Processing emulator (platform: native)
--------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Library Manager: Installing Embedded Template Library @ ~18.3.2
Warning! Could not find the package with 'Embedded Template Library @ ~18.3.2' requirements for your system 'windows_amd64'
Found 2 compatible libraries
Scanning dependencies...
Dependency Graph
|-- lvgl @ 6.1.1
|-- lv_drivers @ 6.1.1
| |-- lvgl @ 6.1.1
Building in release mode
Compiling .pio\build\emulator\hal\sdl2\app_hal.o
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\app.o
Compiling .pio\build\emulator\src\doses.o
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\fonts\my_font_icons_18.o
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\fonts\my_font_roboto_12.o
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\fonts\my_font_roboto_14.o
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\fonts\my_font_roboto_num_18.o
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\screen_dose.o
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
Compiling .pio\build\emulator\src\screen_flow.o
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\src\screen_settings.o
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
"g++" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
Compiling .pio\build\emulator\libc67\lvgl\lv_core\lv_debug.o
Compiling .pio\build\emulator\libc67\lvgl\lv_core\lv_disp.o
*** [.pio\build\emulator\hal\sdl2\app_hal.o] Error 1
*** [.pio\build\emulator\src\app.o] Error 1
*** [.pio\build\emulator\src\doses.o] Error 1
*** [.pio\build\emulator\src\fonts\my_font_icons_18.o] Error 1
*** [.pio\build\emulator\src\fonts\my_font_roboto_12.o] Error 1
*** [.pio\build\emulator\src\fonts\my_font_roboto_14.o] Error 1
*** [.pio\build\emulator\src\fonts\my_font_roboto_num_18.o] Error 1
*** [.pio\build\emulator\src\screen_dose.o] Error 1
*** [.pio\build\emulator\src\screen_flow.o] Error 1
*** [.pio\build\emulator\src\screen_settings.o] Error 1
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
*** [.pio\build\emulator\libc67\lvgl\lv_core\lv_debug.o] Error 1
"gcc" \xad\xa5 \xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2७\xad\xa5\xa9 \xa8\xab\xa8 \xa2\xad\xa5譥\xa9
\xaa\xae\xac\xa0\xad\xa4\xae\xa9, \xa8ᯮ\xab\xad塞\xae\xa9 \xafணࠬ\xac\xae\xa9 \xaa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac 䠩\xab\xae\xac.
*** [.pio\build\emulator\libc67\lvgl\lv_core\lv_disp.o] Error 1
========================== [FAILED] Took 3.06 seconds ==========================
Environment Status Duration
------------- -------- ------------
emulator FAILED 00:00:03.063
==================== 1 failed, 0 succeeded in 00:00:03.063 ====================
* The terminal process "C:\Users\Crazoff\.platformio\penv\Scripts\platformio.exe 'run', '--target', 'upload'" terminated with exit code: 1. * Terminal will be reused by tasks, press any key to close it.
crazoff8:16 AM
We are getting ready to build one of these. Have there been any updates and have the motor controls been worked out?
Hi
So i have built one of these units, everything seems good, screen is working etc, but i can not get the stepper to move at all, i tried different modes.
I then started going through the software looking for any config that maybe disables the stepper.
Am i missing something? Has the stepper routines been tested? Or do they still need to be fully implemented, i tried going through the routines but didn't spend to much time on this.
Would appreciate any info, i do understand this is a WIP and am willing to help where i can, just want to know of anything obvious before i really dig in.
Thanks and Regards
Jonathan
This project is WIP. It's written in first line of description and clear from project logs. You need to wait until complete.
Thanks for your reply
Yes, i know this is a WIP, that is why i am asking which of the stepper routines have been tested and are working so i can start to do some work on the code.
Thanks again
Ah, ok. Nothing about motor was tested. Existing move logic is not final too. In theory, dispenser should use current sensor to control pressure. But this should be verified in real world. In worst case, we still can fallback to common approach with const speed, but i hope this will not happens.
I made a dispenser pcb.
Unfortunately, my strength is not software writing.
I received the following error messages while downloading USB firmware.
CONFIGURATION: https://docs.platformio.org/page/boards/ststm32/our_genericSTM32F072CB.html
PLATFORM: ST STM32 6.0.0> STM32F072CB
HARDWARE: STM32F072CBT6 48MHz, 16KB RAM, 128KB Flash
DEBUG: Current (stlink) External (blackmagic, jlink, stlink)
PACKAGES: toolchain-gccarmnoneeabi 1.70201.0 (7.2.1), tool-stm32duino 1.0.2, tool-openocd 2.1000.190707 (10.0), tool-dfuutil 1.9.190708
File "<string>", line 1
'import
^
SyntaxError: EOL while scanning string literal
OSError: 'python -c' import os; print ("" .join ([f "-I {i [0]}" for i in os.walk ("hal / stm32f072cb")])) '' exited 1:
File "C: \ Users \ User \ .platformio \ penv \ lib \ site-packages \ platform \ builder \ main.py", line 151:
env.SConscript ( "$ BUILD_SCRIPT")
File "C: \ Users \ User \ .platformio \ packages \ tool-scons \ script \ .. \ engine \ SCons \ Script \ SConscript.py", line 605:
return _SConscript (self.fs, * files, ** subst_kw)
File "C: \ Users \ User \ .platformio \ packages \ tool-scons \ script \ .. \ engine \ SCons \ Script \ SConscript.py", line 286:
exec (compile (scriptdata, scriptname, 'exec'), call_stack [-1] .globals)
File "C: \ Users \ User \ .platformio \ platforms \ ststm32 \ builder \ main.py", line 98:
target_elf = env.BuildProgram ()
File "C: \ Users \ User \ .platformio \ packages \ tool-scons \ script \ .. \ engine \ SCons \ Environment.py", line 224:
return self.method (* nargs, ** kwargs)
File "C: \ Users \ User \ .platformio \ penv \ lib \ site-packages \ platform \ builder \ tools \ platformio.py", line 112:
env.ProcessFlags (env.get ( "BUILD_FLAGS"))
File "C: \ Users \ User \ .platformio \ packages \ tool-scons \ script \ .. \ engine \ SCons \ Environment.py", line 224:
return self.method (* nargs, ** kwargs)
File "C: \ Users \ User \ .platformio \ penv \ lib \ site-packages \ platform \ builder \ tools \ platformio.py", line 202:
env.Append (** env.ParseFlagsExtended (flags))
File "C: \ Users \ User \ .platformio \ packages \ tool-scons \ script \ .. \ engine \ SCons \ Environment.py", line 224:
return self.method (* nargs, ** kwargs)
File "C: \ Users \ User \ .platformio \ penv \ lib \ site-packages \ platform \ builder \ tools \ platformio.py", line 165:
for key, value in env.ParseFlags (str (raw)). items ():
File "C: \ Users \ User \ .platformio \ packages \ tool-scons \ script \ .. \ engine \ SCons \ Environment.py", line 807:
do_parse (arg)
File "C: \ Users \ User \ .platformio \ packages \ tool-scons \ script \ .. \ engine \ SCons \ Environment.py", line 676:
arg = self.backtick (arg [1:])
File "C: \ Users \ User \ .platformio \ packages \ tool-scons \ script \ .. \ engine \ SCons \ Environment.py", line 594:
raise OSError ("'% s' exited% d"% (command, status))
Can anyone help with this or send a hex file to stlink?
Note, project is WIP, motor related things do not work yet. About build failure - please post details in https://github.com/puzrin/dispenser/issues. Especially about your OS. Need more details because in general all OS-es are tested https://github.com/puzrin/dispenser/blob/master/.travis.yml
Can you go more into how you attached the shaft to the silicone plunger end? I like this design a lot more than all the others I've seen :)
It's not attached, only push & only forward. Plunger will move back when fill from another syringe via luer coupler. Shaft has only anti-rotation stickers (small pieces of soft adhesive tape)
Also Don't discount the smaller syringe. It requires significantly less force (and less torque to push). the require force to push the paste through is proportional to the Cross-sectional area of the piston.
Little Heads up that IPS Display inverts the colors of the Adafruit library
На митинском рынке такие продаются. Дороговато правда около 5к. Но там интереснее конструкция, цепляется прямо на шприц в котором флюс или паста продаются. Хочу себе сделать такой, да всё руки никак не доходят.
Please write english to make comments useable for all. This hardware is expected to supports 10cc pneumo syringes too. All that looks good only until you try to use it :). It really worth read all log entries, where i explain about precision and usability. If you don't need those - you can repeat any existing project, mentioned in first log entry,
I tried it. It works very good. And also has back movement mechanism implementation to stop paste feeding immediately. Really good product.
Also, button to control feeding is not so good solution, because when you are pressing it your hand make a small movement. It's better to use a pedal to control feeding.
IMO that's very subjective. I tested prototype (from photos) with uncutted syringes. And have different opinion about convenience and usability. If you find those useable - no problem. But that's a past for me, not interesting.
Also, if you read last log entry, you will see prototype already has pedal connector. I know about such things.
OK Vitaly - correct this alliexpres link is a plastic gear motor which I DO NOT use.
Sorry again, that mistake was not intended. Your dispenser is certainly the most interesting and beautiful of currently available. Goal of my logs is to share technical experience, not to say anything bad about other's work.
Hi - my dispenser (5V DC USB Dispenser) has all gears metal- your statement that I use plastic gears in my dispenser is incorrect - please do not make Statements which are based on your assumptions.
Thanks
Mike
Mike, sorry for that. I was confused with motor look, and recognized it as different model https://www.aliexpress.com/item/32969821590.html. Removed that paragraph. Thank you for pointing out my mistake.
Become a member to follow this project and never miss any updates
Hi, has anyone managed to program it, have already bought all the components except for the circuit board, is there one who has gotten the dispenser to work
Sincerely, Lukas