Mundarija:
- 1 -qadam: Baza yaratish
- 2 -qadam: Neopixel uzuklarini tayyorlash
- 3 -qadam: simlarni ulash
- 4 -qadam: Kod
- 7 -qadam: Mikrofonni ulash
Video: Arduino va Neopixel Coke Bottle Rainbow Party Light: 7 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
Shunday qilib, o'g'lim Doon eski koka butilkalardan va Glow Sticks -ning baquvvat ichki qismlaridan yasalgan juda zo'r ziyofatni ko'radi va biz uning bo'lajak maktab imtihonlari uchun PartAYYY tugaganini so'raymiz !!! Ishonch bilan aytaman, lekin biz o'qigan Adafruit Neopixel uzuklaridan bir nechtasini olmaganingiz ma'qul … U menga bo'sh qaradi. Chunki haqiqatan ham u nima haqida gapirayotganimni bilmaydi, lekin dadam o'qigan Neopixel uzuklari bilan o'ynash imkoniyatini ko'rdi va biz hammamiz bilamizki, otaxon tug'adigan eng yaxshi 10 sababdan biri bu Gadjetlar bilan o'ynash uchun uzr, ular hamma o'z bolalari uchun deb aytishadi.
Bu juda ajoyib ko'rinadigan juda oddiy loyiha. Biz o'zimizda 3 ta eski koka shishasi, yog'och plastinka va o'yin maydonchasi ustunini - podvalda yotadigan narsalarni - Arduino (bizda Leonardo, lekin har qanday Genuino taxtasi shunday qiladi!) Va uchta Neopixel uzuklarini qurdik.. Men 9-LEDli halqaga buyurtma berdim, lekin oxiri shu narxga 12-LEDli uzuk bilan tugadi. Bu juda shirin edi, lekin quduq teshiklarini yopish kerakligini anglatardi-12 LEDli halqalarning kengligi 35 mm, aksincha 23 mm. Sizga nima kerak:
- Genuino/Arduino taxtasi (biz Leonardodan foydalanganmiz, lekin deyarli har qanday taxta shunday qiladi)
- 3 ta neopixel uzuk (har biri 12 ta LED): ularni Adafruit -dan oling va o'sha yaxshi odamlarni qo'llab -quvvatlang
- 1000 µf 6.3v yoki undan yuqori kondansatör
- 300-500 ohm qarshilik
- Yog'och plastinka yoki to'rtburchaklar yog'och yoki siz neopiksellarni o'rnatib, koka shishalarini tepaga qo'yishingiz mumkin bo'lgan narsalar.
- Plitka o'rnatishning qandaydir shakli - o'yin maydonchasi ustuni biz uchun juda yaxshi ishladi
- 9V devorli siğil
- 40 mm teshik
- Boltlar, yong'oqlar, kir yuvish mashinalari, bo'shliqlar
- Qattiq yadroli sim
- Lehimlash temir va lehim
- Non paneli
- Arduino uchun plastik quti. Siz chiqib, sayyoramizning narigi tomonida ishlab chiqarilgan va konteynerda sizga yaqin bo'lgan omborga jo'natilgan million yillik neftdan yasalgan, juda nozik muhitda yasalgan, juda yaxshi mos plastik plastmassa qutini sotib olishingiz mumkin. portlar bir tekisda kesilgan va atmosferaga karbonat angidrid sochadigan mikroavtobus orqali eshikka etkazilgan. Yoki siz men qilgan ishni qilib, eski plastik qutini ishlatishingiz mumkin.. bu holda tibbiyot kabinetida Madagaskar bantli yordam qutisi yotadi … va uning ichida bir nechta teshik oching. Mana dars tugadi. QILING …
1 -qadam: Baza yaratish
Siz o'z podvalingizdagi keraksiz narsalardan o'z bazangizni improvizatsiya qilishingiz yoki hatto yog'och qutini yoki elektronikangizni yashiradigan narsalarni ishlatishingiz mumkin.
Birinchidan, biz yog'och plastinkada teng masofada joylashgan, Neopixel halqalari o'tiradigan darajada katta bo'lgan uchta teshikni burg'iladik. Rasmda teshiklar belkurak bilan burg'ulash quduqlari. Oxir-oqibat, 12-LEDli halqalarning kattaligi katta bo'lgani uchun biz teshiklarni burg'ulash bilan burg'ulashimiz kerak edi. Bu plastinka bo'ylab o'tishni anglatar edi, va halqalarni 2 mm chuqurlikdagi nozik yasalgan quduqlarga mahkam bog'lab qo'yishning o'rniga, men markaziy teshigiga toza sim o'tkazgich bilan mahkamlagandan so'ng, halqalarni mahkamlab qo'ydim. plastinkadan. Hukm qilmang. Siz baribir mening dizaynimda plastinkaning pastki qismini ko'ra olmaysiz. Va u yoqilganda qorong'i tushadi. Va bundan tashqari - yopishqoq lentada nima yomon?
Menga plastinka va qavs o'rtasida plastinkaning pastki qismidagi non paneli va bitta komponent - kondansatör uchun bo'sh joy kerak edi. Men simlarni uzib yubormaslik uchun bolt millariga etarlicha bo'sh joy ajratish uchun vaqtinchalik ajratgichlar to'plamini qo'ydim - taxminan 3 sm, non taxtasining balandligi va biroz. Men har bir burchak uchun ikkita yog'och langar murvat ishlatardim, chunki ular balandligi to'g'ri edi va odam tortmasida yotardi … bu quti bo'sh vintlardek, murvat, mixlar, zanglagan zanjirlar, shlang muftalari, eski tangalar, kutilmaganda o'tkir narsalar va har xil usulda. Sizni sehrli uskuna do'koniga sayohatni sehrli tarzda qutqaradigan bitlar va boblar, agar sizga aniq narsa kerak bo'lmasa, juda yaxshi bo'ladi.
Men podvalda topgan o'yin maydonchasi posti haqidagi baxtsiz hodisa, u allaqachon plastinkadan o'tib ketgan teshiklari edi. Temir burg'ulash shart emas! Baza to'rtta boltli teshikka ega edi va biz yog'och plastinkada mos keladigan to'rtta teskari teshik qazdik.
Keyin biz hamma narsani Gothic Black-ga purkagich bilan bo'yadik.
2 -qadam: Neopixel uzuklarini tayyorlash
Siz simlarni neopixel halqalariga lehimlashingiz kerak bo'ladi: ularning hammasi uchun ma'lumot uzatish simlari, ikkitasi uchun ma'lumotlar uzatish simlari va har biri uchun quvvat va topraklama. Qaysi uzunlik sizga kerak deb o'ylaysiz, biroz qo'shing. Siz har doim ortiqcha simni kesib qo'yishingiz mumkin, juda qisqa simni uzay olmaysiz. Adafruit ogohlantirishidan xabardor bo'ling:
Ushbu halqalarga simlarni lehimlashda siz lehim puflamalari va qisqa tutashuvlardan ehtiyot bo'lishingiz kerak. Komponentlar orasidagi masofa juda qattiq! Ko'pincha old tomondan simni va orqa tarafdagi lehimni kiritish osonroq.
Men buni frontga lehimdan oldin o'qishni xohlardim. Men hech qanday LED -ni yoqib yubormadim, lekin men yoqilmaguncha terlab ketgandek, uning chetini kuydirdim. Agar men nozik qo'llanmani o'qigan bo'lsam, LEDga alligator qisqichini qo'ymaslik haqidagi ogohlantirishni ham o'qigan bo'lardim. Mening yaqin kema halokatlari sizning chiroqingiz bo'lsin.
Neopixel halqalari romashka zanjiri, demak siz bir vaqtning o'zida bitta halqaning OUT-dan ikkinchisining IN-ga simni ulash orqali ularning barcha LEDlarini Arduino-dan boshqarishingiz mumkin. Har bir halqaga kuch va tuproq simlari ham kerak.
3 -qadam: simlarni ulash
Yuqoridagi Fritzingda bo'lgani kabi, uni sim bilan ulang-Arduino-ning 6-pinli ma'lumoti birinchi halqaga o'tadi, bu uzukdan ma'lumotlar keyingi ma'lumotlarga, ikkinchisining ma'lumotlari- Oxirgi qo'ng'iroq haqida ma'lumot. Oxirgi halqaning ma'lumot uzatuvchi simiga ehtiyoj yo'q.
1000 mf sig'imdagi non panelidagi musbat va manfiy chiziqlar orasiga kiradi. Ushbu qopqoq halqalarni elektr toki urishidan himoya qiladi va Adafruit NeoPixel Uberguide-ning eng yaxshi amaliyot bo'limi tomonidan tavsiya etilgan. Birinchi neopikseldagi Ma'lumotlar rezistori Adafruit tomonidan ham tavsiya qilingan-Fritzingda 1K, lekin tavsiya etilgan qarshilik 300-500 ohm.
Men ishlab chiqarishda simlarni plastinkaning orqa qismidagi Neopikseldan markazga o'rnatiladigan non paneliga o'tkazdim. Shunday qilib, siz faqat uchta uzun simni asosiy qurilmaga ulashingiz kerak: quvvat, er va ma'lumotlar. Men bu simlarni juda uzun qilib qo'ydim-bazada juda ko'p joy bor va bu uni qayta dasturlash uchun taxtani tortib olish imkoniyatini beradi.
4 -qadam: Kod
"loading =" dangasa ", o'g'limning musiqiy-reaktiv versiyasini xohlaganini aytib o'tdi. 18 yoshga to'lgunga qadar, u bu erga etib keldi!
Qo'shimcha uskunalar:
1 ta bitta qutbli, ikki marta tashlanadigan kalit 1 avtomatik daromadni boshqarish mikrofoni (men AdaFruit MAX9184 dan foydalanganman) 1 1uF-100uF kondansatör (har qanday qiymat)
To'g'ri ishlashi uchun mikrofon, albatta, avtomatik daromad nazoratiga ega bo'lishi kerak. AGC doimiy ravishda atrofdagi shovqinni tanlaydi va fonni hisobga oladigan chegarani ko'taradi va pasaytiradi, shuning uchun sizning nuringiz shu fonda ko'tarilishlarga javob beradi. AdaFruit-ning mikrofoni ajoyib: siz jim xonadan o'tishingiz mumkin, unda bitta ovozning ovozi uni to'la-to'kis ziyofat rejimiga o'tkazadi va o'smirlar va musiqa yangraydi. yaxshi Shu bilan bir qatorda, sozlanishi daromadli mikrofon, bortida juda kichik va potentsiometrga ega. Jihozni yaroqsiz holga keltirish uchun atrof -muhit ovozida katta o'zgarishlar bo'lmaydi: chiroqlar doimiy yonadi yoki doimiy ravishda qorong'i. AGC sehr kabi ishlaydi.
Men aylanma test yoki musiqani ishlatishni xohlardim, shuning uchun men markaziy simni VIN -ga, bitta simni 4 -pinga, ikkinchisini Leonardoning 8 -piniga o'tkazdim. Ushbu pinlarni "HIGH" yoki "LOW" uchun sinab ko'rish orqali biz kalit qaysi holatda ekanligini va tarmoq kodini bilib olamiz.
7 -qadam: Mikrofonni ulash
1-100 mkF kondansatör orqali mikrofon kirishini analog pin 0 ga o'tkazing. Agar kondansatör qutblangan bo'lsa, chiqish pimi ijobiy tomonga o'tadi (yashil sim).
CodeGirlJP-ga rahmat, men quyida moslashtirgan "Trinket-by-Sound" ovozli dasturi uchun:
// Arduino va NeoPixels bilan ovozli faollashtirilgan LEDlar
#qo'shing
#define MIC_PIN A0 // Mikrofon Leonardo a0 piniga biriktirilgan
#define LED_PIN 6 // Leonardo 6 -piniga biriktirilgan NeoPixel LED chizig'i #define N_PIXELS 36 // LED chizig'idagi piksellar sonini !!!!!! O'rnatish paytida piksellar sonini sozlang. Bu 3 ta Neopixel uzuklari uchun to'g'ri !!!!!! #define N 100 // Har o'qishda olinadigan namunalar soni Namunalar #define fadeDelay 5 deb nomlanadi // har bir pasayish miqdori uchun kechikish vaqti #aniq shovqin 30 -daraja // tovushsiz o'rtacha mikrofon shovqinining qiyalik darajasi
// NeoPixel tasmasini yuqorida belgilangan qiymatlar bilan boshlang:
Adafruit_NeoPixel tasmasi = Adafruit_NeoPixel (N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
int namunalari [N]; // namuna yig'ish to'plami uchun saqlash
int periodFactor = 0; // davrni hisoblash uchun ms sonini kuzatib turing int t1 = -1; // qiyalik vaqtlari> 100 aniqlandi. int T; // millisekundlarga o'lchangan vaqtlar orasidagi davr int qiyaligi; // ikkita to'plangan ma'lumotlarning qiyalik nuqtasi bayt periodChanged = 0; const int SwitchPinMusic = 4; // Kommutator pozitsiyasi uchun musiqa sezuvchanligi const int SwitchPinSwirl = 8; // Kommutator pozitsiyasi uchun pin Test Pattern (aylantirish) int MusicbuttonState = 0; // Musiqa sezgirligi uchun yopiq mantiq o'zgaruvchisi
// Arduino o'rnatish usuli
bo'sh o'rnatish () {
strip.begin ();
ledsOff (); kechikish (500); displayColor (g'ildirak (100)); strip.show (); kechikish (500); g'alati g'ildirak (g'ildirak (100)); strip.show (); kechikish (500); pinMode (SwitchPinMusic, INPUT); pinMode (SwitchPinSwirl, INPUT); // attachInterrupt (4, almashtirish, tushish);
}
// Arduino pastadir usuli
void loop () {SwirlbuttonState = digitalRead (SwitchPinSwirl); // YUQORI, agar musiqa sezgirligi sozlangan bo'lsa MusicbuttonState = digitalRead (SwitchPinMusic); // HIGH, agar switch test namunasiga o'rnatilgan bo'lsa, (SwirlbuttonState == LOW) {readSamples (); // Musiqani tanlash tartibini ishga tushiring SwirlbuttonState = digitalRead (SwitchPinSwirl); // Kalit o'zgartirilganligini tekshiring} SwirlbuttonState = digitalRead (SwitchPinSwirl); MusicbuttonState = digitalRead (SwitchPinMusic); while (SwirlbuttonState == HIGH) {Raqs (); // SwirlbuttonState = digitalRead (SwitchPinSwirl) ning aylanma test sxemasini ishga tushiring; // Kalit o'zgartirilganligini tekshiring
}
}
bo'sh raqs () {
while (SwirlbuttonState == HIGH) {colorWipe (strip. Color (255, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (tasma. Rang (0, 255, 0), 50); // Green SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (tasma. Rang (0, 0, 255), 50); // Moviy burilish tugmasiState = digitalRead (SwitchPinSwirl); //colorWipe (chiziqli rang (0, 0, 0, 255), 50); // Oq RGBW // Teatrning pikselli ta'qibini yuboring… SwirlbuttonState = digitalRead (SwitchPinSwirl); teatrChase (chiziqli Rang (127, 127, 127), 50); // Oq burilish tugmasiState = digitalRead (SwitchPinSwirl); teatrChase (chiziqli Rang (127, 0, 0), 50); // Qizil burilish tugmasiState = digitalRead (SwitchPinSwirl); teatrChase (chiziqli Rang (0, 0, 127), 50); // Moviy burilish tugmasiState = digitalRead (SwitchPinSwirl); kamalak (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); kamalak tsikli (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); teatrChaseRainbow (50); SwirlbuttonState = digitalRead (SwitchPinSwirl); }} // Mikrofondan namuna ma'lumotlarini o'qish va qayta ishlash vSonsiz void readSamples () {for (int i = 0; i0) {qiyalik = namunalar - namunalar [i -1]; } else {qiyalik = namunalar - namunalar [N -1]; } // Nishab shovqin darajasidan kattaroqligini tekshiring - agar shovqin darajasida bo'lmagan ovoz aniqlansa, (abs (qiyalik)> noiseLevel) {if (qiyalik <0) {hisoblashPeriod (i); if (periodChanged == 1) {displayColor (getColor (T)); }}} boshqa {ledsOff (); // teatrChaseRainbow (50); } periodFactor += 1; kechikish (1); }}
bekor hisobPeriod (int i)
{if (t1 == -1) {// t1 o'rnatilmagan t1 = i; } else {// t1 o'rnatildi, shuning uchun hisoblash davri int period = periodFactor*(i - t1); periodChanged = T == davri? 0: 1; T = davr; //Serial.println(T); // t1 ni yangi i qiymatiga qaytarish t1 = i; periodFactor = 0; }}
uint32_t getColor (int davri)
{if (period == -1) return Wheel (0); aks holda (davr> 400) Qaytish g'ildiragi (5); else Qaytish g'ildiragi (xarita (-1*davr, -400, -1, 50, 255)); }
void fadeOut ()
{for (int i = 0; i <5; i ++) {strip.setBrightness (110 - i*20); strip.show (); // Ipni kechiktirishni yangilash (fadeDelay); periodFactor += fadeDelay; }}
void fadeIn ()
{strip.setBrightness (100); strip.show (); // Yangilash chizig'i // rangi o'chadi (int i = 0; i <5; i ++) {//strip.setBrightness(20*i+30); // chiziq.show (); // Ipni kechiktirishni yangilash (fadeDelay); periodFactor+= fadeDelay; }}
void ledsOff ()
{ yo'qolmoq, so'limoq(); uchun (int i = 0; i
void displayColor (uint32_t rangi)
{uchun (int i = 0; i
void oddWheel (rang uint32_t)
{for (int j = 0; j <256; j ++) {// g'ildirakdagi barcha 256 rangni aylantirib (int q = 0; q <3; q ++) {uchun (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, G'ildirak ((i+j) % 255))); // har uchinchi pikselni} strip.show () ga aylantiring;
kechikish (1);
uchun (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, 0); // har uchinchi pikselni o'chiring}}} fadeIn (); }
// Nuqtalarni birin -ketin rang bilan to'ldiring
void colorWipe (uint32_t c, uint8_t kuting) {uchun (uint16_t i = 0; i
bo'sh kamalak (uint8_t kutmang) {
uint16_t i, j;
uchun (j = 0; j <256; j ++) {uchun (i = 0; i
// Biroz boshqacha, bu kamalakni butun dunyo bo'ylab teng taqsimlaydi
void rainbowCycle (uint8_t kutish) {uint16_t i, j;
for (j = 0; j <256*5; j ++) {// g'ildirakdagi barcha ranglarning 5 tsikli uchun (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); kechikish (kutish); }}
// Teatr uslubidagi sudraluvchi chiroqlar.
void teatrChase (uint32_t c, uint8_t kutish) {for (int j = 0; j <10; j ++) {// (int q = 0; q <3; q ++) {uchun (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // har uchinchi pikselni} strip.show () ga aylantiring;
kechiktirish (kutish);
uchun (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // har uchinchi pikselni o'chiring}}}}
// Kamalak effektli teatr uslubidagi sudraluvchi chiroqlar
void teatrChaseRainbow (uint8_t kutish) {uchun (int j = 0; j <256; j ++) {// g'ildirakdagi barcha 256 rangni aylantirib (int q = 0; q <3; q ++) {uchun (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Wheel ((i+j) % 255))); // har uchinchi pikselni} strip.show () ga aylantiring;
kechiktirish (kutish);
uchun (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // har uchinchi pikselni o'chiring}}}}
// Rang qiymatini olish uchun 0 dan 255 gacha qiymat kiriting.
// Ranglar - r - g - b - r ga qaytish. uint32_t Wheel (WheelPos bayt) {WheelPos = 255 - WheelPos; if (WheelPos <85) {qaytish chizig'i. Color (255 - WheelPos * 3, 0, WheelPos * 3); } agar (WheelPos <170) {WheelPos -= 85; Qaytish chizig'i Rang (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; Qaytish chizig'i Rang (WheelPos * 3, 255 - WheelPos * 3, 0); }
void almashtirildi () {
strip.show (); readSamples (); }
Sharhlarda o'ldirilishimdan oldin ("Yaxshi bo'ling" siyosatini eslang!) Men yuklaganimdan so'ng, ba'zi kodlarim qanchalik notinch ekanligini tushunib etdim. Pin 4 va Pin 8 ni HIGH uchun doimiy ravishda sinab ko'rishga hojat yo'q. Kalit bitta qutbli ikki martalik otish bo'lgani uchun, uning qiymatini boshqasidan taxmin qilish mumkin: faqat bittasini sinab ko'rish kerak. Shunday qilib, siz MusicButtonState -ni o'qish va yozish bo'yicha har qanday ma'lumotnomani o'chirib tashlashingiz va SwirlButtonState -ni sinab ko'rish orqali hamma narsani yanada samarali bajarishingiz mumkin, agar sizda xotira kam bo'lsa yoki boshqa dasturlar bilan ishlasangiz. Lekin yuqoridagi kod ishlaydi.
Va agar kimdir ovozli tartiblarni nafaqat shovqin darajasini, balki chastotasini ham sezmoqchi bo'lsa va audio spektr bo'ylab harakatlanishiga javoban yorug'lik spektrini yuqoriga va pastga siljitish uchun silliq kod yozmoqchi bo'lsa, izohlarda havolani qoldiring. buni qanday qildingiz.
Xursand bo'ling!
Tavsiya:
ROTARY CNC BOTTLE PLOTTER: 9 qadam (rasmlar bilan)
ROTARY CNC BOTTLE PLOTTER: Men, ehtimol, printerda ishlatilgan ba'zi rollarni oldim. Men ularni CNC shisha chizgichining aylanish o'qiga aylantirish g'oyasi bilan keldim. Bugun men ushbu rulonlardan va boshqa qoldiqlardan CNC shishasi chizgichini qanday yasashni aytib bermoqchiman
Gyroskop Neopixel uzuk bilan qiziqarli: 4 qadam (rasmlar bilan)
Gyroskop Neopixel Ring bilan Qiziqarli: Ushbu qo'llanmada biz MPU6050 gyroskopi, neopixel uzuk va arduino yordamida burchak burchagiga mos keladigan chiroqlarni yoqadigan qurilmani quramiz. Bu oddiy va qiziqarli loyihadir. non taxtasida yig'iladi.
Neopixel Light Up Maple siropi shisha chirog'i: 4 qadam (rasmlar bilan)
Neopixel Light Up Maple Syrup Shisha Lampasi: Ish stolida o'z sinfida. Yo'l bo'yidagi ovqatxonalar va Neopixel oqadigan suv musluk chiroqining neon belgilaridan ilhomlangan. NAFTA qayta muhokama qilinishidan oldin hech bo'lmaganda yangi shisha 100% Kanada siropini oling
Imo -ishorali sensor bilan Neopixel LED halqasini boshqarish: 3 qadam (rasmlar bilan)
Imo-ishorali sensorli Neopixel Led Ring-ni boshqarish: Ushbu qo'llanmada biz Arduino UNO yordamida ikkalasini birlashtirishni o'rganish uchun imo-ishora sensori (APDS-9960) va neopixel uzuk bilan o'ynaymiz. Oxirgi mahsulot javob beradi. chapga - o'ngga imo -ishoralar, o'ngga yoki chapga yo'naltirilgan harakatni jonlantirish orqali va sizga
Neopixel Light Up Sushi xizmat ko'rsatish paneli: 6 qadam (rasmlar bilan)
Neopixel Light Up Sushi uchun xizmat ko'rsatish taxtasi: Ishlab chiqaruvchi yasashi kerak. &Ldquo; Lekin odamlar kiradigan narsalardan biri - hamma ovqat eyishi kerak. &Rdquo; Ovqatlanish, texnologiya va ochlik chorrahasida, Kristi Kanida ko'rsatma berish uchun sushi stolini yondiring