Why does this machine fail so much?

i don’t honestly know what i am doing wrong here. i had it watering things on sequences fine for a week or two. then abruptly yesterday it decided it cannot move X and Y axis simultaneously. i managed to fix that by bumping up the power to the motors.

i tried a seed planting sequence yesterday. the z axis drops a little bit each run so after 3 runs it starts crashing into the bottom of the seed tray and I have to lower the tray, hold the tray in my hand and feed it individual seeds or stop it and rehome everything, edit my plant grouping, manually move everything by hand to home and start over.

oh yes, home location stall detection doesn’t work on x axis.

the seed planting sequence will do a random number of plantings then fail and set its current location as home despite having that feature turned off.

yesterday I spent about 5 hours planting 22 radish seeds. today is a bit better, 21 beets in 45 minutes but its failed four times in that sequence, first planting 11, then 5, then 4 then 3.

basically to even get it to work i have to manually hand it a seed after the second run, then follow it to its location and use a pen to dig a hole for the seed really quick as then seed pops off the needle when it contacts the soil and lays on the surface while the needle pushes into the soil and sucks up dirt, getting clogged after a couple runs.

i do not understand why it is so finnicky

someone please help

There is so much in your comment it is hard to unpack but here goes.
I have had some of your issues, so here are my suggestions.

X-Y I run my motors at 100% and have no issues. No power when not in use.

Z axis drop - Try setting Z-axis to be powered at all times. I have LUA code to power Z up before a run and a ‘park’ sequence to depower everything and let the Z drop (if it wants to).

Stall detection does not work on the far side of the X axis. The second X axis motor is powered (if you have set it so) but the encoders are not coded. It is on the backlog.

Planting. I am manually planting at the moment for the reason of losing seeds on the way into the ground. My approach long term approach is this.

I have been focussing on FB resilience and bug fixes, so the development of this tooling has been paused, but the hole maker and seeder work great as a combo. I plan to significantly improve this, including a spiral movement to pick up the seed, as the seed was never in the right place. I wrote a spiral in a sequence, but it was very clunky, so I need to re-write it in LUA.

thank you so much for the replies. I come from a 3d printing background since 2018 so I have probably some similar thoughts as you but coding i know very little to nothing of which is a part i find frustrating. I see the error notices and they mean nothing to me and I’m not sure how to make them mean something.

I have an express not a genesis though so I don’t have the cool magnetic tool heads. I wish I did. I was already thinking I would try to 3d print a tool to make a hole or to drag a trench but I assume it would stall out dragging a trench.

the other issue I think i have is that when it inserts the needle / seed (which i also find it loses much of the time) it puts enough resistance that it changes the actual location of the tool head vs where the app thinks it is. i think this is why it doesn’t return all the way to zero and starts to get a few mm lower each successive planting. I designed my own seed cups to give more depth but it still bottoms out in them after a feed seedings.

that said after 4-7 it fails and either sits in one spot doing nothing or it shuts down, drops its seed and decides it is now sitting at 0,0,0. I have similar problems with well established watering sequences too. sometimes it just stalls and decides its done and resting at 0,0,0 and sometimes it just waters non-stop. i’m totally not comfortable running a watering sequence if i’m not present to watch it as i don’t wish to flood my garden out. ((( could this be a brief loss of wifi communication which triggers an error in the execution?)))

i will try out some of the suggestions you’ve mentioned that i don’t already have activated and see how that changes some of this behaviour. i really appreciate the replies. I love the machine, I love the concept and i’m well committed to make it work but i’m definitely having trouble finding solutions and the FAQ seems to have outdated info in some cases as I can’t even locate the corresponding widgets or menus as pictured.

I don’t have an express, so my suggestions are generic.

For me, repeatability is the most important thing.
I would go back to basics and do soak testing of the movement.

