Автоматическая система полива

Автоматическая система полива

В этом проекте я покажу вам, как создать автоматизированную систему полива. Моя система создана для моей теплицы, но вы можете использовать общий принцип практически для всего и везде. Система использует LoRa для удаленной связи, так что я могу поливать растения даже в отпуске. Но есть также кнопка для ручного полива растений. Основные компоненты моей системы – это большая бочка с водой, электромагнитный клапан, датчик уровня воды и длинный садовый шланг. Давайте начнем!

Шаг 1. Посмотрите видео!

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

Шаг 2: Закажите компоненты!

Шаг 2: Закажите компоненты!

Шаг 2: Закажите компоненты!

Шаг 2: Закажите компоненты!

Шаг 2: Закажите компоненты!

Шаг 2: Закажите компоненты!

Шаг 2: Закажите компоненты!

Шаг 2: Закажите компоненты!

Шаг 2: Закажите компоненты!

Шаг 2: Закажите компоненты!

Здесь вы можете найти список деталей с примером: (перероби ссилки на свої партнерські)

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Шаг 3: Постройте свою систему полива!

Здесь вы можете найти множество фотографий моей готовой сборки, а также схему. Не стесняйтесь использовать его для создания своей собственной системы.

Шаг 4: Запрограммируйте доску LoRa!

Здесь вы можете найти код для платы LoRa. Обязательно отредактируйте его и загрузите на свою доску.

greenhousewatering.ino

#include <lmic.h>
#include <hal/hal.h>
#include <SPI.h>
#include “Wire.h”
#include “SparkFunBME280.h”
BME280 mySensor;
float hum;
float temp;
char buff[20];

static const u1_t PROGMEM APPEUI[8] = {};
void os_getArtEui (u1_t* buf) {
memcpy_P(buf, APPEUI, 8);
}

static const u1_t PROGMEM DEVEUI[8] = {};
void os_getDevEui (u1_t* buf) {
memcpy_P(buf, DEVEUI, 8);
}

static const u1_t PROGMEM APPKEY[16] = {};
void os_getDevKey (u1_t* buf) {
memcpy_P(buf, APPKEY, 16);
}

static osjob_t sendjob;

const unsigned TX_INTERVAL = 60;

// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 10,
.rxtx = LMIC_UNUSED_PIN,
.rst = 9,
.dio = {2, 6, 7},
};

void onEvent (ev_t ev) {
Serial.print(os_getTime());
Serial.print(“: “);
switch (ev) {
case EV_SCAN_TIMEOUT:
Serial.println(F(“EV_SCAN_TIMEOUT”));
break;
case EV_BEACON_FOUND:
Serial.println(F(“EV_BEACON_FOUND”));
break;
case EV_BEACON_MISSED:
Serial.println(F(“EV_BEACON_MISSED”));
break;
case EV_BEACON_TRACKED:
Serial.println(F(“EV_BEACON_TRACKED”));
break;
case EV_JOINING:
Serial.println(F(“EV_JOINING”));
break;
case EV_JOINED:
Serial.println(F(“EV_JOINED”));

// Disable link check validation (automatically enabled
// during join, but not supported by TTN at this time).
LMIC_setLinkCheckMode(0);
break;
case EV_RFU1:
Serial.println(F(“EV_RFU1”));
break;
case EV_JOIN_FAILED:
Serial.println(F(“EV_JOIN_FAILED”));
break;
case EV_REJOIN_FAILED:
Serial.println(F(“EV_REJOIN_FAILED”));
break;
break;
case EV_TXCOMPLETE:
Serial.println(F(“EV_TXCOMPLETE (includes waiting for RX windows)”));
if (LMIC.txrxFlags & TXRX_ACK)
Serial.println(F(“Received ack”));
if (LMIC.dataLen) {
Serial.println(F(“Received “));
Serial.println(LMIC.dataLen);
Serial.println(F(” bytes of payload”));
if (LMIC.dataLen == 2 && digitalRead(A0) == 0) { //open
digitalWrite(4, LOW);
delay(5000);
digitalWrite(4, HIGH);
}
}
// Schedule next transmission
os_setTimedCallback(&sendjob, os_getTime() + sec2osticks(TX_INTERVAL), do_send);
break;
case EV_LOST_TSYNC:
Serial.println(F(“EV_LOST_TSYNC”));
break;
case EV_RESET:
Serial.println(F(“EV_RESET”));
break;
case EV_RXCOMPLETE:
// data received in ping slot
Serial.println(F(“EV_RXCOMPLETE”));
break;
case EV_LINK_DEAD:
Serial.println(F(“EV_LINK_DEAD”));
break;
case EV_LINK_ALIVE:
Serial.println(F(“EV_LINK_ALIVE”));
break;
default:
Serial.println(F(“Unknown event”));
break;
}
}

void do_send(osjob_t* j) {
hum = mySensor.readFloatHumidity();
temp = mySensor.readTempC();
// Check if there is not a current TX/RX job running
if (LMIC.opmode & OP_TXRXPEND) {
Serial.println(F(“OP_TXRXPEND, not sending”));
} else {
// Prepare upstream data transmission at the next possible time.
dtostrf(temp, 5, 1, buff);
strcat(buff, ” “);
dtostrf(hum, 5, 1, buff + strlen(buff));
strcat(buff, ” “);
LMIC_setTxData2(1, buff, strlen(buff), 0);
Serial.println(F(“Packet queued”));
}
// Next TX is scheduled after TX_COMPLETE event.
}

void setup() {
Wire.begin();
Wire.setClock(400000);
mySensor.setI2CAddress(0x76);
mySensor.beginI2C();
Serial.begin(9600);
Serial.println(F(“Starting”));
#ifdef VCC_ENABLE
// For Pinoccio Scout boards
pinMode(VCC_ENABLE, OUTPUT);
pinMode(4, OUTPUT);
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
digitalWrite(4, HIGH);
digitalWrite(VCC_ENABLE, HIGH);
delay(1000);
#endif

// LMIC init
os_init();
// Reset the MAC state. Session and pending data transfers will be discarded.
LMIC_reset();

// Start job (sending automatically starts OTAA too)
do_send(&sendjob);
}

void loop() {
if (digitalRead(A1) == 0 && digitalRead(A0) == 0){
digitalWrite(4, LOW);
delay(5000);
digitalWrite(4, HIGH);
}
os_runloop_once();
}

Шаг 5: Успех!

Шаг 5: Успех!

Ты сделал это! Вы только что создали собственную автоматизированную систему полива!

Материал переведен для читателей modelist-konstruktor.com

Рекомендуем почитать

  • СИСТЕМА УПРАВЛЕНИЯСИСТЕМА УПРАВЛЕНИЯ
    С новинками технологии изготовления авиамоделей, применямой моделистами ГДР из города Эрфурта, наш журнал знакомил читателей в № 6 за 1977 год. Сегодня мы рассказываем о хорошо...
  • ЦВЕТНИК НА КОЛЕСАХЦВЕТНИК НА КОЛЕСАХ
    Помимо традиционных клумб на загородных участках всё большей популярностью начинают пользоваться мобильные цветники, позволяющие при необходимости передвигать или переносить их в другое...
Тут можете оценить работу автора: