Memory Button for Potentiometer Servo Setup on Arduino: Motion Memory Loop
by moont087 in Circuits > Arduino
2293 Views, 0 Favorites, 0 Comments
Memory Button for Potentiometer Servo Setup on Arduino: Motion Memory Loop
First you need to gather relevant materials to put this circuit together.
Supplies
1 Arduino Uno
1 Potentiometer
1 Servo
1 Breadboard
1 LED
1 Push button
2 Resistors (330 Ohm)
3 Black Jumper Wires (Ground/Negative)
4 Red Jumper Wires (Voltage/Positive)
4 Yellow/Color Jumper Wires (Input/Output)
Understanding the Components
It is important before putting together the physical circuit to understand each component (new informational links to each component):
The breadboard has two sets of power rails on either side, that have slots for negative (black/blue) and positive (red) inputs. They are connected in series vertically. Terminal strips share the connection horizontally, however parallel terminal strips will require a jumper wire to bridge the divider.
The potentiometer has a 5V pin (red), a Vout pin (yellow/color) and Ground/GND pin (black).
The servo has a 5V port (red), a Pulse Width Modulation/PWM port (yellow/color) and a Ground/GND port (black). Click the link to know more about how it works.
A resistor is a passive two-terminal electrical component that implements electrical resistance as a circuit element. Resistors are used to provide biasing voltages that control the gain of amplifiers, they are used to limit currents to safe levels and prevent overheating, they provide a way to sense current and voltage for circuit control and more.
The LED is short for Light Emitting Diode. The longer leg or anode side connects to the positive and the shorter leg or flat side of the LED, cathode connects to the Ground/GND. In this set up we require a resistor, which will also be used in the connection to the ground.
The Push Button has a left and right side, when the button is clicked it finishes the circuit. One side will connect to the 5V or positive, and the other will connect to the ground (through the resistor) and pwm pin on the arduino.
Setting Up the Circuit
Follow the diagram layout. While setting up the circuit, always remember to keep the arduino unplugged to avoid any damage to your components.
Connect the Arduino: 5V with a red jumper wire to the terminal strip on the bread board the "+" or anode side; connect the Ground/GND with a black jumper wire to the terminal strip on the bread board with the "-" or cathode side.
Plug the potentiometer into the breadboard, taking note of its orientation (this will be important when using the jumper wires to connect to the arduino). Use a yellow jumper wire and connect the middle output pin to the analog (A0) port on the arduino. Plug the red jumper wire into V5 port and a black jumper wire into GND port on the arduino.
Plug the servo into to the breadboard and arduino. Use a yellow jumper wire to connect it's input/signal port to the digital PWM port, 7 on the arduino. Plug the red jumper wire into V5 terminal strip and a black jumper wire into GND terminal strip in series with potentiometer layout (refer to image).
Connect the LED into the breadboard, remember which is "+" (longer leg) and what is "-" (flat side of LED). Connect the push button, and resistor for each component. The resistors will connect the cathode rise to the ground. The pushbutton connects to PWM 2 pin, and LED to PWM 3 pin.
After the circuit is set up, proceed to connect your arduino into your computer.
Download Arduino GUI and Input Code
Download Arduino Graphical User Interface (GUI) here.
Plug in the code below, note the information to the right of "//" tells you what that line of code is doing:
----copy below and paste into arduino GUI----
#include <Servo.h>
Servo servo1; // testing for a single potentiometer & servo combination
int AnalogOut = 0;
int NewAnalogOut = 0;
int pin_Button = 2; //attach button to PWM pin 13
int ledPin = 3; //status LED when push button is on
int pin_Button_State = 0;
int pin_Button_State_Last = 0;
int storage[200]; // # of positions for recording
int storage_loc = 0;
int recording = 0;
void setup() {
Serial.begin(9600); //turn on serial monitor
servo1.attach(7); //attach servo to PWM pin 7
pinMode(pin_Button, INPUT); //button for playback
pinMode(ledPin, OUTPUT); //LED is an output
}
void loop() {
if (recording == 0) { //not recording state
int sensorValue = analogRead(A0); //reading potentiometer at analog pin A0
NewAnalogOut = map(sensorValue, 0, 1023, 80, 0); //only has 80 degrees of rotation translated
if (abs(NewAnalogOut - AnalogOut) > 2) { //abs is for absolute, recording speed with value
AnalogOut = NewAnalogOut;
servo1.write(AnalogOut);
}
}
delay(1);
if ( recording == 1) { //recording turned on
digitalWrite(ledPin, HIGH); //turn on LED, to signify recording
recording = 1;
if (storage_loc < 200) {
int sensorValue = analogRead(A0);
NewAnalogOut = map(sensorValue, 0, 1023, 80, 0);
storage[storage_loc] = NewAnalogOut;
servo1.write(NewAnalogOut);
delay(100);
Serial.println(storage[storage_loc]);
storage_loc++;
}
} else if (recording > 1) { //recording playback, hit reset on arduino to stop playback
storage_loc = 0;
digitalWrite(ledPin, LOW);
while (1 == 1) {
if (storage_loc < 200 and storage[storage_loc] != 666) {
servo1.write(storage[storage_loc]);
storage_loc ++;
delay(100);
Serial.println(storage_loc);
Serial.println(storage[storage_loc]);
}
else{
storage_loc = 0;
}
}
}
pin_Button_State = digitalRead(pin_Button);
if (pin_Button_State != pin_Button_State_Last) {
if (pin_Button_State == HIGH) {
recording++;
if (recording == 2) {
storage[storage_loc] = 666;
}
}
delay(50); //number of "frames" or speed it is recording at, due to number of delays in the loop
}
pin_Button_State_Last = pin_Button_State;
}
Push Button + LED + Potentiometer + Servo + Arduino
This is how the final circuit should look. Watch the video to see how it works.