wrightmac
Published © CC BY-SA

myDrawingMachine - Phase One

I am sharing some of the stepping stones I am using to create a larger project.

BeginnerWork in progress2 hours537
myDrawingMachine - Phase One

Things used in this project

Hardware components

ELEGOO UNO R3 Board ATmega328P ATMEGA16U2 with USB Cable
ELEGOO UNO R3 Board ATmega328P ATMEGA16U2 with USB Cable
×1
elegoo stepper motor 28BYJ-48 5v + ul2003 Controller
×2
Elegoo DC Motor + L298 Chip
×1
Mini breadboard - Generic 10x17
×1
ELEGOO 130pcs Solderless Flexible Breadboard Jumper Wires 4 Different Lengths Male To Male
ELEGOO 130pcs Solderless Flexible Breadboard Jumper Wires 4 Different Lengths Male To Male
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

DrawingMachinev.02

Arduino
// Links to sites where I borrowed snippets of code
// https://electropeak.com/learn/l293d-control-drive-stepper-servo-dc-motors-by-arduino/
// https://42bots.com/tutorials/28byj-48-stepper-motor-with-uln2003-driver-and-arduino-uno/
// https://lastminuteengineers.com/l293d-dc-motor-arduino-tutorial/
//
// BigArtMess Project 2019
// Peter Hein https://www.wrightmac.net

#include <AccelStepper.h>
#include "AFMotor.h"
#define HALFSTEP 8

// ULN2003 Board 1 - Below are also the default pins for the 
// AccelStepper library, they don't need to be defined, but
// are here to hopefully self-explain how it is wired. 
#define StepPin1  5     // IN1 
#define StepPin2  4     // IN2 
#define StepPin3  3     // IN3 
#define StepPin4  2     // IN4 

// ULN2003 Board 2 
#define StepPin5  6     // IN1 
#define StepPin6  7     // IN2 
#define StepPin7  8     // IN3 
#define StepPin8  9     // IN4

// Pins from the L293 to the Uno
#define motorEnb  10    // Speed control pin
#define Enb1      11    // IN1
#define Enb2      12    // IN2

// Motor speed modes 
#define slow 64
#define normal 128
#define fast 255

// for random numbers
long randomNumber; 

// Initialize with pin sequence IN1-IN3-IN2-IN4 on UL2003 
// for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, StepPin1, StepPin3, StepPin2, StepPin4);
AccelStepper stepper2(HALFSTEP, StepPin5, StepPin7, StepPin6, StepPin8);

// Variables
int Speed; 
int turnStep1 = 21000; // number of steps for a 90 degree turn
int turnStep2 = -66000; //number of steps to drive straight
int stepperSpeed = 1000; //speed of the stepper (steps per second)
int steps1 = 0; // keep track of the step count for motor 1
int steps2 = 0; // keep track of the step count for motor 2

boolean turn1 = false; //keep track if we are turning or going straight next
boolean turn2 = false; //keep track if we are turning or going straight next


void setup() {
  randomSeed(analogRead(A0));
  Speed = random(64, 200);
  
  
  stepper1.setMaxSpeed(500.0);
  stepper1.move(1);  // I found this necessary
  stepper1.setSpeed(stepperSpeed);

  stepper2.setMaxSpeed(200.0);
  stepper2.move(-1);  // I found this necessary
  stepper2.setSpeed(stepperSpeed - 200);

// Motor control for the two control pins
//        Enable1         Enable2       Motor's reaction
// 
//           0                 0         Motor is stopped
//           0                 1         Motor turns clockwise
//           1                 0        Motor turns counter-clockwise
//           1                 1        Motor is stopped
  
// Set the motor up. It will spin clockwise at the set
// random speed. 
  pinMode(motorEnb, OUTPUT);
  pinMode(Enb1, OUTPUT);
  pinMode(Enb2, OUTPUT);
  digitalWrite(Enb1, 0);
  digitalWrite(Enb2, 1);
  analogWrite(motorEnb, Speed);

}

void loop() {

  if (steps1 == 0) {
    int target = 0;
    if (turn1 == true) {
      target = turnStep1;
    }

    else {
      target = turnStep2;
    }

    stepper1.move(target);
    stepper1.setSpeed(stepperSpeed);
    turn1 = !turn1;
  }

  if (steps2 == 0) {
    int target = 0;
    if (turn2 == true) {
      target = turnStep2;
    }

    else {
      target = -turnStep1;
    }

    stepper2.move(target);
    stepper2.setSpeed(stepperSpeed);
    turn2 = !turn2;
  }

  steps1 = stepper1.distanceToGo();
  steps2 = stepper2.distanceToGo();

  stepper1.runSpeedToPosition();
  stepper2.runSpeedToPosition();

}

Credits

wrightmac
16 projects • 22 followers
Network geek by day, apprentice hardware hacker by night, curious-tinkerer always, and Apple Fanboy since 1984!

Comments