Documentation of my way to autosteer

I am a young man in northern Germany, my father owns a small farm, around 60ha, and currently I am a University student. Due to the Covid pandemic I had to stay at home for around a half year now and had a lot time to help my father and think about improvements on our farm. Since I need money for being able to study, I worked on two bigger farms with modern tractors and, who would‘ve guessed, GPS autosteer, Section control and all the other interesting things you can do with modern hardware. I was quite impressed, especially by the first farmer, who even uses Autosteer and Section control on a nearly 30 year old sprayer and tractor, was quite fun to drive that thing. So I thought about what I could do at home to do this, as I believe, important step into the future. About 1.5 years ago I firstly watched Brians early videos and was right away amazed what one guy is able to create is willing to share free with the world. My problem was, I didnt know where to start, and since our farm is really small, even this very small amount of money cant be spend for a project that just perhaps works.
After working again with autosteer this summer I was convinced to give AgOpenGPS a try, encouraged by all success shown here in the forum and on Youtube. Now I only had to convince my father that we really really need autosteer :). Took me about two weeks, then he agreed to install the system on our Claas Ares 816RZ.
Around two months later the bare Autosteer seems to work quite well, due to the lack of a free field I am not able to completely test and set it all up properly, but thats just some fiddling and not a big deal.

In order to help other farmers to do the step into AgOpenGPS I thought about writing a documentation of what I did and the problems I ran into. There are many ways of doing it and mine probably isnt even in the approach of being the best, but might help as a reference for someone.

In the very beginning it is a good start to simply download the latest release of AgOpenGPS from Github:

and install it on your Windows Computer, with no need of an antenna or any other hardware despite the PC. I played around a bit and decided that I need some real hardware to begin with.

For me a good start was to buy the GPS Antenna, since if everything fails, I‘d at least be able to use the antenna as a simple guidance system combined with an already existing windows laptop for fertilizing. My goal was to get an antenna capable of RTK via NTRIP (so via Internet, not as usual via radio signals), thinking the corrections would be free in my part of Germany (which was wrong, but will be soon, hopefully) and that will be used on the tractor (equals used as a rover). So I ordered the widely recommended „Ardusimple simpleRTK2B“ with the „U-blox ZED-F9P“ chipset and the standard antenna directly off the Ardusimple shop:

After a couple of days the antenna and board arrived and I hooked it to my Laptop. For the basic settings of the board I basically followed Aortners instructions here:

, but I ran in some problems with it. To get the latest firmware and config, I used the first link of the post to download U-center. As for the firmware and config, I used the following:
Config for rover:
I did the firmware update as explained, but since U-center updated, to apply the configuration, I had to click Tools - „Reciever Configuration“ instead of „GNNS Configuration“, then select the configuration file and upload it to the simpleRTK2B. In order to save the configuration, I clicked View – Messages View, went through the directories ubx>cfg>cfg and clicked send. I had to do this a couple of times, because I didnt find the option to save the settings. Later on I had some problems getting RTK fix, so I tried different configs, but in the end the latest config from Aortner works perfectly, that was not the fault.
To connect the antenna to AgOpenGPS, I did the following:

When I found out that in wont get free RTK in my area (SEE UPDATE MARCH 2022), I had to find another solution, because building my own base was (and until now is) no option since I wanted to keep cost as low as possible. So I went to and found a caster (equals RTK-base) thats around 40km away from me, which isnt perfect, but should work ok. But it didnt…
To find a caster I simply browsed the caster table here:
and found one, but AgOpenGPS also directly shows the caster with the lowest distance to your position after I entered the link above in the NTRIP Settings in AgOpenGPS.
In order to test if everything works, I simply used AgOpenGPS, but for debugging U-Center is much more useful and not really more complicated. To enter the settings I did the following:

Also it is important to set the NMEA rate to 10Hz with this configuration:

I was never able to get a RTK fix (in my understanding the best possible accuracy) but mainly Float (second best accuracy) or even DGPS (even worse). Problem was that the caster didnt send the right data. At first I only looked at the protocol version of the caster, in this case rtcm 3.3, what is readeable by the simpleRTK2B. But the data stream is partially not understandable for the simpleRTK2, so in fact i didnt have RTK at all, because the „Message Type“ was not compatible. Compatible messages can be found in the manual of the Chip „ZED-F9P“ and messages send by the caster are shown in the caster table.

My third and last solution without an own base was to use free RTK from another part of Germany. I registered and entered IP, username and password as shown before in AgOpenGPS, selected the correct caster and now it worked just great, even with a base around 200km away from me I get a stable RTK fix. I cant tell how accurate it really is since I had no opportunity to properly test my system in the field, but the Ardusimple support told me that the pass to pass accuracy should be decent.
So I passed the first important step and got the antenna working good.
Here is my final install of the antenna on the roof of the cabin:

Now I went on and thought about how to build the rest of the system.

Next step for me was to understand the correct wiring and setup to control my steering motor. I went through some instructions here in the forum, but I think its easier to just order a pcb and solder everything together. I got my pcb from JLCPCB quick and relatively cheap and, at least from what I can tell, in good quality. To order the pcb, I downloaded the Support Files from GitHub: Releases · farmerbriantee/AgOpenGPS · GitHub. Then I went to, clicked „Quote Now“ and on the next page „Add your gerber file“. I selected Support_Files/PCB/AutoSteerPCB_Gerber/ from my harddrive and didnt change any setting on the website, I just placed the order. Done.

To order the components for the PCB I went to Mouser Electronics and searched for all the parts mentioned in Support_Files/PCB/AutoSteerPCB_Gerber/PartsList.xlsx manually because I had some of them already at home. I refered to the specific part numbers to really get the right parts. As I found out, some parts are not nessesary. Especially I didnt need three relays, only one: 255-1832-ND seems not be used. For using a electric motor to actually control the steering wheel, I didnt need a proximity switch and since I use standard USB connection and no UDP to connect to the pcb I didnt buy the Ethernet Module.
I would like to add some connectors to the list, two times „A98333-ND“ and one extra A98334-ND to be able to screw the cables of the power switch instead of soldering them and also extra connectors to grab 5V and 12V.

PartsList.xlsx (10,4 KB)

To solder the pcb I followed the following videos: AgOpenGPS PCB (V2) Assembly - YouTube and How to assemble an AgOpenGPS Autosteer PCB - YouTube
It was quite helpful to watch them before ordering the parts so I at least kind of knew what I have to do.


After the soldering was done, I felt ready for a first test. The first thing to do is to upload the code to the arduino with the Arduino IDE. I installed it and loaded Support_Files/ArduinoCode/Autosteer_USB_4.3.10/Autosteer_USB_4.3.10.ino into the program. I didnt edit anything, I simply uploaded it to the Arduino. Only issue with that was that my Arduino Nano uses an older Bootloader that had to be selected in the Arduino IDE. Then I hooked a power supply and a simple potentiometer (as a wheel angle sensor) to the pcb (+5V and ground connected as stated on the pcb, the signal wire goes to „High“) and connected a motor to the motor driver.
After that I fired up AgOpenGPS, selected the correct port here

and played around with AgOpenGPS a bit until my motor spun, slowed down when turning the potentiometer (so the simulated wheels) to zero degrees and basically did what it should. Helpful video about that: Setting up Autosteer - Hardware & Software - YouTube

In general Brians videos were very helpful to understand what I was doing, and still are:

Now I was ready to start thinking about how to adapt a motor to my steering wheel. I also still thought about what motor I should use, but I ended up with the widely recommended Pidgets Motor described in the parts list.

