andino_firmware
The andino_firmware package
README
andino_firmware
Firmware code to be run in the arduino microcontroller for proper control of the motors of the robot.
Connection
Check encoder_driver.h and motor_driver.h files to check the expected pins for the connection.
Installation
Arduino
In Arduino IDE, go to tools->Manage Libraries ... and install:
“Adafruit BNO055”
Verify and Upload andino_firmware.ino to your arduino board.
PlatformIO
Install dependencies
sudo apt-get install python3.10-venvInstall platformio
curl -fsSL -o /tmp/get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
python3 /tmp/get-platformio.py
Add platformio to your $PATH:
echo "PATH=\"\$PATH:\$HOME/.platformio/penv/bin\"" >> $HOME/.bashrc
source $HOME/.bashrc
Build and upload the firmware
If you’re using an arduino uno
pio run --target upload -e unoIf you’re using an arduino nano
pio run --target upload -e nanoatmega328
Description
Via serial connection (57600 baud) it is possible to interact with the microcontroller. The interface is described in the commands.h file. Here are the most used commands:
Get encoder values:
'e'Set open-loop speed for the motors[pwm]
'o <left> <right>'Example to move forward full speed:
'o 255 255'Range
[-255 -> 255]
Set closed-loop speed for the motors[ticks/sec]
'm <left> <right>'Important!: See the
Test it!section.
Set PID values:
'u <kp> <kd> <ki> <offset>'
Note: Remember the carriage return character at the end of the message.
Test it!
A serial port connection must be created at 57600 bauds. You can use the serial monitor from Arduino IDE for example.
Open loop verification:
Send
o 255 255to go full speedSend
o 0 0to stop it.
Read the encoders
Send
eto get the encoders values.
Get the ticks per revolution of your motor.
First set the encoders to zero, (reeboting with
r).Then rotate your motors as many revs you want,(say 10 for example) and then divide the encoder ticks per the number of revs. -> Then you get the ticks per revolution. Save this value, it is calibration for the control loop.
Closed loop verification
Send
m <tps> <tps>wheretpsstands forticks per second. For example if your motor-encoder system gets 700 ticks per revolution then sendingm 700 700will rotate both motors at 1 rev per sec. (~3.14rad/sec)