Оглавление:

Очки для релаксации - ITTT: 5 шагов (с изображениями)
Очки для релаксации - ITTT: 5 шагов (с изображениями)

Видео: Очки для релаксации - ITTT: 5 шагов (с изображениями)

Видео: Очки для релаксации - ITTT: 5 шагов (с изображениями)
Видео: Эта девочка сделала книжку-мультик #Shorts 2024, Июль
Anonim
Очки для релаксации - ITTT
Очки для релаксации - ITTT
Очки для релаксации - ITTT
Очки для релаксации - ITTT
Очки для релаксации - ITTT
Очки для релаксации - ITTT

Проект HKU - ITTT (If This Then That) - Юлия Беркувер, 1B

Вы когда-нибудь испытывали стресс и просто не знали, как себя успокоить, тогда вам стоит попробовать эти расслабляющие очки! Вы надеваете их и закрываете глаза, тогда заиграет паттерн дыхания. Следуя этому образцу дыхания, ваш ритм дыхания снизится до вдоха и выдоха 6 раз в минуту. Таким образом снимается дневной стресс.

Вы также можете отслеживать интенсивность дыхания, щелкнув переключатель с помощью датчика FSR.

В этом туториале я шаг за шагом проведу вас через создание ваших собственных очков для релаксации.

Шаг 1: Необходимые материалы и детали:

Необходимые материалы и детали
Необходимые материалы и детали
Необходимые материалы и детали
Необходимые материалы и детали
Необходимые материалы и детали
Необходимые материалы и детали

Материалы:

1x arduino uno;

1x макет или PCV;

3 резистора по 10 кОм

Провода (желательно разных цветов, чтобы было легче понять, какие предметы идут на землю, а какие - на разные контакты и т. Д.);

Некоторые термоусадочные трубки;

2x NeoPixel Ring - 16 x 5050 RGB светодиодов со встроенными драйверами;

1x переключатель;

1x датчик FSR;

1x очки SteamPunk (вы можете купить их в магазине для вечеринок, они просты в использовании, потому что кольцо из неопикселя идеально подходит для очков. Вы всегда пытаетесь использовать другие очки или создать свои собственные);

1x какой-то (эластичный) ремешок, который можно обернуть вокруг груди.

Инструменты: -Ноутбук

-Паяльник

-Программное обеспечение Arduino IDE

Вы увидите две кнопки и переключатель на моем пвх, я использую только левую кнопку, чтобы подключить его к переключателю, я не использую вторую кнопку справа от изображения. Я положил кнопки на ПВХ, прежде чем понял, что они мне не нужны, и вместо этого мне нужно было использовать переключатель.

Ниже вы увидите фотографии всего, что я использовал:

Шаг 2: Неопиксельные кольца

Неопиксельные кольца
Неопиксельные кольца

Белый провод соединен с землей на обратной стороне кольца neopixel.

Оранжевый провод подключен к 5В.

Коричневый провод подключается ко входу данных.

Шаг 3: Подключения

Подключения
Подключения
Подключения
Подключения

Так выглядела моя макетная плата во время создания прототипа, вы можете использовать это как образец.

Я также сделал схему разводки того, как она должна выглядеть с помощью всего одной кнопки.

Шаг 4: Код:

Это, наверное, не самый эффективный код, но у меня он работает. Бросьте себе вызов и постарайтесь сделать его более эффективным; P

#включают

// Который

контакт на Arduino подключен к NeoPixels?

#определять

ПИН 6

// Который

пин на Arduino подключен к кнопке

#определять

BUTTON_PIN 9

// Как

много NeoPixels прикреплено к Arduino?

#определять

ЧИСЛО 16

// Когда

мы настраиваем библиотеку NeoPixel, мы сообщаем ей, сколько пикселей и какой вывод использовать для отправки сигналов.

// Примечание

что для старых полосок NeoPixel вам может потребоваться изменить третий параметр - см. Strandtest

