• Welcome to LusoRobótica - Robótica em Português.
 

Ligar Rele

Started by chefmoisas, 17 de December de 2012, 23:48

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

chefmoisas

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

senso

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.
Avr fanboy

Dave

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.

David Martins
Eng. Electrotécnica e de Computadores, UBI

Njay

Onde está a datasheet disso? Isso parecer ter opto-acopladores.

Tech_JA

e o jumper que tem parece ser para comutar o comum: se é o VCC ou se é o GND

chefmoisas

Quote from: senso on 18 de December 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.


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

/*-----( 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
  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.

dropes

Conforme tens só vai ficar ativo o relé às 19h, quando passa para as 20h ele é desligado.

beirao

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?
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

chefmoisas

Quote from: beirao on 18 de December 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?

Já testei o rele e quando ligo directo a um pino low ele activa !!! Logo o problema é do código.
Quote from: dropes on 18 de December de 2012, 22:58
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 !!!

beirao

E será que a hora está correta? consegues saber a hora em tempo real?
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

chefmoisas

Quote from: beirao on 18 de December de 2012, 23:40
E será que a hora está correta? consegues saber a hora em tempo real?

Sim está correcta , ela aparece no LCD

beirao

nunca mexi em arduino, mas o pin do rele está bem definido como "0" ?
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

rglove

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  ;)

chefmoisas

Quote from: rglove on 19 de December 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  ;)
Rglove

Tens toda a razão !!! Deixei de usar o pino 0 e ficou tudo ok !!!

rglove

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.