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

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

В этом проекте я покажу вам, как создать автоматизированную систему полива. Моя система создана для моей теплицы, но вы можете использовать общий принцип практически для всего и везде. Система использует 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

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

  • КРЫЛАТЫЙ ПЕНОПЛАСТКРЫЛАТЫЙ ПЕНОПЛАСТ
    «Вот уже пятьдесят лет, как я работаю руководителем авиамодельного кружка на СЮТ. Сейчас сталкиваемся С большими трудностями: нет авиамодельных материалов; если наборы и появляются в...
  • ДЕДУШКИНО НАСЛЕДСТВОДЕДУШКИНО НАСЛЕДСТВО
    Довольно часто у многих любителей мастерить из дерева возникает желание украсить свои изделия фигурными рельефами или выпуклыми узорами. Тут бы выручил токарный станок. Но покупать готовый...
Тут можете оценить работу автора: