Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
lise_diwan:logo-turtle [2019/12/11 19:14] gweltaz créée |
lise_diwan:logo-turtle [2023/02/19 21:08] (Version actuelle) gweltaz |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | https://www.instructables.com/id/Low-Cost-Arduino-Compatible-Drawing-Robot/ | + | **Cette page devrait être supprimée** |
- | http://archive.monograph.io/joshburker/logoturtle | + | |
- | http://joshburker.pbworks.com/w/page/103156198/Logo%20Turtle%20Robot | + | [[https://www.instructables.com/id/Low-Cost-Arduino-Compatible-Drawing-Robot/]] |
- | http://joshburker.pbworks.com/w/page/103854757/ArduinoLogo | + | |
+ | [[http://archive.monograph.io/joshburker/logoturtle]] | ||
+ | |||
+ | [[http://joshburker.pbworks.com/w/page/103156198/Logo%20Turtle%20Robot]] | ||
+ | |||
+ | [[http://joshburker.pbworks.com/w/page/103854757/ArduinoLogo]] | ||
+ | |||
+ | <accordion> | ||
+ | <panel title="title"> | ||
+ | <code c> | ||
+ | // 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<steps; step++){ | ||
+ | for(int mask=0; mask<4; mask++){ | ||
+ | for(int pin=0; pin<4; pin++){ | ||
+ | digitalWrite(L_stepper_pins[pin], rev_mask[mask][pin]); | ||
+ | digitalWrite(R_stepper_pins[pin], fwd_mask[mask][pin]); | ||
+ | } | ||
+ | delay(delay_time); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | void backward(float distance){ | ||
+ | int steps = step(distance); | ||
+ | for(int step=0; step<steps; step++){ | ||
+ | for(int mask=0; mask<4; mask++){ | ||
+ | for(int pin=0; pin<4; pin++){ | ||
+ | digitalWrite(L_stepper_pins[pin], fwd_mask[mask][pin]); | ||
+ | digitalWrite(R_stepper_pins[pin], rev_mask[mask][pin]); | ||
+ | } | ||
+ | delay(delay_time); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | void right(float degrees){ | ||
+ | float rotation = degrees / 360.0; | ||
+ | float distance = wheel_base * 3.1412 * rotation; | ||
+ | int steps = step(distance); | ||
+ | for(int step=0; step<steps; step++){ | ||
+ | for(int mask=0; mask<4; mask++){ | ||
+ | for(int pin=0; pin<4; pin++){ | ||
+ | digitalWrite(R_stepper_pins[pin], rev_mask[mask][pin]); | ||
+ | digitalWrite(L_stepper_pins[pin], rev_mask[mask][pin]); | ||
+ | } | ||
+ | delay(delay_time); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | void left(float degrees){ | ||
+ | float rotation = degrees / 360.0; | ||
+ | float distance = wheel_base * 3.1412 * rotation; | ||
+ | int steps = step(distance); | ||
+ | for(int step=0; step<steps; step++){ | ||
+ | for(int mask=0; mask<4; mask++){ | ||
+ | for(int pin=0; pin<4; pin++){ | ||
+ | digitalWrite(R_stepper_pins[pin], fwd_mask[mask][pin]); | ||
+ | digitalWrite(L_stepper_pins[pin], fwd_mask[mask][pin]); | ||
+ | } | ||
+ | delay(delay_time); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | void done(){ // unlock stepper to save battery | ||
+ | for(int mask=0; mask<4; mask++){ | ||
+ | for(int pin=0; pin<4; pin++){ | ||
+ | digitalWrite(R_stepper_pins[pin], LOW); | ||
+ | digitalWrite(L_stepper_pins[pin], LOW); | ||
+ | } | ||
+ | delay(delay_time); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | void penup(){ | ||
+ | delay(250); | ||
+ | Serial.println("PEN_UP()"); | ||
+ | penServo.write(PEN_UP); | ||
+ | delay(250); | ||
+ | } | ||
+ | |||
+ | |||
+ | void pendown(){ | ||
+ | delay(250); | ||
+ | Serial.println("PEN_DOWN()"); | ||
+ | penServo.write(PEN_DOWN); | ||
+ | delay(250); | ||
+ | } | ||
+ | </code> | ||
+ | </panel> | ||
+ | </accordion> |