Простой и доступный робот, которого можно изготовить при помощи 3D-печати.
В качестве контроллера, используется Arduino-совместимая плата (Adafruit Pro Trinket).
В качестве двигателей — два шаговых двигателя с редуктором (28YBJ48), только вместо драйвера ULN2003, используется драйвер ULN2803.
Для подъёма-опускания фломастера, используется мини-сервомашинка (похожа на SG-90).
Тестовый скетч — TIRL_Trinket_TEST.ino:
// Download and install Trinket Pro drivers from
// https://learn.adafruit.com/introducing-pro-trinket/starting-the-bootloader
// [Tools] -> [Programmer] -> "USBtinyISP"
// [Tools] -> [Board] -> "Pro Trinket 3V/12 Mhz (USB)"
#include <Servo.h>
// setup servo
int servoPin = 8;
int PEN_DOWN = 170; // angle of servo when pen is down
int PEN_UP = 80; // angle of servo when pen is up
Servo penServo;
int wheel_dia=66.25; // # mm (increase = spiral out)
int wheel_base=112; //, # mm (increase = spiral in)
int steps_rev=128; //, # 512 for 64x gearbox, 128 for 16x gearbox
int delay_time=6; // # time between steps in ms
// Stepper sequence org->pink->blue->yel
int L_stepper_pins[] = {10, 12, 13, 11};
int R_stepper_pins[] = {3, 5, 6, 4};
int fwd_mask[][4] = {{1, 0, 1, 0},
{0, 1, 1, 0},
{0, 1, 0, 1},
{1, 0, 0, 1}};
int rev_mask[][4] = {{1, 0, 0, 1},
{0, 1, 0, 1},
{0, 1, 1, 0},
{1, 0, 1, 0}};
void setup() {
randomSeed(analogRead(1));
// put your setup code here, to run once:
Serial.begin(9600);
for(int pin=0; pin<4; pin++){
pinMode(L_stepper_pins[pin], OUTPUT);
digitalWrite(L_stepper_pins[pin], LOW);
pinMode(R_stepper_pins[pin], OUTPUT);
digitalWrite(R_stepper_pins[pin], LOW);
}
penServo.attach(servoPin);
Serial.println("setup");
}
void loop(){ // draw a calibration box 4 times
pendown();
for(int x=0; x<12; x++){
forward(100);
left(90);
}
penup();
done(); // releases stepper motor
while(1); // wait for reset
}
// ----- HELPER FUNCTIONS -----------
int step(float distance){
int steps = distance * steps_rev / (wheel_dia * 3.1412); //24.61
/*
Serial.print(distance);
Serial.print(" ");
Serial.print(steps_rev);
Serial.print(" ");
Serial.print(wheel_dia);
Serial.print(" ");
Serial.println(steps);
delay(1000);*/
return steps;
}
void forward(float distance){
int steps = step(distance);
Serial.println(steps);
for(int step=0; step
Элементы для 3D-печати:
1 x Держатель шарика
1 x Шасси робота
2 x Колёса для шагового двигателя 28BYJ-48
2 x Держатель шагового двигателя
1 x Держатель фломастера и сервомашинки
1 x Упор-ограничитель для фломастера
Ссылки
Low-Cost, Arduino-Compatible Drawing Robot
http://mirobot.io
По теме
LogoBot - простой робот для изготовления при помощи 3D-печати
Изготовление виброботов при помощи 3D-печати
PANDA - самодельный робот-чистильщик на базе Arduino и 3D-печати
Простой Arduino-робот на одном моторе и сервомашинке
Простой робот из китайских игрушек на базе CraftDuino