//

пример для получения дополнительной информации о возможных значениях.

Adafruit_NeoPixel

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

int pause

= 1; // delay2

int

pause2 = 80; // опускаемся, когда используется fsr

int

pause3 = 150; // работаем, когда используется fsr

int

delayval = 4; // задержка1

int

fsrPin = 0; // FSR и 10K pullldown подключены к a0

int

fsrReading;

пустота

настраивать() {

pinMode (BUTTON_PIN, INPUT);

Serial.begin (9600);

pixel.begin (); // Это инициализирует

Библиотека NeoPixel.

pixel.show ();

}

bool

buttonpressed (int pin) {

вернуть digitalRead (пин);

}

пустота

loop () {// считывает, является ли ввод пина истинным или ложным

fsrReading = analogRead (fsrPin);

Serial.print ("Аналоговое чтение =");

Serial.print (fsrReading);

if (кнопка нажата (BUTTON_PIN) == true) {

// световой эффект при использовании датчика fsr

if (fsrReading> 50) {

пикселей.setPixelColor (0, 1, 0, 1);

пикселей.setPixelColor (15, 1, 0, 1);

пикселей.setPixelColor (1, 1, 0, 1);

пикселей.setPixelColor (14, 1, 0, 1);

pixel.show ();

задержка (пауза3);

}

if (fsrReading <52) {

пикселей.setPixelColor (0, 0, 0, 0);

пикселей.setPixelColor (15, 0, 0, 0);

пикселей.setPixelColor (1, 0, 0, 0);

пикселей.setPixelColor (14, 0, 0, 0);

pixel.show ();

задержка (пауза2);

}

if (fsrReading> 57) {

пикселей.setPixelColor (2, 1, 0, 1);

пикселей.setPixelColor (13, 1, 0, 1);

пикселей.setPixelColor (3, 1, 0, 1);

пикселей.setPixelColor (12, 1, 0, 1);

pixel.show ();

задержка (пауза3);

}

if (fsrReading <59) {

пикселей.setPixelColor (2, 0, 0, 0);

пикселей.setPixelColor (13, 0, 0, 0);

пикселей.setPixelColor (3, 0, 0, 0);

пикселей.setPixelColor (12, 0, 0, 0);

pixel.show ();

задержка (пауза2);

}

if (fsrReading> 65) {

пикселей.setPixelColor (4, 1, 0, 1);

пикселей.setPixelColor (11, 1, 0, 1);

пикселей.setPixelColor (5, 1, 0, 1);

пикселей.setPixelColor (10, 1, 0, 1);

pixel.show ();

задержка (пауза3);

}

if (fsrReading <67) {

пикселей.setPixelColor (4, 0, 0, 0);

пикселей.setPixelColor (11, 0, 0, 0);

пикселей.setPixelColor (5, 0, 0, 0);

пикселей.setPixelColor (10, 0, 0, 0);

pixel.show ();

задержка (40);

}

if (fsrReading> 79) {

пикселей.setPixelColor (6, 1, 0, 1);

пикселей.setPixelColor (9, 1, 0, 1);

пикселей.setPixelColor (7, 1, 0, 1);

пикселей.setPixelColor (8, 1, 0, 1);

pixel.show ();

задержка (пауза3);

}

if (fsrReading <85) {

пикселей.setPixelColor (6, 0, 0, 0);

пикселей.setPixelColor (9, 0, 0, 0);

пикселей.setPixelColor (7, 0, 0, 0);

пикселей.setPixelColor (8, 0, 0, 0);

pixel.show ();

задержка (20);

}

}

еще{

дышать_blue (20, 100, 0, 1, 1); // обычный

эффект

}

}

// Пауза

= задержка между переходами

// Шаги

= количество шагов

// R, G, B = Полные значения RGB

// Дыхание пустоты не имеет большого эффекта, как и

