Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Tudo consiste em vc vais ligar a máquina, irá aparecer a tela de boas vindas...
- Se o tanque estiver cheio já entra no menu direto, se não, aparece a mensagem
- pra vc encher e fica apitando o buzzer e piscando o led a cada 15min
- Depois q vc enche o tanque vai para o menu que irá aparecer duas seleções 1 Germinar e 2 Produzir...
- Vc coloca as sementes no lugar e aperta germinar somente a bomba irá ligar a cada 12 horas durante 30 seg
- quando as plantinhas já estiverem germinadas, então para a germinação e seleciona o 2 - Produzir
- Ai a bomba ligará a cada 1h por 30seg e a iluminação ligará por 18horas e desligará por 6horas.
- Qnd estiver terminado vc desativa a produção e inicia tudo novamente.
- A seleção do menu será com um encoder rotativo com push buttom, menu um LCD 20x4 i2c
- */
- // http://eeshop.unl.edu/pdf/KEYES%20Rotary%20encoder%20module%20KY-040.pdf
- // http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/keyes-ky-040-arduino-rotary-encoder-user-manual/
- // https://produto.mercadolivre.com.br/MLB-793078506-sensor-de-nivel-de-agua-tutorial-arduino-pronta-entrega-_JM
- #include <TimerOne.h>
- #include <LiquidCrystal_I2C.h> // Biblioteca LCD I2C
- //LiquidCrystal_I2C lcd(0x38, 2, 1, 0, 7, 6, 5, 4, 3, POSITIVE); // Set the LCD I2C address
- LiquidCrystal_I2C lcd(0x3F);
- #define sensor 2 // Port sensor de agua
- #define bomba 5 // Port para bomba
- #define LED 6 // Port LED falta de agua
- #define buzzer 9 // Port buzzer
- #define luzLED 10 // Port para iluminacao
- unsigned long contador = 0; // Contador de segundos
- unsigned long alarme = 0; // Tempo de alarme de falta de agua
- unsigned long interGer; // Intervalo de aguacao em geminacao
- unsigned long aguaGer; // Tempo de aguacao em geminacao
- unsigned long interPro; // Intervalo de aguacao em geminacao
- unsigned long aguaPro; // Tempo de aguacao em geminacao
- unsigned long interLED_On; // Tempo de LED ligado em producao
- unsigned long interLED_Off; // Tempo de LED desligado em producao
- int selecao = 0; // Selecao de atividade
- #define pinA 3 // Connected to CLK on KY-040
- #define pinB 4 // Connected to DT on KY-040
- int pinALast = 0; // Ultima posicao do encoder
- int aVal = 0; // Movimento do encoder
- int mostrei = 0; // Flag para evitar pisca do display
- //---------------------------------------
- void setup()
- {
- lcd.begin(20, 4); // Inicialisa o LCD 20 x 4
- pinMode(sensor, INPUT_PULLUP); // Sensor de agua como entrada
- pinMode(LED, OUTPUT); // LED alarme agua como saida
- pinMode(bomba, OUTPUT); // Bomba como saida
- pinMode(buzzer, OUTPUT); // Buzzer como saida
- pinMode(luzLED, OUTPUT); // Alimentacao como saida
- Serial.begin(9600); // Inicialisa a serial
- lcd.setCursor(1, 0); // Posição 1 linha 0
- lcd.print("Sistema de irrigacao "); // print
- /*
- Timer1.initialize(100000); // Define interrupt de Timer1 a cada segundo
- Timer1.attachInterrupt(segundos); // OverFlow de Timer1
- attachInterrupt(digitalPinToInterrupt(pinA), encoder, RISING); // Interrupt de movimento do encoder
- pinMode (pinA, INPUT); // Pino de CLOCK do encoder como entrada
- pinMode (pinB, INPUT); // Pino de DATA do encoder como entrada
- pinALast = digitalRead(pinA); // Estabelece posicao inicial edo encoder
- */
- }
- //---------------------------------------
- void loop()
- {
- ;
- /*
- if (digitalRead(sensor) == LOW) // Se sensor de agua estiver desligado
- {
- lcd.setCursor(0, 0); // Linha 0 posicao 0
- lcd.print("ABASTECA RESERVATORIO"); // print
- alarme = contador; // Inicialisa tempo de alarme
- while (digitalRead(sensor) == LOW) // Enquanto sensor de agua estiver desligado
- {
- if ((contador - alarme) - 900) // A cada 15 minutos dispara buzzer
- {
- analogWrite(buzzer, 128); // Liga o buzzer
- alarme = contador; // Restaura tempo alarme
- delay(1000); // Toca durante 1 segundo
- analogWrite(buzzer, 0); // Desliga o buzzer
- }
- }
- }
- if (selecao == 0) // Se nenhma atividade foi selecfionada
- {
- if (mostrei == 0) // Mostra no LCD uma vez somente
- {
- lcd.setCursor(0, 0); // Linha 0 posicao 0
- lcd.print("1 - Germincacao"); // print
- lcd.setCursor(0, 1); // Linha 1 posicao 0
- lcd.print("2 - Producao"); // print
- }
- }
- if (selecao == 1) // Se selecionou germinacao
- {
- if (mostrei == 0) // Mostra no LCD uma vez somente
- {
- lcd.setCursor(0, 0); // Linha 0 posicao 0
- lcd.print("1 - Germincacao"); // print
- lcd.setCursor(0, 1); // Linha 1 posicao 0
- lcd.print(" Selecionado"); // print
- interGer = contador; // Inicializa contador de aguar durante geminacao
- }
- if (interGer >= 43200) // 12 horas
- {
- aguaGer = contador; // Inicialisa tempo de agua acionada
- digitalWrite(bomba,LOW); // Liga bomba
- }
- if (aguaGer == 30) // 30 segundos
- {
- digitalWrite(bomba,HIGH); // Desliga bomba
- }
- }
- if (selecao == 2) // Se selecionou producao
- {
- if (mostrei == 0) // Mostra no LCD uma vez somente
- {
- lcd.setCursor(0, 0); // Linha 0 posicao 0
- lcd.print("2 - Producao"); // print
- lcd.setCursor(0, 1); // Linha 1 posicao 0
- lcd.print(" Selecionado"); // print
- interPro = contador; // Inicializa contador de aguar durante producao
- interLED_On = contador; // Inicializa tempo de luz durante producao
- digitalWrite(luzLED, LOW); // Acende iluminacao
- }
- if (interPro >= 3600) // 1 hora
- {
- aguaPro = contador; // Inicialisa tempo de agua acionada
- digitalWrite(bomba,LOW); // Liga bomba
- }
- if (aguaPro == 30) // 30 segundos
- {
- digitalWrite(bomba,HIGH); // Desliga bomba
- }
- if (interLED_On >= 64800) // 18 horas
- {
- digitalWrite(luzLED,HIGH); // Apaga iluminacao
- interLED_Off = contador; // Inicializa tempo de iluminacao off
- }
- if (interLED_Off >= 21600) // 6 horas
- {
- digitalWrite(luzLED,LOW); // Acende iluminacao
- interLED_On = contador; // Inicializa tempo de iluminacao on
- }
- }
- */
- }
- //--------------------------------
- void segundos() // Rotina chamada pelo Interrupt de Zero do Timer1
- {
- contador++; // Incrementa contador para contar 1 Segundo
- }
- //--------------------------------
- void encoder() // Rotina de movimento do encoder
- {
- aVal = digitalRead(pinA); // Leia port do encoder
- if (aVal != pinALast) // Encode moveu
- {
- if (digitalRead(pinB) != aVal) // Moveu CW
- {
- selecao ++; // Incrementa contador de posicao
- if (selecao > 2) // Se posicao > que 2
- {
- selecao = 0; // Vai pra zero
- }
- }
- else // Moveu CCW
- {
- selecao--;
- if (selecao < 0 ) // Se posicao < que 0
- {
- selecao = 2; // Vai pra 2
- }
- }
- }
- pinALast = aVal; // Salva ultima posicao do encoder
- mostrei = 0; // Libera display
- lcd.clear(); // LLimpa dispaly
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement