Съдържание:

Промяна на цвета на нощната светлина с помощта на Ardruino 101: 4 стъпки (със снимки)
Промяна на цвета на нощната светлина с помощта на Ardruino 101: 4 стъпки (със снимки)

Видео: Промяна на цвета на нощната светлина с помощта на Ardruino 101: 4 стъпки (със снимки)

Видео: Промяна на цвета на нощната светлина с помощта на Ardruino 101: 4 стъпки (със снимки)
Видео: 35 страшни видеоклипа с призраци: мега компилация от 2023 г. [V1] 2024, Ноември
Anonim
Image
Image
Промяна на цвета на нощната светлина с помощта на Ardruino 101
Промяна на цвета на нощната светлина с помощта на Ardruino 101

В този проект ще правите нощна лампа, използвайки ardruino, Adafruit neo rgb Strips и 3D принтер.

Обърнете внимание, че този натрапчив е само за моя училищен проект. Кодът за този проект се основава на друг проект. С това казано, че не съм експерт, що се отнася до Ардруино.

Стъпка 1: Изисквания

Изисквания
Изисквания
Изисквания
Изисквания
Изисквания
Изисквания

За този проект ще ви трябват следните хардуер и инструменти

Хардуер:

1 - Ardruino101 (в САЩ) или Genuino101 (за извън САЩ).

2 - NeoPixel rgb led ленти от adafruit (5 волта).

3 - USB конектор ardruino (конектор тип B към A).

4 - Софтуер от Ardruino, Ardruino IDE В този урок ще използваме версията 1.8.5. Изискванията към софтуерната библиотека са: 101, Adafruit NeoPixel и Madgwick.

5 -И обект, който да съхранява вашия хардуер. В този случай ще използвам 3D принтер. Файлът за този 3D печат се намира в описанията, наречени "Lamp Head". Имайте предвид, че този файлов формат не е готов за 3D печат. В зависимост от вашите 3D принтери, първо трябва предварително да стартирате определения 3D софтуер за печат върху 3D обекта. Понякога мащабът на 3D отпечатването ще се нулира. затова се уверете, че диаметърът е зададен на 11 cm на 11 cm.

6 - Основен комплект за запояване.

Стъпка 2: Разбиране на хардуера и софтуера

Ардруин/Генуино101

Само за да изясним Ardruino101 и genuino101 са абсолютно еднакви до имената. И двете имат еднакви спецификации и използват един и същ софтуер.

Ardruino101 притежават основните спецификации като ardruino UNO и други. Основната характеристика на ardruino101 е акселерометърът и жироскопът, които ще използваме в нашия проект. Също така този тип ardruino имат своята уникална библиотека с кодове, наречена CurrieIMU (Вътрешни мерни единици), която е включена в библиотечното разширение 101.

С казаното нека поговорим за софтуера.

Софтуер и библиотеки

Ardruino IDE използва python като основен изходен код. това е и основният платформен код, където работи повечето ardruino. Има много уроци онлайн за това как да използвате този софтуер, така че препоръчвам първо да ги проучите, ако сте нов в тази програма.

Като се има предвид това, библиотеките, които използваме, са следните:

От менюто Sketch,> Include Library> Manage Libraries … В полето за въвеждане на текст въведете

- 101 Стандартно ardruino 101 не се включва автоматично в ardruino IDE. Нуждаем се от това разширение на библиотеката, за да кодираме нашия тип ardruino.

-Adafruit NeoPixel за кодиране на нашите Neo пикселни ленти.

-Madgwick За да се четат необработените данни и да се изчисляват тези данни към необработени, питч и рол.

Не RGB ленти

Типът, който ще използвам, е тип 5 напрежение или 5v. С този 5v нямам нужда от разширен източник на захранване, за да контролирам лентите си. Вместо това ще използвам ardruino като източник на захранване за контрол и осветяване на лентите.

Ето няколко съвета, които трябва да знаете, преди да започнете с тези ленти.