I wanted something robust but still as subtle as possible. In spring I bought a new mill with a lot accessory to it and to give it a first real project instead of just playing around I decided to mill a gear out of aluminum that got mounted to the steering wheel.

The other gear mounted onto the motor shaft was printed, I hope it will be a lot more quiet than two metal gears and its easy to replace if it fails. Because the steering column is quite large on this tractor, I had to make the gear bigger than I wanted to. Problem with that is that with the motor engaged but turned off its still relatively hard to turn the steering wheel by hand. Maybe I will change that in the future, but for now its has to work.
To mount the motor to the steering column I disassembled it and attached a piece of flat bar with two tapped holes in it to to the column:

After I mounted the big aluminum gear, I started to measure the distance the motor would need relative to the flat bar. I created this mechanism, based on some videos I found on YouTube:

With that I can easily attach and deattach the motor to the steering wheel with one hand. I made it spring loaded so the motor cant get in touch with the steering wheel while disengaged. Turned out great, Im happy with the handling till now.


The last really important step is to mount a wheel angle sensor. My tractor has a suspended front axle and automatically disengages the differential lock at a certain wheel angle. So I thought I can use the existing sensor, but again I was wrong.
As already stated in another post here in the forum ( Steering wheel deadband - #5 by Larsvest ), there is a control pin that connects the sensor to the king pin in the axle and that was worn out.
The sensor is placed under this casing on the left side of the tractor, unfortunately I have no image of the sensor itself in place…

I turned and milled a new one, in the picture placed next to the old one. But after a bit of troubleshooting I realized the sensor itself was broken too. I contacted the user Baraki, he really helped me out. He told me to buy a hall sensor rather than a potentiometer because its more stable and precise. So I bought this sensor:
The tractor ECU does not supply enough power to power the sensor, so I had to use power from the PCB. I wanted to share the signal between the tractor and AgOpenGPS, but that just caused a lot of trouble. I simply bought the factory sensor and installed it above the hall sensor, so every system has its own sensor (in fact I bought this sensor, which is the same as the factory one, but around 120€ cheaper, completely ridiculous: DROSSELKLAPPE DROSSELKLAPPENSENSOR DROSSELKLAPPEN-POTI POTENTIOMETER 31682994 | eBay ). For reference, the OEM number is CARRARO 131897.
Since the hall sensor has a through hole, I simply put the factory ontop of it, connected with a printed adapter. I ran a cable in the cabin and the wheel angle sensor was successfully installed.
Now the tricky parts were done.

Parallel to the setup on the tractor I wired up the control box with the pcb. I ended up with that:

Could be better, but should do it. I connected everything to a powered USB hub that connects to my tablet that I bought at that time too, together with a holder for it. I decided to use the Dell Venue 11 pro, which I got off Ebay, together with the holder and the recommended mobile power supply ( ). I just installed AgOpenGPS on it like on a PC, nothing special done to the tablet. To get internet access, I found a free solution provided by „Netzclub“, they offer 200mb free high speed data per month in Germany, that should hopefully be enough.

Now I got ready for a first real world test: First thing to do is to adjust the wheel angle sensor. I had to change the value in the Arduino code a little bit to be able to get AgOpenGPS to find the real zero point. A good way to configure autosteer is described here (it done with an older version of AgOpenGPS, but its basically still the same) :AutoSteer Settings From Default Config - YouTube

I personally just played around with these settings until I was happy with the result, but I will definitely have to do some more adjustment next summer on the field.

Some issues I had while setting up:

  • Single vs Differential mode for the WAS:
    • if you use an extra sensor just for AgOpenGPS, you use Single Mode and the pins mentioned before to connect. I tried using Differential Mode, but got just bad results with my hardware, so I went back to Single
  • I installed the WAS directly at the „turn point“ of the wheel, so I have to keep Ackerman steering in mind, especially for U-Turns:
  • what is really important: after changing anything in the Arduino code and uploading it again, you always have to send your module configuration again, otherwise the Arduino will ignore it

Machine control like automatic hydraulic lifting is in my mind, but I have encountered some problems with how my tractor controlls it. Section control for a sprayer will probably done in the future, but for now I want to test and use autosteer. Here is my setup in the cabin so far:

Now a few things I noticed that I dont like about my setup: The aluminum gear is a bit too large, this interfears with the display for engine rmp and speed of the tractor. Also the gear ratio to the steering motor is bad, so turning the steering wheel by hand while motor is engaged is not comfortable (SIMPLY BECAUSE THE CYTRON WAS BRAKING THE MOTOR, SEE UPDATE MAY 2021, RELAY TO PWM2). The cable management is not perfect at the moment, I might have to improve it a bit. But there is plenty of time for that.

I guess I forgot to mention a lot, but maybe this here helps someone out who just as me has no real clue about coding and electronics. Thanks to the community to share their knowledge and help me out with some issues, and to Brian who makes it possible to use his great software.


Update May 2021
I had to completely rebuild the WAS mount, because the new pin I milled got used up extremely quick and so had backlash. I build this based on some drawings directly from Claas:

I also added a relay switched by PWM2 that breaks the circuit between cytron and the motor to make turning the steering wheel by hand easier. After updating to v5 I also connected a current sensor (ADS712) to A0 of the arduino so that AOG can disable autosteer when a current limit is exceeded, so when I try to turn the steering wheel by hand. It measures the current of the supply voltage for the cytron.
I now use a step up module so the motor runs on 24V now instead of 12V. Was really worth it, the Phidgets now turns a lot faster and has plenty of power.
A real big problem I had was that my USB connection was basically not useable while the tablet got charged. That problem was caused by not using single point grounding. After I bought a 12V socket for my charger that was connected to the ground of the PCB these problems were gone, so far the connection is very stable.
I finally implemented machine control, works great, also with v5. The last thing I did was to add the CMPS14 in a seperate box with an extra Arduino. It seems like it makes the steering even better than with single antenna only.

Update March 2022:
After one year of use I have some things to say: First of all, I needed to print a new plastic gear for the motor, the original one lost some teeth due to extreme movements of the motor while I tried to reset my IMU with autosteer enabled.
Second thing: The hood of the cabin probably isnt the best spot for the GPS antenna, at leat for single antenna. It seems like my suspended cabin is moving too much. Moved it to the engine hood but did no testing till now, hopefully it will get better like this.
This is how my seeding went last autumn with the antenna still ontop of the cabin (zoom in to see the rows, my camera is not the best…):

I also got rid of the additional arduino for the IMU and bought two of those: Qwiic Differential I2C Bus Extender (PCA9615) Hookup Guide -
hooked one directly to the pcb, network cable in between and the IMU wired to the second i2c extender. This way there is no need for an additional module that has to be connected individually.

Last summer I paid for a RTK licence, but this post looks very promising to me, will try it out this year!

I had machine control implemented and working just fine, but was a bit worried that I might destroy the tractor electronics. So I removed it completely and bought a proximity switch used as a work switch to at least record the applied area and be able to use contour mode:


the pcb is mounted in vertical. Do you have problems with MMA and BNO ?

I have no BNO installed. MMA is not a problem, I just selected the right axis in module configuration, seems to work fine.

For the connection of phidgets motor, you are using the GX16 2 pin.

From Spec, the GX16 is rated 5 A max.

Do you have any problems ?

Gratulation - du bist den harten Weg gegangen.

pcb bekommst du bei mir in europa :slight_smile:

lg Andreas Ortner

Had no problems till now, but I didnt ran the system for some hours till now. I dont think these connectors are the best choice anyway, because theyre soldered, that might break at some point…

ich hab einige Zeit überlegt, bei dir zu kaufen, aber so hab ich den Aufbau etwas besser verstanden, außerdem habe ich Spaß am Löten :wink:
Trotzdem eine gute Adresse für Hardware und Information :+1:

1 Like

wenn du es freiwillig so gemacht hast - dann kann ich nur gratulieren!!

noch ein kleiner tipp - verwende einen hall sensor statt eines potis.
die halten viel länger in dieser umgebung.

top arbeit!

lg andreas

Ich habe zwei Sensoren, einen Hall-Sensor für AgOpenGPS und ein Poti. Das Poti ist nur für den Schlepper selbst, schaltet das Differential ab.
Du hast ja bestimmt schon ein paar Schlepper umgerüstet: Wie ist das Übersetzungsverhältnis zwischen Lenkrad und Motor meistens? Bei meinem Aufbau ist mir das viel zu schwergängig, um Motor und Lenkrad von Hand zu drehen, wäre aber gut wenn das irgendwie ginge

Wenn du den Cytron nutzt solltest du die Leitung zum motor trennen.

Der Controller hat eine bremswirkung wenn er im standby ist.

Geht auch sehr schwer wenn der Motor gar nicht eingesteckt ist, ist einfach ein ungünstiges Übersetzungsverhältnis schätze ich. Vielleicht kann ich ja eine Magnetkupplung einbauen, die dann mechanisch trennt wenn Autosteer aus ist, nur so ein Gedanke

Frag mal auf telegram wegen der Kupplung - gibt es schon…

Nice work, very well documented

1 Like

Firstly, great documentation! this will help a lot of people take there first steps into AOG.

I have a similar setup to you at the moment, with a 3d printed cog to the steering wheel.

To make the steering wheel turn easier when it is connected to the motor, have you tried adding a relay to to cut the power to the motor?
The trigger for the relay comes from pwm2 on PCB autosteer board.

This has made my steering wheel very easy to turn, even with the cogs connected.

Andreas suggested that before, I tried it while the board was not powered and it was still very hard to turn. Will have to try disconnecting the motor completely, I am not sure if I did that. If it works, id like to add something like Juliennorth build: Autosteer disengagement (torque measurement)
This way I wouldnt have to press a button or anything like this

Merry Christmas btw :evergreen_tree: :wink:

Update: Tested it today and it turns really easy when disconnected! Think I misunderstood Andreas a bit, now I’ll have to build the disengagement

1 Like

Thanks for bringing Autosteer disengagement (torque measurement) to my attention… just bought all the bits to try and add this feature. Will make turns on the headland/ obstacle avoidance much easier!

Merry Christmas to you also!

1 Like

Finished my assembly today, based on the short test I did it works great!
I modified the code quite a bit and got a (as I think) little simpler solution. I still want to change the way the amperage is interpreted by the code to get the full range of the potentiometer for fine tuning, since the ADS712 outputs around 2.5V with no spinning motor and values above that when really measuring current. I in fact assume that the input voltage to the cytron is constant, so the power drawn is directly proportional to the drawn current. So I simply compare the measure value of the potentiometer to the value of the ammeter, not dealing with real values. That way I dont need to measure the voltage. I also have no LCD, so no code for that.
I use the 2 channel relay to act as a steering switch and to break the circuit between cytron and motor when autosteer is disabled.

Test_Disengage.ino (620 Bytes)

1 Like

great job for electric sterring wheel

as idea,
why not to integrate this in “autosteer.ino”

for analog value
A0 A1 looks free on PCB V2
or WAS Aux 1 and Aux2 are also free

for numeric output with cytron board
Cytron Pwm2 is ready to cut off the signal

after need to make rules with “pwmDrive” value and the potentiometer or software value

need to simulate this data to understand more the relation of this ADS712 and Pwmdrive

I think it is already made. output from ads712 instead of the pressure transducer

Or simply.
Ads712, potentiometer and transistor on the remote, like Tervuren made it.
And then let led_enable pin (dir or pwm2) control the cut of relay to motor

1 Like