Arduino yordamida xonalarni avtomatik sug'orish. Arduino uchun Robimo autowatering roslin yordam beradi elektron taymerlar dasturiy ta'minot keruvanlar bilan

Arduino yordamida xonalarni avtomatik sug'orish. Arduino uchun Robimo autowatering roslin yordam beradi elektron taymerlar dasturiy ta'minot keruvanlar bilan


Ard xona... Tematik do'konlarda ular bunday dizaynni aqldan ozgan narxda sotadilar. Biroq, mashina ishlab chiqaruvchi uchun "portlar" ni mustaqil ravishda sozlashi bilan bir xilda turadi.

Ta'kidlash joizki, arduino -ga avtomatik suv ta'minoti o'rnatilishi mumkin. Vypadku -dagi mikrokontroller periferik qo'shimchalarni boshqarish tizimi bilan ifodalanadi.

Arduino mikrokontrolleriga asoslangan "Avtopoliv" loyihasini amalga oshirish uchun zarur vositalar va qo'shimcha qurilmalar.

Irigator - tuproq namligini nazorat qilish. Sensorga ma'lumot uzatishga biriktirilgan, u ham robotning boshini avtomatik sug'orish uchun mo'ljallangan. Dasturlarni yig'ish uchun siz C ++ dasturidan foydalanishingiz mumkin.

Kerakli materiallar bilan jadval:

komponent tasvirlamoq
Mikro nazoratchi Arduino Uno Platforma 2 qismdan iborat: dasturiy ta'minot - bu apparat. Bayt qurilmalarini o'chirish kodi arduino IDE -da o'ralgan bo'lmagan dasturiy ta'minotda dasturlashtirilgan.

Dasturni mikrokontrolderga o'rnatish uchun USB kabeli qo'shilishi kerak. Avtonom robotlar uchun 10 V kuchlanishli yashash moslamasini sotib oling.

Platformada 12 ta pin bor, bu qutblarning raqamli kiritish va etkazib berishda tutgan o'rni. Coristuvach individual ravishda teri pinining funktsiyasini tebratadi.

USB kabeli O'tkazilgan kod uchun "Arduino -da avtomatik sug'orish" tizimini loyihalashda majburiydir.
Sensor paneli - Troyka qalqoni Qo'shimcha to'lov uchun siz yordamchi kabellarning sensori atrofini ulashingiz kerak. Kontaktlar 3 Pina - S + V + G tikuvlari.
bosish terminali bloki To'plangan simlar uchun fiksator sifatida xizmat qiling. Dizayn buloqlar ustidagi qo'shimcha tugmalar orqasida o'rnatiladi.
Yashash birligi, usb uskuna bilan jihozlangan uskunalar

Tuproq namligi analizatori

Platformalarni ulash uchun ideal. Viteslar dizaynida likyor bor, ya'ni robotlar tayog'i haqida.

Pristosuvannya signal beradi, agar er bosilib ketgan yoki bo'shliq bo'lmasa. To'lovdan oldin ulanish qo'shimcha 3 tomchi uchun amalga oshiriladi.

● erga ko'mish uchun MAX gibini - 4 sm;

● MAX quvvat manbai - 50 mA;

● Yaylov uchun kuchlanish - 4 V gacha.

Suvga zerikish uchun quvur bilan nasos Kommutator yordami uchun boshqaruv mavjud. Dovjin kabeli 2 metrga etadi.
quvvat tugmasi Elektr qoziqni aralashtirish va tarqatish uchun mo'ljallangan. Iakshcho vikoristovuvati qo'shimchasi avtomatik sug'orish Arduino qurilganda, qo'shimcha yopishish kerak bo'lmaydi. Asosiy panelga ulanish ham 3 ta sim bilan ulangan.
Provid telefon liniyasi - "batko -batko" Periferik qo'shimchalarni ulash uchun simlar.
Telefon liniyasini ta'minlang - "ona -batko" Amalga oshirish, shuningdek, atrof -muhitga qo'shimchalar yaratadi.
xonali kvartira Tizim turiga mos keladi xona rozlin.

Mk Arduino asosida "Avtopoliv" loyihasida robotlarning ulanish sxemasi va algoritmi

Pastki tasvirlar - bu arduino platformasidagi loyihaga ulanish algoritmi va diagrammasi. Avtomatik sug'orish haqoratli daraja bo'ladi:

  1. Mikrokontrollerda sensor uchun taxtani ishlab chiqish.
  2. Oziq -ovqatda tasvirlangan, shunga o'xshash pingacha - A0 uchun qo'shimcha to'lov uchun kalit analizator.
  3. Sensor mikrokontroller tomonidan qabul qilinadi:
    1. Contact CS bortdagi 9 -pinli raqamga ulangan.
    2. Funktsional SPI kontaktlari xuddi shu taxtadagi displeyga ulangan.
  4. Quvvat kaliti 4 -sonli pinga joylashtirilgan.
  5. Kalit p +, p- harflari bilan belgilanadigan atirgullardagi quvvat kalitiga keltiriladi.
  6. endi almash suv nasosi l + i l- harflari bilan aloqada bo'lgan yordamchi terminal blokining orqasidagi naychadan. Insonni qurishdan oldin, diagramma tuziladi.
  7. O'rnatilgan sensorli panel, mantiqni tahlil qilish sifatida, uy bekasida xat bilan.
  8. Kinets trubkasi suv bilan tuproqqa solinadi. Agar men vagon ortida uy bekasi bilan bir vaqtning o'zida 2 kg o'zgartirmasam, shlang okremosini yopaman. Siz suv tomchilari uchun choyshabni tashlab qo'yishingiz mumkin.
  9. Men suv pompasini suvni eslatuvchi raqsga tushiraman.
  10. Pidklyuchaaêmo dizayni elektr yashash uchun.