Place a pointer at a certain height to which the head can be lowered, measured, and complete laps.
Up, do a lap around the full FB bed, all four corners, and back down again - measure. Write a sequence to loop this over and over again. Determine if FB can complete the sequence reliably or do you have fundamental issues in your movement. You need to build confidence with each progressive state until you find the underlying issue. If it drifts, make the sequence smaller. Maybe just up and down or full X travel kind of thing until you prove the movement.

You will see I am regular in the forum and I pick up every little fault with FB, not because I am picky but because, like you I am wedded to the concept and want (need) it to work. I want a robot I can leave behind on a two week holiday to know it will just do its job perfectly during that time. (I took mine off mains water as I did not want a huge water bill incase the hose failed.)

I have looked at code issues, function calls, camera calibration, soil height detection, motor stalls, and X-motor encoders - the list goes on, and it will continue until I cut a clean path for myself and others to follow. I am writing coding sequences, which I intend to publish once they are fully reliable, and I work out how as I am not a developer, but I can code.

thanks for your responses and suggestions. I totally get where you’re coming form. I generally try to be rather methodical about things and the lack of repeatability is a strong irritant to me. and making simple mistakes on my end that I feel I shouldn’t be making.

i made a sequence last night to use the needle with the cover on to make holes to just drop seeds into. when I ran it the sequence completed fine and i had a row of holes. I couldn’t figure out how to get negative X and Y movements so they weren’t as nice as I was hoping and I went to run it a second time. BUT FB wouldn’t respond as it had gone offline. When I tried to get it back online the page told me it wasn’t responding due to too much traffic. When I did get it back online I found my ‘plant all seeds’ sequence was messed up because I had cloned the ‘plant one seed’ sequence to create a ‘make one hole’ sequence but changed the steps in the wrong one. it started trying to make holes with the needle.

I gave up for the night as it was getting dark.

This morning I fixed that and went outside to try again - run the make holes sequence. it did one, raised and made grinding noises and wouldn’t move along the Y. I raised Z to 0 and gave command +100 Y and then -100 Y and then +1000 Y and -1000 Y ; all worked fine.

I tried ‘make all holes’ sequence again - worked fine but not in the exact spot as last night by about 3-5mm.

i double checked the seed cup height and it was good. run ‘plant one seed’ just to see if it all worked before committing to ‘plant all seeds’. It tried to push the needle through the bottom of my larger seed cup I made

I realized Z 0 was not going right to the top. I fixed that, and ran ‘plant one seed’ to find the needle was no longer coming in contact with the seeds by a few mm so I adjusted the seed cup height again.

I made sure that was all in alignment and ran ‘plant all seeds’ (all 11. LOL) it did the first seed ok. the second seed the hole didn’t quite line up but it worked, pushing the seed down into the looser soil BUT the seed fell off before the bottom. the third round it failed to pick up a seed as it was now plugged with soil in the needle.

I gave up and planted the remaining 8 by hand in under a minute.

very unreliable. frustrating. back to the drawing board. i bought this because I lack time to water properly LMFAO


I know what you mean.

After running into multiple issues I backed my attempts to simple processes. I have completely restructured the sequences to something more structured and use LAUNCHERs, SEQuences and SUBroutines to identify my code structure.

LAUNCHERS - This is what humans use to make FB work
SEQuences - The launchers run SEQ segments
SUB - perform specific tasks

This is my sequence stack

Here is an expanded Tools stack

The Safely sequence removes the existing head, loads the new head, verifies it has mounted correctly (electrical test) and remounts it if it fails the test.

The SUB call LUA code to do specific tasks so Mount tool-SUB runs the LUA command mount_tool() and that is all. This allows my code to be structured, clean and readable

This is my watering LAUNCHER

I also have four locations programmed up.

0,0 - Home
1200,0 - Goto after reboot
0,1200 - Park (All is good)
1200,1200 - Park (Error has occurred)

This means I can take a glance at the device from my webcam and see how the machine is performing or if there has been an error.

wow cool. so organized. I love that. so far over my head atm. but i see what you’re aiming at and i like that. right now I feel all scattered with just figuring how things work but i’ll get there i’m sure. designing a hole making plug atm in fusion 360 so i can avoid frustration for now and just get green in the ground before its too late in the summer to bother. LOL

If you want my STL file I am happy to share.

1 Like

I had similar problem…among others. I designed a hole maker and it works nicely EXCEPT i can’t get through a sequence without failure, stopping and resetting all values to 0,0,0

I just laid out 4 rows of 24 carrots. set the sequence to make 96 holes. it did 49 just fine then stopped mid air, reset its home locations to that exact spot.

I changed the group to 47 carrots and set it to resume. it made two holes and on the third it failed to raise enough to clear the ground, moved 10 mm instead of 65 mm, dropped into the same hole, raised and made a grinding noise at which point i e-stopped.

upon unlock the manual move buttons and location coordinates disappeared until i ran any other sequence.

i reset everything and tried again, it made two holes and on the third it failed to raise enough to clear the ground, moved 10 mm instead of 65 mm, dropped into the same hole, raised and made a grinding noise at which point i e-stopped. upon unlock the manual move buttons and location coordinates disappeared until i ran any other sequence. EXACTLY the same as the last time.

I thought maybe it was a wifi connectivity issue in that exact spot so I reset it to all 96 carrots and started again. this time it appeared to be working fine but when it got to the end of row one it wasn’t dropping completely into the ground anymore (confirming that the Z height drops over time with the resistance pushing into the soil causes) AND on the row coming back it only completed two before it stopped and reset all home values to that location.

checking the wifi connectivity it showed exactly the same as the rest of the row it had just completed.

is there somewhere to find more info as to WHY it stopped working?

so i figured out it just really doesn’t like that one location 2000,295,-400 - so i eliminated JUST that location and it worked just fine … for about 25 tires or 44 and then stopped again and set 0,0,0 at whatever its current location is

i’m sure glad my 3d printers aren’t this unreliable.


I had a network reliability issue so I wrote a wrapper to accommodate the network glitches.
Not sure if your issue is related but here is the code anyway.

My code replaced this one line

    points = api({method = "GET", url = "/api/points"})

and make it check until it gets a good read - or failed after 3 minutes.

local watering_time = variable("Watering Time (Seconds)")
start_time = os.time() * 1000

-- New code is below
local theNumberOfAllowableNetworkTries = 9
local theSecondsDelayBetweenRetries = 20
local failedToGetPoints = 1
local points

while( theNumberOfAllowableNetworkTries > 0 )
    theNumberOfAllowableNetworkTries = theNumberOfAllowableNetworkTries -1
    points = api({method = "GET", url = "/api/points"})

    if points then
        toast("Plant list obtained", "info")
        theNumberOfAllowableNetworkTries = 0
        failedToGetPoints = 0
        toast("Error - Unable to obtain list of plants (Retrying)", "warn")
        wait (theSecondsDelayBetweenRetries * 1000)
        theNumberOfAllowableNetworkTries = theNumberOfAllowableNetworkTries -1

if (failedToGetPoints == 1) then
    toast("Fatal Error - Unable to obtain list of plants (EXITING)", "error")

I also have raised the issue of internet dependencies for operations and Rory from FB has said that they are going to move away from that and open up the API calls use the local database. FB has fixed a number of issues related to the internet dependencies in the last few weeks - which is great.

i did read that thread in my attempts to figure out why it was endless boot cycling. unfortunately I know nothing about coding at all so what i’m contemplating is getting a wifi booster to go in my nearby gazebo and then run a hardwire to it from that. moving away from depending on wifi would be nice for sure.

Forget the wifi for now./

I recommend building a looping sequence that does not need wifi to operate and ensuring FB can do laps repeatably and reliably. Forget everything else for now.

Back to basics.
Make FB reach the max and home on all four corners 50 times without an issue and return to an accurate place at the end of the cycle. If you are feeling brave, mix in Z changes to. You need to stress test your rig to understand it.

