My Farmbot Build Running in Gujarat, India

Hi everyone,

I’m Mj, founder of Kalp Yantra AI & Technologies — an AgriTech startup based in Gujarat, India. I’ve been building and running a custom FarmBot Genesis 1.2 system for the past several months, and figured it’s about time I shared what I’ve learned with this community.

The Setup

My system — which I call EDENIX — is an extended-bed Genesis 1.2 running on an 8800mm × 2400mm × 1000mm raised bed. The gantry covers roughly 8.8 meters of track length, which is well beyond the standard kit dimensions. Hardware is Arduino Mega + RAMPS 1.4 with DRV8825 stepper drivers, NEMA 17 motors

The full system is built from locally sourced and fabricated components here in India — no imported FarmBot kit. Everything from the tracks to the raised bed structure was designed and assembled ground-up.

What’s Working

  • Automated seeding sequences using Lua — I wrote a batch planting script that mounts the seeder once and plants an entire group of 24+ seeds in a single run using get_group().
  • Automated weeding with the standard weeder tool, also Lua-driven.
  • Live camera feed from an IP camera streamed through go2rtc into the FarmBot webcam widget.
  • The full web app connected and operational via FarmBot cloud.

Challenges I Solved (Might Help Others)

A few hard-won lessons from this build:

  1. The D1 diode problem on RAMPS 1.4 — If you’re using an external 24V power supply, the D1 diode on RAMPS feeds that voltage straight into the Arduino Mega’s onboard regulator. This will kill replacement Arduinos one after another until you physically remove D1. Took me several dead boards to figure this out.
  2. Z-axis stalling — My Z-axis was stalling during operation. Root cause was insufficient motor current — the DRV8825 Vref was set at 0.7V, which wasn’t enough for the extended Z leadscrew. Corrected it to 0.85V and the problem disappeared.
  3. Motor resonance at certain speeds — On an 8.8m bed, you’ll hit resonance frequencies that shorter beds never encounter. I had to tune homing speeds and acceleration curves specifically for the extended track length.
  4. Lua scripting gotchas — If you’re writing Lua sequences: never use safe_z = false in table syntax (causes a fatal error), always use explicit table syntax for move_absolute, and call safe_z() with no arguments to get the configured safe height.

What’s Next

I’m actively working on the software side — building a customised version of the FarmBot web app with features targeted at Indian agricultural conditions. I’m also working with Krishi Vigyan Kendras (agricultural extension centres) here in India to bring this technology to farmers and researchers.

I’d love to connect with anyone else in India (or South/Southeast Asia) who’s building or interested in FarmBot technology. Happy to share more technical details about the extended-bed build, the Lua sequences, or any of the hardware debugging.

You can reach me at info@kalpyantra.ai or find us at (https://kalpyantra.ai).

Looking forward to being part of this community. will keep posting updates

— M.J. Sidatar
Gujarat, India


3 Likes

Looking Great M.J. Can you tell me more about your Live Camera feed through Go2rtc? I also would be interested in your batch planting sequence.

Thanks!

@kalpyantra please the latest update announcement and upgrade to the latest version of FarmBot OS. We made some improvements to better handle the “Lua scripting gotchas” you mentioned. Thanks for your detailed report!

1 Like

Thanks @roryaronson — really appreciate the fast turnaround on the
move{} and move{safe_z=false} error handling, and the credit in
the release notes. I’ll upgrade to the latest FarmBot OS on my build this week and re-run the batch planter to confirm
behavior.

The upgraded Lua code generation (GPT-5.4) sounds promising too —
looking forward to trying it on the next sequence I build.

@ShopTeach Happy to share what I have:

I’m still iterating on this — the go2rtc bridge I tried for my RTSP camera didn’t work reliably and I dropped it. Once I land on
a working setup, I’ll come back and share it properly. If you’ve
got a setup working, I’d be interested to hear what stack you used.

Batch planting (Master Seed Planter)
The trick is bypassing FarmBot’s automatic group iteration, which
mounts/dismounts the seeder for every plant. I pass a numeric
Group ID variable into a single Lua step and iterate inside the
script — so the seeder mounts once, plants the whole group, then
dismounts once.

Sequence flow:
Mount Seeder → Lua (loop over get_group(id)) → Dismount Seeder

Inside the Lua step (simplified):
for i, plant in ipairs(get_group(variable(“Group ID”))) do
move{x = seed_bin.x, y = seed_bin.y, z = seed_bin.z + 50, safe_z = true}
– pick seed
move{x = plant.x, y = plant.y, z = 0, safe_z = true}
– deposit seed
end

Two things that bit me during development:

  • Always use the explicit table syntax for every move{}. Positional
    syntax caused axis runaway in my testing (which is part of what prompted the feedback Rory referenced above).
  • Group ID is visible in the URL when you open a group in Farm
    Designer (…/groups/126234).

This was the workaround Rory recommended on the older forum thread,
and it’s been reliable across 24-seed runs.

Happy to share the full sequence JSON if it helps.

2 Likes

This topic was automatically closed after 30 days. New replies are no longer allowed.