Quyida biz sizga ilovamiz uchun ikkita alternativ sxemani taklif qilamiz:

Sensor tuproqning kislotalilik holatini tahlil qiladi. Irrigatorni tizimga qo'yishdan oldin, norozilik bildirish va ko'rsatish kerak:

  1. U displeyda ko'rinishni yozib oladi. Shu bilan birga, datchik quruq qozonga tiqilib qolishi kerak. Tan olish kerak, yak min vologosti.
  2. Er o'sishi bilan sug'oriladi. Chekaumo, agar suv oxirigacha tuproqni jonlantirsa. Todi sensorli ekranda bitta riveni ko'rsatish uchun ko'rsatiladi. Mulkdan voz kechishni yozib olish kerak. Tse max vologosti degan ma'noni anglatadi.
  3. Men bu qiymatlarga HUM_MIN va HUM_MAX jismoniy konstantalarining bloknotlarini yozaman, chunki bulo kalibrlash natijasida tuzatilgan. Dasturda yozilgan ma'no, chunki u mikrokontrollerga o'tkaziladi.

Vishche bitta chipta uchun avtomatik suv ta'minoti dizaynini tasvirlab berdi. Biroq, xonalarni sevuvchilar orasida kabinalar tog'li odamlar tomonidan chiqib ketish bilan jihozlangan. Bir tomondan, quvvat manbai ham katlanabilir: nasos stikali va analizatorini tuproqqa ulash zarur. Ale isnu avtoulovni loyihalashda ancha arzon va sodda.

Nasosdan keladigan shlangda 25 santimetr masofani oching. Otrimaní dírochki -da, sumka formatida soch kesilgan qalamlar bor. Xaltaga o'ting:

  • pidvíkonnída ketma -ket rozlin shykuyutsya bo'lgan alpinistlar;
  • naycha kvartalli uy bekasiga qo'yiladi, shunda teridan suv okremii uy bekasiga quyiladi;
  • voila: bir vaqtning o'zida barcha o'sayotgan chiziqlarni sug'oradigan vinaxid.

Sug'orish uchun Koristuvach o'zi tanlagan soat, faqat bitta karta uchun. Ko'pincha bir xil o'lcham va hajm uchun kotirovkalar yo'q. Otze, tog'liklarning tuprog'i shu soat quriydi. Ko'p ixtirolar uchun kombinatsiya usuli: uy bekalari soni vagonlar va kattalikdagi guruhlarga bo'linadi.

"Avtomatik sug'orish" loyihasi uchun Arduino kodiga qo'llaniladi

Biz dastur kodiga o'tamiz:

// Zavanazhuêmo kutubxonasi robotli displey va dasturlarga o'tish uchun #include "QuadDisplay2.h"; // Bu suv nasosini ulashdan oldin kontaktni bildiruvchi doimiydir // #define VODPOMPA_PIN 4; // Kontaktni bildiruvchi, unga ulangan doimiyni tuzing // er jurnali analizatori #define HUM_PIN A0; // Min hajmi bo'yicha #define HUM_MIN 200; // Max by vologosti #define HUM_MAX 700; // O'zgaruvchan sug'orish vaqti #define INTER 60000 * 3; // Bu aqldan ozgan, har qanday holatda ham qiymatning qiymati olinadi. Unsigned int hum = 0; // O'zgarish o'rtasida biz soatlik avansni imzosiz uzoq vaqtni olamiz Time = 0; // QuadDisplay sinfidagi Ogoloshuêmo obyekti, keyin davlat raqami uzatiladi // CS QuadDisplay kontakt dis (9); // Ko'rsatiladigan robotning bo'sh joyini sozlash (void) ga javob beradigan usul yarating (// start () usulini ishga tushiring; // suv nasosining chiqishiga // kontakt pinMode (VODPOMPA_PIN, OUTPUT); // displey raqamni yondiradi - 0 dis.displayInt (0);) // Usuldan foydalaniladi, u ma'lum bir lahzali bo'shliq tsikli uchun indikator uchun ko'rsatiladi (void) (// Rosraxov indikatori berilgan moment int humNow = analogRead (HUM_PIN); // Agar indikatorning qiymati old tomonda bo'lmasa, u holda ... if (humNow! = Hum) (// Qiymatni birdaniga oling hum = humNow;/ / Qiymatni ekrandagi displeyda ko'rish (Vaqt == 0 || millis () - Vaqt> INTER) && hum< HUM_MIN) { // Даем сигнал о начале работы водяной помпы digitalWrite(VODPOMPA_PIN, HIGH); //Объявляем потом, длящийся 2 секунды delay(2000); // Завершаем работу помпы digitalWrite(POMP_PIN, LOW); // Ставим в значение переменной Time текущее время и добавляем 3 минуты Time = millis(); } }

Undan oldin, hamkasblarimizning bir -ikki videosidan hayron bo'lishingiz mumkin.


Ushbu statistikada kichik birlikni qanday yig'ish kerakligi tasvirlangan avtomatik sug'orish Roslin Arduino asosida vologost nazorati ostida. Sug'orishning o'zi tuproq hajmidagi sensorga asoslanadi. Bazhanna yordamida siz rozelin sepishini birdaniga sug'orishingiz mumkin.

Materiallar va asboblar:
- Arduino Uno
- Roslin quruqlikda uy bekasi sifatida
- Suv nasosi
- Erdagi datchik pastadir bilan
- halqa bilan quvvat tugmasi (uchta)
- Kelepçe qisqichi
- "tato-tato" taqdim etilgan × 1 dona
- "Mama-tato" taqdimoti × 1 dona
- USB gulli yashash xonasi
- USB kabeli

zbirka:
Displey 3 triika-Shild kontaktiga ulangan. Barcha simlar bu turga ulanganda, qora tuynukni yopish uchun GND kontaktidan foydalanish muhim.

Kunduzgi kontaktlarning oxiridagi nasosda terminal bloki g'alaba qozonadi. Agar siz kontaktlarni lehimlashingiz kerak bo'lsa, ularni "mahkamlangan simlar" bilan simlarga to'g'ri lehimlang.

Eksa ulanishlarda shunday ko'rinadi:

Qo'shimcha Arduino IDE uchun Arduino Uno dasturini o'rnatib, uni quyidagi faylga biriktiring. Sensorning o'zi vologosti, juda yaxshi, u erga ko'milgan. Quvurning oxiridan suv bilan erga tushing. Uy bekasi muhim bo'lgani uchun, muallif rozlin ag'darilmasligi uchun trubani yopib qo'yishni tavsiya qiladi. Dal, nasosni suv havzasiga tushirish kerak, va oziq -ovqat ulanadi.

kalibruvannya:
Sensor ko'rsatilganda, kalibrlash uchun noqulay protsedurani bajarish kerak. Shuning uchun ko'rsatmaning aniqligi tuproqda kislotalilik bo'lmasdan saqlanishi kerak.

1. Quruq uy bekasiga kirganingizda, displeyda sensor paydo bo'ladi. Narx past va past.

2. Suvni to'kish va suvning erga tushmasligini tekshirish va datchik bir qiymatda chizilgani ko'rsatilgan. Dani ro'yxatdan o'tish va maksimal qiymat sifatida tan olinishi.

3. Dasturiy ta'minot fayli HUMIDY_MIN sobit qiymatini o'zgartiradi, minimal qiymat o'rnatiladi va HUMIDY_MAX maksimal qiymatga ega bo'ladi. Arduino Uno yana yonadi.

loyiha ko'lami
Bir chipta uchun hamma narsani sug'orish usuli haqida aniq ta'riflar berilgan. Ale tez -tez rozelin sepilishi bilan darhol sug'orilishi kerak. Shubhasiz, siz Arduino -ga ko'proq nasos va datchiklarni ulashingiz mumkin, lekin bu qimmatroq bo'ladi. Muallif, umuman olganda, yechim arzonroq va sodda ekanligini ilgari suradi. Quvurda, yakni dabdabali qilib olib kelishadi, dartlar qobiq bilan teshilgan, ular orasida 30 santimetrga yaqin masofa bor, ochilishida vicoristan sumkasining tutqichidan kesilgan.

Stenddagi alpinistlar, qoida tariqasida, ketma -ket turishadi, masalan, pidvikonnda. Quvur tog'liklarga yotqizilgan, shuning uchun oriq teshiklarni uy bekasi aytgan. Bir vaqtning o'zida bitta haydovchini qo'shib, sug'orish haqidagi qarorning o'qi hisobga olinadi. Ko'pincha, bir xil o'lchamdagi alpinistlar ko'pincha pavilonlarga shunday yo'l tutishadi. Ularda quruq tuproq taxminan bir xil bo'ladi. Qachon bazhani i ajoyib raqam roslin sizning uyingizda, siz qo'shimcha nasoslarni ulashingiz va barcha alpinistlarni teng o'lchamli guruhlarga tarqatishingiz mumkin.

Loyihani amalga oshirish uchun kutubxona tashkil etishimiz kerak:

  • Kutubxona iarduino_4LED (to'rt xonali LED ko'rsatkichli robotlar uchun).

Kutubxonalarni o'rnatish usullari haqida siz Wiki - Arduino IDE -da kutubxonalarni o'rnatish sahifasini ko'rishingiz mumkin.

Video:

Ulanish sxemasi:

Bu urotsi -da, 2 va 3 -raqamli ulanishlarning LED ko'rsatkichi, 11 va 12 -raqamli ulanish tugmachalari, 10 -raqamli ulanishning quvvat tugmasi (PWM bilan), A0 analogli kirish sathining sensori.

Robot algoritmi:

  • Tirikchilikni topshirayotganda, Pristriy faol emas (blimas ko'rsatkichlari bo'yicha, tuproq qiymati aynan bir xil).
    • Qonunbuzarlikdagi "A" va "B" tugmachalarini bir marta bosish bilanoq, tuproqdagi oqayotgan tegirmon chegaradosh bo'lib qoladi (keyin, agar siz sug'orishni boshlashingiz kerak bo'lsa) va ish rejimiga o'tishni sozlang. rejim. Tuproq tarkibining chegaraviy qiymati kirish qiymati rejimiga o'zgartirilishi mumkin.
    • Agar siz "A" va "B" tugmachalarini 2 soniyadan ko'proq bosib tursangiz, siz kiritilgan qiymat rejimiga o'tasiz.
  • Ish tartibi indikatorda quyidagilar ko'rsatiladi: tuproqning oqayotgan suv miqdori, er osti suvining tarkibi va oxirgi sug'orish vaqtidan o'tish uchun bir soat. (Tuproqning chegaraviy qiymati quyuqroq va o'rtacha ko'rsatkichdan pastroq deb qabul qilinadi). Agar siz ish rejimida bo'lsangiz va uning pastki qismidagi suv oqadigan suvning qiymati er osti suvining qiymatidan past bo'lsa, siz sug'orish rejimiga o'tasiz.
  • Sug'orish rejimi sug'orish va to'xtash nuqtalari tugaguniga qadar indikatorni bir necha soniya davomida yoqishni sozlang, shuningdek, nasosni yoqadigan quvvat tugmachasiga PWM signalini bering. PWM (nasos motorining tezligi) qiymati eskizga kiritilgan. Sug'orishning ahamiyatsizligi kiritilgan qiymat rejimiga o'rnatiladi. Sug'orish tugagandan so'ng, prist_y och_kuvannya rejimiga o'tadi.
  • Rejimga ega bo'ling STOP va blimalarni nuqta bilan yozish uchun indikatorni o'rnating. Daniya uzatish rejimi, qo'shimchaning ish rejimiga o'tmasidan oldin, operatorning er yuzasiga bir tekis tarqalishini ta'minlash uchun ishlatiladi. Ochikuvannya rejimida qolishning bir soati eskizlarda ishlatiladi. Ochikuvannya rejimiga soat tugagandan so'ng, ish rejimiga o'tishga harakat qiling.
  • Qiymat kiritish rejimida"A" va "B" tugmachalarini 2 soniyadan ko'proq bosib har qanday rejimga o'tishingiz mumkin. Daniya rejimi ikki nuqtada saqlanadi: tuproq uchun chegaraviy suv miqdorini belgilash (agar ko'proq sug'orish kerak bo'lsa) va sug'orishning o'zi uchun ahamiyatsizlikni o'rnatish. Eshik qiymatini ko'rsatish mumkin, chunki hujumni "A" tugmachasini (o'zgartirish) yoki "B" tugmachasini (oshirish) o'zgartirish mumkin. Agar siz "A" va "B" tugmachalarini bir marta bosgan bo'lsangiz, uning ma'nosi tuproqning aniqligiga o'zgaradi. Agar chegara o'rnatilgan bo'lsa, "A" va "B" tugmalarini bosish uchun 2 soniyadan ko'proq vaqt kerak bo'ladi). Buning uchun sug'orishning ahamiyatsizligi o'rnatiladi, "A" va "B" tugmachalarini 2 soniyadan ko'proq bosib turish va ish rejimiga o'tishni o'rnatish kerak.
  • Sug'orish rejimida bo'lganingizda, tugmani bosing, sug'orishni mahkamlang va tozalash rejimiga o'ting.
  • Ochiquvannya rejimida tugmani bosing va uni ish rejimiga o'rnating.

Dastur kodi:

#qo'shing // iarduino_4LED dispLED to'rt xonali LED ko'rsatkichli robotlar uchun kutubxonaga o'tish (2,3); // iarduino_4LED kutubxonasi funktsiyasiga ega robotlar uchun ochiq ob'ekt, indikator qiymatlaridan (CLK, DIO) const uint8_t pinSensor = A0; // yer usti sensori const uint8_t pinButtonA = 12 har qanday ulanishdan oldin, analog kirish raqamining qiymatlaridan aniq doimiy. // sonning qiymatlaridan A tugmachasi ulangan kirishga qadar g'aroyib ravishda doimiy const uint8_t pinButtonB = 11; // sonning qiymatlaridan chiqish tugunigacha shafqatsiz doimiy, B tugmasi ulangan const uint8_t pinPump = 10; / * Visnovok PWM bilan * / // har qanday ulanishdan oldin uint8_t btnState tugmachasini ulashdan oldin, chiqishdagi son qiymatlaridan aniq doimiy. // tugmachalarni tanlash uchun qalin o'zgarish: 0 bosilgan, 1 bosilgan A, 2 bosilgan B, 3 bosilgan A va B, 4 bosilgan A, 5 bosilgan B, 6 bosilgan A va B uint16_t arrMoisture ; // tuproq uchun 10 ta qoldiq qiymatni saqlash uchun yalang'och qator vologosti uint32_t valMoisture; // tuproq qiymatining o'rtacha qiymati uchun qalin o'zgarish uint32_t timWatering; // bir soat davomida jasur o'zgarish suvning qolgan qismini sug'orish uchun (millisekundlarda) uint32_t timSketch; // eskiz boshlangan paytdan boshlab (millisekundlarda) const uint8_t timWaiting = 60; // sug'orish uchun tozalash uchun bir soat vaqt ajratish uchun dahshatli doimiy (soniyalarda) 0 dan 99 gacha const uint8_t pwmPump = 100; // nasos motorini o'rash uchun aniq konstant (samaradorlik) 0 dan 255 gacha uint16_t timDuration = 5; / * Takliflar uchun * / // arzimas sug'orish uchun juda ko'p o'zgarishlar mavjud (soniyalarda) 0 dan 99gacha uint16_t limMoisture = 0; / * O'zgartirishlar uchun * / // er osti suvini (nasosni yoqish uchun) 0 dan 999 gacha uint8_t modState = 0 gacha bo'lgan suv chegarasini saqlash bo'yicha aniq o'zgarish; / * Boshida * / // Men ilova bo'lish uchun katta o'zgarish qilaman: 0-faol, 1-toza, 2-faol, 3-sug'orish, 4-polni, 5-soatni belgilash. sug'orish bo'sh joyini o'rnatish () (dispLED. boshlanish (); // pinButtonB kirish rejimida (pinPump, OUTPUT); loop () (// ******* O'qish sharafi: *******btnState = Func_buttons_control (); // tugmalar to'plamini o'qiydi, lekin 2 sekunddan oshmaydi timSketch = millis ();/ / eskiz boshlangan paytdan boshlab bir soat o'qiladi, agar (timWatering> timSketch) (timWatering = 0;) // Qolgan sug'orish quloq uchun bir soat nol, agar millis qayta ekilgan bo'lsa () valMoisture = 0; uchun (int i = 0; i<9; i++){arrMoisture[i]=arrMoisture;} arrMoisture=analogRead(pinSensor); for(int i=0; i<10; i++){valMoisture+=arrMoisture[i];} valMoisture/=10; // вычисляем среднее значение влажности почвы //*******Управление устройством:******* switch(modState){ // Устройство не активно case 0: if(btnState){ // если зафиксировано нажатие или удержание кнопок if(btnState==6){modState=4;} if(btnState==3){modState=2; limMoisture=valMoisture;} } if(timSketch%100==0){ // если начинается десятая доля секунды if(timSketch/1000%2){dispLED.print(valMoisture);}else{dispLED.print(" ");} } break; // Устройство в режиме ожидания (после полива) case 1: if(btnState){ // если зафиксировано нажатие или удержание кнопок if(btnState==6){modState=4;} if(btnState==1){modState=2;} if(btnState==2){modState=2;} if(btnState==3){modState=2;} } if(timSketch%100==0){ // если начинается десятая доля секунды dispLED.print("stop"); dispLED.point((timSketch/100%4)+1,true); } if(timDuration+timWaiting-((timSketch-timWatering)/1000)<=0){// если закончилось время ожидания modState=2; } break; // Устройство активно case 2: if(btnState){ // если зафиксировано нажатие или удержание кнопок if(btnState==6){modState=4; dispLED.light(7);} } if(timSketch%100==0){ // если начинается десятая доля секунды if(timSketch/1000%15<5){dispLED.light(7); dispLED.print(valMoisture);}else if(timSketch/1000%15<10){dispLED.light(1); dispLED.print(limMoisture,LEN4);}else {dispLED.light(7); if(timWatering){dispLED.print(int((timSketch-timWatering)/1000%3600/60),int((timSketch-timWatering)/1000%3600%60),TIME);}else{dispLED.print("----");}} } if(valMoisture<=limMoisture){ // если текущая влажность почвы меньше пороговой timWatering=timSketch; modState=3; dispLED.light(7); analogWrite(pinPump,pwmPump); } break; // Устройство в режиме полива case 3: if(btnState){ // если зафиксировано нажатие или удержание кнопок if(btnState==6){modState=4;}else{modState=1;} analogWrite(pinPump,0); } if(timSketch%100==0){ // если начинается десятая доля секунды dispLED.print(timDuration-((timSketch-timWatering)/1000)); dispLED.point(0,true); dispLED.point((timSketch/100%4)+1,true); } if(timDuration-((timSketch-timWatering)/1000)<=0){// если закончилось время полива modState=1; analogWrite(pinPump,0); } break; // Устройство в режиме установки пороговой влажности почвы case 4: if(btnState){ // если зафиксировано нажатие или удержание кнопок if(btnState==6){modState=5;} if(btnState==1){if(limMoisture>0) (limMoisture--;)) if (btnState == 2) (if (limMoisture)<999){limMoisture++;}} if(btnState==3){limMoisture=valMoisture;} if(btnState==4){while(digitalRead(pinButtonA)){if(limMoisture>0) (limMoisture--;) kechiktirish (100); dispLED.print (limMoisture);)) if (btnState == 5) (while (digitalRead (pinButtonB))) (if (limMoisture<999){limMoisture++;} delay(100); dispLED.print(limMoisture);}} } if(timSketch%100==0){ // если начинается десятая доля секунды dispLED.print(limMoisture); } break; // Устройство в режиме установки длительность полива case 5: if(btnState){ // если зафиксировано нажатие или удержание кнопок if(btnState==6){modState=2;} if(btnState==1){if(timDuration>0) (timDuration--;)) if (btnState == 2) (if (timDuration)<99){timDuration++;}} if(btnState==4){while(digitalRead(pinButtonA)){if(timDuration>0) (timDuration--;) kechiktirish (100); dispLED.print (timDuration);)) if (btnState == 5) (while (digitalRead (pinButtonB))) (if (timDuration)<99){timDuration++;} delay(100); dispLED.print(timDuration);}} } if(timSketch%100==0){ // если начинается десятая доля секунды dispLED.print(timDuration); dispLED.point(0,true); } break; } } // Функция определения состояния кнопок uint8_t Func_buttons_control(){ uint8_t a=0, b=0; // время удержания кнопок A и B (в десятых долях секунды) while(digitalRead(pinButtonA)||digitalRead(pinButtonB)){ // если нажата кнопка A и/или кнопка B, то создаём цикл, пока они нажаты if(digitalRead(pinButtonA)){if(a<200){a++;}} // если удерживается кнопка A, то увеличиваем время её удержания if(digitalRead(pinButtonB)){if(b<200){b++;}} // если удерживается кнопка B, то увеличиваем время её удержания if(a>20 && b> 20) (dispLED.print ("----");) // if (a> 20 && b == 0) (4 qaytarish;) // agar A tugmasi 2 dan ortiq tekislangan bo'lsa soniya, agar 4 ga aylantirilsa (a == 0 && b> 20) (qaytish 5;) // B tugmasi 2 sekunddan ko'proq tekislanganda 3 kechikish (100) ga aylanadi; // kirni bostirish uchun) 0,1 soniya davomida yoping) agar (a> 20 && b> 20) (qaytish 6;) // agar tugmalar 2 soniyadan ko'proq xafa bo'lgan bo'lsa, agar (a> 0 && b> 0) ) (qaytish 3;) boshqa // agar tugma 2 soniyadan kamroq vaqt ichida xafa bo'lgan bo'lsa, 5 ga aylangan bo'lsa (a> 0 && b == 0) (qaytish 1;) boshqa // agar A tugmasi 2dan kamroq bosilsa soniya, agar 2 ga aylansa (a == 0 && b> 0) (qaytish 2;) boshqa // agar B tugmasi 2 soniyadan kam bosilsa, 1 ga aylanadi (0 qaytarish;) // agar tugmalardan biri bosilmagan bo'lsa , 0 ga aylandi)

