LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: chefmoisas em 17 de Dezembro de 2012, 23:48

Título: Ligar Rele
Enviado por: chefmoisas em 17 de Dezembro de 2012, 23:48
Boa noite

Estou a tentar conectar este rele, mas o que activa o mesmo é o ground logo não sei como activar uma porta digital para esta servir como groud. Consigo alterar o rele para ser activado por 5v ou vou ter de usar mesmo o groud???

O rele em causa é como este
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg2.buyincoins.com%2Fsinedya%2F8-channel-relay-module_02.jpg&hash=4f3552f807c32b525cba95ab1806b5a39fa75e4a)
Título: Re: Ligar Rele
Enviado por: senso em 18 de Dezembro de 2012, 00:01
Quando metes um pino a LOW ele fica efectivamente ligado á massa, e quando está a HIGH está ligado á tensão de alimentação do micro, se for 5v, tens 5v no pino.
Título: Re: Ligar Rele
Enviado por: Dave em 18 de Dezembro de 2012, 08:51
Monta algo assim.

Quando Data estiver em alto, o transístor entra em condução e faz accionar o relé.
Quando Data estiver em baixo, o transistor entra em corte e, como não passa corrente pela bobina do relé, ele abre.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.rentron.com%2Fimages%2FNPN-DRIVER1.GIF&hash=a1dba0f6e38be20fc418531cc0880594379a36d0)
Título: Re: Ligar Rele
Enviado por: Njay em 18 de Dezembro de 2012, 09:29
Onde está a datasheet disso? Isso parecer ter opto-acopladores.
Título: Re: Ligar Rele
Enviado por: Tech_JA em 18 de Dezembro de 2012, 10:54
e o jumper que tem parece ser para comutar o comum: se é o VCC ou se é o GND
Título: Re: Ligar Rele
Enviado por: chefmoisas em 18 de Dezembro de 2012, 19:45
Quando metes um pino a LOW ele fica efectivamente ligado á massa, e quando está a HIGH está ligado á tensão de alimentação do micro, se for 5v, tens 5v no pino.


Senso Tinhas razão, o rele activa quando está ligado ou não em HIGH e LOW

Agora estou com outra duvida, quero que o rele active a determinada hora mas está a faltar-me algo no codigo

Aqui está ele
Código: [Seleccione]

/*-----( Import needed libraries )-----*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "RTClib.h"
/*-----( Declare Constants )-----*/
/*-----( Declare objects )-----*/
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27
/*-----( Declare Variables )-----*/
RTC_DS1307 RTC;
int moonlight = 0;
int barra = 1;
int branco = 2;
int azul = 3;
int verde = 4;
int vermelho = 5;
int skimmer = 6;
int livre = 7;

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  pinMode(moonlight, OUTPUT);
  pinMode(barra, OUTPUT);
  pinMode(branco, OUTPUT);
  pinMode(azul, OUTPUT);
  pinMode(verde, OUTPUT);
  pinMode(vermelho, OUTPUT);
  pinMode(skimmer, OUTPUT);
  pinMode(livre, OUTPUT);
  lcd.init();
  lcd.backlight();
  Serial.begin(9600);
  Wire.begin();
  RTC.begin();

  if (!RTC.isrunning())
  {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}


void loop()
{
  DateTime agora = RTC.now();
  String relogio_data = "";
  String relogio_hora = "/";
 
  int dia = agora.day();
  int mes = agora.month();
  int ano = agora.year();
 
  relogio_data += ArrumaZero(dia);
  relogio_data += "/";
  relogio_data += ArrumaZero(mes);
  relogio_data += "/";
  relogio_data += ano;
 
  int hora = agora.hour();
  int minuto = agora.minute();
  int segundo = agora.second();
  if (hora >= 19 && hora < 20) digitalWrite(moonlight, LOW);
else digitalWrite(moonlight, HIGH);
  relogio_hora += ArrumaZero(hora);
  relogio_hora += ":";
  relogio_hora += ArrumaZero(minuto);

 
  lcd.setCursor(0, 0);
  lcd.print(relogio_data);
  lcd.print(relogio_hora);
  delay(500);
 
  relogio_hora += ArrumaZero(hora);
  relogio_hora += ":";
  relogio_hora += ArrumaZero(minuto);

 
  lcd.setCursor(0, 0);
  lcd.print(relogio_data);
  lcd.print(relogio_hora);
  delay(500);

}


