فهرست مطالب:
- مرحله 1: قبل از شروع
- مرحله 2: قطعات مورد نیاز
- مرحله 3: اتصال و ساخت سخت افزار
- مرحله 4: با استفاده از 50 ماژول نور ایجاد کنید
- مرحله 5: برنامه نویسی و سیم کشی آردوینو
- مرحله ششم: نتیجه و ساخت فیلم
تصویری: ماژول نور - نور را با استفاده از Neopixel و Pull Up Switch بکشید: 6 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
ویژگی های ماژول Light
- آردوینو اونو
- سخت افزار و محوطه خریداری شده از اینترنت
- Neopixel و منبع تغذیه از مدرسه انفورماتیک و طراحی محصول وام گرفته شده است
- ماژول نور توسط منبع تغذیه کنترل می شود
- همه عملکردها از طریق تعامل کاربران کنترل می شود
- انواع انیمیشن نوار پیکسل: نوع باران ، نوع دوش ، نوع رعد و برق جرقه ، نوع پاپ ، نوع نامنظم
- سوئیچ pull up به نوار Neopixel متصل می شود و هنگام کشیدن نوار Neopixel متحرک تغییر می کند
مرحله 1: قبل از شروع
سلام دستورالعمل ها و سازندگان
ما پروژه طراحی تعاملی را از نظر اینکه اگر بتوانیم احساس باران را از طریق انیمیشن نور احساس کنیم ، اتفاق می افتد ، آغاز کردیم. من فکر می کردم حساسیت کاربر از طریق رابطی که مستقیماً نور را می کشد به حداکثر می رسد.
مبادا دست به کار شود
مرحله 2: قطعات مورد نیاز
بر اساس یک ماژول نور
*** با پشتیبانی بخش ما از نئوپیکسل و منبع تغذیه استفاده شد. ***
الکترونیک:
- آردوینو اونو
- سیم 3 رنگ (مشکی ، قرمز ، هر رنگ)
- اتصال 3 پین (لینک خرید)
- کلید 1 را بکشید بالا (لینک خرید)
- لوله کوچک کننده
- نوار LED قابل افزودن WS2812b با 74 LED (نوار نئوپیکسل)*2
- منبع تغذیه (5V 350A) 1
*** 50 مجموعه برای آردوینو ، Pull Switch و NeoPixels مورد نیاز است. ***
سخت افزار:
- نوار اکریلیک 2t (10mm*1000mm) 1
- تخته اکریلیک 5t (60mm*60mm) 1
- Foemax 10t (1200mm*1800mm) 1
- اسپری سیاه
- کراوات کابل
- رشته
- تخته سخت
- تخته شبکه
مرحله 3: اتصال و ساخت سخت افزار
ابتدا ، برای ایجاد یک ماژول روشنایی به برش اکریلیک نیاز داریم.
- به عنوان وسیله ای برای تجربه متحرک سازی نور ، یک ماژول نورپردازی تهیه کنید که با اتصال 74 LED به شکل نوار نئوپیکسلی روی نوار اکریلیک با ضخامت 2 میلی متر با مساحت 1M ثابت می شود. ما دو نوع ماژول روشنایی تولید کرده ایم: معمولی خطی و مارپیچی.
- برای انواع خطی ، نوارهای نئوپیکسلی موجود را می توان نگه داشت و محکم کرد ، اما انواع مارپیچی به کار دستی نیاز دارد. هر یک از 74 LED به قطعات تقسیم می شوند ، به یک اکریلیک مارپیچ متصل شده و با سرب به هم وصل می شوند.
نوار Neopixel را به اکریلیک وصل کنید و هر نوار را محکم کنید تا از پخش شدن آن توسط حرارت جلوگیری شود ، یا با یک خط ماهیگیری نازک گره بزنید. در مورد نوع خطی ، برای طراحی ظاهری زیبا نیاز به کشیدن کره به انتهای ماژول بود و ما توپ پینگ پنگ را با اسپری سیاه به پایان رساندیم. سپس آنها یک سوراخ کوچک در توپ پینگ پنگ حفر کردند و آن را با طناب متصل کردند. مهمترین قسمت بعدی ، سوئیچ و نئوپیکسل ، مطابق شکل متصل است. سپس سوئیچ به قفسه سقف محکم می شود.
در مورد نوع مارپیچ ، این خطر وجود دارد که کشیدن مستقیم ماژول مارپیچی باعث تحت فشار قرار گرفتن اکریلیک شود ، بنابراین قسمت کشش (ورودی) و ماژول (خروجی) از هم جدا می شوند. برای به حداکثر رساندن سقوط نور ، ماژول ها به صورت عمودی بر روی سقف نصب شدند ، ماژول های خطی به هوا ثابت شدند ، مارپیچ ها مستقیماً به سقف ثابت شدند. و توپ پینگ پنگ و سوئیچ را به خط ماهیگیری متصل کردیم تا بتواند کار کند.
برش اکریلیک همانطور که در تصویر بالا نشان داده شده است برای اطمینان از سوئیچ به قفسه مورد نیاز است. یک سوئیچ 6 سانتی متری مربع ضخامت تقریباً 5 میلی متر دارد ، با سوئیچ در مرکز و یک کابل کابل از سوراخ های دو طرف برای محکم نگه داشتن سوئیچ. یک سوراخ مدور در پایین مرکز کشش سوئیچ را نمایان می کند ، در زیر آن یک کابل سه سیم خارج شده و به پایانه کابل ماژول متصل می شود. و به طور مشابه ، از طریق یک سوراخ در چهار گوشه ، قفسه و اکریلیک با اتصالات کابل محکم می شوند. همانطور که در بالا توضیح داده شد ، ماژول خطی مستقیماً به کشش متصل می شود ، اما ماژول مارپیچی پین و سوئیچ را به طور جداگانه متصل می کند.
مرحله 4: با استفاده از 50 ماژول نور ایجاد کنید
ما با استفاده از مجموع 50 ماژول ، تجربه کاربری را برای نور بیشتر طراحی کرده ایم
ما قفسه ای به عرض 1 ، 800 میلی متر و طول 1 ، 200 میلی متر داشتیم و هر سوئیچ و ماژول را به هم وصل کردیم تا بتوانید محیط باران و باران را که در ابتدا برنامه ریزی کرده بودید تجربه کنید و هر ماژول به تنهایی قادر بود چند کار را انجام دهد. به
بسته به نقشه طراحی ، یک سوراخ گرد در فومکس ایجاد شد تا نصب را پنهان کند و مطمئن شود که ناحیه متصل ماژول LED قابل مشاهده نیست. از آنجا که فاصله تخته اکریلیک تا اتصال ماژول LED که سوئیچ در آن متصل شده است حدود 1 سانتی متر است ، از فومکس ضخامت 1 سانتی متر استفاده شد.
از چهارچوب فلزی مربعی برای نگه داشتن نصب همراه با پیچ و اتصالات کابل و حفظ وزن و تعادل کلی استفاده شد. اگر طول اتصالات نمایان شده بیشتر از آن باشد که سازنده سعی می کند ، تخته ضخیم تر ناکارآمد است و سایر سازه ها توصیه می شود.
برای تسهیل تجربه کاربر در سطح چشم ، نصب تکمیل شده بر روی پشتیبانی تقریباً 2 متری قرار می گیرد ، اما احتیاط این است که نصب ماژول LED تعبیه شده با سوئیچ بسیار دشوار است ، بنابراین همه اتصالات باید برداشته شوند. از نردبان بالا رفتیم و ماژول را با نصب ثابت روی تکیه گاه متصل کردیم.
مهمترین بخش این فرایند این است که اطمینان حاصل شود که کار به طور ایمن و کاملاً ایمن انجام شده است تا اطمینان حاصل شود که تجربه در یک محیط امن امکان پذیر است
در مجموع از 10 آردوینو و 50 ماژول LED استفاده شد و پنج ماژول LED در هر آردوینو برای چند کاره کارآمدتر و بدون درز متصل شد. برای جزئیات به طرح پیوست مراجعه کنید. برنامه نویسی چند کاره Neopixel با استفاده از سوئیچ کامل مطابق نمودار طراحی ، در مرحله بعدی به تفصیل مورد بحث قرار می گیرد.
مرحله 5: برنامه نویسی و سیم کشی آردوینو
سیم کشی
- 50 ماژول مطابق طرح مرحله 4 به هم متصل شدند.
- هر ماژول به 10 مجموعه 50 ماژول تقسیم شد تا امکان انجام چند وظیفه و ایجاد یک ارتباط واضح فراهم شود.
- همانطور که در تصویر مجموعه 1 بالا نشان داده شده است ، پنج ماژول به یک آردوینو متصل شده اند و 5 پین نئوپیکسل برای اتصال منبع تغذیه به یکباره به هم وصل شده اند.
- GND نئوپیکسل ها و کلیدها نیز به هم وصل شده اند و برای سهولت درک ، سوئیچ ها به پین های 2 ، 3 ، 4 ، 5 ، 6 وصل شده و نئوپیکسل ها به پین های 9 ، 10 ، 11 ، 12 ، 13 وصل شده اند. به
- سوئیچ ها و نئوپیکسل ها به ترتیب به روشهای 2-9 ، 3-10 ، 4-11 ، 5-12 ، 13-16 متصل شدند.
- لازم به ذکر است از آنجا که اتصالات خطوط پیچیده است و به دلیل اتصال کوتاه خطر آتش سوزی وجود دارد ، لوله کوچک کننده گرم می شود تا از شکستن قطعات ضعیف اطمینان حاصل شود.
برنامه نویسی چند کاره Neopixel با سوئیچ pull up
5 انیمیشن سبک (نوع باران ، نوع دوش ، نوع رعد و برق جرقه ، نوع پاپ ، نوع نامنظم)
#عبارتند از
/*사용 하고자 하는 패턴 을 추가/*/
الگوی شمارش {هیچ ، RAINBOW_CYCLE ، THEATER_CHASE ، COLOR_WIPE ، اسکنر ، FADE ، TWINKLE ، STAR ، RAINBOWSPARKLE ، METEOR ، LIGHT ، BLOSSOM} ؛ /*네오 픽셀 을 을 설정 설정/*/ enum جهت {جلو ، عقب} ؛
/*패턴 의 클래스 를 입력/*/
کلاس NeoPatterns: public Adafruit_NeoPixel { /* 패턴 을 추가 하고 하기 함수 /* / public: pattern ActivePattern؛ /*클레스 함수 에 패턴 의 방향 direction/*/ جهت جهت ؛
/*변수 فاصله 을 추가*/ فاصله طولانی بدون علامت ؛ /*변수 lastUpdate 를 추가*/ unsigned long lastUpdate؛ /*변수 Color1 ، Color2 추가*/ uint32_t Color1 ، Color2 ؛ /*변수 TotalSteps 를 추가*/ uint16_t TotalSteps؛ /*변수 فهرست 를 추가*/ uint16_t فهرست ؛
/*패턴 을 완료 했을 시 다시/*/ void (*OnComplete) ()؛ /*네오 패턴 네오 픽샐 픽샐 갯수 ، 번호 번호 ، 타입 ، 콜백 불러오는 함수*/ NeoPatterns (uint16_t پیکسل ، uint8_t pin ، نوع uint8_t ، void (*callback) ()): Adafruit_NeoPixel (پیکسل ، پین ، نوع) { OnComplete = تماس مجدد ؛ }
/*패턴 을 업데이트 하기 위한 케이스/*/
void Update () { /*패턴 의 시간 설정. / 태스킹 을 구현 구문*/ if ((millis () - lastUpdate)> Interval) {lastUpdate = millis ()؛ /*ActivePattern 스위치 구문*/ switch (ActivePattern) {/*case RAINBOW_CYCLE 에서는 RainbowCycleUpdate 를 실행 하라*/ case RAINBOW_CYCLE: RainbowCycleUpdate ()؛ /*مورد RAINBOW_CYCLE 나와라*/ break؛
/*case THEATER_CHASE 에서는 TheaterChaseUpdate 를 실행 하라*/
مورد THEATER_CHASE: TheaterChaseUpdate ()؛ /*case THEATER_CHASE 나와라*/ break؛
/*مورد COLOR_WIPE 에서는 ColorWipeUpdate 를 실행 하라*/
مورد COLOR_WIPE: ColorWipeUpdate ()؛ /*مورد COLOR_WIPE 나와라*/ break؛ /*case SCANNER 에서는 ScannerUpdate 를 실행 하라*/ case SCANNER: ScannerUpdate ()؛ /*case SCANNER/ 나와라*/ break؛
/*مورد FADE 에서는 FadeUpdate 를 실행 하라*/
مورد FADE: FadeUpdate ()؛ /*مورد FADE 나와라*/ break؛
/*مورد TWINKLE 에서는 TwinkleUpdate 를 실행 하라*/
مورد TWINKLE: TwinkleUpdate ()؛ /*مورد TWINKLE 나와라*/ break؛
/*مورد STAR 에서는 StarUpdate 실행 하라*/
مورد STAR: StarUpdate ()؛ /*مورد STAR 에서 나와라*/ break؛
/*case RAINBOWSPARKLE 에서는 RainbowsparkleUpdate 를 실행 하라*/
case RAINBOWSPARKLE: RainbowsparkleUpdate ()؛ /*case RAINBOWSPARKLE 나와라*/ break؛ /*case METEOR 에서는 MeteorUpdate 를 실행 하라*/ case METEOR: MeteorUpdate ()؛ /*case METEOR 나와라*/ break؛
/*مورد LIGHT 에서는 LightUpdate 를 실행 하라*/
مورد LIGHT: LightUpdate ()؛ /*Case LIGHT 나와라*/ break؛
/*مورد BLOSSOM 에서는 BlossomUpdate 를 실행 하라*/
مورد BLOSSOM: BlossomUpdate ()؛ /*مورد BLOSSOM/*/ break؛ }}}
/*패턴 의 방향 을 설정 하는/*/
/*فهرست 를 증가 시키고 초기화 하는 함수*/
void Increment () { /*만약 정방향 이면 를 증가 시켜라* / if (جهت == FORWARD) {Index ++؛ /*만약 인덱스 가 전체 픽셀 구동 와 같 거나 많다 0 으로 초기화 시켜라*/ if (Index> = TotalSteps) {Index = 0؛ /*패턴 을 완료 함수/*/ if (OnComplete! = NULL) {OnComplete ()؛ }}}
/*만약 정방향 이 else else else else else*/ else { -فهرست ؛ /*만약 인덱스 가 네오 네오 픽셀 와 같 거나 if// 을 을 을*/ if (فهرست <= 0) {Index = TotalSteps - 1؛ /*패턴 을 완료 함수/*/ if (OnComplete! = NULL) {OnComplete ()؛ }}}}
/*반대 방향 으로 움직이게 하는/*/
void معکوس () { /*애니메이션 함수 에 معکوس 를 썼을 시 ، 만약 방향 이 이면 /* / if (جهت == FORWARD) { /*방향 은 그 반대 이며 전체 구동 갯수 1 일 빼라* / جهت = برعکس ؛ فهرست = TotalSteps - 1 ؛ } /*그 외의 방향 이 정방향 이면 으로 0 으로 설정 해라* / else {Direction = FORWARD؛ شاخص = 0 ؛ }}
/*애니메이션 을 설정 하는 함수 들*
*RainbowCycle/ 시간 과 방향 을/*/
void RainbowCycle (فاصله uint8_t ، جهت dir = FORWARD) { /*실행 되는 은 ain RainbowCycle 임* / ActivePattern = RAINBOW_CYCLE؛ /*시간 은 void RainbowCycle () 안에 입력 되는 interval 과 같음*/ Interval = interval؛ /*총 구동 갯수 5 255 임*/ TotalSteps = 255 ؛ /*인덱스 는 0 으로 설정 함*/ Index = 0؛ /*방향 은 void RainbowCycle () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir؛ }
/*RainbowCycle 업데이트 했을 경우*/
void RainbowCycleUpdate () { /*변수 i 가 네오 픽셀 for /를 를 를* /for (int i = 0؛ i <numPixels ()؛ i ++) { /*변수 i 가 증가 과 동시에 RGB 무지개 int / 로 변화 작동 해라 * / setPixelColor (i ، Wheel (((i * 256 / numPixels ()) + Index) & 255)) ؛ } / *애니메이션 을 보여주는 함수 * / show ()؛ افزایش () ؛ }
/*TheaterChase 컬러 와 시간 방향 을/*/
void TheaterChase (uint32_t color1 ، uint32_t color2 ، فاصله uint8_t ، جهت dir = FORWARD) { /*실행 되는 패턴 TH RTHEATER_CHASE* / ActivePattern = THEATER_CHASE؛ /*시간 은 void TheaterChase () 안에 입력 되는 interval 과 같음*/ Interval = interval؛ /*총 구동 갯수 P numPixels 임 임*/ TotalSteps = numPixels ()؛ /*컬러 1 ، 2 를 설정*/ Color1 = color1 ؛ رنگ 2 = رنگ 2 ؛ /*인덱스 는 0 으로 설정 함*/ Index = 0؛ /*방향 은 void TheaterChase () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir؛ }
/*TheaterChase 업데이트 했을 경우*/
void TheaterChaseUpdate () { /*변수 i 가 네오 개수 for for 를 를 증가 시켜라* /for (int i = 0؛ i <numPixels ()؛ i ++) { /*만약 변수 i 에 를 더해서 3 으로 나눈 것이 0 과 같다 면 i 를 رنگ 로 변환 시켜라*/ if ((i + Index)٪ 3 == 0) {setPixelColor (i ، Color1) ؛ } /*그렇지 않다면 i 를 رنگ 로 변환 시켜라* / else {setPixelColor (i ، Color2) ؛ }} / *애니메이션 을 보여주는 함수 * / show ()؛ افزایش () ؛ }
/*ColorWipe 컬러 와 시간 방향 을/*/
void ColorWipe (رنگ uint32_t ، فاصله uint8_t ، جهت dir = FORWARD) { /*실행 되는 은 L COLOR_WIPE* / ActivePattern = COLOR_WIPE ؛ /*시간 oid void ColorWipe () 안에 입력 val فاصله 과 같음*/ فاصله = فاصله ؛ /*총 구동 갯수 P numPixels 임 임*/ TotalSteps = numPixels ()؛ /*컬러 1 을 설정*/ Color1 = رنگ ؛ /*인덱스 는 0 으로 설정 함*/ Index = 0؛ /*방향 oid void ColorWipe () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir؛ }
/*ColorWipeUpdate 를 업데이트 했을 경우*/
void ColorWipeUpdate () { /*index 를 컬러 1 로 변환 시켜라* / setPixelColor (Index، Color1) ؛ / *애니메이션 을 보여주는 함수 */ show ()؛ افزایش () ؛ }
/*اسکنر/컬러 와 시간 을/*/
void Scanner (uint32_t color1 ، فاصله uint8_t) { /*실행 되는 은 AN SCANNER* / ActivePattern = SCANNER ؛ /*시간 은 void Scanner () 안에 입력 val interval 과 같음*/ Interval = interval؛ /*구동 갯수 는 총 갯수 1 을 빼고 2 를 곱 해라*/ TotalSteps = (numPixels () - 1)*2؛ /*컬러 1 을 설정*/ Color1 = color1 ؛ /*인덱스 는 0 으로 설정 함*/ Index = 0؛ }
/*ScannerUpdate 를 업데이트 했을 경우*/
void ScannerUpdate () { /*변수 i 는 영 총 갯수 for for 를 를 증가 /* /for (int i = 0؛ i <numPixels ()؛ i ++) { /*만약 변수 i 가 와 같다 면 i 를 color1 로 변환 시켜라*/ if (i == Index) {setPixelColor (i ، Color1) ؛ } / *그렇지 않다면 변수 i 를 전체 갯수 인덱스 를 뺀값 뺀값 같다 / * / else if (i == TotalSteps - Index) {setPixelColor (i ، Color1) ؛ } / *그 밖에는 i 를 디밍 의 값 만큼 * / else {setPixelColor (i، DimColor (getPixelColor (i)))) ؛ }} / *애니메이션 을 보여주는 함수 * / show ()؛ افزایش () ؛ }
/*اسکنر 컬러 컬러 1 ، 2 와 스텝 ، 시간 ، 방향 을 입력*/
void Fade (uint32_t color1 ، uint32_t color2 ، مراحل uint16_t ، فاصله uint8_t ، جهت dir = FORWARD) { /*실행 되는 은 FADE* / ActivePattern = FADE ؛ /*시간 은 void Fade () 안에 입력 val interval 과 같음*/ Interval = interval؛ /*구동 갯수 는 값임/*/ TotalSteps = مراحل ؛ /*컬러 1 ، 2 를 설정*/ Color1 = color1 ؛ رنگ 2 = رنگ 2 ؛ /*인덱스 는 0 으로 설정 함*/ Index = 0؛ /*방향 은 void Fade () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir؛ } /*FadeUpdate 를 업데이트 했을 경우* / void FadeUpdate () { /*변수 قرمز 값 은 다음 같음 같음* / uint8_t قرمز = ((قرمز (رنگ 1)*(مجموع مراحل - فهرست)) + (قرمز (رنگ 2)*فهرست)) / TotalSteps ؛ / * 변수 سبز 값 은 다음 과 같음 * / uint8_t سبز = ((سبز (رنگ 1) * (مجموع مراحل - فهرست)) + (سبز (رنگ 2) * فهرست)) / TotalSteps ؛ / * 변수 آبی 값 은 다음 과 같음 * / uint8_t آبی = ((آبی (رنگ 1) * (مجموع مراحل - فهرست)) + (آبی (رنگ 2) * فهرست)) / TotalSteps ؛ /*위 의 قرمز ، سبز ، آبی/ 으로 컬러 셋팅 함/*/ ColorSet (رنگ (قرمز ، سبز ، آبی)) ؛ / *애니메이션 을 보여주는 함수 */ show ()؛ افزایش () ؛ }
/*모든 네오 픽셀 을 끄는/*/
void alloff () { /*총 네오 픽셀 갯수 개 74 이며 이며* / int NPIXEL = 74 ؛ /*변수 i 가 증가 모든 모든 의 컬러 값 을 으로 함 함*/ for (int i = 0؛ i <NPIXEL؛ i ++) {setPixelColor (i، 0، 0، 0)؛ }}
/*چشمک 의 컬러 1 와 시간 을 입력*/
void Twinkle (uint32_t color1 ، فاصله uint8_t) { /*실행 되는 패턴 IN TWINKLE* / ActivePattern = TWINKLE ؛ /*시간 은 void Twinkle () 안에 입력 되는 interval 과 같음*/ Interval = interval؛ /*컬러 1 설정*/ Color1 = color1 ؛ /*총 구동 갯수 P numPixels 임 임*/ TotalSteps = numPixels ()؛ شاخص = 0 ؛ }
/*TwinkleUpdate 를 업데이트 했을 경우*/
void TwinkleUpdate () { /*모든 네오 픽셀 의 컬러 으로 0 으로 셋팅* / set همه (0 ، 0 ، 0) ؛ /*변수 پیکسل 은 تصادفی 74*/ int پیکسل = تصادفی (74) ؛ /*تصادفی 74 개 에서 2 로나 눈 수 를 하게 켜라/*/setPixelColor (پیکسل/2 ، 50 ، 100 ، 255) ؛ setPixelColor (پیکسل ، 250 ، 255 ، 250) ؛ setPixelColor (پیکسل/2 ، 200 ، 250 ، 255) ؛ setPixelColor (پیکسل ، 255 ، 255 ، 255) ؛ setPixelColor (پیکسل ، 250 ، 230 ، 250) ؛ setPixelColor (پیکسل/2 ، 150 ، 200 ، 255) ؛ / *애니메이션 을 보여주는 함수 */ show ()؛ / *랜덤 하게 함수/ */ setPixelColor (پیکسل ، 0 ، 0 ، 0) ؛ / *애니메이션 을 보여주는 함수 */ show ()؛ افزایش () ؛ }
/*ستاره 컬러 컬러 1 값 을 입력*/
void Star (uint32_t color1) { /*실행 되는 은 AR STAR* / ActivePattern = STAR؛ /*시간 은 void Star () 안에 입력 되는 interval 과 같음*/ Interval = Interval؛ /*총 구동 갯수 P numPixels 임 임*/ TotalSteps = numPixels ()؛ /*컬러 1 설정*/ Color1 = color1 ؛ شاخص = 0 ؛ }
/*StarUpdate 업데이트 했을 경우*/
void StarUpdate () { /*인덱스 와 컬러 셋팅* / setPixelColor (فهرست ، رنگ 1) ؛ نمایش () ؛ /*변수 i 가 0 이고 구동 갯수 작 으면 i 를 감소 시킴 = 한칸 씩 하는 애니메이션*/ for (int i = 0؛ i <numPixels ()؛ i--) {setPixelColor (i، Color (0، 0 ، 0)) ؛ } / *애니메이션 을 보여주는 함수 * / افزایش ()؛ }
/*Rainbowsparkle/시간 과 방향 을 입력*/
void Rainbowsparkle (uint8_t interval، direction dir = FORWARD) { /*실행 되는 패턴 IN RAINBOWSPARKLE* / ActivePattern = RAINBOWSPARKLE؛ /*시간 은 void Rainbowsparkle () 안에 입력 val interval 과 같음*/ Interval = interval؛ /*총 구동 갯수 P numPixels 임 임*/ TotalSteps = numPixels ()؛ شاخص = 0 ؛ /*방향 은 void Rainbowsparkle () 되는 입력 되는 جهت 과 같음*/ جهت = dir؛ }
/*RainbowsparkleUpdate 를 업데이트 했을 경우*/
void RainbowsparkleUpdate () { /*변수 i 가 0 이고 구동 갯수 보다 으면 값 값 을 증가 하는데* /for (int i = 0؛ i <numPixels ()؛ i ++) { /*변수 i 가 0 이고 구동 갯수 if 으면 i 값 증가 하는데 하는데*/ if ((i + Index)٪ 2 == 0 0 {uint32_t c = تصادفی (255) ؛ setPixelColor (i ، c) ؛ } else {setPixelColor (i ، تصادفی (255)) ؛ }} / *애니메이션 을 보여주는 함수 * / show ()؛ افزایش () ؛ } /*Meteor 의 시간 과 방향 을 /* / void Meteor (uint32_t color1) { /*실행 되는 패턴 ET METEOR* / ActivePattern = METEOR؛ /*시간 설정*/ فاصله = فاصله ؛ / *총 구동 갯수 는 numPixels 에서 일뺀 1 일뺀 *، *2 를 한 같음/ */ TotalSteps = (numPixels ()-1) *2 ؛ /*컬러 1 설정*/ Color1 = color1 ؛ شاخص = 0 ؛ }
/*MeteorUpdate 업데이트 했을 경우*/
void MeteorUpdate () {for (int i = 0؛ i <numPixels ()؛ i ++) {if (i == Index) {setPixelColor (i، 100، random (255)، 255)؛ } else {setPixelColor (i ، DimColor (getPixelColor (i)))) ؛ }} / *애니메이션 을 보여주는 함수 * / show ()؛ افزایش () ؛ }
/*نور 의 시간 과 방향 을 입력*/
void Light (uint32_t color1) { /*실행 되는 IGH IGH LIGHT* / ActivePattern = LIGHT؛ /*시간 설정*/ فاصله = فاصله ؛ / *총 구동 갯수 는 numPixels 에서 일뺀 1 일뺀 *، *2 를 한 같음/ */ TotalSteps = (numPixels ()-1) *2 ؛ /*컬러 1 을 설정*/ Color1 = color1 ؛ شاخص = 0 ؛ }
/*LightUpdate 를 업데이트 했을 경우*/
void LightUpdate () {for (int i = 0؛ i <numPixels ()؛ i ++) {if (i == TotalSteps - Index) {setPixelColor (i، 150، random (200)، 40)؛ } else {setPixelColor (i ، DimColor (getPixelColor (i)))) ؛ }} / *애니메이션 을 보여주는 함수 * / show ()؛ افزایش () ؛ }
/*شکوفه 의 시간 과 방향 을/*/
void Blossom (uint32_t color1) { /*실행 되는 패턴 OS BLOSSOM* / ActivePattern = BLOSSOM؛ /*시간 설정*/ فاصله = فاصله ؛ / *총 구동 갯수 는 numPixels 에서 일뺀 1 일뺀 후 ، *2 를 한 같음/ */ TotalSteps = (numPixels ()-1) *2 ؛ /*컬러 1 설정*/ Color1 = color1 ؛ شاخص = 0 ؛ }
/*BlossomUpdate 를 업데이트 했을 경우*/
void BlossomUpdate () {for (int i = 0؛ i <numPixels ()؛ i ++) {if (i == TotalSteps - Index) {setPixelColor (i، 255، random (255)، 100)؛ } else {setPixelColor (i ، DimColor (getPixelColor (i)))) ؛ }} / *애니메이션 을 보여주는 함수 * / show ()؛ افزایش () ؛ }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/ *네오 픽셀 켜지 는 는 위치 을 지정 해주는/ */ void set همه (بایت قرمز ، سبز بایت ، آبی بایت) {برای (int i = 0 ؛ i <numPixels ()؛ i ++) {setPixelColor (i ، قرمز ، سبز آبی)؛ } show ()؛ }
/*네오 픽셀 의 즉 ، 즉 밝기 를 하는 함수/*/
uint32_t DimColor (رنگ uint32_t) {// اجزای R ، G و B را یک بیت به راست تغییر دهید uint32_t dimColor = رنگ (قرمز (رنگ) >> 1 ، سبز (رنگ) >> 1 ، آبی (رنگ) >> 1) ؛ بازگشت dimColor ؛ }
/*모든 네오 픽셀 의 칼라 를/*/
void ColorSet (uint32_t color) {for (int i = 0؛ i <numPixels ()؛ i ++) {setPixelColor (i، color)؛ } show ()؛ }
/*레드 값 을 불러/*/
uint8_t قرمز (رنگ uint32_t) {بازگشت (رنگ >> 16) & 0xFF؛ } /*그린 값 을 옴 /* / uint8_t سبز (رنگ uint32_t) {return (رنگ >> 8) & 0xFF؛ } /*블루 값 을 옴 /* / uint8_t آبی (رنگ uint32_t) {بازگشت رنگ & 0xFF؛ }
/*رنگین کمان/를 불러 옴*/
uint32_t Wheel (byte WheelPos) {WheelPos = 255 - WheelPos؛ if (WheelPos <85) {بازگشت رنگ (255 - WheelPos * 3 ، 0 ، WheelPos * 3) ؛ } else if (WheelPos <170) {WheelPos -= 85؛ بازگشت رنگ (0 ، WheelPos * 3 ، 255 - WheelPos * 3) ؛ } else {WheelPos -= 170 ؛ بازگشت رنگ (WheelPos * 3 ، 255 - WheelPos * 3 ، 0) ؛ }}} ؛
/*نوار 을 불러 오기 위한* /*사용 하는 스트립 별로 모두 / / /* /
void strip1Complete ()؛ void strip2Complete ()؛ void strip3Complete ()؛ void strip4Complete ()؛ void strip5Complete ()؛
/*네오 픽셀 의 갯수/*/
#تعریف NUMPIXELS 74 /*사용 하는 의 갯수 설정* / #تعریف B_NUM 5 /*نوار واردات 1 ~ 5 까지 ، 갯수 는 74 개 스트립 연결 핀 نوار 1 은 8 ~ نوار 5 까지 12* / NeoPatterns strip1 (74 ، 8 ، NEO_GRB + NEO_KHZ800 ، & strip1Complete) ؛ NeoPatterns strip2 (74 ، 9 ، NEO_GRB + NEO_KHZ800 ، & strip2Complete) ؛ strio NeoPatterns (74 ، 10 ، NEO_GRB + NEO_KHZ800 ، & strip3Complete) ؛ NeoPatterns strip4 (74 ، 11 ، NEO_GRB + NEO_KHZ800 ، & strip4Complete) ؛ NeoPatterns strip5 (74 ، 12 ، NEO_GRB + NEO_KHZ800 ، & strip5Complete) ؛ /*배열 을 사용한 버튼 버튼 핀/*/ const int buttonPin [B_NUM] = {2 ، 3 ، 4 ، 5 ، 6} ؛ /*배열 을 사용 버튼 버튼 상태 해줌/*/ int buttonState [B_NUM] ؛ /*2 번핀 부터 6 번핀 까지 상태 는 OW LOW 임*/ int lastButtonState [B_NUM] = {LOW، LOW، LOW، LOW، LOW}؛ /*2 번핀 부터 6 번핀 까지 버튼 를 초기화 시킴*/ int buttonCounter [B_NUM] = {0، 0، 0، 0، 0}؛ /*2 번핀 부터 6 번핀 까지 최대 버튼 는 5 임*/ int buttonCounterMax = 5 ؛ /*reading 버튼 핀 을 읽 있도록//*/ int خواندن [B_NUM] ؛ unsigned long lastDebounceTime [B_NUM] = {0، 0، 0، 0، 0}؛ /*모든 버튼 핀 읽는 읽는 시간 은 تاخیر 50 과 같음*/ debounce طولانی بدون امضا تاخیر = 50 ؛
void setup () {
/*복잡 하게 연결 이 필요 필요 방식 의 의 G G: GND - 5V (اتصال به شماره پین)*/ برای (int i = 0 ؛ i <B_NUM ؛ i ++) {pinMode (buttonPin ، INPUT_PULLUP) ؛ } Serial.begin (9600)؛ /*스트립 1 ~ 5 를 셋팅*/ strip1.begin ()؛ strip2.begin ()؛ strip3.begin ()؛ strip4.begin ()؛ strip5.begin ()؛
//strip1. TaterChase(strip1. Color(255، 0، 255)، strip1. Color (255، 50، 0)، 20، FORWARD)؛
}
/*버튼 카운터 변수 값 은 5 임*/
int counter = 5؛ حلقه void () { /*버튼 수 가 i 가 으면 를 를 증가 시키고* / for (int i = 0؛ i debounceDelay) {if (خواندن ! = buttonState ) {buttonState = خواندن ؛ buttonCounter ++؛ /*버튼 카운팅 이 위에서 설정 한 حداکثر 값 5 를 넘으면 0 으로 초기화*.*/ if (buttonCounter > buttonCounterMax) buttonCounter = 0 ؛ }} lastButtonState = خواندن ؛ } /*모든 스트립 을 업데이트*.* / strip1. Update ()؛ strip2. Update ()؛ strip3. Pedate ()؛ 4. به روز رسانی () ؛ نوار 5. به روز رسانی () ؛
///// SWITCH_2 /////////////////////////////////////// /////////////////////////////////////////////// ////////////////////////////////////////
/*버튼 배열 의 0 번째. 2 번핀 에 연결된 을 활용 활용 애니메이션 구동 되도록 하는 하는 스위치//*/ switch (buttonCounter [0]) {
/*첫번째 버튼 을 활동 시키면 구동//*/
مورد 0: strip1. ActivePattern = BLOSSOM؛ /*해당 애니메이션 의 시간 을/*/ strip1. Interval = 20؛ /*구동 되는 네오 픽셀 의//*/ strip1. TotalSteps = strip1.numPixels ()؛ زنگ تفريح؛ /*두번째 버튼 을 활동 시키면//*/ case 1: strip1. ActivePattern = RAINBOWSPARKLE؛ نوار 1. Interval = 50 ؛ strip1. TotalSteps = strip1.numPixels ()؛ زنگ تفريح؛ /*세번째 버튼 을 시키면 시키면 구동/*/ case 2: strip1. ActivePattern = SCANNER؛ نوار 1. Interval = 10؛ strip1. TotalSteps = (strip1.numPixels () - 1) * 2؛ زنگ تفريح؛ /*네번째 버튼 을 시키면 시키면///*/ case 3: strip1. ActivePattern = TWINKLE؛ نوار 1. Interval = 1؛ strip1. TotalSteps = strip1.numPixels ()؛ زنگ تفريح؛ /*다섯 번째 버튼 을 활동 시키면 되는/*/ case 4: strip1. ActivePattern = METEOR؛ نوار 1. Interval = 10؛ strip1. TotalSteps = strip1.numPixels ()؛ زنگ تفريح؛ } Serial.print (buttonCounter [0]) ؛ Serial.print ("،") ؛ Serial.println (buttonCounter [1]) ؛
///// SWITCH_3 ///////////////////////////////////////// /////////////////////////////////////////////// ////////////////////////////////////////
switch (buttonCounter [1]) {case 0: strip2. ActivePattern = STAR؛ نوار 2. فاصله = 50 ؛ strip2. TotalSteps = strip2.numPixels ()؛ زنگ تفريح؛ مورد 1: strip2. ActivePattern = RAINBOWSPARKLE؛ نوار 2. فاصله = 100 ؛ strip2. TotalSteps = strip2.numPixels ()؛ زنگ تفريح؛ مورد 2: strip2. ActivePattern = SCANNER؛ نوار 2. فاصله = 20 ؛ strip2. TotalSteps = (strip2.numPixels () - 1) * 2؛ زنگ تفريح؛ مورد 3: strip2. ActivePattern = TWINKLE؛ نوار 2. فاصله = 5 ؛ strip2. TotalSteps = strip2.numPixels ()؛ زنگ تفريح؛ مورد 4: strip2. ActivePattern = METEOR؛ نوار 2. فاصله = 40 ؛ strip2. TotalSteps = strip2.numPixels ()؛ زنگ تفريح؛ } Serial.print (buttonCounter [0]) ؛ Serial.print ("،") ؛ Serial.println (buttonCounter [1]) ؛
///// SWITCH_4 //////////////////////////////////////// /////////////////////////////////////////////// ////////////////////////////////////////
switch (buttonCounter [2]) {case 0: strip3. ActivePattern = STAR؛ strip3. Interval = 50؛ strip3. TotalSteps = strip3.numPixels ()؛ زنگ تفريح؛ مورد 1: strip3. ActivePattern = RAINBOWSPARKLE؛ strip3. Interval = 100؛ strip3. TotalSteps = strip3.numPixels ()؛ زنگ تفريح؛ مورد 2: strip3. ActivePattern = SCANNER؛ strip3. Interval = 20؛ strip3. TotalSteps = (strip3.numPixels () - 1) * 2؛ زنگ تفريح؛ مورد 3: strip3. ActivePattern = TWINKLE؛ strip3. Interval = 5؛ strip3. TotalSteps = strip3.numPixels ()؛ زنگ تفريح؛ مورد 4: strip3. ActivePattern = METEOR؛ strip3. Interval = 25؛ strip3. TotalSteps = strip3.numPixels ()؛ زنگ تفريح؛ } Serial.print (buttonCounter [0]) ؛ Serial.print ("،") ؛ Serial.println (buttonCounter [1]) ؛
///// SWITCH_5 /////////////////////////////////////// /////////////////////////////////////////////// ////////////////////////////////////////
switch (buttonCounter [3]) {case 0: strip4. ActivePattern = STAR؛ strip4. Interval = 50 ؛ strip4. TotalSteps = strip4.numPixels ()؛ زنگ تفريح؛ مورد 1: strip4. ActivePattern = RAINBOWSPARKLE؛ strip4. Interval = 100؛ strip4. TotalSteps = strip4.numPixels ()؛ زنگ تفريح؛ مورد 2: strip4. ActivePattern = SCANNER؛ strip4. Interval = 20؛ strip4. TotalSteps = (strip4.numPixels () - 1) * 2؛ زنگ تفريح؛ مورد 3: strip4. ActivePattern = TWINKLE؛ strip4. Interval = 5؛ strip4. TotalSteps = strip4.numPixels ()؛ زنگ تفريح؛ مورد 4: strip4. ActivePattern = METEOR؛ strip4. Interval = 25 ؛ strip4. TotalSteps = strip4.numPixels ()؛ زنگ تفريح؛ } Serial.print (buttonCounter [0]) ؛ Serial.print ("،") ؛ Serial.println (buttonCounter [1]) ؛
///// SWITCH_6 ///////////////////////////////////////// /////////////////////////////////////////////// ////////////////////////////////////////
switch (buttonCounter [4]) {case 0: strip5. ActivePattern = STAR؛ نوار 5. فاصله = 50 ؛ strip5. TotalSteps = strip5.numPixels ()؛ زنگ تفريح؛ مورد 1: strip5. ActivePattern = RAINBOWSPARKLE؛ نوار 5. Interval = 100؛ strip5. TotalSteps = strip5.numPixels ()؛ زنگ تفريح؛ مورد 2: strip5. ActivePattern = SCANNER؛ نوار 5. فاصله = 20 ؛ strip5. TotalSteps = (strip5.numPixels () - 1) * 2؛ زنگ تفريح؛ مورد 3: strip5. ActivePattern = TWINKLE؛ نوار 5. فاصله = 5؛ strip5. TotalSteps = strip5.numPixels ()؛ زنگ تفريح؛ مورد 4: strip5. ActivePattern = METEOR؛ نوار 5. فاصله = 25 ؛ strip5. TotalSteps = strip5.numPixels ()؛ زنگ تفريح؛ } Serial.print (buttonCounter [0]) ؛ Serial.print ("،") ؛ Serial.println (buttonCounter [1]) ؛ }
// strip1 تکمیل تماس با ما
void strip1Complete () {strip1. Color1 = strip1. Wheel (تصادفی (255)) ؛ strip1. Color2 = strip1. Wheel (تصادفی (255)) ؛ strip1. Index = 0؛ }
// strip2 تکمیل تماس با ما
void strip2Complete () {strip2. Color1 = strip2. Wheel (تصادفی (255)) ؛ strip2. Color2 = strip2. Wheel (تصادفی (255)) ؛ strip2. Index = 0؛ }
// strip3 تکمیل تماس با ما
void strip3Complete () {strip3. Color1 = strip3. Wheel (تصادفی (255)) ؛ strip3. Color2 = strip3. Wheel (تصادفی (255)) ؛ strip3. Index = 0؛ }
// strip4 تکمیل تماس با ما
void strip4Complete () {strip4. Color1 = strip4. Wheel (تصادفی (255)) ؛ strip4. Color2 = strip4. Wheel (تصادفی (255)) ؛ strip4. Index = 0؛ }
// strip5 تکمیل تماس با ما
void strip5Complete () {strip5. Color1 = strip5. Wheel (تصادفی (255)) ؛ strip5. Color2 = strip5. Wheel (تصادفی (255)) ؛ strip5. Index = 0؛ }
مرحله ششم: نتیجه و ساخت فیلم
از علاقه شما به پروژه ما سپاسگزاریم اگرچه پروژه کافی نیست.
توصیه شده:
نحوه ساخت خانه هوشمند با استفاده از ماژول رله کنترل آردوینو - ایده های اتوماسیون خانگی: 15 مرحله (همراه با تصاویر)
نحوه ساخت خانه هوشمند با استفاده از ماژول رله کنترل آردوینو | ایده های اتوماسیون خانگی: در این پروژه اتوماسیون خانگی ، ما یک ماژول رله خانه هوشمند طراحی می کنیم که می تواند 5 لوازم خانگی را کنترل کند. این ماژول رله را می توان از طریق تلفن همراه یا تلفن هوشمند ، ریموت IR یا ریموت تلویزیون ، سوئیچ دستی کنترل کرد. این رله هوشمند همچنین می تواند r
تلفن همراه پایه با استفاده از کیت کشف STM32F407 و ماژول GSM A6: 14 مرحله (همراه با تصاویر)
تلفن همراه اساسی با استفاده از کیت کشف STM32F407 و ماژول GSM A6: آیا تا به حال خواسته اید یک پروژه جاسازی شده جالب ایجاد کنید ؟. اگر بله ، چطور می توانید یکی از محبوب ترین و مورد علاقه ترین ابزارها یعنی تلفن همراه را بسازید !!!. در این دستورالعمل ، من شما را در مورد نحوه ساخت یک تلفن همراه اصلی با استفاده از STM راهنمایی می کنم
ریموت بی سیم با استفاده از ماژول NRF24L01 2.4 گیگاهرتز با آردوینو - Nrf24l01 گیرنده فرستنده 4 کانال / 6 کانال برای کوادکوپتر - هلیکوپتر Rc - Rc Plane با استفاده از آردوینو: 5 مرحله (همراه با تصاویر)
ریموت بی سیم با استفاده از ماژول NRF24L01 2.4 گیگاهرتز با آردوینو | Nrf24l01 گیرنده فرستنده 4 کانال / 6 کانال برای کوادکوپتر | هلیکوپتر Rc | Rc Plane با استفاده از آردوینو: برای کار با ماشین Rc | کوادکوپتر | هواپیمای بدون سرنشین | هواپیمای RC | قایق RC ، ما همیشه به گیرنده و فرستنده نیاز داریم ، فرض کنید برای RC QUADCOPTER به فرستنده و گیرنده 6 کاناله نیاز داریم و این نوع TX و RX بسیار پرهزینه است ، بنابراین ما یکی از آنها را در دستگاه خود تهیه می کنیم
استفاده از ماژول بلوتوث HC-05 برای برقراری ارتباط میکرو: بیت با تلفن همراه: 9 مرحله (همراه با تصاویر)
استفاده از ماژول بلوتوث HC-05 برای برقراری ارتباط میکرو: بیت با تلفن همراه: در بخش استفاده از ماژول بلوتوث HC-06 برای برقراری ارتباط میکرو: بیت با تلفن همراه ، ما در مورد نحوه استفاده از HC-06 برای برقراری ارتباط بین میکرو صحبت کرده ایم: بیت و تلفن همراه به جز HC-06 ، یک ماژول بلوتوث مشترک دیگر نیز وجود دارد
استفاده از ماژول بلوتوث HC-06 برای برقراری ارتباط میکرو: بیت با تلفن همراه: 8 مرحله (همراه با تصاویر)
استفاده از ماژول بلوتوث HC-06 برای برقراری ارتباط Micro: bit با تلفن همراه: بسیاری از دوستان در اطراف من که micro: bit را بازی می کنند به من بگویند که اتصال بلوتوث micro: bit پایدار نیست. به راحتی می توان ارتباط را قطع کرد. اگر از micropython استفاده کنیم ، حتی نمی توان از بلوتوث استفاده کرد. قبل از حل این مشکل توسط micro: bit offic