Мазмұны:
Бейне: Потенциометрі бар шексіз айна сағаты: 3 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:23
Мен шексіз айнаны кездестірдім, мен оны керемет деп таптым. Бұл мені шексіз айна жасауға шабыттандырды, бірақ маған мақсат қажет болды. Сонымен, мен жұмыс істейтін шексіз айна сағатын жасауды шештім. Бұл потенциометрлердің көмегімен режимдерді, жылдамдық пен түстерді өзгертуге мүмкіндік беретін шексіздік айна. (Ескерту: Мен мұндай нәрсені бірінші рет жасап тұрмын)
Жабдықтар
Бұл нәрсені жасау үшін сізге не қажет екенін білейік!
Саған қажет болады…
1) 1 Arduino Uno
3) 1 нан тақтасы
4) 1 сырғытқыш
5) 3 потенциометр
6) 1 9В батарея
7) 5 метрлік WS2811 жарық диодты жолағы
8) Кабельдік сымдар
9) Сағат (мен 12 дюймдік заманауи үлкен сағатты қолдандым)
10) икемді айна парағы (мен айна парағын қолдандым)
11) Құпиялылық фильмі (Мен бір жақты айнаны қолдандым)
12) Дәнекерлеу қажет болуы мүмкін, бұл сізде бар материалға байланысты
1 -қадам: Сымдарды жалғау
Сымдар өте қарапайым
- SPST қосқышы жарық диодты қосады және өшіреді (A0)
- Сол жақ потенциометр жарықты басқарады (A1)
- Орташа потенциометр режимдерді басқарады (A2)
- Дұрыс потенциометр жылдамдықты басқарады (A3)
2 -қадам: Кодекс
#қосу
#PIN кодын анықтаңыз 6
#анықта NUM_LEDS 54
#анықтаңыз A0 A0
#A1 A1 анықтаңыз
#анықтаңыз A2 A2
#A3 A3 анықтаңыз
// Параметр 1 = жолақтағы пиксель саны
// 2 -параметр = пин нөмірі (көбі жарамды)
// 3 -параметр = пиксель түріндегі жалаушалар, қажет болғанда бірге қосыңыз:
// NEO_KHZ800 800 КГц бит ағыны (WS2812 светодиоды бар NeoPixel өнімдерінің көпшілігі)
// NEO_KHZ400 400 КГц (классикалық 'v1' (v2 емес) FLORA пиксельдері, WS2811 драйверлері)
// NEO_GRB пиксельдері GRB бит ағыны үшін сымды (NeoPixel өнімдерінің көпшілігі)
// NEO_RGB пиксельдері RGB бит ағыны үшін сымды (v2 емес, FLORA v1)
Adafruit_NeoPixel жолағы = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
жарамсыз орнату () {
strip.begin ();
strip.show (); // Барлық пикселдерді «өшіру» күйіне келтіріңіз
}
void loop () {
егер (analogRead (A0)> = 512) {
егер (analogRead (A2)> = 768) {
егер (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) {
егер (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));
}
} егер басқа (analogRead (A2)> = 256) {
егер (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));
} егер басқа (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));
}
}
басқа {егер (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);
}
}
жарамсыз кемпірқосақ циклы (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {
байт *c;
uint16_t i, j;
for (j = 0; j <256*5; j ++) {// дөңгелектегі барлық түстің 5 циклы
егер (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ескіA3+256)
үзіліс;
}
үшін (i = 0; i <NUM_LEDS; i ++) {
егер (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ескіA3+256)
үзіліс;
}
c = Дөңгелек (((i * 256 / NUM_LEDS) + j) & 255);
setPixel (i, *c, *(c+1), *(c+2));
}
showStrip ();
кідіріс (SpeedDelay);
}
}
байт * Wheel (байт WheelPos) {
статикалық байт c [3];
егер (WheelPos <85) {
c [0] = WheelPos * 3;
c [1] = 255 - WheelPos * 3;
c [2] = 0;
} if if (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;
}
қайтару c;
}
жарамсыз 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;}
үшін (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {
егер (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);
үшін (int j = 1; j <= EyeSize; j ++) {
егер (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);
үшін (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {
setAll (0, 0, 0);
setPixel (i, қызыл/10, жасыл/10, көк/10);
егер (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ескіA3+256)
үзіліс;
}
үшін (int j = 1; j <= EyeSize; j ++) {
егер (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);
}
жарамсыз RunningLights (байт қызыл, байт жасыл, байт көк, int oldA0, int oldA1, int oldA2, int oldA3) {
int Position = 0;
int WaveDelay;
егер (analogRead (A3)> = 768) {WaveDelay = 80;}
else if (analogRead (A3)> = 512) {WaveDelay = 60;}
else if (analogRead (A3)> = 256) {WaveDelay = 40;}
басқа {WaveDelay = 20;}
үшін (int j = 0; j
{
егер (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ескіA3+256)
үзіліс;
}
Позиция ++; // = 0; // Позиция + Бағалау;
үшін (int i = 0; i
// синус толқын, 3 ығысу толқыны кемпірқосақ жасайды!
// өзгермелі деңгей = sin (i + Позиция) * 127 + 128;
// setPixel (i, деңгей, 0, 0);
// өзгермелі деңгей = sin (i + Позиция) * 127 + 128;
егер (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ескіA3+256)
үзіліс;
}
setPixel (i, ((sin (i + Position) * 127 + 128)/255) * қызыл, ((sin (i + Position) * 127 + 128)/255) * жасыл, ((sin (i + Position) * 127 + 128)/255) * көк);
}
showStrip ();
кідіріс (WaveDelay);
}
}
жарамсыз метеор жауын (байт қызыл, байт жасыл, байт көк, байт метеориті, байт метеорTrailDecay, логикалық метеорRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {
setAll (0, 0, 0);
int SpeedDelay;
if (analogRead (A3)> = 768) {SpeedDelay = 80;}
әйтпесе (analogRead (A3)> = 512) {SpeedDelay = 60;}
else if (analogRead (A3)> = 256) {SpeedDelay = 40;}
басқа {SpeedDelay = 20;}
үшін (int i = 0; i <NUM_LEDS+NUM_LEDS; i ++) {
егер (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ескіA3+256)
үзіліс;
}
// барлық жарық диодты жарықтылық бір сатыда жоғалады
үшін (int j = 0; j
егер (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ескіA3+256)
үзіліс;
}
егер ((! meteorRandomDecay) || (кездейсоқ (10)> 5)) {
fadeToBlack (j, meteorTrailDecay);
}
}
// метеорды тартыңыз
үшін (int j = 0; j <meteorSize; j ++) {
егер (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, байт fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
uint32_t oldColor;
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);
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [ledNo].fadeToBlackBy (fadeValue);
#endif
}
// *** ОСЫНА ОРЫНДАНУ ***
жарамсыз showStrip () {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show ();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show ();
#endif
}
жарамсыз setPixel (int Pixel, байт қызыл, байт жасыл, байт көк) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor (Pixel, strip. Color (қызыл, жасыл, көк));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [Pixel].r = қызыл;
leds [Pixel].g = жасыл;
leds [Pixel].b = көк;
#endif
}
void setAll (қызыл байт, жасыл байт, көк байт) {
үшін (int i = 0; i <NUM_LEDS; i ++) {
setPixel (i, қызыл, жасыл, көк);
}
showStrip ();
}
3 -қадам: Сағат құру
Мен ішкі жағынан тегіс шыны сағат алуды ұсынар едім. Мен икемді айнаны сағаттың ішкі жағына қолданған кезде сағат ішіндегі сандар шығып кететіндіктен мәселе болды, айна бүгіліп, шексіз айнаның әсері болмады. Мүмкіндігінше тегіс болу үшін сізге икемді айна парағы мен құпиялылық фильмі болуы керек. Егер сізде сағат болса, жарықдиодты ішіне еш қиындықсыз қоюға болатынына көз жеткізіңіз.
1 -қадам: сағатты ашып, алдыңғы әйнекті алыңыз
2 -қадам: Құпиялық фильмді алдыңғы әйнекке жабыстырыңыз (Бұл бейне сізге мұны қалай жасау керектігін көрсетеді)
3 -қадам: Иілгіш айнаны сағаттың ішкі жағына жағыңыз (мұны жасамас бұрын сағаттарды алыңыз)
4 -қадам: Сағат тілдерін орнына қою үшін ортасынан тесік жасаңыз
5 -қадам: Жарық диодты жолақты сағаттың ішкі қабырғаларына қойыңыз (мен бұл қадам үшін ыстық желім тапаншасын қолдандым)
6 -қадам: Жарық диодты жолақты қосыңыз және шексіз айнаның әсері бар -жоғын білу үшін әйнекті сағат үстіне қойыңыз
7 -қадам: Барлығын аяқтағаннан кейін сағатты біріктіріп, сымдардың артқы жағына өтуіне мүмкіндік беріңіз
8 -қадам: Сіз жобаны аяқтағаныңызбен құттықтаймын және бәрі жақсы жұмыс істеуі керек
Егер сізде қандай да бір сұрақтар туындаса, төменде оларға түсініктеме беріңіз (жауап бере алмайтынымды біліңіз, бірақ мен бар күшімді саламын)
Ұсынылған:
Makecode Arcade көмегімен GameGo -да шексіз деңгейлері бар платформер: 5 қадам (суреттермен)
Makecode Arcade көмегімен GameGo -да шексіз деңгейлері бар платформер: GameGo - бұл TinkerGen STEM білімі әзірлеген Microsoft Makecode үйлесімді ретро ойын портативті консолі. Ол STM32F401RET6 ARM Cortex M4 чипіне негізделген және STEM тәрбиешілеріне немесе ретро бейне ойындар жасауды ұнататын адамдарға арналған
Arduino үшін MCP41HVX1 цифрлық потенциометрі: 10 қадам (суреттермен)
MCP41HVX1 Arduino үшін сандық потенциометр: MCP41HVX1 цифрлық потенциометрлер тобы (aka DigiPots) - аналогты потенциометрдің функциясын қайталайтын және SPI арқылы басқарылатын құрылғылар. Мысал қосымшасы сіздің стерео дыбыс деңгейін реттеу тұтқасын DigiPot -пен алмастырады
Vortex Watch: шексіз айна білезігі: 10 қадам (суреттермен)
Vortex Watch: шексіз айна білезігі: Бұл жобаның мақсаты шексіз айна сағатының тозатын нұсқасын жасау болды. Ол қызыл, жасыл және көк шамдарға сағатты, минутты және секундты тағайындау және осы реңктерді қабаттастыру арқылы уақытты көрсету үшін өзінің RGB светодиодтарын пайдаланады
3 потенциометрі мен Arduino бар 3 серво моторын басқару: 11 қадам (суреттермен)
3 потенциометрі мен Arduino бар 3 серво моторын басқару: Сәлеметсіз бе. Бұл менің бірінші нұсқаулығым, сондықтан егер мен оны орнатуда қателік жасасам, сіз маған шыдамды боласыз деп үміттенемін. Бұл жаңадан бастағандар үшін жазылған, сондықтан сіздердің араларыңызда көп нәрсені өткізіп жіберуге болады
Шексіздік айна сағаты: 5 қадам (суреттермен)
Шексіздік айна сағаты: Бұл негізінен декорацияға арналған қолмен жасалған сағат. Сағатта бірнеше жарықдиодты шамдар бар, олар қосылған кезде бұл жатын бөлмеге арналған әдемі әшекей. Өшірілген кезде бұл кішкентай айна. Әрине, бұл сағаттың өзі