Do you know how to do that in a sequence?

as a sequence I’m sure I could figure it out…except negative values I cannot actually. in sequence I can figure out forward motion only or negative only but not both in the same sequence.

i went to hardwire yesterday and seem to have eliminated the forgetting what it is doing and rebooting.

still have the issue of the Z axis dropping about 20mm over the course of planting a row of 24 seeds. I have to keep watching it and moving the cup down every 5-7 seeds or it tries to ram the needle through the bottom of the larger seed cup i made.

also, after a few cycles i notice it loses the 7mm offset I have in the sequence and returns to y-0 instead of y-7 to pick up a seed. i’m not sure if that means tightening a belt but i know i can hear some grinding which i know is causing it to lose steps going out that it still has coming back (hopefully what i’m saying makes sense)

CAUTION: This will run forever. You will to E-STOP to stop it.

Step up some sticks with indicators to ensure that FB always passes though the X,Y and Z of movement.

Hey, I have the express XL and have every one of the same issues you do.
I think it must be why they have stopped manufacturing the Express…
Mine is a part of a school so I’m just waiting for the powers that be run an ethernet cable so I can have it hardwires in. Hopefully that stops the rebooting. But like you I have lots of experience 3D printing, but much less coding. I’m just glad to see it’s not just me running into these issues. Hopefully we can work through them and have something that actually functions.


The only way through is to debug each item one at a time to the root cause.

I have been encouraging FB to remove the dependence on the internet as, in my view, once programmed FB should run remotely forever without the internet. FB have already made some changes around tool mounting and verification which is no longer internet bound and they are going to remove that dependence on plant look-up as well.

Try running the code I offered. You can change the 1200 in x to be the full bed length so better testing.
update_firmware_config({movement_keep_active_z = 1})
command turns the Z-Axis motor on permanently so if you need that turned off, then either use settings or
update_firmware_config({movement_keep_active_z = 0})

Here is the code as a block for ease.

update_firmware_config({movement_keep_active_z = 1})

move_absolute(1200, 0, 0, 100)
move_absolute(1200, 1200, -200, 100)
move_absolute(0, 1200,-200, 100)
move_absolute(0, 0, 0, 100)

thanks so much for all your very helpful replies. i’ve just worked like 68hrs in the last 4 days so been a bit mia. i really appreciate all the input and i’ll wade through it as I have time available. FB wasn’t supposed to dominate my summer, it was supposed to liberate it. :crazy_face:

however, i may be making some progress. I did get a wifi booster and a long outdoor cable in order to hardwire it; this created some new issues as immediately i couldn’t figure out how to open the cable chain so I just zip tied it to the cable chain and now it catches on things. I 3D printed solutions to that so now I’m just waiting to see what pops up next.

the random rebooting thing is still a mystery to me. today I paused it when it got caught and stalled and before I unpaused it the reboot happened. however, i don’t think its doing the 30 reboot over two hour sequences anymore now that its hardwired. hard to tell though as it hasn’t been hardwired that long yet.

I just got it permanently hardwired yesterday. it did reboot once today during a pause after a failed sequence but not a stream of multiple reboots every 3 minutes. time will tell if the hardwire eliminated that issue or not.

I cheated.

I did not want to run a cable all the way outside. I chose a Main power CAT 5 ethernet transmitter that uses the power cable to transmit the data. This avoided a long cable and improved the reliability of the FB.

There is still a dependency on the internet can I have random reboots when (it appears) API calls fail. I have coded around some of these to verify the API call being successful before proceeding. I wrote some code that checked 10 times over a 3 minute period to allow for long ‘glitches’ and that made a massive difference and the watering sequence now works reliably (along with my other fixes).

When I went away and just wanted watering, I mounted the water head an left it loaded to get around the UTM issue, modifying my code not to dismount. This ensured it worked whilst unsupervised. I also installed a Wifi camera so I can keep an eye on it from my office. LOL.