Hammaga xayrli kun! Eksa yozda keldi, hamma joydan, erdan va uyda, sug'orilishi kerak bo'lgan o'simtalar kabi ketmoqda. Kunning oxirida, barcha issiqlikka erishguncha, ob -havo rozelinni sug'orish miqdori ortadi. Va buni amalga oshirish uchun muhabbatni o'zgartirmang, biz buning uchun avtomatik sug'orish tizimini va hozirgi holatimizni ishlatishni taklif qilamiz.

1. prist_y haqida ma'lumot

Tizimni sug'orish va sug'orish uchun bizga kerak:

  • Arduino bilan
  • Er yopishqoqligi sensori - arduino moduli
  • Nasos (Suv nasosi) - suv nasosi, shuning uchun uni Xitoyda o'zingiz sotib olishingiz yoki o'zingiz qurishingiz mumkin. Nasos uchun men qo'shimcha o'rni uchun 12 voltdan past bo'lgan nasosni yoqaman.
  • Birinchi muhim dribnisi - kichik diametrli shlang, suv uchun bo'linma, dart, dzherelo hayoti.

Men darhol aytamanki, biz hamma narsani o'ng tomonga suv ta'minotiga ulamaymiz. San'atning holati haqida bilishni xohlaysizmi, soddaligi va silliqligi uchun biz suv omborini suv bilan ta'minlaymiz. Nasos (nasos) suv omboridan suv chiqaradi, ozgina harakat qilish kifoya qiladi, men 12 voltli o'ziyurar nasosni vikoristovuvati qilaman. Agar siz pidbor paytida varto vrahuvati pompalamoqchi bo'lsangiz: shlang, nasos atirgul chizig'ini sug'orishdan oldin o'rnatiladi, nasos turi. Qatlamli shlang bo'lsa, u unchalik keng emas, u nasosning chiqish diametriga ko'ra tebranadi, lekin chiziqdagi chiqish joyida nosozlik unchalik keng emas. Agar tizim so'ralsa, sug'orish turi talab qilinadi, tomchilatib sug'orishning optimal usuli qo'llaniladi. Ts'go dan Vyhodyach nasosdan shlang bir vilnyy uchini prystosovuyut.

