farmbot-arduino-controller ========================== This software is responsible for receiving G-Codes from the Raspberry Pi, executing them, and reporting back the results. Technicals ========================== Created with eclipseArduino V2 - For more details see http://www.baeyens.it/eclipse/ Command line flash tool installation ========================== ``` sudo apt-get install arduino 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 ``` Command line flash tool use ========================== **NOTE:** We tag releases when they are stable. The latest version (on master) is not guaranteed to be stable. See [releases](https://github.com/FarmBot/farmbot-arduino-firmware/releases) to find a stable release. **OPTION A:** For less stable "edge" version: ``` git clone https://github.com/FarmBot/farmbot-arduino-firmware ``` **OPTION B:** For stable release 1.0: ``` git clone -b 'alpha-1.0' --single-branch https://github.com/FarmBot/farmbot-arduino-firmware ``` To flash the firmware onto the device, run this: ``` cd farmbot-arduino-firmware ino build ino upload ``` Software overview ================= All files are in `/src` Farmbot_arduino_controller contains the setup() and main(). This is the main sequence: ``` +--------------------------+ |farmbot_arduino_controller| +-----------+--------------+ v +--------------------------+ |Command | +-----------+--------------+ v +--------------------------+ |GCodeProcessor | +-----------+--------------+ v +--------------------------+ |***Handler | +-------+-----------+------+ | | | +---+ v v +--------------+ +-----------+ |StepperControl| | PinControl| +--------------+ +-----------+ ``` Codes used for communication ============================ Pin Numbering ------------- Tag |Pin Nr|Comment -----------------|------|------- X_STEP_PIN | 54 | X axis step signal X_DIR_PIN | 55 | X axis direction choice X_ENABLE_PIN | 38 | X axis enable X_MIN_PIN | 3 | X axis end stop at home position X_MAX_PIN | 2 | X axis end stop at far position X_ENCDR_A | 16 | X axis encoder A channel X_ENCDR_B | 17 | X axis encoder B channel X_ENCDR_A_Q | 31 | X axis encoder A channel for quarature (not implemented) X_ENCDR_B_Q | 33 | X axis encoder B channel for quarature (not implemented) Y_STEP_PIN | 60 | Y axis step signal Y_DIR_PIN | 61 | Y axis direction choice Y_ENABLE_PIN | 56 | Y axis enable Y_MIN_PIN | 14 | Y axis end stop at home position Y_MAX_PIN | 15 | Y axis end stop at far position Y_ENCDR_A | 23 | Y axis encoder A channel Y_ENCDR_B | 25 | Y axis encoder B channel Y_ENCDR_A_Q | 35 | Y axis encoder A channel for quarature (not implemented) Y_ENCDR_B_Q | 37 | Y axis encoder B channel for quarature (not implemented) Z_STEP_PIN | 46 | Z axis step signal Z_DIR_PIN | 48 | Z axis direction choice Z_ENABLE_PIN | 62 | Z axis enable Z_MIN_PIN | 18 | Z axis end stop at home position Z_MAX_PIN | 19 | Z axis end stop at far position Z_ENCDR_A | 27 | Z axis encoder A channel Z_ENCDR_B | 29 | Z axis encoder B channel Z_ENCDR_A_Q | 39 | Z axis encoder A channel for quarature (not implemented) Z_ENCDR_B_Q | 41 | Z axis encoder B channel for quarature (not implemented) LED_PIN | 13 | on board LED FAN_PIN | 9 | RAMPS board fan pin HEATER_0_PIN | 10 | RAMPS board heating pin 0 HEATER_1_PIN | 8 | RAMPS board heating pin 1 SERVO_0_PIN | 4 | Servo motor 0 signal pin SERVO_1_PIN | 5 | Servo motor 1 signal pin G-Codes ------- ### Codes sent to the arduino Code type|Number|Parameters|Function ---------|------|----------|-------- 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 milliseconds, 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 Code type|Number|Parameters|Function ---------|------|----------|-------- R | | |Report messages R |01 | |Current command started R |02 | |Current command finished successfully R |03 | |Current command finished with error R |04 | |Current command running R |05 | |Report motor/axis state R |06 | |Report calibration 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 Axis states (R05) ----------------- 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 Calibration states (R06) ------------------------ 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 for commands ----------------------- Parameters|Description |Unit of Measurement ----------|-----------------------|------------------- X |X movement |steps Y |Y movement |steps Z |Z movement |steps S |Speed |steps/second Q |Queue number |# 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 Arduino parameter numbers ------------------------ Parameter name |Parameter id -----------------------------|------------ PARAM_CONFIG_OK |2 PARAM_USE_EEPROM |3 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_ENABLE_ENDPOINTS_X |25 MOVEMENT_ENABLE_ENDPOINTS_Y |26 MOVEMENT_ENABLE_ENDPOINTS_Z |27 MOVEMENT_INVERT_MOTOR_X |31 MOVEMENT_INVERT_MOTOR_Y |32 MOVEMENT_INVERT_MOTOR_Z |33 MOVEMENT_SECONDARY_MOTOR_X |36 MOVEMENT_SECONDARY_MOTOR_INVERT_X |37 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 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 IMPORTANT ========= Farmbot will NOT move until the configuration has been approved. To approve manually, send 'F22 P2 V1 Q0' (after the next PR) To move, use the command 'G00 X0 Y0 Z0 Q0' where you type in the coordinates just after X, Y and Z.