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
-
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)
-
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.
-
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)
-
Onde está a datasheet disso? Isso parecer ter opto-acopladores.
-
e o jumper que tem parece ser para comutar o comum: se é o VCC ou se é o GND
-
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.
-
Conforme tens só vai ficar ativo o relé às 19h, quando passa para as 20h ele é desligado.
-
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?
-
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 !!!
-
E será que a hora está correta? consegues saber a hora em tempo real?
-
E será que a hora está correta? consegues saber a hora em tempo real?
Sim está correcta , ela aparece no LCD
-
nunca mexi em arduino, mas o pin do rele está bem definido como "0" ?
-
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 ;)
-
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 !!!
-
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.