This temporary site is about 2 types of DIY projectors:
- The ARDUINO matrix laser projector
Project goal is to make a simple laser projector similiar to this one
using only a CPU fan , laser pointer and Arduino board which is 29$ on Sparkfun.
This can have many uses as a cool sign , etc. also , adding more lasers is possible and adds 16 lines of resolution per laser in this case .
using 2 projectors (H and V) we can create a matrix which will be able to project whole words onto buildings.
first part - making a circular type projector:
optical transistor is hooked with pull-up resistor to 5v.
here is the output of the RPM measurements , code follows:
time=714
rpm=4200
totaltime=714
time=1805
rpm=1600
totaltime=2519
time=703
rpm=4200
totaltime=3222
time=1791
rpm=1600
totaltime=5013
time=698
rpm=4200
totaltime=5711
time=1801
rpm=1600
totaltime=7512
time=697
rpm=4300
totaltime=8209
time=1821
rpm=1600
totaltime=10030
I am getting pairs of rpms!!
this is what i get when i dump every rpm pulse with it's timecode:
(measurement # is on left , time code on right)
1,6
2,13
3,19
4,26
5,32
6,39
7,46
8,53
9,59
10,66
11,72
12,79
13,86
14,93
15,99
16,106
17,112
18,119
19,125
20,133
21,139
22,146
23,153
24,159
25,166
26,174
27,181
28,187
29,193
30,200
31,206
32,214
33,220
34,227
35,233
36,239
37,246
38,252
39,260
40,266
41,272
42,279
43,285
44,292
45,299
46,306
47,313
48,319
49,326
50,332
51,339
52,346
53,353
54,359
55,365
56,372
57,378
58,387
59,393
60,399
61,406
62,412
63,419
64,425
65,433
66,439
67,445
68,452
69,458
70,465
71,472
72,479
73,485
74,491
75,498
76,504
77,512
78,518
79,525
80,532
81,538
82,545
83,551
84,559
85,565
86,572
87,578
88,584
89,591
90,599
91,606
92,612
93,619
94,626
95,632
96,640
97,646
98,653
99,659
100,665
time=665
rpm=4500
1,689
2,707
3,724
4,742
5,759
6,777
7,794
8,813
9,830
10,847
11,864
12,882
13,901
14,919
15,935
16,953
17,970
18,988
19,1006
20,1024
21,1040
22,1058
23,1076
24,1092
25,1110
26,1128
27,1146
28,1163
29,1180
30,1198
31,1215
32,1232
33,1251
34,1268
35,1285
36,1302
37,1319
38,1338
39,1355
40,1373
41,1390
42,1408
43,1425
44,1442
45,1460
46,1478
47,1497
48,1513
49,1530
50,1548
51,1565
52,1583
53,1601
54,1619
55,1636
56,1653
57,1671
58,1689
59,1707
60,1724
61,1743
62,1761
63,1777
64,1795
65,1813
66,1829
67,1847
68,1865
69,1883
70,1899
71,1916
72,1935
73,1952
74,1970
75,1987
76,2006
77,2022
78,2038
79,2058
80,2075
81,2092
82,2109
83,2127
84,2144
85,2160
86,2179
87,2197
88,2213
89,2230
90,2248
91,2266
92,2283
93,2300
94,2319
95,2336
96,2353
97,2370
98,2388
99,2406
100,2423
time=1758
rpm=1700
1,2439
2,2445
3,2452
4,2458
5,2464
6,2471
7,2481
8,2487
9,2494
10,2501
11,2507
12,2513
13,2520
14,2526
15,2535
16,2541
17,2547
18,2553
19,2562
20,2569
21,2575
22,2581
23,2587
24,2593
25,2600
26,2609
27,2615
28,2621
29,2628
30,2636
31,2642
32,2649
33,2655
34,2662
35,2668
36,2674
37,2682
38,2689
39,2696
40,2702
41,2709
42,2715
43,2721
44,2728
45,2735
46,2741
47,2747
48,2755
49,2762
50,2768
51,2775
52,2781
53,2787
54,2794
55,2800
56,2806
57,2812
58,2819
59,2829
60,2835
61,2841
62,2847
63,2853
64,2861
65,2867
66,2873
67,2879
68,2886
69,2892
70,2900
71,2907
72,2913
73,2920
74,2926
75,2932
76,2938
77,2946
78,2953
79,2959
80,2965
81,2973
82,2979
83,2987
84,2993
85,2999
86,3005
87,3011
88,3020
89,3026
90,3033
91,3039
92,3047
93,3054
94,3060
95,3066
96,3073
97,3079
98,3086
99,3094
100,3100
time=677
rpm=4400
1,3123
the arduino code --
volatile byte rpmcount;
float rpm;
unsigned long timeold;
volatile unsigned long sig;
void rpm_fun()
{
rpmcount++;
sig=millis();
Serial.print(rpmcount,DEC);
Serial.print(",");
Serial.print(sig);
Serial.println(" ");
//Each rotation, this interrupt function is run twice?
}
void setup()
{
Serial.begin(19200);
attachInterrupt(0, rpm_fun, FALLING);
rpmcount = 0;
rpm = 0;
timeold = 0;
}
void loop()
{
if (rpmcount >= 100) {
//Update RPM every 20 counts, increase this for better RPM resolution,
//decrease for faster update
rpm = 30000/(sig-timeold)*rpmcount;
Serial.print("time=");
Serial.println(sig-timeold,DEC);
timeold = sig;
rpmcount = 0;
Serial.print("rpm=");
Serial.println(rpm,DEC);
}
digitalWrite(13, HIGH); // sets the LED on
delayMicroseconds(15000000/rpm);
digitalWrite(13, LOW); // sets the LED off
delayMicroseconds(15000000/rpm);
}
--tried it with "falling" "rising" "low" etc.
- The dual hard drive projector
Baked , but not throughly.
Hard drive armatures can be driven by sound (like music) from your amp to create movement. this is what these people have done.
what is still needed is a software to either create sound (2 channels) artificially that causes graphics to be displayed. OR - create a software program which can drive the armatures directly and use the relatively high seek time to create actual graphics.
any help? please? tomXXXsofer@gmail.com (remove XXX)
arduino corner-
4th attempt - now laser is working , next step - rpm meter from intel cpu fan!
I am using arduino to make an RPM meter to read the pulses off an ordinary intel cpu fan with 3 leads (+,-, rpm signal)
I tried using digitalread() and pulsein() but I get fuzzy results.
anyone knows how to read those signals reliably?
code examples:
void loop()
{
scanvalue=digitalRead(7);
if (scanvalue!=previous_scan) {pulsecount++; previous_scan=scanvalue;}
if (millis() - previousMillis > interval)
{
interval=((millis() - previousMillis)/pulsecount)*50
previousMillis = millis();
pulsecount=0;
//code blinking code here
}
}