Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Proyek HKU - ITTT (Jika Ini Maka Itu) - Julia Berkouwer, 1B
Pernahkah Anda merasa stres dan tidak tahu cara menenangkan diri, maka Anda harus mencoba kacamata relaksasi ini! Anda memakainya dan menutup mata Anda, maka pola pernapasan akan dimainkan. Dengan mengikuti pola pernapasan ini, ritme pernapasan Anda akan turun menjadi bernapas masuk dan keluar 6 kali dalam satu menit. Melakukan hal ini melepaskan stres sehari-hari.
Anda juga dapat melacak intensitas pernapasan Anda dengan menekan tombol, menggunakan sensor fsr.
Dengan toturial ini saya akan memandu Anda melalui membangun kacamata relaksasi Anda sendiri langkah demi langkah.
Langkah 1: Bahan dan Suku Cadang yang Dibutuhkan:
Bahan:
1x arduino uno;
1xbreadboard atau PCV;
3x 10k resistor
Kabel (Lebih disukai warna yang berbeda sehingga lebih mudah untuk membedakan mana yang akan ke tanah dan mana yang akan ke pin yang berbeda, dll.);
Beberapa tabung panas menyusut;
2x NeoPixel Ring - LED 16 x 5050 RGB dengan Driver Terintegrasi;
1x beralih;
1x sensor FSR;
1x kacamata SteamPunk (Anda dapat membelinya di toko pesta, mudah digunakan karena cincin neopiksel sangat pas dengan kacamata. Anda selalu mencoba menggunakan kacamata lain atau membuatnya sendiri.);
1x semacam pita (elastik) untuk melingkari dada Anda.
Alat:-Laptop
-Besi solder
-Perangkat lunak Arduino IDE
Anda akan melihat dua tombol dan sakelar di pvc saya, saya hanya menggunakan tombol kiri untuk menghubungkannya ke sakelar, saya tidak menggunakan tombol kedua di sebelah kanan gambar. Saya meletakkan tombol di pvc sebelum menyadari bahwa saya tidak membutuhkannya dan saya perlu menggunakan sakelar sebagai gantinya.
Di bawah ini Anda akan melihat gambar dari semua yang saya gunakan:
Langkah 2: Cincin Neopiksel
Kabel putih terhubung ke ground di bagian belakang cincin neopiksel.
Kabel oranye terhubung ke 5V.
Dan kabel coklat terhubung ke input data
Langkah 3: Koneksi
Ini adalah tampilan papan tempat memotong roti saya saat membuat prototipe, Anda dapat menggunakan ini sebagai referensi.
Saya juga membuat tata letak pengkabelan yang seharusnya terlihat hanya dengan satu tombol.
Langkah 4: Kode:
Ini mungkin bukan kode yang paling efisien, tetapi berfungsi untuk saya. Tantang diri Anda dan cobalah membuatnya lebih efisien;P
#termasuk
// Yang
pin pada Arduino terhubung ke NeoPixels?
#mendefinisikan
PIN 6
// Yang
pin pada Arduino terhubung ke tombol
#mendefinisikan
BUTTON_PIN 9
// Bagaimana
banyak NeoPixels yang terpasang ke Arduino?
#mendefinisikan
NUMPIXEL 16
// Kapan
kami menyiapkan perpustakaan NeoPixel, kami memberi tahu berapa banyak piksel, dan pin mana yang digunakan untuk mengirim sinyal.
// Catatan
bahwa untuk strip NeoPixel yang lebih lama Anda mungkin perlu mengubah parameter ketiga--lihat strandtest
//
contoh untuk informasi lebih lanjut tentang nilai-nilai yang mungkin.
Adafruit_NeoPixel
piksel = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int jeda
= 1; //tunda2
ke dalam
jeda2 = 80; // turun saat fsr digunakan
ke dalam
jeda3 = 150; // melakukan up ketika fsr sedang digunakan
ke dalam
delayval = 4; // tunda1
ke dalam
fsrPin = 0; // pulldown FSR dan 10K terhubung ke a0
ke dalam
fsrMembaca;
ruang kosong
mempersiapkan() {
pinMode(BUTTON_PIN, INPUT);
Serial.begin(9600);
piksel.mulai(); // Ini menginisialisasi
perpustakaan NeoPixel.
piksel.tampilkan();
}
bool
ditekan tombol(int pin){
kembalikan digitalRead(pin);
}
ruang kosong
loop() { //membaca apakah input pin benar atau salah
fsrReading = analogRead(fsrPin);
Serial.print("Bacaan Analog = ");
Serial.print(fsrMembaca);
if (ditekan tombol(BUTTON_PIN) == benar){
//efek cahaya saat menggunakan sensor fsr
if (fsrMembaca > 50){
piksel.setPixelColor(0, 1, 0, 1);
piksel.setPixelColor(15, 1, 0, 1);
piksel.setPixelColor(1, 1, 0, 1);
piksel.setPixelColor(14, 1, 0, 1);
piksel.tampilkan();
tunda(jeda3);
}
if (fsrMembaca < 52){
piksel.setPixelColor(0, 0, 0, 0);
piksel.setPixelColor(15, 0, 0, 0);
piksel.setPixelColor(1, 0, 0, 0);
piksel.setPixelColor(14, 0, 0, 0);
piksel.tampilkan();
tunda(jeda2);
}
if (fsrMembaca > 57){
piksel.setPixelColor(2, 1, 0, 1);
piksel.setPixelColor(13, 1, 0, 1);
piksel.setPixelColor(3, 1, 0, 1);
piksel.setPixelColor(12, 1, 0, 1);
piksel.tampilkan();
tunda(jeda3);
}
if (fsrMembaca <59){
piksel.setPixelColor(2, 0, 0, 0);
piksel.setPixelColor(13, 0, 0, 0);
piksel.setPixelColor(3, 0, 0, 0);
piksel.setPixelColor(12, 0, 0, 0);
piksel.tampilkan();
tunda(jeda2);
}
if (fsrMembaca > 65){
piksel.setPixelColor(4, 1, 0, 1);
piksel.setPixelColor(11, 1, 0, 1);
piksel.setPixelColor(5, 1, 0, 1);
piksel.setPixelColor(10, 1, 0, 1);
piksel.tampilkan();
tunda(jeda3);
}
if (fsrMembaca <67){
piksel.setPixelColor(4, 0, 0, 0);
piksel.setPixelColor(11, 0, 0, 0);
piksel.setPixelColor(5, 0, 0, 0);
piksel.setPixelColor(10, 0, 0, 0);
piksel.tampilkan();
penundaan (40);
}
if (fsrMembaca > 79){
piksel.setPixelColor(6, 1, 0, 1);
piksel.setPixelColor(9, 1, 0, 1);
piksel.setPixelColor(7, 1, 0, 1);
piksel.setPixelColor(8, 1, 0, 1);
piksel.tampilkan();
tunda(jeda3);
}
if (fsrMembaca <85){
piksel.setPixelColor(6, 0, 0, 0);
piksel.setPixelColor(9, 0, 0, 0);
piksel.setPixelColor(7, 0, 0, 0);
piksel.setPixelColor(8, 0, 0, 0);
piksel.tampilkan();
penundaan (20);
}
}
lain{
breath_blue(20, 100, 0, 1, 1); // biasa
memengaruhi
}
}
// Jeda
= penundaan antar transisi
// Langkah
= jumlah langkah
// R, G, B = Nilai RGB aktif penuh
// De void bernafas adalah voor het licht effect als de
fsrsensor niet gebruikt wordt. Deze void wordt di de void loop() weer aangeroepen.
void breath_blue(int jeda, langkah int, byte R, byte G, byte B) {
ke dalam
tmpR, tmpG, tmpB; // Nilai suhu
// Memudar
for (int s=1; s<=langkah; s++) {
tmpR = (R * s) /
Langkah; // Kalikan terlebih dahulu untuk menghindari kesalahan pemotongan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0;
Sayapiksel.setPixelColor(0, tmpR, tmpG+1, tmpB);
piksel.setPixelColor(15, tmpR, tmpG+1, tmpB);
}
piksel.tampilkan();
penundaan (4);
}
// Memudar
for (int s=1; s<=langkah; s++) {
tmpR = (R * s) /
Langkah; // Kalikan terlebih dahulu untuk menghindari kesalahan pemotongan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0;
Sayapiksel.setPixelColor(1, tmpR, tmpG+1, tmpB);piksel.setPixelColor(14, tmpR, tmpG+1, tmpB);
}
piksel.tampilkan();
penundaan (4);
}
// Memudar
for (int s=1; s<=langkah; s++) {
tmpR = (R * s) /
Langkah; // Kalikan terlebih dahulu untuk menghindari kesalahan pemotongan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0;
Sayapiksel.setPixelColor(2, tmpR, tmpG+2, tmpB);piksel.setPixelColor(13, tmpR, tmpG+2, tmpB);
}
piksel.tampilkan();
penundaan(3.5);
}
// Memudar
for (int s=1; s<=langkah; s++) {
tmpR = (R * s) /
Langkah; // Kalikan terlebih dahulu untuk menghindari kesalahan pemotongan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0;
Sayapiksel.setPixelColor(3, tmpR, tmpG+3, tmpB+5);piksel.setPixelColor(12, tmpR, tmpG+3, tmpB+5);
}
piksel.tampilkan();
penundaan (3);
}
untuk (int i=0;
Sayapiksel.setPixelColor(0, 0, 0, 0);piksel.setPixelColor(15, 0, 0, 0);
}
// Memudar
for (int s=1; s<=langkah; s++) {
tmpR = (R * s) /
Langkah; // Kalikan terlebih dahulu untuk menghindari kesalahan pemotongan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0;
Saya
piksel.setPixelColor(4, tmpR, tmpG+3, tmpB+15);piksel.setPixelColor(11, tmpR, tmpG+3, tmpB+15);
}
piksel.tampilkan();
penundaan (3);
}
// Memudar
for (int s=1; s<=langkah; s++) {
tmpR = (R * s) /
Langkah; // Kalikan terlebih dahulu untuk menghindari kesalahan pemotongan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0;
Sayapiksel.setPixelColor(5, tmpR, tmpG+4, tmpB+20);piksel.setPixelColor(10, tmpR, tmpG+4, tmpB+20);
}
piksel.tampilkan();
penundaan (2);
}
untuk (int i=0;
Sayapiksel.setPixelColor(1, 0, 0, 0);
piksel.setPixelColor(14, 0, 0, 0);
}
// Memudar
for (int s=1; s<=langkah; s++) {
tmpR = (R * s) /
Langkah; // Kalikan terlebih dahulu untuk menghindari kesalahan pemotongan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0;
Sayapiksel.setPixelColor(6, tmpR, tmpG+2, tmpB+40);
piksel.setPixelColor(9, tmpR, tmpG+2, tmpB+40);
}
piksel.tampilkan();
penundaan (delayval);
}
untuk (int i=0;
Sayapiksel.setPixelColor(2, 0, 0, 0);piksel.setPixelColor(13, 0, 0, 0);
}
// Memudar
for (int s=1; s<=langkah; s++) {
tmpR = (R * s) /
Langkah; // Kalikan terlebih dahulu untuk menghindari kesalahan pemotongan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0;
Saya
piksel.setPixelColor(7, tmpR, tmpG, tmpB+44);piksel.setPixelColor(8, tmpR, tmpG, tmpB+44);
}
piksel.tampilkan();
penundaan (delayval);
}
// Memudar
for (int s=langkah; s>0; s--) {
tmpR = (R * s) / langkah; // Kalikan dulu untuk menghindari pemotongan
kesalahan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0; i
piksel.setPixelColor(7, tmpR, tmpG, tmpB);
piksel.setPixelColor(8, tmpR, tmpG, tmpB);
}
piksel.tampilkan();
penundaan (1);
}
// Memudar
for (int s=langkah; s>0; s--) {
tmpR = (R * s) / langkah; // Kalikan dulu untuk menghindari pemotongan
kesalahan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0; i
piksel.setPixelColor(6, tmpR, tmpG, tmpB);
piksel.setPixelColor(9, tmpR, tmpG, tmpB);
}
piksel.tampilkan();
penundaan (1);
}
// Memudar
for (int s=langkah; s>0; s--) {
tmpR = (R * s) / langkah; // Kalikan dulu untuk menghindari pemotongan
kesalahan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0; i
piksel.setPixelColor(5, tmpR, tmpG, tmpB);
piksel.setPixelColor(10, tmpR, tmpG, tmpB);
}
piksel.tampilkan();
penundaan (2);
}
// Memudar
for (int s=langkah; s>0; s--) {
tmpR = (R * s) / langkah; // Kalikan dulu untuk menghindari pemotongan
kesalahan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0; i
piksel.setPixelColor(4, tmpR, tmpG, tmpB);
piksel.setPixelColor(11, tmpR, tmpG, tmpB);
}
piksel.tampilkan();
penundaan (2);
}
// Memudar
for (int s=langkah; s>0; s--) {
tmpR = (R * s) / langkah; // Kalikan dulu untuk menghindari pemotongan
kesalahan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0; i
piksel.setPixelColor(3, tmpR, tmpG, tmpB);
piksel.setPixelColor(12, tmpR, tmpG, tmpB);
}
piksel.tampilkan();
penundaan (3);
}
// Memudar
for (int s=langkah; s>0; s--) {
tmpR = (R * s) / langkah; //
Kalikan dulu untuk menghindari kesalahan pemotongan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0; i
piksel.setPixelColor(2, tmpR, tmpG, tmpB);
piksel.setPixelColor(13, tmpR, tmpG, tmpB);
}
piksel.tampilkan();
penundaan (3);
}
// Memudar
for (int s=langkah; s>0; s--) {
tmpR = (R * s) / langkah; // Kalikan dulu untuk menghindari pemotongan
kesalahan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0; i
piksel.setPixelColor(1, tmpR, tmpG, tmpB);
piksel.setPixelColor(14, tmpR, tmpG, tmpB);
}
piksel.tampilkan();
penundaan (4);
}
// Memudar
for (int s=langkah; s>0; s--) {
tmpR = (R * s) / langkah; // Kalikan dulu untuk menghindari pemotongan
kesalahan
tmpG = (G * s) / langkah;
tmpB = (B * s) / langkah;
untuk (int i=0; i
piksel.setPixelColor(0, tmpR, tmpG, tmpB);
piksel.setPixelColor(15, tmpR, tmpG, tmpB);
}
piksel.tampilkan();
penundaan (4);
}
}
Langkah 5: Menyatukan Semuanya:
Anda bisa membiarkan semua kabel Anda terhubung ke papan tempat memotong roti atau PVC, itu terserah Anda (saya memilih untuk meletakkan PVC di atas arduino itu bagus dan rapi seperti itu).
Langkah selanjutnya adalah memasang tabung panas menyusut di sekitar semua kabel sehingga tidak terlalu berantakan.
Jika Anda memilih untuk menggunakan PVC maka Anda seharusnya sudah menyolder semuanya bersama-sama sekarang.
Setelah itu Anda meletakkan cincin neopixel di bagian luar kacamata (pastikan led sejajar di bagian bawah) dan kencangkan dengan selotip atau lem (saya menggunakan selotip).
Anda dapat memilih untuk menempelkan sensor fsr ke karet gelang dengan selotip atau membiarkannya begitu saja.
Selamat menikmati kacamata:)