Задумал проект по организации полива огорода в автоматическом режиме. Кто поможет? Оплатить работу могу на YANDEX деньги, на карты альфа-банка и сбербанка.
Я новичок в этом деле. В расценках не разбираюсь. Могу предположить исходя из стоимости 1000 руб/час. Мастер, думаю, за час управится должен. Если не прав - исправьте.
Такой датчик - долго не выживет, мерить надо на переменке. В остальном - у меня такая система работала прошлым летом. Сейчас сделал просто периодическое затопление с сифонным сливом: датчик не нужен. Вот сделать отсечку по минимальному уровню в баке - пока не собрался...
К баку с насосом понадобится реле или мосфет на 5 вольт, т.к. с ардуины сигнал слабенький... Научитесь их включать (и выключать без фейерверка), с остальным поможем. :) Насосы - либо мембранные (шумят), либо аквариумные помпы на асинхронниках (brushless).
У вас несоответствие между названием ТЗ и описательной частью. Что надо поливать - огород или цветочный горшок? Это очень разные исполнительные механизмы. А код я думаю и сами набросаете с помощью сообщества.
Часы не нужны. Обход датчиков влажности планирую осуществлять один раз в сутки (длительностью 5-10 сек). По поводу несоответствия между названием ТЗ и описательной частью - абсолютно без разницы. Для полива будет использоваться насос на 12в. Который можно купить в любом автомагазине.
Часы не нужны. Обход датчиков влажности планирую осуществлять один раз в сутки (длительностью 5-10 сек).
Ну, попробуйте вот такой скетч у себя запустить... Влажность, снимаемая с датчика, настраивается параметрами window01.dry = 630; window01.moist = 643; обход датчиков - несколько чаще.
#include <EEPROM.h>
#include <avr/power.h>
#define analogPin 3 // potentiometer connected to analog pin 3
#define PumpPin 7
#define WaterPin 8
#define TestPin 9 // LED connected to digital pin 9
#define LED_PIN 13
byte WaterState = 0;
typedef struct {
unsigned int dry;
unsigned int moist;
int val; // variable to store the read value
unsigned int pump;
boolean alarm;
byte count;
byte maxcount;
}
Soil_t;
// some timers
unsigned long SENSOR_READTIME = 90000;
unsigned long old_millis = 0;
unsigned long WaterMillis = 0;
Soil_t window01;
void setup() {
// 630 - 640 = moist soil; 550 = slightly dry soil
window01.dry = 630;
window01.moist = 643;
window01.val = 0;
window01.pump = 0;
window01.alarm = false;
window01.count = 0;
window01.maxcount = 4;
Serial.begin(9600);
pinMode(TestPin, OUTPUT); // sets the pin as output
pinMode(PumpPin, OUTPUT); // sets the pin as output
pinMode(analogPin, INPUT); // sets the pin as inpout
digitalWrite(analogPin, LOW); //
window01.val = analogRead(analogPin); // read the input pin
delay(100);
Serial.println("Sketch was loaded at " __DATE__);
}
void loop()
{
/* Toggle the LED */
// digitalWrite(LED_PIN, !digitalRead(LED_PIN));
// delay(200);
// digitalWrite(LED_PIN, !digitalRead(LED_PIN));
// delay(200);
/* Collect sensor data */
if( millis() - old_millis > SENSOR_READTIME ){
old_millis = millis();
// debug LED signal
// digitalWrite(LED_PIN, HIGH);
Serial.println( millis() );
// take on test-signal
analogWrite(TestPin, 128); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
delay(200);
window01.val = analogRead(analogPin); // read the input pin
// take off test-signal
analogWrite(TestPin, 0); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
// Dry? Alarm! First action.
if ( window01.val < window01.dry && window01.val > 360 ) {
Serial.print("Soil is Dry!");
window01.pump = 4500;
window01.alarm = true;
}
// Not moist?
if ( window01.val < window01.moist && window01.alarm == true ) {
// Serial.println("Soil is not moist.");
window01.pump = 3500;
}
if ( window01.val > window01.moist && window01.alarm == true ) {
window01.alarm = false;
}
// Debug print
Serial.print( window01.pump ); Serial.print(" :: "); Serial.print( window01.alarm );
Serial.print(" :val: "); Serial.println( window01.val );
// Pump
if (window01.pump > 0 ) {
digitalWrite(PumpPin, HIGH); //
delay(window01.pump);
digitalWrite(PumpPin, LOW); //
window01.pump = 0;
window01.count++;
if (window01.count >= window01.maxcount) {
window01.alarm = false;
}
}
digitalWrite(LED_PIN, LOW);
} // end of millis
} // end of loop
На всякий случай мои контакты: 903 724 88 30
Почта 7248830 @ gmail.com
Какой бюджет?
Я новичок в этом деле. В расценках не разбираюсь. Могу предположить исходя из стоимости 1000 руб/час. Мастер, думаю, за час управится должен. Если не прав - исправьте.
Такой датчик - долго не выживет, мерить надо на переменке. В остальном - у меня такая система работала прошлым летом. Сейчас сделал просто периодическое затопление с сифонным сливом: датчик не нужен. Вот сделать отсечку по минимальному уровню в баке - пока не собрался...
К баку с насосом понадобится реле или мосфет на 5 вольт, т.к. с ардуины сигнал слабенький... Научитесь их включать (и выключать без фейерверка), с остальным поможем. :) Насосы - либо мембранные (шумят), либо аквариумные помпы на асинхронниках (brushless).
У вас несоответствие между названием ТЗ и описательной частью. Что надо поливать - огород или цветочный горшок? Это очень разные исполнительные механизмы. А код я думаю и сами набросаете с помощью сообщества.
а время как определять? нужны часы. будут часы - нужна их настройка, то есть экран с кнопками
Часы не нужны. Обход датчиков влажности планирую осуществлять один раз в сутки (длительностью 5-10 сек). По поводу несоответствия между названием ТЗ и описательной частью - абсолютно без разницы. Для полива будет использоваться насос на 12в. Который можно купить в любом автомагазине.
Часы не нужны. Обход датчиков влажности планирую осуществлять один раз в сутки (длительностью 5-10 сек).
Ну, попробуйте вот такой скетч у себя запустить... Влажность, снимаемая с датчика, настраивается параметрами window01.dry = 630; window01.moist = 643; обход датчиков - несколько чаще.
#include <EEPROM.h> #include <avr/power.h> #define analogPin 3 // potentiometer connected to analog pin 3 #define PumpPin 7 #define WaterPin 8 #define TestPin 9 // LED connected to digital pin 9 #define LED_PIN 13 byte WaterState = 0; typedef struct { unsigned int dry; unsigned int moist; int val; // variable to store the read value unsigned int pump; boolean alarm; byte count; byte maxcount; } Soil_t; // some timers unsigned long SENSOR_READTIME = 90000; unsigned long old_millis = 0; unsigned long WaterMillis = 0; Soil_t window01; void setup() { // 630 - 640 = moist soil; 550 = slightly dry soil window01.dry = 630; window01.moist = 643; window01.val = 0; window01.pump = 0; window01.alarm = false; window01.count = 0; window01.maxcount = 4; Serial.begin(9600); pinMode(TestPin, OUTPUT); // sets the pin as output pinMode(PumpPin, OUTPUT); // sets the pin as output pinMode(analogPin, INPUT); // sets the pin as inpout digitalWrite(analogPin, LOW); // window01.val = analogRead(analogPin); // read the input pin delay(100); Serial.println("Sketch was loaded at " __DATE__); } void loop() { /* Toggle the LED */ // digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // delay(200); // digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // delay(200); /* Collect sensor data */ if( millis() - old_millis > SENSOR_READTIME ){ old_millis = millis(); // debug LED signal // digitalWrite(LED_PIN, HIGH); Serial.println( millis() ); // take on test-signal analogWrite(TestPin, 128); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 delay(200); window01.val = analogRead(analogPin); // read the input pin // take off test-signal analogWrite(TestPin, 0); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 // Dry? Alarm! First action. if ( window01.val < window01.dry && window01.val > 360 ) { Serial.print("Soil is Dry!"); window01.pump = 4500; window01.alarm = true; } // Not moist? if ( window01.val < window01.moist && window01.alarm == true ) { // Serial.println("Soil is not moist."); window01.pump = 3500; } if ( window01.val > window01.moist && window01.alarm == true ) { window01.alarm = false; } // Debug print Serial.print( window01.pump ); Serial.print(" :: "); Serial.print( window01.alarm ); Serial.print(" :val: "); Serial.println( window01.val ); // Pump if (window01.pump > 0 ) { digitalWrite(PumpPin, HIGH); // delay(window01.pump); digitalWrite(PumpPin, LOW); // window01.pump = 0; window01.count++; if (window01.count >= window01.maxcount) { window01.alarm = false; } } digitalWrite(LED_PIN, LOW); } // end of millis } // end of loopСпасибо за код. Надо попробовать. Только я еще не разобрался куда датчик влажности втыкать.