This repository have all the main Otto DIY robot libraries for Arduino compatible boards
⭐ Star us on GitHub, it helps!
- Download the .zip Otto libraries here
- Open Arduino IDE and navigate to Sketch > Include Library > Add .ZIP Library. At the top of the drop down list, select the option to "Add .ZIP Library".
- Navigate to the .zip file's location, that you just downloaded and open it.
- In the main window you will see in the bottom back area a message that it has been installed.
- To verify they are properly installed, go to Sketch > Include Library menu. You should now see the library at the bottom of the drop-down menu.
That means it is ready to use Otto example codes! you can find them in File > Examples > OttoDIYLib for more details or other ways to install libraries visit this link
You can also find this library in the Arduino Manager as Otto DIYLib
for quick installation, (do not use other non compatible libraries).
- Arduino Nano
- Arduino Uno
- Arduino Micro
- Arduino Mega
- Arduino Mini
- Arduino Leonardo
- Arduino Nano Every
- ESP8266
- ESP32
Base set of libraries for any biped robot that uses 4 motors in the legs as Otto.
Otto.h
andOtto.cpp
contains all the main functionsOtto_gestures.h
contains all the gestures functionsOtto_mouths.h
contains all the mouth functionsOtto_sounds.h
contains all the sound functionsOtto_matrix.h
contains all the matrix functionsOscillator.h
is the main algorithm for the servos "smooth" movementSerialCommand.c
is for Bluetooth communication vis Software serial
#include <Otto.h>
Otto Otto;
These are the default signal connections for the servos and buzzer for AVR Arduino boards in the examples, you can alternatively connect them in different pins if you also change the pin number.
#define LeftLeg 2 // left leg pin
#define RightLeg 3 // right leg pin
#define LeftFoot 4 // left foot pin
#define RightFoot 5 // right foot pin
#define Buzzer 13 //buzzer pin
When starting the program, the 'init' function must be called with the use of servo motor calibration as a parameter.
It is best to place the servo motors in their home position after initialization with 'home' function.
void setup() {
Otto.init(LeftLeg, RightLeg, LeftFoot, RightFoot, true, Buzzer);
Otto.home();
}
The home()
function makes the servos move to the center position, Otto standing in the neutral position.
Many preconfigured movements are available in the library:
These are actions that involve the use of the 4 servo motors with the oscillation library combined in synergy and with smooth movements. You can change the values inside the pratensis ()
to alter the speed, direction, and size of the movements.
Otto.walk(steps, time, dir);
steps
are just how many times you want to repeat that movement without the need of further coding or adding additional rows.time
(noted asT
below) translated in milliseconds is the duration of the movement. For a higher time value is slower the movement, try values between 500 to 3000.dir
is the direction:1
for forward or-1
backward
Example:
Otto.walk(2, 1000, 1);
In this example 2
is the number of steps, 1000
is "TIME" in milliseconds and it will walk forward.
For example changing T value: Slow=2000 Normal=1000 Fast= 500
Otto.turn(steps, T, dir);
(# of steps, T, to the left or -1 to the right)
Otto.bend (steps, T, dir);
(# of steps, T, 1 bends to the left or -1 to the right)
Otto.shakeLeg (steps, T, dir);
(# of steps, T, 1 bends to the left or -1 to the right)
Otto.jump(steps, T);
(# of steps up, T) this one does not have a dir parameter Otto doesn't really jump ;P
Similar to movements but more fun! you can adjust a new parameter h
"height or size of the movements" to make the dance more interesting.
Otto.moonwalker(steps, T, h, dir);
(# of steps, T, h, 1 to the left or -1 to the right)
h
: you can try change between 15 and 40
Example:
Otto.moonwalker(3, 1000, 25,1);
Otto.crusaito(steps, T, h, dir);
(# of steps, T, h, 1 to the left or -1 to the right)
h
: you can try change between 20 to 50
Otto.flapping(steps, T, h, dir);
(# of steps, T, h, 1 to the front or -1 to the back)
h
: you can try change between 10 to 30
Otto.swing(steps, T, h);
h
: you can try change between 0 to 50
Otto.tiptoeSwing(steps, T, h);
h
: you can try change between 0 to 50
Otto.jitter(steps, T, h);
h
: you can try change between 5 to 25
Otto.updown(steps, T, h);
h
: you can try change between 0 to 90
Otto.ascendingTurn(steps, T, h);
h
: you can try change between 5 to 15
Otto.sing(songName);
By just changing what is inside the () we can change the sounds easily to 19 different ones. Simple as copying and pasting in a new row to make the sounds as many times as you like.
- S_connection
- S_disconnection
- S_buttonPushed
- S_mode1
- S_mode2
- S_mode3
- S_surprise
- S_OhOoh
- S_OhOoh2
- S_cuddly
- S_sleeping
- S_happy
- S_superHappy
- S_happy_short
- S_sad
- S_confused
- S_fart1
- S_fart2
- S_fart3
Otto can emit several sounds with the 'sing' function:
Otto._tone(10, 3, 1);
(noteFrequency, noteDuration, silentDuration)
Otto.bendTones (100, 200, 1.04, 10, 10);
(initFrequency, finalFrequency, prop, noteDuration, silentDuration)
Finally, our favorite, This is a combination of the 2 previous functions we learnt sing + walk Their goal is to express emotions by combining sounds with movements at the same time and if you have the LED matrix you can show them in the robot mouth!
Otto.playGesture(gesture);
Otto.playGesture(OttoHappy);
Otto.playGesture(OttoSuperHappy);
Otto.playGesture(OttoSad);
Otto.playGesture(OttoVictory);
Otto.playGesture(OttoAngry);
Otto.playGesture(OttoSleeping);
Otto.playGesture(OttoFretful);
Otto.playGesture(OttoLove);
Otto.playGesture(OttoConfused);
Otto.playGesture(OttoFart);
Otto.playGesture(OttoWave);
Otto.playGesture(OttoMagic);
Otto.playGesture(OttoFail);
As you see it’s very simple, but what it does is quite advanced.
The OttoDIYLib is licensed under the terms of the GPL Open Source license and is available for free.
Welcome to the Otto DIY community
Big thanks to all our contributors
- @JavierIH
- @Obijuan
- @jarsoftelectrical
- @stembotvn
- @sfranzyshen
- @tehniq3
- @logix5
- @DiegoSSJ
- @loreman
- @justinotherguy
- @bhm93
- @wendtbw
- @agomezgar
- @BodoMinea
- @chico
- @PinkDev1
- @MXZZ
- @Pawka
- @per1234
- @FedericoBusero
- @hulkco
- @mishafarms
- @nisha-appanah
- @pabloevaristo
- @ProgrammerBruce
- @Nca78
- @dleval
- @coliss86
- @namepatrik
Contributing to this software is warmly welcomed. There are 3 ways you can contribute to this project:
- Test and if find a problem then post an issue.
- Helps us solve the issues or other bugs.
- Improve the code. You can do this basically by forking, committing modifications and then pulling requests.Please add a change log and your contact into file header.
Thanks for your contribution in advance.