Първо ще ви трябват Neodigital RGB LED ленти от adafruit. Този вид ленти може да се управлява с помощта на кодове. След това трябва да знаете, че на тези ленти има задна и челна страна. Този гръб и лицевата страна са важни за запояването. Уверете се, че сте запоявали предната страна, където клавишът със стрелка сочи далеч от върха.

Ето ръководство за това как да ги използвате.

Има 3 точки на спойка, които трябва да имате предвид Заземяващата връзка (GND), Напрежената връзка (V) и Пин връзката (DIN).

Стъпка 3: Настройване на компонентите

Настройване на компонентите
Настройване на компонентите
Настройване на компонентите
Настройване на компонентите
Настройване на компонентите
Настройване на компонентите

Първо ще трябва да отпечатате 3D компонента, който можете да намерите в изискванията. В този случай ще използвам PLA. Уверете се, че диаметърът на общия предмет е 11 см на 11 см. Това ще гарантира, че ardruino и лентите ще се поберат в shpere. Имайте предвид, че всеки 3D принтер използва различни софтуерни програми, за да изчисли процеса на печат. Като се има предвид това, файлът, който използвате, може да се мащабира различно, така че имайте това предвид.

Второ след отпечатването се уверете, че компонентите могат да се затворят. 3D отпечатъците заедно образуват сфера. Те трябва да стоят добре. Ако компонентът трябва да се загуби, добавете малко лента към вътрешната страна, така че капачката да е пълна. И ако е с дебелина, използвайте шкурка.

Трето, скематиците за ardruino и лентите са доста лесни. Ще използвате 3 проводника, за да свържете лентите към ardruino. Обърнете внимание, че единственото място, където запоявам, е върху лентите. не на самия Ардруино.

GND отива към GND

DIN отива към Pin (в нашия случай pin6 на ardruino)

5V преминава към 5V

Уверете се, че количеството на светодиодните ленти, които използвате, е ограничено на 30. Така че и това няма да успее да изпълни правилно кода. Можете просто да изрежете всякакви ненужни ленти, показани с ножичен знак.

Четвъртото нещо трябва да се вписва добре в сферата. Може да харесате, че направих пресечна точка между 1 от 3D отпечатъка, за да видя коритото и да поставя пластмасово корито на върха.

Стъпка 4: Кодиране

Така че досега трябва да имате всички необходими компоненти във вашата библиотека.

Ето кода, който ще ви е необходим, за да стартирате проекта. Резултатът трябва да изглежда като видео връзката, която изпращам на тази страница.

Източникът на този код може да се намери тук. Този проект включва и неотложните стъпки за по -добро разбиране на кода и алгаритмите зад употребите.

#включи #включи #включи #включи

#define PIN 6 // 11 пиксела NeoPixel Strip

#define PIN1 7 // 1 пиксел NeoPixel Strip #define NUMPIXELS 30 // Брой пиксели #дефинирайте SAMPLE_RATE 25 // Честота на дискретизация за акселерометър и жироскоп

// Конфигурация на Madgwick

Филтър Madgwick; без подпис дълги microsPerReading, microsPrevious; float accelScale, gyroScale;

// Конфигурация на NeoPixel

Adafruit_NeoPixel пиксели = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Цветни пространства

RGBConverter rgbConverter; двойно h = 1; двойно s = 1; двойно v = 1; байт rgb [3];

// Статусна лампа за движение

// Състояние 0 -> Избор на нюанс -Стъпка // Състояние 1 -> Избор на наситеност -Ролка // Състояние 2 -> Избор на стойност -Изкривяване // Състояние 3 -> Поправяне на променлив цвят int statusLamp = 0;

void setup () {

Serial.begin (9600);

// стартира IMU и филтрира

CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);

// Задайте обхвата на акселерометъра на 2G

CurieIMU.setAccelerometerRange (2); // Задайте диапазона на жироскопа на 250 градуса/секунда CurieIMU.setGyroRange (250);

CurieIMU.autoCalibrateAccelerometerOffset (X_AXIS, 0);

CurieIMU.autoCalibrateAccelerometerOffset (Y_AXIS, 0); CurieIMU.autoCalibrateAccelerometerOffset (Z_AXIS, 1); CurieIMU.autoCalibrateGyroOffset ();

CurieIMU.attachInterrupt (eventCallback);

CurieIMU.setDetectionThreshold (CURIE_IMU_TAP, 950); CurieIMU.прекъсва (CURIE_IMU_TAP);

// инициализира променливите, за да ускорява актуализациите, за да коригира скоростта

microsPerReading = 1000000 / SAMPLE_RATE; microsPrevious = micros ();

// Init NeoPixel 11

pixels.begin (); pixels.show ();

// Init NeoPixel 1

pixelsStatus.begin (); pixels.show ();

// Показване на състоянието в px

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // акселерометър int gix, giy, giz; поплавъчна брадва, ай, аз; float gx, gy, gz; поплавъчна ролка, стъпка, криволичене; статични неподписани дълги microsNow;

// проверяваме дали е време за четене на данни и актуализиране на филтъра

microsNow = micros (); if (microsNow - microsPrevious> = microsPerReading) {

// чете необработени данни от CurieIMU

CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);

// конвертираме от необработени данни в гравитация и градуси/секунди

ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);

// актуализира филтъра, който изчислява ориентацията

filter.updateIMU (gx, gy, gz, ax, ay, az);

// отпечатайте заглавието, височината и ролката

roll = filter.getRoll (); pitch = filter.getPitch (); yaw = filter.getYaw ();

// увеличаваме предишния път, така че поддържаме правилното темпо

microsPrevious = microsPrevious + microsPerReading;

// Само ако промените Hue, Saturation или Value

if (statusLamp изберете Hue if (височина> = -90 && височина <= 90 && statusLamp == 0) {// Трансформирайте ъгъл на стъпка = височина + 90; // Получава цветни кординати от ъгли h = стъпка / 180.0;}

// Ограничения за ъгли

// само ролка -90º до 90º = 180º // Състояние 1 -> изберете Saturation if (roll> = -90 && roll <= 90 && statusLamp == 1) {// Трансформирайте ъгъл roll = roll + 90; // Получава цветни кординати от ъгли s = ролка / 180.0; }

// Състояние 2 -> изберете стойност

if (statusLamp == 2) {// криволичене 0º до 360º v = криволичене / 360,0; }

// Конвертиране в rgb

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Цвят:"); Serial.print (h); Serial.print (" -"); Serial.print (s); Serial.print (" -"); Serial.print (v); Serial.println ("");

Serial.print ("Ориентация:");

Serial.print (криволичене); Serial.print (""); Serial.print (стъпка); Serial.print (""); Serial.println (ролка); */

// Промяна на цвета на пикселите

for (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2])); pixels.show (); }}

// Показване на състоянието в px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// тъй като използваме 2G обхват // -2g карти до сурова стойност от -32768 // +2g карти до сурова стойност от 32767

поплавък a = (aRaw * 2.0) / 32768.0;

връщане a; }

float convertRawGyro (int gRaw) {

// тъй като използваме диапазон от 250 градуса/секунди // -250 карти до сурова стойност от -32768 // +250 карти до сурова стойност от 32767

поплавък g = (gRaw * 250.0) / 32768.0;

връщане g; }

static void eventCallback ()

{// Откриване на докосване по цялата ос, ако (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Докоснете открита statusLamp:"); Serial.println (statusLamp);

// Промяна на състоянието

statusLamp ++;

// Init състояние

if (statusLamp> 3) {statusLamp = 0; }}}

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); прекъсване; случай 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); прекъсване; случай 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); прекъсване; случай 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); прекъсване;

}

}

Препоръчано: