Სარჩევი:
ვიდეო: უსასრულობის სარკის საათი პოტენომეტრებით: 3 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:16
მე წავაწყდი უსასრულობის სარკეს და აღმოვაჩინე, რომ ის მართლაც მაგარია. ამან შთააგონა, რომ გამეკეთებინა უსასრულობის სარკე, მაგრამ მე მჭირდებოდა ის მიზნის მისაღწევად. ასე რომ, მე გადავწყვიტე გამეკეთებინა უსასრულობის სარკის საათი. ეს არის უსასრულობის სარკე, რომელიც საშუალებას გაძლევთ შეცვალოთ რეჟიმი, სიჩქარე და ფერები პოტენომეტრების გამოყენებით. (შენიშვნა: პირველად ვქმნი მსგავს რამეს)
მარაგები
მოდით განვიხილოთ რა გჭირდებათ ამ ნივთის გასაკეთებლად!
თქვენ დაგჭირდებათ…
1) 1 არდუინო უნო
3) 1 პურის დაფა
4) 1 სლაიდ გადამრთველი
5) 3 პოტენციომეტრი
6) 1 9V ბატარეა
7) 5 მეტრიანი WS2811 LED ზოლები
8) Jumper საკაბელო მავთულები
9) საათი (საათი მე გამოვიყენე 12 დიუმიანი დიდი თანამედროვე საათი)
10) მოქნილი სარკის ფურცელი (მე ვიყენებ სარკის ფურცელს)
11) კონფიდენციალურობის ფილმი (ის, რომელსაც მე ვიყენებდი ცალმხრივი სარკე)
12) შეიძლება საჭირო გახდეს შედუღება, ეს დამოკიდებულია იმაზე, თუ რა მასალები გაქვთ
ნაბიჯი 1: გაყვანილობა
გაყვანილობა საკმაოდ მარტივია
- SPST გადამრთველი ჩართავს და გამორთავს LED- ებს (A0)
- მარცხენა პოტენომეტრი აკონტროლებს შუქს (A1)
- შუა პოტენომეტრი აკონტროლებს რეჟიმებს (A2)
- მარჯვენა პოტენომეტრი აკონტროლებს სიჩქარეს (A3)
ნაბიჯი 2: კოდი
#ჩართეთ
#განსაზღვრეთ PIN 6
#განსაზღვრეთ NUM_LEDS 54
#განსაზღვრეთ A0 A0
#განსაზღვრეთ A1 A1
#განსაზღვრეთ A2 A2
#განსაზღვრეთ A3 A3
// პარამეტრი 1 = პიქსელების რაოდენობა ზოლში
// პარამეტრი 2 = პინის ნომერი (უმეტესობა მოქმედებს)
// პარამეტრი 3 = პიქსელის ტიპის დროშები, საჭიროებისამებრ დაამატეთ:
// NEO_KHZ800 800 KHz ბიტ -სტრიმი (უმეტესობა NeoPixel პროდუქტებით WS2812 LED- ებით)
// NEO_KHZ400 400 KHz (კლასიკური 'v1' (არა v2) FLORA პიქსელი, WS2811 დრაივერები)
// NEO_GRB პიქსელები გაყვანილია GRB ბიტრემისთვის (უმეტესობა NeoPixel პროდუქტებით)
// NEO_RGB პიქსელები მიერთებულია RGB ბიტრემისთვის (v1 FLORA პიქსელი, არა v2)
Adafruit_NeoPixel ზოლები = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup () {
ზოლები. დაწყება ();
ზოლები. ჩვენება (); // ყველა პიქსელის ინიციალიზაცია "გამორთვის"
}
ბათილი მარყუჟი () {
if (analogRead (A0)> = 512) {
if (analogRead (A2)> = 768) {
if (analogRead (A3)> = 768) {
rainbowCycle (80, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A3)> = 512) {
rainbowCycle (60, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A3)> = 256) {
rainbowCycle (40, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
სხვა {
rainbowCycle (20, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} else if (analogRead (A2)> = 512) {
if (analogRead (A1)> = 768) {
CylonBounce (შემთხვევითი (255), შემთხვევითი (255), შემთხვევითი (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 512) {
CylonBounce (შემთხვევითი (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 256) {
CylonBounce (0, შემთხვევითი (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
სხვა {
CylonBounce (0, 0, შემთხვევითი (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} else if (analogRead (A2)> = 256) {
if (analogRead (A1)> = 768) {
ბაიტი r, g, b;
r = შემთხვევითი (255);
g = შემთხვევითი (255);
b = შემთხვევითი (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 512) {
ბაიტი r, g, b;
r = შემთხვევითი (255);
g = 0;
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 256) {
ბაიტი r, g, b;
r = 0;
g = შემთხვევითი (255);
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
სხვა {
ბაიტი r, g, b;
r = 0;
g = 0;
b = შემთხვევითი (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
სხვა {if (analogRead (A1)> = 768) {
RunningLights (შემთხვევითი (255), შემთხვევითი (255), შემთხვევითი (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 512) {
RunningLights (შემთხვევითი (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 256) {
RunningLights (1, შემთხვევითი (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
სხვა {
RunningLights (1, 1, შემთხვევითი (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
} სხვა {
setAll (0, 0, 0);
}
}
void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {
ბაიტი *გ;
uint16_t i, j;
for (j = 0; j <256*5; j ++) {// 5 ფერის ციკლი ბორბალზე
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
for (i = 0; i <NUM_LEDS; i ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
c = ბორბალი (((i * 256 / NUM_LEDS) + კ) & 255);
setPixel (i, *c, *(c+1), *(c+2));
}
showStrip ();
შეფერხება (SpeedDelay);
}
}
ბაიტი * ბორბალი (ბაიტი WheelPos) {
სტატიკური ბაიტი c [3];
თუ (WheelPos <85) {
c [0] = WheelPos * 3;
c [1] = 255 - WheelPos * 3;
c [2] = 0;
} სხვა თუ (WheelPos <170) {
WheelPos -= 85;
c [0] = 255 - WheelPos * 3;
c [1] = 0;
c [2] = WheelPos * 3;
} სხვა {
WheelPos -= 170;
c [0] = 0;
c [1] = WheelPos * 3;
c [2] = 255 - WheelPos * 3;
}
დაბრუნება გ;
}
ბათილი CylonBounce (ბაიტი წითელი, ბაიტი მწვანე, ბაიტი ლურჯი, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {
int SpeedDelay;
int ReturnDelay;
if (analogRead (A3)> = 768) {SpeedDelay = 80; ReturnDelay = 120;}
else if (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}
else if (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}
სხვა {SpeedDelay = 20; ReturnDelay = 60;}
for (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
setAll (0, 0, 0);
setPixel (i, წითელი/10, მწვანე/10, ლურჯი/10);
for (int j = 1; j <= EyeSize; j ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
setPixel (i+j, წითელი, მწვანე, ლურჯი);
}
setPixel (i+EyeSize+1, წითელი/10, მწვანე/10, ლურჯი/10);
showStrip ();
შეფერხება (SpeedDelay);
}
დაგვიანება (ReturnDelay);
for (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {
setAll (0, 0, 0);
setPixel (i, წითელი/10, მწვანე/10, ლურჯი/10);
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
for (int j = 1; j <= EyeSize; j ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
setPixel (i+j, წითელი, მწვანე, ლურჯი);
}
setPixel (i+EyeSize+1, წითელი/10, მწვანე/10, ლურჯი/10);
showStrip ();
შეფერხება (SpeedDelay);
}
დაგვიანება (ReturnDelay);
}
void RunningLights (ბაიტი წითელი, ბაიტი მწვანე, ბაიტი ლურჯი, int oldA0, int oldA1, int oldA2, int oldA3) {
int პოზიცია = 0;
int WaveDelay;
if (analogRead (A3)> = 768) {WaveDelay = 80;}
else if (analogRead (A3)> = 512) {WaveDelay = 60;}
else if (analogRead (A3)> = 256) {WaveDelay = 40;}
სხვა {WaveDelay = 20;}
for (int j = 0; j)
{
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
პოზიცია ++; // = 0; // პოზიცია + კურსი;
for (int i = 0; i
// სინუსური ტალღა, 3 ოფსეტური ტალღა ქმნის ცისარტყელას!
// float level = sin (i + Position) * 127 + 128;
// setPixel (i, დონე, 0, 0);
// float level = sin (i + Position) * 127 + 128;
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
setPixel (i, ((sin (i + პოზიცია) * 127 + 128)/255) * წითელი, ((ცოდვა (i + პოზიცია) * 127 + 128)/255) * მწვანე, ((ცოდვა (i + პოზიცია) * 127 + 128)/255) * ლურჯი);
}
showStrip ();
დაგვიანება (WaveDelay);
}
}
ბათილი მეტეორი წვიმა (ბაიტი წითელი, ბაიტი მწვანე, ბაიტი ლურჯი, ბაიტე მეტეორი ზომა, ბაიტი მეტეორი TrailDecay, ლოგიკური მეტეორი შემთხვევითი დეკემბერი, int oldA0, int oldA1, int oldA2, int oldA3) {
setAll (0, 0, 0);
int SpeedDelay;
if (analogRead (A3)> = 768) {SpeedDelay = 80;}
else if (analogRead (A3)> = 512) {SpeedDelay = 60;}
else if (analogRead (A3)> = 256) {SpeedDelay = 40;}
სხვა {SpeedDelay = 20;}
for (int i = 0; i <NUM_LEDS+NUM_LEDS; i ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
// fade brightness ყველა LED ერთი ნაბიჯი
for (int j = 0; j)
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
თუ ((! meteorRandomDecay) || (შემთხვევითი (10)> 5)) {
fadeToBlack (j, meteorTrailDecay);
}
}
// მეტეორის დახატვა
for (int j = 0; j <meteorSize; j ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ძველი A3+256)
შესვენება;
}
თუ ((i-j = 0)) {
setPixel (i-j, წითელი, მწვანე, ლურჯი);
}
}
showStrip ();
შეფერხება (SpeedDelay);
}
}
void fadeToBlack (int ledNo, byte fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// ნეოპიქსელი
uint32_t ძველი ფერი;
uint8_t r, g, b;
int ღირებულება;
oldColor = strip.getPixelColor (ledNo);
r = (oldColor & 0x00ff0000UL) >> 16;
g = (oldColor & 0x0000ff00UL) >> 8;
b = (oldColor & 0x000000ffUL);
r = (r <= 10)? 0: (int) r- (r*fadeValue/256);
g = (g <= 10)? 0: (int) g- (g*fadeValue/256);
b = (b <= 10)? 0: (int) b- (b*fadeValue/256);
strip.setPixelColor (ledNo, r, g, b);
#დაასრულე თუ
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [ledNo].fadeToBlackBy (fadeValue);
#დაასრულე თუ
}
// *** შეცვალეთ აქ ***
void showStrip () {
#ifdef ADAFRUIT_NEOPIXEL_H
// ნეოპიქსელი
ზოლები. ჩვენება ();
#დაასრულე თუ
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show ();
#დაასრულე თუ
}
void setPixel (int Pixel, ბაიტი წითელი, ბაიტი მწვანე, ბაიტი ლურჯი) {
#ifdef ADAFRUIT_NEOPIXEL_H
// ნეოპიქსელი
strip.setPixelColor (პიქსელი, ზოლები. ფერი (წითელი, მწვანე, ლურჯი));
#დაასრულე თუ
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [პიქსელი].რ = წითელი;
leds [Pixel].g = მწვანე;
leds [Pixel].b = ლურჯი;
#დაასრულე თუ
}
ბათილი კომპლექტი ყველა (ბაიტი წითელი, ბაიტი მწვანე, ბაიტი ლურჯი) {
for (int i = 0; i <NUM_LEDS; i ++) {
setPixel (i, წითელი, მწვანე, ლურჯი);
}
showStrip ();
}
ნაბიჯი 3: საათის შექმნა
მე გირჩევთ მიიღოთ შუშის საათი, რომელიც შიგნიდან ბრტყელია. როდესაც მე ვიყენებდი მოქნილ სარკეს საათის შიგნით, წარმოიქმნა პრობლემა საათის გარეთ არსებული რიცხვების გამო, სარკე იკეცებოდა, რის შედეგადაც არ ხდებოდა უსასრულობის სარკის ეფექტი. თქვენ უნდა გქონდეთ მოქნილი სარკის ფურცელი და კონფიდენციალურობის ფილმი რაც შეიძლება ბრტყელი იყოს. თუ საათს იღებთ, დარწმუნდით, რომ განათავსეთ LED უპრობლემოდ შიგნით.
ნაბიჯი 1: გახსენით საათი და ამოიღეთ წინა მინა
ნაბიჯი 2: განათავსეთ კონფიდენციალურობის ფილმი წინა მინაზე (ეს ვიდეო გიჩვენებთ თუ როგორ უნდა გააკეთოთ ეს)
ნაბიჯი 3: წაისვით მოქნილი სარკე საათის შიგნით (ამის გაკეთებამდე ამოიღეთ საათები)
ნაბიჯი 4: გააკეთეთ ხვრელი შუაში, რომ საათის ხელები ისევ უკან იყოს ჩასმული
ნაბიჯი 5: მოათავსეთ LED ზოლები საათის შიდა კედლების გარშემო (მე გამოვიყენე ცხელი წებოს იარაღი ამ ნაბიჯისათვის)
ნაბიჯი 6: ჩართეთ LED ზოლები და განათავსეთ ჭიქა საათის თავზე, რომ ნახოთ არის თუ არა უსასრულობის სარკის ეფექტი
ნაბიჯი 7: მას შემდეგ რაც დაასრულებთ ყველაფერს, შეაერთეთ საათი და დატოვეთ მავთულები უკანა მხარეს
ნაბიჯი 8: გილოცავთ თქვენ დაასრულეთ პროექტი და ყველაფერი კარგად უნდა მუშაობდეს
თუ თქვენ გაქვთ რაიმე შეკითხვები, გთხოვთ დაწეროთ ქვემოთ (იცოდეთ, რომ მე შეიძლება ვერ ვპასუხობ, მაგრამ ყველაფერს გავაკეთებ)
გირჩევთ:
გააკეთეთ უსასრულობის სარკის საათი: 15 ნაბიჯი (სურათებით)
გააკეთე უსასრულობის სარკის საათი: წინა პროექტში მე ავაშენე უსასრულობის სარკე, სადაც ჩემი საბოლოო მიზანი იყო საათის გადაქცევა. (გააკეთე ფერადი უსასრულობის სარკე) მე არ შევეცადე ამას მისი აშენების შემდეგ, რადგან, მიუხედავად იმისა, რომ ის მშვენივრად გამოიყურებოდა, რამდენიმე რამ იყო
გააკეთეთ მარტივი უსასრულობის სარკის კუბი - არა 3D ბეჭდვა და არა პროგრამირება: 15 ნაბიჯი (სურათებით)
გააკეთეთ მარტივი უსასრულობის სარკის კუბი | არა 3D ბეჭდვა და არა პროგრამირება: ყველას მოსწონს კარგი უსასრულობის კუბი, მაგრამ ისინი ისე გამოიყურებიან, როგორც ძნელი გასაკეთებელი. ჩემი მიზანი ამ ინსტრუქციულ პროგრამაში არის გაჩვენოთ ნაბიჯ-ნაბიჯ თუ როგორ უნდა გააკეთოთ ეს. არა მხოლოდ ეს, არამედ იმ მითითებებით, რასაც მე გაძლევთ, თქვენ შეძლებთ გააკეთოთ ერთი
მარტივი წვრილმანი უსასრულობის სარკის საათი: 3 ნაბიჯი
მარტივი წვრილმანი უსასრულობის სარკის საათი: თუ მოგბეზრდებათ ჩვეულებრივი საათი, სცადეთ გააკეთოთ ეს მაგარი წვრილმანი უსასრულობის სარკის საათი. თქვენი ოთახის დონის გასაზრდელად
უსასრულობის სარკის საათი: 5 ნაბიჯი (სურათებით)
უსასრულობის სარკის საათი: ეს არის ხელნაკეთი საათი ძირითადად დეკორაციისთვის. საათში არის რამდენიმე LED ნათურა, როდესაც ჩართულია, ეს არის ულამაზესი გაფორმება საძინებლისთვის. როდესაც გამორთულია, ეს არის პატარა სარკე. რა თქმა უნდა, ეს არის საათი
უსასრულობის სარკის კედლის საათი IKEA სურათის ჩარჩოში: 4 ნაბიჯი
უსასრულობის სარკის კედლის საათი IKEA სურათის ჩარჩოში: გამარჯობა, მე ყოველთვის მინდოდა კედლის საათის აშენება. ბევრი მშვენიერი კედლის საათია მაღაზიებში, როგორიცაა IKEA. მე მქონდა გარკვეული პრობლემები ამ კომერციულ საათებთან დაკავშირებით. ისინი მეტისმეტად ხმამაღლა მეუბნებიან (უწყვეტი ტიკტაკი მაღიზიანებს), მე საათის საათებს ვერ ვხედავ