Components and supplies
Breadboard (generic)
Stepper motor driver board A4988
28BYJ-48 stepper motor
Linear Laser
Photo interrupter
Arduino UNO
Tools and machines
Hot glue gun (generic)
Project description
Code
Dual Laser Clock with stepper motors
arduino
A different way to show time.
1//Dual steppermotor clock with lasers 2 3// communication with RTC 4 and RTC lib 5#include <Wire.h> 6#include "RTClib.h" 7 8RTC_DS3231 rtc; 9 10//stepper 11 variables and lib 12 13#include <Stepper.h> 14#define STEPS 2038 // the number 15 of steps in one revolution of your motor (28BYJ-48) 16Stepper stepper1(STEPS, 8, 17 10, 9, 11); //minute stepper 18Stepper stepper2(STEPS, 4, 6, 5, 7); //hour stepper 19int 20 startup = 0; // counter for resetting stepperposition 21int Led = 13; // define 22 LED pin 23int buttonpin = 3; // define photo interrupter signal pin 24int val; 25 //define a numeric variable 26 27// Startup, RTC check, calibration of steppers, 28 adjusting steppers to current time 29void setup() 30{ 31 32 // RTC Time input 33 34 Serial.begin(9600); 35 delay(3000); // wait for console opening 36 if (! rtc.begin()) 37 { 38 Serial.println("Couldn't find RTC"); 39 while (1); 40 } 41 42 43 //Steppermotor calibration 44 pinMode(Led, OUTPUT); // LED pin as output 45 46 pinMode(buttonpin, INPUT); //photo interrupter pin as input 47 48 // minute 49 stepper calibration 50 do { 51 val = digitalRead(buttonpin); //read the value 52 of the photointerrupter 53 if (val == HIGH) // turn on LED when photointerrupter 54 is blocked 55 { 56 stepper1.setSpeed(10); // 10 rpm 57 stepper1.step(-50); 58 // 50 steps from resetpoint 59 startup = startup + 1; 60 digitalWrite(Led, 61 HIGH); 62 } 63 else 64 { 65 stepper1.setSpeed(5); // 5 rpm 66 67 stepper1.step(1); // stepping towards photointerrupter 68 digitalWrite(Led, 69 LOW); 70 } 71 } while (startup < 2); 72 // hour stepper calibration 73 74 do { 75 val = digitalRead(buttonpin); //read the value of the photointerrupter 76 77 if (val == HIGH) // turn on LED when photointerrupter is blocked 78 { 79 80 stepper2.setSpeed(10); // 10 rpm 81 stepper2.step(50); // 50 steps from 82 resetpoint 83 startup = startup + 1; 84 digitalWrite(Led, HIGH); 85 86 } 87 else 88 { 89 stepper2.setSpeed(5); // 5 rpm 90 stepper2.step(-1); 91 // stepping towards photointerrupter 92 digitalWrite(Led, LOW); 93 } 94 95 } while (startup < 4); 96 startup = 0; 97 digitalWrite(Led, LOW); 98 99 100 101 // time check with RTC 102 DateTime now = rtc.now(); 103 104 // adjusting steppers 105 to current time 106 stepper1.setSpeed(10); // 10 rpm 107 stepper1.step(- now.minute() 108 * 15); // adjust minute stepper 109 110 stepper2.setSpeed(10); // 10 rpm 111 if 112 (now.hour() >= 12) { 113 stepper2.step((now.hour() - 12) * 60 + now.minute()); 114 // adjust hour stepper 115 } 116 else if (now.hour() <= 12) { 117 stepper2.step(now.hour() 118 * 60 + now.minute()); // adjust hour stepper 119 } 120 121 // 90-96 control for 122 testing purpose only 123 Serial.print("Time "); 124 Serial.print(now.hour()); 125 126 Serial.print(":"); 127 Serial.print(now.minute()); 128 Serial.print(":"); 129 130 Serial.print(now.second()); 131 Serial.println(""); 132 133} 134 135// startup 136 loop with 12:00:00, 0:00:00 and hourly resets of stepper. Stepper minute increment 137void 138 loop() 139{ 140 141 // update of RTC time 142 DateTime now = rtc.now(); 143 144 145 // Reset minute and hour stepper at 12:00:00 146 if (now.hour() == 12 && now.minute() 147 == 00 && now.second() == 00) { 148 149 // minute stepper calibration 150 do 151 { 152 val = digitalRead(buttonpin); //read the value of the photointerrupter 153 154 if (val == HIGH) // turn on LED when photointerrupter is blocked 155 { 156 157 stepper1.setSpeed(10); // 10 rpm 158 stepper1.step(-50); // 50 steps 159 from resetpoint 160 startup = startup + 1; 161 digitalWrite(Led, HIGH); 162 163 } 164 else 165 { 166 stepper1.setSpeed(5); // 5 rpm 167 stepper1.step(1); 168 // stepping towards photointerrupter 169 digitalWrite(Led, LOW); 170 } 171 172 } while (startup < 2); 173 // hour stepper calibration 174 do { 175 val 176 = digitalRead(buttonpin); //read the value of the photointerrupter 177 if (val 178 == HIGH) // turn on LED when photointerrupter is blocked 179 { 180 stepper2.setSpeed(10); 181 // 10 rpm 182 stepper2.step(50); // 50 steps from resetpoint 183 startup 184 = startup + 1; 185 digitalWrite(Led, HIGH); 186 } 187 else 188 189 { 190 stepper2.setSpeed(5); // 5 rpm 191 stepper2.step(-1); 192 // stepping towards photointerrupter 193 digitalWrite(Led, LOW); 194 } 195 196 } while (startup < 4); 197 startup = 0; 198 digitalWrite(Led, LOW); 199 200 201 // delay so that event does not repeat 202 delay(1000); 203 } 204 205 // 206 stepper motor reset at 0:00:00 207 if (now.hour() == 00 && now.minute() == 00 && 208 now.second() == 00) { 209 210 // minute stepper calibration 211 do { 212 val 213 = digitalRead(buttonpin); //read the value of the photointerrupter 214 if (val 215 == HIGH) // turn on LED when photointerrupter is blocked 216 { 217 stepper1.setSpeed(10); 218 // 10 rpm 219 stepper1.step(-50); // 50 steps from resetpoint 220 startup 221 = startup + 1; 222 digitalWrite(Led, HIGH); 223 } 224 else 225 226 { 227 stepper1.setSpeed(5); // 5 rpm 228 stepper1.step(1); // 229 stepping towards photointerrupter 230 digitalWrite(Led, LOW); 231 } 232 233 } while (startup < 2); 234 // hour stepper calibration 235 do { 236 val 237 = digitalRead(buttonpin); //read the value of the photointerrupter 238 if (val 239 == HIGH) // turn on LED when photointerrupter is blocked 240 { 241 stepper2.setSpeed(10); 242 // 10 rpm 243 stepper2.step(50); // 50 steps from resetpoint 244 startup 245 = startup + 1; 246 digitalWrite(Led, HIGH); 247 } 248 else 249 250 { 251 stepper2.setSpeed(5); // 5 rpm 252 stepper2.step(-1); 253 // stepping towards photointerrupter 254 digitalWrite(Led, LOW); 255 } 256 257 } while (startup < 4); 258 startup = 0; 259 digitalWrite(Led, LOW); 260 261 262 // delay so that event does not repeat 263 delay(1000); 264 265 } 266 267 268 // hourly minute stepper reset 269 270 if (now.minute() == 0 && now.second() 271 == 0 ) { 272 273 do { 274 val = digitalRead(buttonpin); //read the value 275 of the photointerrupter 276 if (val == HIGH) // turn on LED when photointerrupter 277 is blocked 278 { 279 stepper1.setSpeed(10); // 10 rpm 280 stepper1.step(-50); 281 // 50 steps from resetpoint 282 startup = startup + 1; 283 digitalWrite(Led, 284 HIGH); 285 } 286 else 287 { 288 stepper1.setSpeed(5); // 5 289 rpm 290 stepper1.step(1); // stepping towards photointerrupter 291 digitalWrite(Led, 292 LOW); 293 } 294 } while (startup < 2); 295 296 startup = 0; 297 digitalWrite(Led, 298 LOW); 299 300 // delay so that event does nor repeat 301 delay(1000); 302 303 304 } 305 306 // minute stepper one minute increment, hourstepper one minute increment 307 308 309 if (now.second() == 59) { 310 311 stepper1.setSpeed(10); // 1 rpm 312 stepper1.step(-15); 313 // 15 stepps equals one minute 314 315 stepper2.setSpeed(10); // 10 rpm 316 stepper2.step(1); 317 // 1 stepp equals one minute on hour steppper 318 319 // delay so that event 320 does not repeat 321 delay(1000); 322 323 } 324 325 digitalWrite(Led, LOW); 326 327} 328 329 330
Dual Laser Clock with stepper motors
arduino
A different way to show time.
1//Dual steppermotor clock with lasers 2 3// communication with RTC and RTC lib 4#include <Wire.h> 5#include "RTClib.h" 6 7RTC_DS3231 rtc; 8 9//stepper variables and lib 10 11#include <Stepper.h> 12#define STEPS 2038 // the number of steps in one revolution of your motor (28BYJ-48) 13Stepper stepper1(STEPS, 8, 10, 9, 11); //minute stepper 14Stepper stepper2(STEPS, 4, 6, 5, 7); //hour stepper 15int startup = 0; // counter for resetting stepperposition 16int Led = 13; // define LED pin 17int buttonpin = 3; // define photo interrupter signal pin 18int val; //define a numeric variable 19 20// Startup, RTC check, calibration of steppers, adjusting steppers to current time 21void setup() 22{ 23 24 // RTC Time input 25 Serial.begin(9600); 26 delay(3000); // wait for console opening 27 if (! rtc.begin()) { 28 Serial.println("Couldn't find RTC"); 29 while (1); 30 } 31 32 //Steppermotor calibration 33 pinMode(Led, OUTPUT); // LED pin as output 34 pinMode(buttonpin, INPUT); //photo interrupter pin as input 35 36 // minute stepper calibration 37 do { 38 val = digitalRead(buttonpin); //read the value of the photointerrupter 39 if (val == HIGH) // turn on LED when photointerrupter is blocked 40 { 41 stepper1.setSpeed(10); // 10 rpm 42 stepper1.step(-50); // 50 steps from resetpoint 43 startup = startup + 1; 44 digitalWrite(Led, HIGH); 45 } 46 else 47 { 48 stepper1.setSpeed(5); // 5 rpm 49 stepper1.step(1); // stepping towards photointerrupter 50 digitalWrite(Led, LOW); 51 } 52 } while (startup < 2); 53 // hour stepper calibration 54 do { 55 val = digitalRead(buttonpin); //read the value of the photointerrupter 56 if (val == HIGH) // turn on LED when photointerrupter is blocked 57 { 58 stepper2.setSpeed(10); // 10 rpm 59 stepper2.step(50); // 50 steps from resetpoint 60 startup = startup + 1; 61 digitalWrite(Led, HIGH); 62 } 63 else 64 { 65 stepper2.setSpeed(5); // 5 rpm 66 stepper2.step(-1); // stepping towards photointerrupter 67 digitalWrite(Led, LOW); 68 } 69 } while (startup < 4); 70 startup = 0; 71 digitalWrite(Led, LOW); 72 73 74 // time check with RTC 75 DateTime now = rtc.now(); 76 77 // adjusting steppers to current time 78 stepper1.setSpeed(10); // 10 rpm 79 stepper1.step(- now.minute() * 15); // adjust minute stepper 80 81 stepper2.setSpeed(10); // 10 rpm 82 if (now.hour() >= 12) { 83 stepper2.step((now.hour() - 12) * 60 + now.minute()); // adjust hour stepper 84 } 85 else if (now.hour() <= 12) { 86 stepper2.step(now.hour() * 60 + now.minute()); // adjust hour stepper 87 } 88 89 // 90-96 control for testing purpose only 90 Serial.print("Time "); 91 Serial.print(now.hour()); 92 Serial.print(":"); 93 Serial.print(now.minute()); 94 Serial.print(":"); 95 Serial.print(now.second()); 96 Serial.println(""); 97 98} 99 100// startup loop with 12:00:00, 0:00:00 and hourly resets of stepper. Stepper minute increment 101void loop() 102{ 103 104 // update of RTC time 105 DateTime now = rtc.now(); 106 107 // Reset minute and hour stepper at 12:00:00 108 if (now.hour() == 12 && now.minute() == 00 && now.second() == 00) { 109 110 // minute stepper calibration 111 do { 112 val = digitalRead(buttonpin); //read the value of the photointerrupter 113 if (val == HIGH) // turn on LED when photointerrupter is blocked 114 { 115 stepper1.setSpeed(10); // 10 rpm 116 stepper1.step(-50); // 50 steps from resetpoint 117 startup = startup + 1; 118 digitalWrite(Led, HIGH); 119 } 120 else 121 { 122 stepper1.setSpeed(5); // 5 rpm 123 stepper1.step(1); // stepping towards photointerrupter 124 digitalWrite(Led, LOW); 125 } 126 } while (startup < 2); 127 // hour stepper calibration 128 do { 129 val = digitalRead(buttonpin); //read the value of the photointerrupter 130 if (val == HIGH) // turn on LED when photointerrupter is blocked 131 { 132 stepper2.setSpeed(10); // 10 rpm 133 stepper2.step(50); // 50 steps from resetpoint 134 startup = startup + 1; 135 digitalWrite(Led, HIGH); 136 } 137 else 138 { 139 stepper2.setSpeed(5); // 5 rpm 140 stepper2.step(-1); // stepping towards photointerrupter 141 digitalWrite(Led, LOW); 142 } 143 } while (startup < 4); 144 startup = 0; 145 digitalWrite(Led, LOW); 146 147 // delay so that event does not repeat 148 delay(1000); 149 } 150 151 // stepper motor reset at 0:00:00 152 if (now.hour() == 00 && now.minute() == 00 && now.second() == 00) { 153 154 // minute stepper calibration 155 do { 156 val = digitalRead(buttonpin); //read the value of the photointerrupter 157 if (val == HIGH) // turn on LED when photointerrupter is blocked 158 { 159 stepper1.setSpeed(10); // 10 rpm 160 stepper1.step(-50); // 50 steps from resetpoint 161 startup = startup + 1; 162 digitalWrite(Led, HIGH); 163 } 164 else 165 { 166 stepper1.setSpeed(5); // 5 rpm 167 stepper1.step(1); // stepping towards photointerrupter 168 digitalWrite(Led, LOW); 169 } 170 } while (startup < 2); 171 // hour stepper calibration 172 do { 173 val = digitalRead(buttonpin); //read the value of the photointerrupter 174 if (val == HIGH) // turn on LED when photointerrupter is blocked 175 { 176 stepper2.setSpeed(10); // 10 rpm 177 stepper2.step(50); // 50 steps from resetpoint 178 startup = startup + 1; 179 digitalWrite(Led, HIGH); 180 } 181 else 182 { 183 stepper2.setSpeed(5); // 5 rpm 184 stepper2.step(-1); // stepping towards photointerrupter 185 digitalWrite(Led, LOW); 186 } 187 } while (startup < 4); 188 startup = 0; 189 digitalWrite(Led, LOW); 190 191 // delay so that event does not repeat 192 delay(1000); 193 194 } 195 196 // hourly minute stepper reset 197 198 if (now.minute() == 0 && now.second() == 0 ) { 199 200 do { 201 val = digitalRead(buttonpin); //read the value of the photointerrupter 202 if (val == HIGH) // turn on LED when photointerrupter is blocked 203 { 204 stepper1.setSpeed(10); // 10 rpm 205 stepper1.step(-50); // 50 steps from resetpoint 206 startup = startup + 1; 207 digitalWrite(Led, HIGH); 208 } 209 else 210 { 211 stepper1.setSpeed(5); // 5 rpm 212 stepper1.step(1); // stepping towards photointerrupter 213 digitalWrite(Led, LOW); 214 } 215 } while (startup < 2); 216 217 startup = 0; 218 digitalWrite(Led, LOW); 219 220 // delay so that event does nor repeat 221 delay(1000); 222 223 } 224 225 // minute stepper one minute increment, hourstepper one minute increment 226 227 if (now.second() == 59) { 228 229 stepper1.setSpeed(10); // 1 rpm 230 stepper1.step(-15); // 15 stepps equals one minute 231 232 stepper2.setSpeed(10); // 10 rpm 233 stepper2.step(1); // 1 stepp equals one minute on hour steppper 234 235 // delay so that event does not repeat 236 delay(1000); 237 238 } 239 240 digitalWrite(Led, LOW); 241 242} 243 244 245
Downloadable files
Circuit diagram Laserclock
Schematics
Circuit diagram Laserclock
Comments
Only logged in users can leave comments
Mr_Xu
0 Followers
•0 Projects
Table of contents
Intro
1
0