String ArrumaZero(int i)
{
  String ret;
  if (i < 10) ret += "0";
  ret += i;
  return ret;
}

O que activa ou não o rele é esta parte do codigo
Código: [Seleccione]
  if (hora >= 19 && hora < 20) digitalWrite(moonlight, LOW);
else digitalWrite(moonlight, HIGH);

Ou seja quero que a porta 0 das 19 horas até às 10 horas fique em GND mas não está a fazer-lo.
Título: Re: Ligar Rele
Enviado por: dropes em 18 de Dezembro de 2012, 22:58
Conforme tens só vai ficar ativo o relé às 19h, quando passa para as 20h ele é desligado.
Título: Re: Ligar Rele
Enviado por: beirao em 18 de Dezembro de 2012, 23:03
Se não está a fazer isso, o que está a fazer?

Se meteres o pin a LOW sem horas nem nada o relé ativa? se funcionar, então é do código, senão é hardware.
viste que corrente o relé precisa para ser ativo?
Título: Re: Ligar Rele
Enviado por: chefmoisas em 18 de Dezembro de 2012, 23:09
Se não está a fazer isso, o que está a fazer?

Se meteres o pin a LOW sem horas nem nada o relé ativa? se funcionar, então é do código, senão é hardware.
viste que corrente o relé precisa para ser ativo?

Já testei o rele e quando ligo directo a um pino low ele activa !!! Logo o problema é do código.
Conforme tens só vai ficar ativo o relé às 19h, quando passa para as 20h ele é desligado.

Dropes se vires a hora a que eu coloquei o post era mesmo para testar que o rele entre as 19 e as 20 estava desligado caso contrário estaria sempre activo. No entanto o rele nunca desliga !!!
Título: Re: Ligar Rele
Enviado por: beirao em 18 de Dezembro de 2012, 23:40
E será que a hora está correta? consegues saber a hora em tempo real?
Título: Re: Ligar Rele
Enviado por: chefmoisas em 19 de Dezembro de 2012, 00:50
E será que a hora está correta? consegues saber a hora em tempo real?

Sim está correcta , ela aparece no LCD
Título: Re: Ligar Rele
Enviado por: beirao em 19 de Dezembro de 2012, 00:59
nunca mexi em arduino, mas o pin do rele está bem definido como "0" ?
Título: Re: Ligar Rele
Enviado por: rglove em 19 de Dezembro de 2012, 01:31
Não será pelo facto de estares a usar o pino como rx para a ligação serial?
Ou usas o pino como output ou usas para a ligação serial.
Acho que isso está a causar confusão, porque estás a declarar uma ligação serial (em que supostamente o pino 0 é um input) e estás a declarar esse pino como output ao mesmo tempo...

Experimenta mudar para outro qualquer e diz se já funciona  ;)
Título: Re: Ligar Rele
Enviado por: chefmoisas em 19 de Dezembro de 2012, 10:59
Não será pelo facto de estares a usar o pino como rx para a ligação serial?
Ou usas o pino como output ou usas para a ligação serial.
Acho que isso está a causar confusão, porque estás a declarar uma ligação serial (em que supostamente o pino 0 é um input) e estás a declarar esse pino como output ao mesmo tempo...

Experimenta mudar para outro qualquer e diz se já funciona  ;)
Rglove

Tens toda a razão !!! Deixei de usar o pino 0 e ficou tudo ok !!!
Título: Re: Ligar Rele
Enviado por: rglove em 19 de Dezembro de 2012, 13:17
Ainda bem!
Mas podes manter no pino 0. Acho que não estás a usar a ligação serial para nada, podes apagar a linha que diz "Serial.begin(???);" e usar o pino 0 como output, se for mais cómodo.