April 25, 2017 Software Update

Hi FarmBot community,

Tuesday afternoon we deployed updates to the FarmBot web API, frontend, FarmBot OS, and the Arduino firmware. Here is an overview of the specific changes, bug fixes, and improvements throughout the software stack. We look forward to discussing these new features and improvements with you, and also hearing your feedback. Note: For bug reports please start a new topic in the Software category so that we may more easily diagnose and address the issue.

Improved Rotary Encoder Support

The latest firmware included with FarmBot OS 3.1.4 has much improved rotary encoder support. Enabling rotary encoders allows FarmBot to detect when its motors stall. For example: when it reaches its minimum and maximum locations during calibration, or when a plant grows onto your tracks and causes FarmBot to get stuck. For the encoders to work correctly, you will need to have your settings within acceptable ranges. As a starting point we recommend the following:

  • Max Speed (Steps/s): 400
  • Enable Encoders: Yes
  • Encoder Scaling: 100
  • Max Missed Steps: 10

As we continue to make code improvements and optimizations, we will refine these recommended numbers and build them into the firmware as defaults.

Once you have entered in settings for the encoders, the “Calibrate” buttons on the hardware widget will instruct FarmBot to move (slowly) to find its minimum and maximum points, and also measure the distance between them. Not implemented yet but on our list for the next deployment is using these measurements to make sure FarmBot never tries to move beyond its maximum locations, as well as showing the values in the input boxes for “Length” on the hardware widget.

The "Home " buttons on the hardware widget will also utilize the encoders to re-find the minimum position along an axis. Note: this is different than the home button on the controls widget which just tells FarmBot to move to (0, 0, 0).


  • Set the current position as zero for each axis. This makes manual calibration easier - just move your bot to your desired home position and press the "Zero " button(s) from the hardware widget on the web app to set that position as zero.
  • Always-on motors. You might want or need your FarmBot’s motors to always be powered so that they are ‘locked’ in position even when FarmBot is not moving. For example, an always-on z-axis motor would prevent the z-axis from wiggling down due to gravity. Enable or disable this setting for each axis from the toggle switches on the hardware widget.
  • Invert encoder toggles. These toggle switches will allow you to invert the encoder readings in case you plugged the encoders into the RAMPS board backwards.

Web App

  • Improvements to the hardware widget which make updating hardware settings faster and more reliable.
  • Smarter Save buttons throughout the app indicate if data is Saved, Saving, or needs to be Saved. This feature replaces most of the green “Success” toast notifications.
  • Bug fixes to the Farm Events creator and editor.
  • Photos in the weed detector widget now show up newest first
  • Log filtering to prevent the display or recording of any sensitive information such as home wifi credentials.
  • When editing a plant’s location, its “spread” is shown as a green circle, indicating the amount of area the plant will need. Note: This data comes from OpenFarm and is not available for many crops yet.
  • Mouseover effects for the farm designer allow you to quickly see what icon a plant in the all-plants-list corresponds to.
  • Tooltips have been added to every hardware setting to help clarify what that setting is used for.
  • Added a link to the software documentation hub under the right-side dropdown.
  • Descriptive browser tab titles.

FarmBot OS

  • Log filtering has been fixed to prevent sensitive information such as home wifi credentials from leaving the device.
  • OS errors are now sent to us (from all FarmBots) using a system called Rollbar which allows us to better detect, diagnose, and fix bugs as they happen.
  • Support for all the new firmware settings.
  • The latest firmware is included.
  • Stability improvements, better logging, and bug fixes to wifi and other core areas of the OS.


  • OpenFarm (the database that provides icons and crop info) has added Companion Plants to their infrastrucutre. While we are not pulling this data into the FarmBot web app just yet, we do plan to show this information in the future so that you can better plan your garden.
  • We now have over 100 crop icons created and uploaded to OpenFarm.
  • Updated/added the Contributor License Agreement links on all active repositories.
  • Added MIT Licenses to any active repositories that were missing them.

What’s Next

Our next big pushes include:

  • Performance improvements for encoders.
  • Improve how E-Stop works at the firmware and OS level.
  • Implement a “Safe State” feature so FarmBot knows what to do (and what not to do) during an E-Stop or when the encoders detect a motor stall.
  • Deploy alpha weed detection farmware to all users.
  • Ability to use plant and weed coordinates in your sequences (as defined in the farm designer or generated from the weed detection farmware)
  • Ability to loop a sequence. Initially, looping will just be repeating the same sequence multiple times, but the feature will expand into looping a sequence over a group of plants or weeds. So for example: you could make one weeding sequence that loops over all the weeds in your database, and then schedule it for every day at 6am.
  • Ability to apply a regimen to a plant for taking care of it throughout its entire life.
  • Dedicated web app pages for weed detection and farmwares.
  • And of course: stability improvements and bug fixes throughout the stack.

What are the implications on wear when using this feature? If this wasn’t already part of the initial design, there must be a reason why you’d want to unpower the motors every time, right?

In the past I wrote a pull request for implementing multilingual support but it wasn’t utilizing React as much as @RickCarlino would like. I’m learning more about React now and creating my own browser game to get a good grip on React’s power. I’m still willing to help out implementing multilingual support. Perhaps this time my help can fit your paradigm better.

Something to bear in mind if/when you do your own hardware regarding ‘always on’: In the past I’ve adjusted the Vref value from the micro to reduce the stepper current when holding position, rather than moving. You don’t need much current to hold a stepper in position (maybe 10-20%), whereas you need much more current to actually move it.

None for wear, provided the current/voltage is suitable. Machining CNC machines will have all steppers motors locked on permanently during operation. The higher rated drivers will use 1/2 or 1/4 current for holding. Encoded servo motors are also used on CNC machines, these are also locked on during operation

1 Like

Not everyone will want their motors to be locked the entire time, mostly probably to conserve power if on a solar system. Otherwise as @chrisb mentioned, there is not much drawback otherwise to keeping them powered.

Regarding internationalization, support for this has been implemented, and you can learn how to contribute a language file here :slight_smile: