mirror of
				https://github.com/KevinMidboe/Arduino.git
				synced 2025-10-29 17:40:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			167 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // This Arduino example demonstrates bidirectional operation of a 
 | |
| // 28BYJ-48, which is readily available on eBay, using a ULN2003 
 | |
| // interface board to drive the stepper. The 28BYJ-48 motor is a 4-
 | |
| // phase, 8-beat motor, geared down by a factor of 68. Onint e bipolar 
 | |
| // winding is on motor pins 1 & 3 and the other on motor pins 2 & 4. 
 | |
| // Refer to the manufacturer's documentation of  Changzhou Fulling 
 | |
| // Motor Co., Ltd., among others.  The step angle is 5.625/64 and the 
 | |
| // operating Frequency is 100pps. Current draw is 92mA.  In this 
 | |
| // example, the speed and direction of the stepper motor is determined 
 | |
| // by adjusting a 1k-ohm potentiometer connected to Arduino pin A2. 
 | |
| // When the potentiometer is rotated fully counterclockwise, the motor 
 | |
| // will rotate at full counterclockwise speed. As the potentiometer is 
 | |
| // rotated clockwise, the motor will continue to slow down until is 
 | |
| // reaches its minimum speed at the the potentiometer's midpoint value . 
 | |
| // Once the potentiometer crosses its midpoint, the motor will reverse 
 | |
| // direction. As the potentiometer is rotated further clockwise, the speed   
 | |
| // of the motor will increase until it reaches its full clockwise rotation 
 | |
| // speed when the potentiometer has been rotated fully clockwise.
 | |
| ////////////////////////////////////////////////
 | |
| 
 | |
| //declare variables for the motor pins
 | |
| int motorPin1 = 8;	// Blue   - 28BYJ48 pin 1
 | |
| int motorPin2 = 9;	// Pink   - 28BYJ48 pin 2
 | |
| int motorPin3 = 10;	// Yellow - 28BYJ48 pin 3
 | |
| int motorPin4 = 11;	// Orange - 28BYJ48 pin 4
 | |
|                        // Red    - 28BYJ48 pin 5 (VCC)
 | |
| 
 | |
| int motorSpeed = 0;     //variable to set stepper speed
 | |
| int potPin = 2; 	//potentiometer connected to A2
 | |
| int potValue = 0; 	//variable to read A0 input
 | |
| 
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| void setup() {
 | |
|  //declare the motor pins as outputs
 | |
|  pinMode(motorPin1, OUTPUT);
 | |
|  pinMode(motorPin2, OUTPUT);
 | |
|  pinMode(motorPin3, OUTPUT);
 | |
|  pinMode(motorPin4, OUTPUT);
 | |
|  Serial.begin(9600);
 | |
| }
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| void loop(){
 | |
| 
 | |
|  //potValue = analogRead(potPin);     // read the value of the potentiometer
 | |
|  Serial.println(potValue);          // View full range from 0 - 1024 in Serial Monitor
 | |
|  if (potValue < 535){               // if potentiometer reads 0 to 535 do this
 | |
|    motorSpeed = (potValue/15 + 5);  //scale potValue to be useful for motor
 | |
|    clockwise();                     //go to the ccw rotation function
 | |
|  }
 | |
|  else {                             //value of the potentiometer is 512 - 1024
 | |
|    motorSpeed = ((1024-potValue)/15 + 5); //scale potValue for motor speed
 | |
|    counterclockwise(); //go the the cw rotation function
 | |
|  }
 | |
| }
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //set pins to ULN2003 high in sequence from 1 to 4
 | |
| //delay "motorSpeed" between each pin setting (to determine speed)
 | |
| 
 | |
| void counterclockwise (){
 | |
|  // 1
 | |
|  digitalWrite(motorPin1, HIGH);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  delay(motorSpeed);
 | |
|  // 2
 | |
|  digitalWrite(motorPin1, HIGH);
 | |
|  digitalWrite(motorPin2, HIGH);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  delay (motorSpeed);
 | |
|  // 3
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  digitalWrite(motorPin2, HIGH);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  delay(motorSpeed);
 | |
|  // 4
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  digitalWrite(motorPin2, HIGH);
 | |
|  digitalWrite(motorPin3, HIGH);
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  delay(motorSpeed);
 | |
|  // 5
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin3, HIGH);
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  delay(motorSpeed);
 | |
|  // 6
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin3, HIGH);
 | |
|  digitalWrite(motorPin4, HIGH);
 | |
|  delay (motorSpeed);
 | |
|  // 7
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin4, HIGH);
 | |
|  delay(motorSpeed);
 | |
|  // 8
 | |
|  digitalWrite(motorPin1, HIGH);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin4, HIGH);
 | |
|  delay(motorSpeed);
 | |
| }
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //set pins to ULN2003 high in sequence from 4 to 1
 | |
| //delay "motorSpeed" between each pin setting (to determine speed)
 | |
| 
 | |
| void clockwise(){
 | |
|  // 1
 | |
|  digitalWrite(motorPin4, HIGH);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  delay(motorSpeed);
 | |
|  // 2
 | |
|  digitalWrite(motorPin4, HIGH);
 | |
|  digitalWrite(motorPin3, HIGH);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  delay (motorSpeed);
 | |
|  // 3
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  digitalWrite(motorPin3, HIGH);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  delay(motorSpeed);
 | |
|  // 4
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  digitalWrite(motorPin3, HIGH);
 | |
|  digitalWrite(motorPin2, HIGH);
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  delay(motorSpeed);
 | |
|  // 5
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin2, HIGH);
 | |
|  digitalWrite(motorPin1, LOW);
 | |
|  delay(motorSpeed);
 | |
|  // 6
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin2, HIGH);
 | |
|  digitalWrite(motorPin1, HIGH);
 | |
|  delay (motorSpeed);
 | |
|  // 7
 | |
|  digitalWrite(motorPin4, LOW);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin1, HIGH);
 | |
|  delay(motorSpeed);
 | |
|  // 8
 | |
|  digitalWrite(motorPin4, HIGH);
 | |
|  digitalWrite(motorPin3, LOW);
 | |
|  digitalWrite(motorPin2, LOW);
 | |
|  digitalWrite(motorPin1, HIGH);
 | |
|  delay(motorSpeed);
 | |
| }
 |