This software is responsible for receiving G-Codes from the Raspberry Pi, execute them and report back the results.
Created with eclipseArduino V2 - For more details see http://www.baeyens.it/eclipse/
sudo apt-get install gcc-avr avr-libc avrdude python-configobj python-jinja2 python-serial
mkdir tmp
cd tmp
git clone https://github.com/miracle2k/python-glob2
cd python-glob2
wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python
sudo python setup.py install
git clone git://github.com/amperka/ino.git
cd ino
sudo make install
To flash the firmware onto the device, run this:
git clone https://github.com/FarmBot/farmbot-arduino-firmware.git
cd farmbot-arduino-firmware
ino build
ino upload
All files are in /src
Farmbot_arduino_controller contains the setup() and main(). This the main sequence:
+--------------------------+
|farmbot_arduino_controller|
+-----------+--------------+
v
+--------------------------+
|Command |
+-----------+--------------+
v
+--------------------------+
|GCodeProcessor |
+-----------+--------------+
v
+--------------------------+
|***Handler |
+-------+-----------+------+
| |
| +---+
v v
+--------------+ +-----------+
|StepperControl| | PinControl|
+--------------+ +-----------+
Code type | Number | Parameters | Function |
---|
| | |
| | |Codes send to the arduino
| | |
G | | |G-Code, the codes working the same as a 3D printer G |00 |X Y Z S |Move to location at given speed for axis (don't have to be a straight line), in absolute coordinates G |01 |X Y Z S |Move to location on a straight line G |28 | |Move home all axis F | | |Farm commands, commands specially added for the farmbot F |01 |T |Dose amount of water using time in millisecond F |02 |N |Dose amount of water using flow meter that measures pulses F |11 | |Home X axis F |12 | |Home Y axis F |13 | |Home Z axis F |14 | |Calibrate X axis F |15 | |Calibrate Y axis F |16 | |Calibrate Z axis F |20 | |List all parameters and value F |21 |P |Read parameter F |22 |P V |Write parameter F |23 |P V |Update parameter (during calibration) F |31 |P |Read status F |32 |P V |Write status F |41 |P V M |Set a value V on an arduino pin in mode M (digital=0/analog=1) F |42 |P M |Read a value from an arduino pin P in mode M (digital=0/analog=1) F |43 |P M |Set the I/O mode M (input=0/output=1) of a pin P in arduino F |44 |P V W T M |Set the value V on an arduino pin P, wait for time T in miliseconds, set value W on the arduino pin P in mode M (digital=0/analog=1) F |51 |E P V |Set a value on the tool mount with I2C (not implemented) F |52 |E P |Read value from the tool mount with I2C (not implemented) F |61 |P V |Set the servo on the pin P (only pin 4 and 5) to the requested angle V F |81 | |Report end stop F |82 | |Report current position F |83 | |Report software version E | | |Emergency stop | | | | | |Codes received from the arduino | | | R | | |Report messages R |01 | |Current command started R |02 | |Current command finished succesfully R |03 | |Current command finished with error R |04 | |Current command running R |05 | |Report motor/axis state R |06 | |Report calibation state during execution R |21 |P V |Report parameter value R |31 |P V |Report status value R |41 |P V |Report pin value R |81 |X1 X2 Y1 Y2 Z1 Z2|Reporting end stops - parameters: X1 (end stop x axis min) X2 (end stop x axis max) Y1 Y2 Z1 Z2 R |82 |X Y Z |Report current position R |83 |C |Report software version R |99 |C |Debug message
The state is reported for each axis individually, using the prefix X, Y or Z
Value | Description |
---|---|
0 | Idle |
1 | Starting motor |
2 | Accelerating |
3 | Cruising |
4 | Decelerating |
5 | Stopping motor |
6 | Crawling |
The status for calibration is also reported for the axis that is calibrating
Value | Description |
---|---|
0 | Idle |
1 | Moving to home |
2 | Moving to end |
Parameters | Description | Unit of Measurement |
---|---|---|
X | X movement | steps |
Y | Y movement | steps |
Z | Z movement | steps |
S | Speed | steps/second |
Q | Quanity | counter ticks |
T | Time | seconds |
C | Comment | text |
P | Parameter/pin number | # |
V | Value number | # |
W | Secondary value | # |
L | Number | # |
E | Element (in tool mount) | # |
M | Mode (set pin mode) | 0 = output / 1 = input |
M | Mode (read/write) | 0 = digital / 1 = analog |
| |
XA |End stop 1 on x axis |0/1 XB |End stop 2 on x axis |0/1 YA |End stop 1 on y axis |0/1 YB |End stop 2 on y axis |0/1 ZA |End stop 1 on z axis |0/1 ZB |End stop 2 on z axis |0/1
Parameter name | Parameter id |
---|---|
PARAM_VERSION | 0 |
MOVEMENT_TIMEOUT_X | 11 |
MOVEMENT_TIMEOUT_Y | 12 |
MOVEMENT_TIMEOUT_Z | 13 |
MOVEMENT_INVERT_ENDPOINTS_X | 21 |
MOVEMENT_INVERT_ENDPOINTS_Y | 22 |
MOVEMENT_INVERT_ENDPOINTS_Z | 23 |
MOVEMENT_INVERT_MOTOR_X | 31 |
MOVEMENT_INVERT_MOTOR_Y | 32 |
MOVEMENT_INVERT_MOTOR_Z | 33 |
MOVEMENT_STEPS_ACC_DEC_X | 41 |
MOVEMENT_STEPS_ACC_DEC_Y | 42 |
MOVEMENT_STEPS_ACC_DEC_Z | 43 |
MOVEMENT_HOME_UP_X | 51 |
MOVEMENT_HOME_UP_Y | 52 |
MOVEMENT_HOME_UP_Z | 53 |
MOVEMENT_MIN_SPD_X | 61 |
MOVEMENT_MIN_SPD_Y | 62 |
MOVEMENT_MIN_SPD_Z | 63 |
MOVEMENT_MAX_SPD_X | 71 |
MOVEMENT_MAX_SPD_Y | 72 |
MOVEMENT_MAX_SPD_Z | 73 |
MOVEMENT_MAX_SPD_X | 71 |
MOVEMENT_MAX_SPD_Y | 72 |
MOVEMENT_MAX_SPD_Z | 73 |
ENCODER_ENABLED_X | 101 |
ENCODER_ENABLED_Y | 102 |
ENCODER_ENABLED_Z | 103 |
ENCODER_MISSED_STEPS_MAX_X | 111 |
ENCODER_MISSED_STEPS_MAX_Y | 112 |
ENCODER_MISSED_STEPS_MAX_Z | 113 |
ENCODER_MISSED_STEPS_DECAY_X | 121 |
ENCODER_MISSED_STEPS_DECAY_Y | 122 |
ENCODER_MISSED_STEPS_DECAY_Z | 123 |
MOVEMENT_AXIS_NR_STEPS_X | 141 |
MOVEMENT_AXIS_NR_STEPS_Y | 142 |
MOVEMENT_AXIS_NR_STEPS_Z | 143 |
PIN_GUARD_1_PIN_NR | 201 |
PIN_GUARD_1_TIME_OUT | 202 |
PIN_GUARD_1_ACTIVE_STATE | 203 |
PIN_GUARD_2_PIN_NR | 205 |
PIN_GUARD_2_TIME_OUT | 206 |
PIN_GUARD_2_ACTIVE_STATE | 207 |
PIN_GUARD_3_PIN_NR | 211 |
PIN_GUARD_3_TIME_OUT | 212 |
PIN_GUARD_3_ACTIVE_STATE | 213 |
PIN_GUARD_4_PIN_NR | 215 |
PIN_GUARD_4_TIME_OUT | 216 |
PIN_GUARD_4_ACTIVE_STATE | 217 |
PIN_GUARD_5_PIN_NR | 221 |
PIN_GUARD_5_TIME_OUT | 222 |
PIN_GUARD_5_ACTIVE_STATE | 223 |
Pin | Function |
---|---|
16 | Encoder X channel A |
17 | Encoder X channel B |
23 | Encoder Y channel A |
25 | Encoder Y channel B |
27 | Encoder Z channel A |
29 | Encoder Z channel B |