fsrsensor niet gebruikt wordt. Deze void wordt в de void loop () weer aangeroepen.

void Breathe_blue (int pause, int steps, byte R, byte G, byte B) {

int

tmpR, tmpG, tmpB; // Значения температуры

// Растворяться

for (int s = 1; s <= steps; s ++) {

tmpR = (R * s) /

шаги; // Сначала умножьте, чтобы избежать ошибок усечения

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0;

япикселей.setPixelColor (0, tmpR, tmpG + 1, tmpB);

пикселей.setPixelColor (15, tmpR, tmpG + 1, tmpB);

}

pixel.show ();

задержка (4);

}

// Растворяться

for (int s = 1; s <= steps; s ++) {

tmpR = (R * s) /

шаги; // Сначала умножьте, чтобы избежать ошибок усечения

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0;

япикселей.setPixelColor (1, tmpR, tmpG + 1, tmpB);пикселей.setPixelColor (14, tmpR, tmpG + 1, tmpB);

}

pixel.show ();

задержка (4);

}

// Растворяться

for (int s = 1; s <= steps; s ++) {

tmpR = (R * s) /

шаги; // Сначала умножьте, чтобы избежать ошибок усечения

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0;

япикселей.setPixelColor (2, tmpR, tmpG + 2, tmpB);пикселей.setPixelColor (13, tmpR, tmpG + 2, tmpB);

}

pixel.show ();

задержка (3.5);

}

// Растворяться

for (int s = 1; s <= steps; s ++) {

tmpR = (R * s) /

шаги; // Сначала умножьте, чтобы избежать ошибок усечения

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0;

япикселей.setPixelColor (3, tmpR, tmpG + 3, tmpB + 5);пикселей.setPixelColor (12, tmpR, tmpG + 3, tmpB + 5);

}

pixel.show ();

задержка (3);

}

для (int i = 0;

япикселей.setPixelColor (0, 0, 0, 0);пикселей.setPixelColor (15, 0, 0, 0);

}

// Растворяться

for (int s = 1; s <= steps; s ++) {

tmpR = (R * s) /

шаги; // Сначала умножьте, чтобы избежать ошибок усечения

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0;

я

пикселей.setPixelColor (4, tmpR, tmpG + 3, tmpB + 15);пикселей.setPixelColor (11, tmpR, tmpG + 3, tmpB + 15);

}

pixel.show ();

задержка (3);

}

// Растворяться

for (int s = 1; s <= steps; s ++) {

tmpR = (R * s) /

шаги; // Сначала умножьте, чтобы избежать ошибок усечения

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0;

япикселей.setPixelColor (5, tmpR, tmpG + 4, tmpB + 20);пикселей.setPixelColor (10, tmpR, tmpG + 4, tmpB + 20);

}

pixel.show ();

задержка (2);

}

для (int i = 0;

япикселей.setPixelColor (1, 0, 0, 0);

пикселей.setPixelColor (14, 0, 0, 0);

}

// Растворяться

for (int s = 1; s <= steps; s ++) {

tmpR = (R * s) /

шаги; // Сначала умножьте, чтобы избежать ошибок усечения

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0;

япикселей.setPixelColor (6, tmpR, tmpG + 2, tmpB + 40);

пикселей.setPixelColor (9, tmpR, tmpG + 2, tmpB + 40);

}

pixel.show ();

задержка (delayval);

}

для (int i = 0;

япикселей.setPixelColor (2, 0, 0, 0);пикселей.setPixelColor (13, 0, 0, 0);

}

// Растворяться

for (int s = 1; s <= steps; s ++) {

tmpR = (R * s) /

шаги; // Сначала умножьте, чтобы избежать ошибок усечения

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0;

я

пикселей.setPixelColor (7, tmpR, tmpG, tmpB + 44);пикселей.setPixelColor (8, tmpR, tmpG, tmpB + 44);

}

pixel.show ();

задержка (delayval);

}

// Угасание

for (int s = steps; s> 0; s--) {

tmpR = (R * s) / шаги; // Сначала умножьте, чтобы избежать усечения

ошибки

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0; i

пикселей.setPixelColor (7, tmpR, tmpG, tmpB);

пикселей.setPixelColor (8, tmpR, tmpG, tmpB);

}

pixel.show ();

задержка (1);

}

// Угасание

for (int s = steps; s> 0; s--) {

tmpR = (R * s) / шаги; // Сначала умножаем, чтобы избежать усечения

ошибки

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0; i

пикселей.setPixelColor (6, tmpR, tmpG, tmpB);

пикселей.setPixelColor (9, tmpR, tmpG, tmpB);

}

pixel.show ();

задержка (1);

}

// Угасание

for (int s = steps; s> 0; s--) {

tmpR = (R * s) / шаги; // Сначала умножьте, чтобы избежать усечения

ошибки

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0; i

пикселей.setPixelColor (5, tmpR, tmpG, tmpB);

пикселей.setPixelColor (10, tmpR, tmpG, tmpB);

}

pixel.show ();

задержка (2);

}

// Угасание

for (int s = steps; s> 0; s--) {

tmpR = (R * s) / шаги; // Сначала умножьте, чтобы избежать усечения

ошибки

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0; i

пикселей.setPixelColor (4, tmpR, tmpG, tmpB);

пикселей.setPixelColor (11, tmpR, tmpG, tmpB);

}

pixel.show ();

задержка (2);

}

// Угасание

for (int s = steps; s> 0; s--) {

tmpR = (R * s) / шаги; // Сначала умножьте, чтобы избежать усечения

ошибки

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0; i

пикселей.setPixelColor (3, tmpR, tmpG, tmpB);

пикселей.setPixelColor (12, tmpR, tmpG, tmpB);

}

pixel.show ();

задержка (3);

}

// Угасание

for (int s = steps; s> 0; s--) {

tmpR = (R * s) / шаги; //

Сначала умножьте, чтобы избежать ошибок усечения

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0; i

пикселей.setPixelColor (2, tmpR, tmpG, tmpB);

пикселей.setPixelColor (13, tmpR, tmpG, tmpB);

}

pixel.show ();

задержка (3);

}

// Угасание

for (int s = steps; s> 0; s--) {

tmpR = (R * s) / шаги; // Сначала умножаем, чтобы избежать усечения

ошибки

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0; i

пикселей.setPixelColor (1, tmpR, tmpG, tmpB);

пикселей.setPixelColor (14, tmpR, tmpG, tmpB);

}

pixel.show ();

задержка (4);

}

// Угасание

for (int s = steps; s> 0; s--) {

tmpR = (R * s) / шаги; // Сначала умножьте, чтобы избежать усечения

ошибки

tmpG = (G * s) / шаги;

tmpB = (B * s) / шаги;

для (int i = 0; i

пикселей.setPixelColor (0, tmpR, tmpG, tmpB);

пикселей.setPixelColor (15, tmpR, tmpG, tmpB);

}

pixel.show ();

задержка (4);

}

}

Шаг 5: Собираем все вместе:

Собираем все вместе
Собираем все вместе

Вы можете просто оставить все свои провода подключенными к макетной плате или ПВХ, это зависит от вас (я решил поместить ПВХ поверх arduino, это красиво и аккуратно).

Следующий шаг - обернуть все провода термоусадочными трубками, чтобы не было беспорядка.

Если вы решили использовать ПВХ, то к настоящему времени должны были все спаять.

После этого вы надеваете кольца из неопикселя на внешнюю сторону очков (убедитесь, что светодиоды выровнены по низу) и закрепите их на месте с помощью скотча или клея (я использовал скотч).

Вы можете приклеить датчик FSR к резинке с помощью ленты или просто оставить его отдельно.

Наслаждайтесь очками:)

Рекомендуемые: