ไลบรารี่สำหรับหุ่นยนต์ ModuleMore Sumo Robot V2 สำหรับใช้ฝึกฝนการเขียนโปรแกรมโดยใช้หุ่นยนต์จริงช่วยให้เห็นภาพยิ่งขึ้น
ไลบรารี่นี้ประกอบด้วยฟังก์ชันอำนวยความสะดวกเพื่อให้สามารถอ่านค่าเซนเซอร์ต่าง ๆ ได้อย่างเป็นรูปธรรม โดยไม่จำเป็นต้องยุ่งกับส่วนที่เป็น low-level code มากนัก จึงเหมาะสำหรับผู้เริ่มต้น และผู้ที่สนใจในการนำไปแข่งขันในรายการ Mini Sumo Robot ต่าง ๆ
- Open the Arduino IDE, select
Sketch
->Include Library
->Manage Libraries...
. - Search for
ModuleMore Sumo V2
. - Click
Install
to install the library. - Examples can be opened in Arduino IDE from
File
->Examples
->ModuleMore Sumo V2
->ProcessedData
.
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy(SENSOR_VL530X);
line_detector _line;
driver _driver;
robot_ui _robot;
void setup()
{
Serial.begin (115200);
while(!Serial) delay(1);
_enemy.init();
_line.init();
_driver.init();
_robot.init();
}
void loop()
{
_robot.update();
_line.update();
_enemy.update();
if (_robot.isRobotStartAuto()) {
/**
* @brief YOU CODE
*/
} else {
_driver.stop();
}
delay(1);
}
Motor Driver (driver)
Initialize the I/O pins of the controller.
Must be called once before using motor drive function.
Syntax:
void driver.init(void);
Parameters: None
Returns: None
Example Code:
driver _driver;
void setup() {
_driver.init();
}
Stop All motor safely.
Syntax:
void driver.stop(void);
Parameters: None
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
driver _driver;
void setup() {
_driver.init();
_driver.stop(); //Stop All motors.
}
Block the program for specific time (in millisecond).
Note that motor will continue rotate if movement function is called before this function.
Syntax:
void driver.wait(uint32_t ms);
Parameters:
- ms - Time to wait until next function run (in millisecond).
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
driver _driver;
void setup() {
_driver.init();
_driver.forward(); //Forward
_driver.wait(5000); //Wait for 5s
_driver.stop(); //Stop All motors
//The result is the robot
//move forward for 5s then stop
}
Control robot forward without limit of time.
Syntax:
void driver.forward();
Parameters: None
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
driver _driver;
void setup() {
_driver.init();
_driver.stop();
_driver.wait(1000); //Wait for 1s, The robot remain stop in this period
_driver.forward(); //Send command to move forward
_driver.wait(1000); //Wait for 1s, The robot will continue forward in this period
_driver.stop(); //Stop All motors
}
Similar functions
void reverse();
void rotateLeft();
void rotateRight();
void arcTurnSharpLeft();
void arcTurnSharpRight();
void arcTurnMidLeft();
void arcTurnMidRight();
void arcTurnWideLeft();
void arcTurnWideRight();
void ReverseArcTurnSharpLeft();
void ReverseArcTurnSharpRight();
void ReverseArcTurnMidLeft();
void ReverseArcTurnMidRight();
void ReverseArcTurnWideLeft();
void ReverseArcTurnWideRight();
Control robot forward without limit of time with specific speed.
Syntax:
void driver.forward(drive_speed_t drive_speed);
Parameters:
- drive_speed - Speed of the robot.
SPEED_SLOW
- Slow speedSPEED_MEDIUM
- Medium speed (Default)SPEED_FAST
- Fast speedSPEED_FASTEST
- Fastest speed
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
driver _driver;
void setup() {
_driver.init();
_driver.stop(); //Stop All motors
_driver.wait(1000); //Wait for 1s
_driver.forward(SPEED_SLOW); //Forward
_driver.wait(1000); //Wait for 1s
_driver.forward(SPEED_MEDIUM); //Forward
_driver.wait(1000); //Wait for 1s
_driver.forward(SPEED_FAST); //Forward
_driver.wait(1000); //Wait for 1s
}
Similar functions
void reverse(drive_speed_t drive_speed);
void rotateLeft(drive_speed_t drive_speed);
void rotateRight(drive_speed_t drive_speed);
void arcTurnSharpLeft(drive_speed_t drive_speed);
void arcTurnSharpRight(drive_speed_t drive_speed);
void arcTurnMidLeft(drive_speed_t drive_speed);
void arcTurnMidRight(drive_speed_t drive_speed);
void arcTurnWideLeft(drive_speed_t drive_speed);
void arcTurnWideRight(drive_speed_t drive_speed);
void ReverseArcTurnSharpLeft(drive_speed_t drive_speed);
void ReverseArcTurnSharpRight(drive_speed_t drive_speed);
void ReverseArcTurnMidLeft(drive_speed_t drive_speed);
void ReverseArcTurnMidRight(drive_speed_t drive_speed);
void ReverseArcTurnWideLeft(drive_speed_t drive_speed);
void ReverseArcTurnWideRight(drive_speed_t drive_speed);
Control robot forward for specific of time (in millisecond).
Syntax:
void driver.forwardForMs(uint32_t ms);
Parameters:
- ms - Time to forward until stop (in millisecond).
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
driver _driver;
void setup() {
_driver.init();
_driver.forwardForMs(1000); //Forward for 1s and stop
}
Similar functions
void reverseForMs(uint32_t ms);
void rotateLeftForMs(uint32_t ms);
void rotateRightForMs(uint32_t ms);
void arcTurnSharpLeftForMs(uint32_t ms);
void arcTurnSharpRightForMs(uint32_t ms);
void arcTurnMidLeftForMs(uint32_t ms);
void arcTurnMidRightForMs(uint32_t ms);
void arcTurnWideLeftForMs(uint32_t ms);
void arcTurnWideRightForMs(uint32_t ms);
void ReverseArcTurnSharpLeftForMs(uint32_t ms);
void ReverseArcTurnSharpRightForMs(uint32_t ms);
void ReverseArcTurnMidLeftForMs(uint32_t ms);
void ReverseArcTurnMidRightForMs(uint32_t ms);
void ReverseArcTurnWideLeftForMs(uint32_t ms);
void ReverseArcTurnWideRightForMs(uint32_t ms);
Control robot forward for specific of time (in millisecond). And set the speed of the motor.
Syntax:
void driver.forwardForMs(uint32_t ms, drive_speed_t drive_speed);
Parameters:
- ms - Time to forward until stop (in millisecond).
- speed - Speed of the motor
SPEED_SLOW
SPEED_MEDIUM
SPEED_FAST
SPEED_FASTEST
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
driver _driver;
void setup() {
_driver.init();
_driver.wait(1000); //Wait for 1s
_driver.forwardForMs(1000, SPEED_FAST); //Forward for 1s and stop
_driver.wait(1000); //Wait for 1s
_driver.backwardForMs(1000, SPEED_SLOW); //Backward for 1s and stop
}
Similar functions
void reverseForMs(uint32_t ms, drive_speed_t drive_speed);
void rotateLeftForMs(uint32_t ms, drive_speed_t drive_speed);
void rotateRightForMs(uint32_t ms, drive_speed_t drive_speed);
void arcTurnSharpLeftForMs(uint32_t ms, drive_speed_t drive_speed);
void arcTurnSharpRightForMs(uint32_t ms, drive_speed_t drive_speed);
void arcTurnMidLeftForMs(uint32_t ms, drive_speed_t drive_speed);
void arcTurnMidRightForMs(uint32_t ms, drive_speed_t drive_speed);
void arcTurnWideLeftForMs(uint32_t ms, drive_speed_t drive_speed);
void arcTurnWideRightForMs(uint32_t ms, drive_speed_t drive_speed);
void ReverseArcTurnSharpLeftForMs(uint32_t ms, drive_speed_t drive_speed);
void ReverseArcTurnSharpRightForMs(uint32_t ms, drive_speed_t drive_speed);
void ReverseArcTurnMidLeftForMs(uint32_t ms, drive_speed_t drive_speed);
void ReverseArcTurnMidRightForMs(uint32_t ms, drive_speed_t drive_speed);
void ReverseArcTurnWideLeftForMs(uint32_t ms, drive_speed_t drive_speed);
void ReverseArcTurnWideRightForMs(uint32_t ms, drive_speed_t drive_speed);
Line Detector (line_detector)
Initialize the I/O pins of the controller. Must be called once before using Line Detector functions.
Syntax:
void line_detector.init(void);
Parameters: None
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
line_detector _line;
void setup() {
_line.init();
}
Use this inside the loop() to keep sensor up-to-date or sensor data will stay the same.
Syntax:
void line_detector.update(void);
Parameters: None
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
line_detector _line;
void setup() {
_line.init();
}
void loop() {
_line.update();
}
Use this inside Serial.print to monitor the detection status in plain text. Which is useful for check the sensor healthy.
Syntax:
const char* line_detector.str(void);
Parameters: None
Returns:
"LINE_DETECTION_NONE"
"LINE_DETECTION_FRONT"
"LINE_DETECTION_FRONT_LEFT"
"LINE_DETECTION_FRONT_RIGHT"
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
line_detector _line;
void setup() {
_line.init();
}
void loop() {
_line.update();
Serial.println(_line.str());
delay(50);
}
When the line detection str return wrong value, try to set the threshold by half of black and white value. The black and white value can be obtained from getRawValue function.
Syntax:
void line_detector.setThreshold(int threshold);
Parameters:
- threshold - Value of infrared line sensor that considered to be white line detected.
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
line_detector _line;
void setup() {
_line.init();
_line.setThreshold(200);
}
Return the state of detection for examples.
Syntax:
detection_t line_detector.get_detection(void);
Parameters: None
Returns:
LINE_NOTFOUND
LINE_FRONT
LINE_FRONT_LEFT
LINE_FRONT_RIGHT
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
line_detector _line;
void setup() {
_line.init();
}
void loop() {
_line.update();
if(_line.get_detection() == LINE_FRONT) {
Serial.println("Line : Detected front");
}else if(_line.get_detection() == LINE_FRONT_LEFT) {
Serial.println("Line : Detected on left");
}else if(_line.get_detection() == LINE_FRONT_RIGHT) {
Serial.println("Line : Detected on right");
}else{
Serial.println("Line : Not detected :)");
}
delay(100);
}
Return the state of detection for examples.
Syntax:
int16_t line_detector.get_detection(infrared_idx idx);
Parameters:
- idx - Index of sensor that you interest to check raw data. Options are
IR_LEFT
orIR_RIGHT
Returns: 0-1023 - 0 Mean black area. more value mean more white.
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
line_detector _line;
void setup() {
_line.init();
}
void loop() {
_line.update();
Serial.print(_line.getRawData(IR_LEFT));
Serial.print(", ");
Serial.println(_line.getRawData(IR_RIGHT));
delay(100);
}
Return the state of detection for examples.
Syntax:
bool line_detector.isLineDetected();
Parameters: None
Returns:
True / False
- Line detected (True mean white line found by any sensors or all sensors).
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
line_detector _line;
void setup() {
_line.init();
}
void loop() {
_line.update();
Serial.print("Line Detected : ");
Serial.println(_line.isLineDetected());
delay(100);
}
Similar function:
bool line_detector.isLineDetectedFront(); //Return True, When white line found by both sensor on front.
bool line_detector.isLineDetectedFrontLeft(); //Return True, When white line found by left sensor.
bool line_detector.isLineDetectedFrontRight();//Return True, When white line found by right sensor.
Enemy Detection (enemy_detector)
Initialize the I/O pins of the controller. Must be called once before using Enemy Detector functions.
Syntax:
void enemy_detector.init(void);
Parameters: None
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
}
Use this inside the loop() to keep sensor up-to-date or sensor data will stay the same.
Syntax:
void enemy_detector.update();
Parameters: None
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
}
void loop() {
_enemy.update();
delay(10);
}
Return the position of enemy for monitor purpose.
Syntax:
const char *enemy_detector.pos_str();
Parameters: None
Returns:
"NONE"
"FRONT_LEFT"
"FRONT"
"FRONT_RIGHT"
"FRONT_AND_FRONT_LEFT"
"FRONT_AND_FRONT_RIGHT"
"FRONT_ALL"
"IMPOSSIBLE"
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
}
void loop() {
_enemy.update();
Serial.print("Enemy on : ");
Serial.println(_enemy.pos_str());
delay(50);
}
Return the range of enemy for monitor purpose.
Syntax:
const char *enemy_detector.range_str();
Parameters: None
Returns:
"NONE"
"CLOSE"
"MID"
"FAR"
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
}
void loop() {
_enemy.update();
Serial.print("Enemy distance : ");
Serial.println(_enemy.range_str());
delay(50);
}
Set the maximum distance to consider a detected object as an enemy (in mm). The distance more than this threshold will be ignore.
Syntax:
void enemy_detector.setDetectThreshold(int16_t threshold);
Parameters:
- threshold - The maximum distance to consider a detected object as an enemy (in mm). (Default : 600)
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
_enemy.setDetectThreshold(600);
}
Set the return value if the enemy not valid.
Syntax:
void enemy_detector.setInvalidRange(int16_t threshold);
Parameters:
- threshold - The value that will be returned when enemy not found (Default : 1000)
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
_enemy.setInvalidRange(1000);
}
Set the maximum distance to consider a detected object as an enemy (in mm). The distance more than this threshold will be ignore.
Syntax:
void enemy_detector.setDetectThreshold(int16_t threshold);
Parameters:
- threshold - The maximum distance to consider a detected object as an enemy (in mm). (Default : 600)
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
_enemy.setDetectThreshold(600);
}
Set the range at which an object is considered to be at a close distance.
Syntax:
void enemy_detector.setRangeClose(int16_t threshold);
Parameters:
- threshold - The distance less than this value will be considered as close distance. (default : 100)
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
_enemy.setRangeClose(100);
}
Set the range at which an object is considered to be at a medium distance.
Syntax:
void enemy_detector.setRangeMid(int16_t threshold);
Parameters:
- threshold - The distance less than this value will be considered as medium distance. (default : 200)
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
_enemy.setRangeMid(200);
}
Set the range at which an object is considered to be at a medium distance.
Syntax:
void enemy_detector.setRangeFar(int16_t threshold);
Parameters:
- threshold - The distance less than this value will be considered as far distance. (default : 300)
Returns: None
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
_enemy.setRangeFar(300);
}
Check whether an enemy has been detected in any direction.
Syntax:
bool enemy_detector.detected();
Parameters: None
Returns:
True
for enemy found
False
for enemy not found
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
}
void loop() {
_enemy.update();
Serial.print("Enemy found = ");
Serial.println(_enemy.detected());
}
Check if enemy on left side
Syntax:
bool enemy_detector.at_left();
Parameters: None
Returns:
True
for enemy found on left side
False
for enemy not found on left side
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
}
void loop() {
_enemy.update();
Serial.print("Enemy found on left = ");
Serial.println(_enemy.at_left());
}
Similar function
bool at_right()
bool at_front()
bool at_front_left()
bool at_front_right()
Check if enemy is close (distance less than close threshold)
Syntax:
bool enemy_detector.enemy_close();
Parameters: None
Returns:
True
when lastest enemy found located close distance
False
when lastest enemy found not located close distance
Example Code:
#include <Arduino.h>
#include "ModuleMoreSumoV2.h"
enemy_detector _enemy;
void setup() {
_enemy.init();
}
void loop() {
_enemy.update();
Serial.print("Enemy is close = ");
Serial.println(_enemy.enemy_close());
}
Similar function
bool enemy_close();
bool enemy_mid();
bool enemy_far();