In this circuit you will learn the basic concepts behind motor control. Motors require a lot of current, so you can’t drive them directly from a digital pin on the RedBoard. Instead, you’ll use what is known as a motor controller or motor driver board to power and spin the motor accordingly
Can use a button instead of a switch
View Code
/* SparkFun Inventor’s Kit Circuit 5A - Motor Basics Learn how to control one motor with the motor driver. This sketch was written by SparkFun Electronics, with lots of help from the Arduino community. This code is completely free for any use. View circuit diagram and instructions at: https://learn.sparkfun.com/tutorials/sparkfun-inventors-kit-experiment-guide---v41 Download drawings and code at: https://github.com/sparkfun/SIK-Guide-Code*/// PIN VARIABLES// the motor will be controlled by the motor A pins on the motor driverconst int AIN1 = 13; // control pin 1 on the motor driver for the right motorconst int AIN2 = 12; // control pin 2 on the motor driver for the right motorconst int PWMA = 11; // speed control pin on the motor driver for the right motorint switchPin = 7; // switch to turn the robot on and off// VARIABLESint motorSpeed = 0; // starting speed for the motorvoid spinMotor(int);void setup(){ pinMode(switchPin, INPUT_PULLUP); // set this as a pullup to sense whether the switch is flipped // set the motor control pins as outputs pinMode(AIN1, OUTPUT); pinMode(AIN2, OUTPUT); pinMode(PWMA, OUTPUT); Serial.begin(9600); // begin serial communication with the computer Serial.println("Enter motor speed (0-255)... "); // Prompt to get input in the serial monitor.}void loop(){ if (Serial.available() > 0) { // if the user has entered something in the serial monitor motorSpeed = Serial.parseInt(); // set the motor speed equal to the number in the serial message Serial.print("Motor Speed: "); // print the speed that the motor is set to run at Serial.println(motorSpeed); } if (digitalRead(7) == LOW) { // if the switch is on... spinMotor(motorSpeed); } else { // if the switch is off... spinMotor(0); //turn the motor off // spinMotor(-motorSpeed); // challenge: make the motor change directions }}/********************************************************************************/void spinMotor(int motorSpeed) // function for driving the right motor{ if (motorSpeed > 0) // if the motor should drive forward (positive speed) { digitalWrite(AIN1, HIGH); // set pin 1 to high digitalWrite(AIN2, LOW); // set pin 2 to low } else if (motorSpeed < 0) // if the motor should drive backward (negative speed) { digitalWrite(AIN1, LOW); // set pin 1 to low digitalWrite(AIN2, HIGH); // set pin 2 to high } else // if the motor should stop { digitalWrite(AIN1, LOW); // set pin 1 to low digitalWrite(AIN2, LOW); // set pin 2 to low } analogWrite(PWMA, abs(motorSpeed)); // now that the motor direction is set, drive it at the entered speed}
In this circuit you will learn the basic concepts behind motor control. Motors require a lot of current, so you can’t drive them directly from a digital pin on the RedBoard. Instead, you’ll use what is known as a motor controller or motor driver board to power and spin the motor accordingly