2. Tuproq namligini sezuvchi

Tuproq namligi sensori analog signal sifatida 0 dan 1023 gacha yoki raqamli (0 yoki 1) ko'rsatiladi. Minimal ovoz balandligini nazorat qilish uchun biz analog signaldan foydalanishimiz mumkin bo'ladi. Qiymat 0 tse maksimal vologosti, 1,023 maksimal quruq. Biz g'olib bo'lamiz, 200 qiymati - bu etarli vologizm, 600 qiymati - tanqidiy quruqlik. Quruqlik va quruqlik chegaralari, agar kerak bo'lsa, arduino eskizida o'zgartirilishi mumkin. Sensorning o'zi ikki qismda saqlanadi: prob (erga cho'kish) va taqqoslagich. Sensorni 3,3 dan 5 voltgacha yozib olish mumkin, siz arduino atirgullarini vikoristovuvati qilishingiz mumkin.

LM393 bo'yicha taqqoslagich sxemasi:

Dani a0 signal simiga o'tishi va hujumkor darajaga o'tishi kerak:

3. Amaliy amalga oshirish

Robot mantig'i: sekundiga bir marta (siz uch qadamdan ko'proq bajarishingiz mumkin) arduino sensor qiymatini olib tashlaydi. Agar qiymat 550 dan yuqori bo'lsa, nasos 15 daqiqa davomida pompalanishni boshlamadi, arduino o'z ishini bir soat davomida o'rni yoqadi (nasos yoqilguncha). Buning uchun 15 ta chilinni sug'orish bilan qoplash natijasida, volog erga singib ketdi va nasos ko'proq suv quydi va talab kam bo'ldi. Minliva time_work robot nasosining vaqtini belgilaydi va sizning nasosingiz vikachatini yoqish uchun bir soat kerak bo'ladi, men sizning rozelindan bir qancha suv kerak bo'ladi.
Sug'orishdan so'ng, robot nasos uchun 15 ta kviling o'rnatiladi, men butun arduino bilan vologiyaga tikuv tikaman. Va keyin hamma narsa davriy. Suv sathining sensori buzilganida, tanklarda suv oz bo'lsa ham va ko'rsatma bo'lsa ham, nasos yoqilmaydi.

Ulanish sxemasi:

Vlasne kodning o'zi:

Ichki minv = 600; // past darajali int maxv = 220; // qayta sug'orish int normv = 500; // vologue trochs int qiymati = 0; // int last_value = 0 qiymatini olib tashlang; // o'zgarishni anglatuvchi to'xtatish int value_sdvig = 50; // int ralay = 6 o'zgarishini nazarda tutyapman; // pin o'rni int time_work = 10; // nasos robot soatiga sekundiga int analogPin = A0; // sensorli pin

// Vaqt tugashini o'zgartirish
int sekund = 0; // soniya
int time_off = 0; // bir soat sovutgich
int pause_time = 15; // xvilidagi sug'orishni tuzatish uchun soat

bo'sh o'rnatish () (
// bir marta ishga tushirish uchun sozlash kodini bu erga qo'ying:
Serial.begin (9600);
pinMode (ralay, HIGH); // o'rni sozlanishi
digitalWrite (ralay, HIGH);
}

bo'sh poliv ()
{
int time_tmp;
vaqt_tmp = ish vaqti;
digitalWrite (ralay, LOW);
while (time_tmp> 0 && value> normv) (// time_work soatining oxiri yoki oddiy tuproqni tekshiring
kechikish (1000);
qiymat = analogRead (analogPin); // bir xil qiymat
time_tmp--;
}
digitalWrite (ralay, HIGH);
soniya = 0; // soniyalar nolga aylanadi
time_off = pauza_ vaqti; // Men uni sug'orish bilan o'rnataman
}

void loop () (
// qayta -qayta ishga tushirish uchun asosiy kodingizni bu erga qo'ying:
qiymat = analogRead (analogPin);
if (qiymat> (oxirgi_qiymat + qiymat_sdvig) || qiymati<(last_value-value_sdvig)){// если last_value отклонился на value_sdvig выводим value в uart
Serial.println (qiymat);
last_value = qiymat;
}
agar ((qiymat> (minv-qiymat_sdvig)) && vaqt_off<1) poliv();//если значение влажности >tanqidiy vologiya - 50 yoki yaqinda sug'orilmagan
// vaqt funktsiyalari taymerlar bilan band bo'lmasligi kerak
agar (ikkinchi> 59)
{
soniya = 0;
if (time_off> 0) time_off--;
}
kechikish (1000); // 1 soniya pauza qiling
ikkinchi ++;
}

Bu yil uchun hamma, hurmat uchun barchangizga rahmat! Fikrlaringizni tekshiring.

Buning uchun menga sovg'am bor edi, men sug'orish jarayonini avtomatlashtirish mumkin emasligini bilardim. Men vapnenniy, men Vodining nikohidan o'lmayman.
Men dizaynni o'z qo'limga olgandim, go'yo mening o'rniga xatni sug'organdim. Natijada, menda o'z ulanishlarini engadigan bunday qurilmaning o'qi bor:

Ikkita regulyator yordamida bir vaqtning o'zida sug'orishni o'rnatish mumkin, shuningdek sug'orish davrida. Tsikavo kimga - Dal leksiya, Yak zrobiti shunga o'xshash. Miyaning yuragida men Arduino (Arduino Mega) ni yopishtirdim.
Katlanadigan purkagich uchun sizga bir nechta komponentlar kerak va soatiga 30 daqiqadan oshmasligi kerak.

Vikoristovuvani komponentlari:

  • Arduino Mega
  • Nasos va silikonov trubkasi (agar mashina oynalarini yuvish uchun nasos bo'lsa - uni istalgan avtomobil qismlaridan sotib olishingiz mumkin yoki ebaydan kichik suv osti nasosini sotib olishingiz mumkin)
  • Yashash bloki
  • Tartibga solish uchun ikkita o'zgaruvchan qarshilik (be-yaki)
  • tranzistorli IRL3705N
  • Ikki rezistor (100 Ohm va 100 kOm)
  • Diod (o'xshash)
  • Suv idishi (mening fikrimcha, Ikeaning plastik qutisi)
  • tartib

Bu sxemada hamma narsa olinadi:

Birinchidan yuqorida:

O'q menda topildi:

Spatku norozilik pompasi bilan. Yangi 5V uchun Podamo. Yaksho vin zazizhchav, hammasi joyida, dal.

Endi nasos Arduino -ga ulangan. Arduino -dan nasosni boshqarish uchun tartibda kichik bog'lanish mavjud.

Men Arduino nasosi bilan poker o'ynashga harakat qilaman. Bu kodni chaqiring

int pumpPin = 5; void setup () (pinMode (pumpPin, OUTPUT); digitalWrite (pumpPin, LOW);) void loop () (digitalWrite (pumpPin, HIGH); kechikish (1000); digitalWrite (pumpPin, LOW); kechikish (1000);)

Yaksho vin vaqti -vaqti bilan boshini aylantiradi, ya'ni hamma narsa tartibda ekanligini bilaman.

Endi biz ikkita regulyatorni yo'qotdik. Bizning qo'shimchamizga befarqlik qarshilikni o'zgartiradi va qabul qiluvchiga aylanadi.

Ushbu kodni Arduino -ga qo'ng'iroq qiling

int hajmiPin = A0; void setup () (pinMode (volumePin, INPUT); Serial.begin (9600);) void loop () (Serial.println (analogRead (volumePin)); kechikish (100);)

Seriya monitoriga va qayta ulanishga o'ting, bu regulyatorning burilishiga reaktsiya. Taxminan 0 dan 1024 gacha o'zgarishda aybdor

Endi men birdaniga pul topish uchun zmusiti bilan to'lib -toshganman.

O'rta sug'orish kodisiz eksa:

// Birinchi regulyator suv oqadigan soatni boshqaradi (4 dan 15 sekundgacha) #MAX_FLOWTIME 15 // soniyani aniqlang #MIN_FLOWTIME 4 // soniyani aniqlang // Boshqa regulyator kuniga bir marta sug'orish chastotasini nazorat qiladi#MAX_PERIOD 7 ni belgilang // kunlar #MIN_PERIODni belgilang 1 // kunlar #MAX 1015 ni aniqlang #MINni aniqlang 0 int volumePin = A0; // Pin, har qanday ta'minotdan oldin, suv bilan sug'orish uchun javobgar bo'lgan regulyator int periodPin = A1; // Pin, regulyator ulanmaguncha, bu sug'orish orasidagi davr uchun bir xil bo'ladi int pumpPin = 5; // Pin, undan oldin nasos boshqaruvi o'tkazildi int hajmi; int davri; // Nasosni bir soat yoqadigan protsedura, hajmdagi vazifalar bo'sh suv () (digitalWrite (pumpPin, HIGH); // nasosni yoqing kechikish (hajm); digitalWrite (pumpPin, LOW); // vimikaêmo nasosi kechikish (davr); Void setup () (pinMode (pumpPin, OUTPUT); digitalWrite (pumpPin, LOW);) void loop () // Regulyatorlarning qiymatini o'qing (rezistorlarni o'zgartirish) tovush = xarita (analogRead (volumePin), MIN, MAX, MIN_FLOWTIME, MAX_FLOWTIME) * 1000; davr = xarita (analogRead (periodPin), MIN, MAX, MIN_PERIOD, MAX_PERIOD) * 1000 * 60 * 60 * 24; suv (); )

Eksa hammasi tayyor. Nasolodzhuêmosya vídpochinkom. va siz suvni tozalash uchun sizning zodagonlaringiz bo'lasiz.

oldindan ko'rish

Odnoklassnikida saqlang, VKontakte -ni saqlang