Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.

Nombre de usuario
  

Contraseña
  





Buscar en los foros

(Búsqueda avanzada)

Estadísticas del foro
» Miembros: 560
» Último miembro: sagarpokale
» Temas del foro: 48
» Mensajes del foro: 50

Estadísticas totales

Usuarios en línea
Actualmente hay 15 usuarios en línea.
» 0 miembro(s) | 15 invitado(s)

Últimos temas
Energyatyco en #talentodi...
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
02-11-2017, 09:47 PM
» Respuestas: 0
» Vistas: 2,185
Crónica de una idea en el...
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
02-11-2017, 09:36 PM
» Respuestas: 0
» Vistas: 884
El mercado no se relaja c...
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
02-11-2017, 09:35 PM
» Respuestas: 0
» Vistas: 773
Termostatos inteligentes....
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
11-13-2016, 06:02 PM
» Respuestas: 0
» Vistas: 1,725
ELECTRICIDAD. MERCADO REG...
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
11-13-2016, 06:01 PM
» Respuestas: 0
» Vistas: 1,109
ALARMAS. AVISOS CORTE DE ...
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
10-30-2016, 10:13 AM
» Respuestas: 0
» Vistas: 1,353
LA MEJOR ELECTRICIDAD...L...
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
09-28-2016, 08:10 PM
» Respuestas: 0
» Vistas: 1,928
Ahorrar con el termo de a...
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
08-23-2016, 10:42 AM
» Respuestas: 0
» Vistas: 2,712
LAS IDEAS DE LAS STARTUPS
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
05-10-2016, 04:19 PM
» Respuestas: 0
» Vistas: 3,839
Apertura de portales o pu...
Foro: FORO DE DOMÓTICA. ATYCODOMO
Último mensaje por: atycocene
04-15-2016, 07:30 PM
» Respuestas: 0
» Vistas: 3,477

 
  VIADUCTOS
Enviado por: atycocene - 12-07-2014, 03:19 PM - Foro: ESTRUCTURAS - Sin respuestas

¿Estudio de impacto ambiental?


[Imagen: 15779308980_f9e012e749_c.jpg]

Imprimir

  CONFIGURAR EL PANEL DE AVISOS Y ÓRDENES. ATYCODOMO ) ) )
Enviado por: atycocene - 12-07-2014, 10:18 AM - Foro: FORO DE DOMÓTICA. ATYCODOMO - Sin respuestas

Ya está disponible la opción de asociar una orden y condicionar su ejecución a un valor determinado de los sensores que poseemos.

Así como establecíamos un aviso cuando por ejemplo la temperatura sobrepasaba cierto valor, ahora podremos decir que se apague la calefacción cuando se llegue a 20 grados, o por ejemplo que se desactive el enchufe cuando la intensidad llega a 1500 mAh.
En el nuevo panel de avisos y órdenes de Atycodomo ) ) ) http://atycocene.com/avisosordenes.php podremos establecer los valores mínimos y máximos que deseamos para que se produzca un aviso u ORDEN.

[Imagen: 15340731663_144d47f57c.jpg]

Por ejemplo, si queremos desactivar el relé 3 de la calefacción cuando el sensor 1 ( que en este caso lo hemos establecido como temperatura) llegue a 20 grados, marcaremos en la Orden 1 Desactivar 3.
De esta manera, cuando el sensor de temperatura llegue a 20 grados, la API enviará automáticamente una orden de desactivado del actuador 3.

Esto es verdaderamente útil para por ejemplo condicionar los encendidos y apagados de enchufes remotos con un valor de intensidad.
¿Por qué?
Pues porque estableceremos unos valores mínimos para apagar enchufes de aparatos en Stand By, es decir podemos efectuar apagados de electrodomésticos cuando la intensidad llegue a valores mínimos.
También condicionaremos valores máximos de intensidad para evitar posibles despistes al dejar encendidas luces, o planchas.

Imaginémonos que tenemos un circuito de usos varios, como por ejemplo el que nos lleva a la lavadora y plancha.
Si monitorizamos ese circuito nos encontraremos intensidades en las que poder actuar para enviar órdenes de apagado de enchufes. También podemos recibir avisos por correo electrónico advirtiéndonos de la situación.

[Imagen: 15940033316_51406241a0_z.jpg]

Gráfico de intensidades en un circuito de usos varios. Se puede observar que desde las 23 a la 7 ha estado sin monitorizar.

Imprimir

  INSTRUCCIONES PARA LA PERSONALIZACIÓN DEL CÓDIGO DE ATYCODOMO ) ) )
Enviado por: atycocene - 11-28-2014, 08:06 PM - Foro: FORO DE DOMÓTICA. ATYCODOMO - Sin respuestas

A continuación explicaremos los pasos a seguir para poner a funcionar nuestro Atycodomo ) ) ) :

1.- Descarga el código en el enlace siguiente:

http://www.atycocene.com/codigoatycodomo.html


2.- Regístrate en la web con tu correo electrónico y elige un nombre de usuario y una contraseña

http://www.atycocene.com/registro.html

[Imagen: 15841744536_486c54b54e.jpg]


3. Regístrate en la API de Atycodomo con el mismo correo electrónico, nombre de usuario y contraseña del registro de la web.

http://www.atycocene.com:3000/users/new

[Imagen: 15712466938_226977eedc.jpg]

4.- Una vez registrado en la API de Atycodomo, tendrás que crear dos canales, un canal de sensores y otro de órdenes, tal y como se indica a continuación. Cada uno de esos canales recibirá un número ID de Canal.

[Imagen: 15712561078_a3bb43d0e7.jpg]

5.- Entrando en cada uno de estos canales encontraremos las claves API de lectura y escritura, que copiaremos en el portapapeles para luego pegar en el panel de control.

[Imagen: 15900146255_60201606fd.jpg]

6.- Ahora nos dirigimos al panel de control http://www.atycocene.com/panel.php para poder pegar las claves de lectura y escritura. Pegaremos la clave de escritura del canal de órdenes y la clave de lectura del canal de sensores.

[Imagen: 15898170151_856ec07854.jpg]

7.- En este panel de control podemos cambiar los nombres de los elementos que tenemos conectados para así personalizarlos.

8.- Ahora, y antes de subir el código descargado al Arduino, debemos cambiar las claves de escritura y lectura que nos indica en los comentarios del código, así como poner nuestro correo electrónico para poder recibir los avisos, tal y como se indica a continuación:

[Imagen: 15869750212_6585b777fe.jpg]

Y eso es todo. El proceso de configuración ha terminado. A disfrutar...

Imprimir

  PRINCIPIANTES. ESQUEMA DE MONTAJE DE ATYCODOMO. APERTURA DE PORTAL.
Enviado por: atycocene - 11-28-2014, 12:23 PM - Foro: FORO DE DOMÓTICA. ATYCODOMO - Respuestas (1)

Vamos a dejar unas imágenes para que se pueda observar la forma de proceder en el control de apertura y cierre de portal con Atycodomo.

A ver si de esa forma el principiante, que está ya cansado de comprar sus mandos a distancia, se anima.

Decir en primer lugar que cualquiera de los dos códigos que aparecen en la sección de descargas son válidos.
http://www.atycocene.com/codigoatycodomo.html

En el específico para apertura y cierre de portal sólo se le ha añadido una instrucción para que active el pin digital y pueda cablearse desde el Arduino hasta el portal. El genérico emisor receptor necesita otros componentes adicionales de RF 433Mh.
Por lo que simplemente para la apertura de portal sugiero la forma cableada.

En primer lugar necesitamos estos componentes, y un relé que ya indicamos en el anterior tema.

[Imagen: 15681699589_649e6b91b5.jpg]

A partir de ahí subimos el código, y procedemos a cablear desde nuestro Atycodomo ) ) ).
El cableado es sencillo, y se utilizará a poder ser un cable tipo teléfono con conector RJ11, para así poder sacarlo desde el Arduino al relé de manera fácil.
[Imagen: 15711783297_fecd7e83fe.jpg]

Sólo nos falta ir hasta el punto final, que es el motor y ubicar el relé.
Os pongo a continuación una imagen para que observéis cómo sería el relé, cable telefónico con conector RJ11 y relé:

[Imagen: 15710285060_1cea1988a7.jpg]

Quedaría sólo conectar al router y listo.

[Imagen: 15277938613_368e31602d.jpg]

En esta última imagen veis que no existe nada más que el router y Atycodomo ) ) ) sin cableado adicional.
Esto se debe a que en este caso la conexión es inalámbrica hacia el portal.

Por motivos de seguridad os recomiendo el modelo cableado que es 100% seguro...aunque hoy en día casi es imposible no copiar una señal radiofrecuencia, aunque sea de código variable...

Estamos trabajando en una tarjeta Arduino enchufable para portal, con recepción inalámbrica, pero nos encontramos en la solución definitiva en la seguridad inalámbrica.

Además muy pronto veremos la aplicación en Android que aumentará la rapidez en la conexión.

Imprimir

  ACCIONAR TU PORTAL CON EL MÓVIL. Atycodomo ) ) )
Enviado por: atycocene - 11-27-2014, 12:25 PM - Foro: FORO DE DOMÓTICA. ATYCODOMO - Sin respuestas

A continuación vamos a mostrar los pasos necesarios para que puedas disponer de un accionamiento del portal del garaje con el móvil a través de Atycodomo ) ) ). Información y control del hogar. http://www.atycocene.com/atycodomo.html

Si te surgen dudas puedes consultarlas en este foro.


COMPONENTES NECESARIOS:

1.- Arduino Uno. (puede ser otro modelo)
[Imagen: ArduinoUno_R3_Front_450px.jpg]

2.- Arduino Ethernet.

[Imagen: ArduinoEthernetFront450px.jpg][Imagen: smile.png]

3.- Un adaptador de corriente 12 V para Arduino

4.- Un conector de red RJ45

5.- Un relé 5V

6.- Una caja de conexiones externa

Puedes ver un ejemplo de como queda finalmente en nuestra tienda:
http://www.atycocene.com/tienda/index.php?id_category=6&controller=category&id_lang=1

INSTRUCCIONES PARA SU INSTALACIÓN Y FUNCIONAMIENTO.

1.- Monta todos los componentes para llegar al Atycodomo ) ) )

[Imagen: 16-large_default.jpg]
2.- Sube el código que encontrarás en nuestra página de descargas de código:

http://www.atycocene.com/codigoatycodomo.html

3.- Regístrate y sigue las instrucciones para sustituir las claves API en tu código y poder disfrutar del servicio.

4.- Sólo tendrás que conexionar el relé con el contacto de tu portal. Esto es sencillo y lo dejamos para otro tema del foro.

Podrás utilizar y configurar un botón para abrir o cerrar el portal y acceder a la versión de escritorio
http://www.atycocene.com/atycodomoescritorio.php
o a la móvil
http://www.atycocene.com/atycodomomovils.php


A DISFRUTAR...

Imprimir

  TOCANDO EL CIELO
Enviado por: atycocene - 11-27-2014, 08:34 AM - Foro: EDIFICIOS - Sin respuestas

Estas dimensiones en el armado hacen suponer los resultados finales.

[Imagen: C-177.jpg]

"LOS ICONOS DE LA LÍNEA DEL HORIZONTE DE NUEVA YORK PRONTO TENDRÁN UN COMPAÑERO NUEVO. SITUADO EN LA PARK AVENUE ENTRE LAS CALLES 56 Y 57, EL EDIFICIO EN PARK AVENUE 432 SERÁ LA TORRE RESIDENCIAL MÁS ALTA EN EL HEMISFERIO OCCIDENTAL, UNA VEZ COMPLETADA SU CONSTRUCCIÓN EN 2015"...

[Imagen: image-1.jpg]
Si estás interesado en disfrutar de las vistas de este impresionante icono de la arquitectura, y de los grandes retos estructurales de nuestros tiempos, puedes hacerlo desde su página:


http://432parkavenue.com/?state=home

Imprimir

Smile Código Arduino para domótica a nivel de usuario
Enviado por: atycocene - 11-25-2014, 07:39 PM - Foro: FORO DE DOMÓTICA. ATYCODOMO - Sin respuestas

A continuación os dejo el código emisor y receptor de Atycodomo.
Si tenéis dudas de como instalarlo podéis consultarlo en este foro.
Espero que podáis utilizarlo y disfrutar de la domótica libre...[Imagen: smile.png]
En la sección de Domótica podéis registrar un nuevo usuario:
http://www.atycocene.com/atycodomo.html

El código del emisor Atycodomo es el siguiente


Código:
// ATYCODOMO ) ) ) INFORMACION Y CONTROL DEL HOGAR
// ATYCODOMO EMISOR
// DISEÑADO POR JOSE MANUEL LOURIDO
// http://www.atycocene.com/atycodomo.html
#include <VirtualWire.h>
#include <EEPROM.h>
#include <RemoteReceiver.h>
#include <RemoteTransmitter.h>
#include <Time.h>
#include <Udp.h>
#include <EthernetUdp.h>
#include <Ethernet.h>
#include <SPI.h>
#include <string.h>
#undef int()
#include <stdio.h>
#define ELECTRICITY_SENSOR A0 // pin de lectura de sensor DHT11
byte mac[] = {    0x90, 0xA2, 0xDA, 0x0D, 0xD5, 0xDC } ; // dirección mac
IPAddress server(80,36,75,107);// ip de ATYCODOMO
String claveescritura = "SUSTITUIR POR CLAVE ESCRITURA API DE TU CANAL DE ORDENES";
String readAPIKey = "SUSTITUIR POR CLAVE DE LECTURA DE CANAL DE SENSORES";
const int updateInterval = 10000;// INTERVALO EN MILISEGUNDOS DE LECTURA CON EL SERVIDOR ATYCODOMO
EthernetClient client;
//PARAMETROS SERVIDOR UDP PARA CONFIGURACIÓN DE LA HORA
unsigned int localPort = 8888;      // puerto local para escucha de los paquetes UDP
byte timeServer[] = {192, 53, 103, 108}; // SERVIDOR NTP time.nist.gov
const int NTP_PACKET_SIZE= 48; // NTP time stamp en los primeros 48 bytes del mensaje
byte packetBuffer[ NTP_PACKET_SIZE]; //buffer

EthernetUDP Udp;

char *found;
char buff[64];
int pointer = 0;
boolean found_status_200 = false;
boolean found_content = false;
int period1=180;
const int pinEMISOR=8;
int rf0=0;
int rf1=0;
int rf2=0;
int rf3=0;
int portal=0;
int rf5=0;
int rf6=0;
int rf8=0;
String temp="0";
String hume="0";
String inte="0";
String utemperatura="0";
String uhumedad="0";
String uintensidad="0";
int momentoInicio5;
int momentoFin5;
int smomentoInicio5;
int smomentoFin5;
int momentolimite;
int estadocero;
int estadouno;
int momentoInicio6;
int momentoFin6;
int smomentoInicio6;
int smomentoFin6;
int momentoInicioa;
int momentoFina;
int smomentoInicioa;
int smomentoFina;

int a=0;
int momentoAhora;
int estadocomecero=0;
int estadocomeuno=0;
int lein=0;
unsigned long time;
String temperaturas="0";
String humedads="0";
String intensidads="0";
String aviso;
int avis=0;
int digital_state[10];
int analog_state[24];
int analog_pins[] = {
 3, 5, 6, 9};
int digital_pins[] = {
 0, 1, 2, 3, 4, 5, 6, 7,};
long tinte=20000;
long lastConnectionTime = 0;
boolean lastConnected = false;
int resetCounter = 0;



// INICIO DE SETUP
void setup()
{
delay(120000);
Serial.begin(9600);


vw_set_ptt_inverted(true); // requerido para DR3100
vw_setup(2000);     // Bits por segundo
vw_set_rx_pin(5);//pin de recepcion(ojo con el pin 11 por defecto de emisor no funciona
vw_set_tx_pin(8);//pin de emisor

unsigned long epoch = 0;

estadocero = int(EEPROM.read(0));
estadouno = int(EEPROM.read(1));

if ((estadocero!=0) & (estadocero!= 1)) {
estadocero= 0;
}
if ((estadouno!= 0) & (estadouno!= 1)) {
estadouno= 0;
}


for (int i = 0; i < 8; i++){
pinMode(i, OUTPUT);
}

Ethernet.begin(mac);
 
Serial.print (estadocero);
Serial.print (estadouno);
do
{
//setupEthernet();
if (a>=3){
epoch=1300000001;
}

//ESTABLECIMIENTO DE HOTA NTP
delay (3000);
Udp.begin(localPort);
setSyncProvider(getNtpTime);
setSyncInterval(3600); //sincronizo con servidor UDP cada (60 min x 60seg =3600)
unsigned long epoch = getNtpTime(); //almaceno la hora en la variable epoch llamando a la funcion getNtpTime()

if (epoch>1300000000){
setTime(epoch);
break;
}

} while ((epoch<1300000000));

}
// FIN DE SETUP

//INICIO DE BUCLE
void loop()
{

 
if((!client.connected()) && (millis() - lastConnectionTime > updateInterval))
{
//control de memoria sram  
//Serial.print ( ("m") );
//Serial.println ( freeMemory () );
//control de memoria sram  
leeratycodomo();
}
 
//LEER DATOS DE SERVIDOR

if (client.available())
{
char c = client.read();
//Serial.print (c);
//asignando valores a on-0ff
if (c=='$') {
char dLine[9];
for (int i = 0; i < 10; i++){
dLine[i] = client.read();
}
//found_d = true;
//Serial.print("V:");
for (int i = 0; i < 10; i++){
digital_state[i] = (int) (dLine[i]-48);
//Serial.print(digital_state[i]);  
}
}
//fin asignando valores a on-0ff

//asignando valores a tiempos
if   (c=='@')    {
char aLine[13];
for (int i = 0; i < 48; i++){
aLine[i] = client.read();
}
//Serial.print("a:");    
//Serial.print(aLine);

for (int j = 0; j < 24; j++){
//char *temp = "000";
char *temp = "00";
temp[0] = aLine[j*2];
temp[1] = aLine[j*2 + 1];
//temp[2] = aLine[j*3 + 2];
analog_state[j] = (int) atoi(temp);
//Serial.print(analog_state[j]);
//Serial.print(",");
}
//clean_buffer();
}
   
//asignando valores a tiempos

//ACCIONANDO RELES

if (millis()>=100000) {
//accionado on-off portal

if ((digital_state[4]==0) && (estadocero==1)) {
for (int i=0; i <= 3; i++){
const char *msg = "p";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
delay(500);
}
estadocero=0;
EEPROM.write (0, estadocero);
estadouno=0;
EEPROM.write (1, estadouno);
portal = 0;
aviso= "F";
avis= 1;

delay(10000);

}


 
if ((digital_state[4]==1) && (estadouno==0)) {
for (int i=0; i <= 3; i++){
const char *msg = "p";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // espero hasta que el mensaje es enviado
delay(500);
}
estadocero=1;
EEPROM.write (0, estadocero);
estadouno=1;
EEPROM.write (1, estadouno);
portal = 1;
aviso= "E";
avis= 1;

delay(10000);

}

}
//fin accionado on-off portal


int momentoInicioa = (int (analog_state[16])*60) + int (analog_state[17]);
int momentoFina = (int(analog_state[18])*60) + int (analog_state[19]);

int momentoInicio6 = (int (analog_state[0])*60) + int (analog_state[1]);
int momentoFin6 = (int(analog_state[2])*60) + int (analog_state[3]);

int momentoInicio5 = (int(analog_state[4])*60) + int (analog_state[5]);
int momentoFin5 = (int(analog_state[6])*60) + int (analog_state[7]);

int smomentoInicioa = (int (analog_state[20])*60) + int (analog_state[21]);
int smomentoFina = (int (analog_state[22])*60) + int (analog_state[23]) ;

int smomentoInicio6 = (int (analog_state[8])*60) + int (analog_state[9]);
int smomentoFin6 = (int (analog_state[10])*60) + int (analog_state[11]) ;

int smomentoInicio5 = (int (analog_state[12])*60) + int (analog_state[13]);
int smomentoFin5 = (int (analog_state[14])*60) + int (analog_state[15]);


int momentoAhora = (hour()*60 +  minute());


// TRANSMITIR RF ENCHUFE RF 1 ENCHUFE CONTROL DOMOTICO
if (digital_state[1]==1) {

if(((momentoInicioa<=momentoAhora) && (momentoAhora<momentoFina))||((smomentoInicioa<=momentoAhora) && (momentoAhora<smomentoFina))){

if (rf1==0) {
cli();
sei();

unsigned long A = 492004;

delay(2*period1);
RemoteTransmitter::sendCode(pinEMISOR,A,period1,3);
delay(10000);


rf1=1;
aviso= "I";
avis= 1;

}  
}

else {

if (rf1==1) {
cli();
sei();
delay(2*period1);

unsigned long A  = 492006;

RemoteTransmitter::sendCode(pinEMISOR,A,period1,3);
delay(5000);


rf1=0;  
aviso= "J";
avis= 1;

}
         
}

}

if (digital_state[1]==0) {
if (rf1==1) {
cli();
sei();
delay(2*period1);

unsigned long A = 492006;
RemoteTransmitter::sendCode(pinEMISOR,A,period1,3);
delay(5000);
rf1=0;
aviso= "J";
avis= 1;
}    
}

// FIN TRANSMITIR RF ENcHUFE RF 1 ENCHUFE CONTROL DOMOTICO



// CODIGO TEMPORIZADO DE RELE NUMERO 5 CON INICIO Y FIN A HORA DETERMINADA    
if (digital_state[5]==1) {
if(((momentoInicio5<=momentoAhora) && (momentoAhora<momentoFin5)) || ((smomentoInicio5<=momentoAhora) && (momentoAhora<smomentoFin5))){

if (rf5==0) {

for (int i=0; i <= 3; i++){
const char *msg = "e";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(500);
}

rf5=1;
aviso= "C";
avis= 1;
delay(5000);
}
}

else {

if (rf5==1) {

for (int i=0; i <= 3; i++){
const char *msg = "f";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(500);
}

rf5=0;
aviso= "D";
avis= 1;
delay(5000);
}  
 
}
         
}

if (digital_state[5]==0) {

if (rf5==1) {

for (int i=0; i <= 3; i++){
const char *msg = "f";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(500);
}
rf5=0;
aviso= "D";
avis= 1;
delay(5000);
}
}
// FIN CODIGO TEMPORIZADO DE RELE NUMERO 5 CON INICIO Y FIN A HORA DETERMINADA      



//temporizar rele 6
if (digital_state[6]==1) {

if(((momentoInicio6<=momentoAhora) && (momentoAhora<momentoFin6))||((smomentoInicio6<=momentoAhora) && (momentoAhora<smomentoFin6))){

if (rf6==0) {

for (int i=0; i <= 3; i++){
const char *msg = "g";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(500);
}
rf6=1;
aviso= "A";
avis= 1;
delay(5000);
}  
}

else {

if (rf6==1) {
for (int i=0; i <= 3; i++){
const char *msg = "h";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(500);
}
rf6=0;
aviso= "B";
avis= 1;
delay(5000);
}  
}
         
}

if (digital_state[6]==0) {

if (rf6==1) {

for (int i=0; i <= 3; i++){
const char *msg = "h";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(500);
}
rf6=0;
aviso= "B";
avis= 1;
delay(5000);
}    
}

// FIN CODIGO TEMPORIZADO DE RELE NUMERO 6 CON INICIO Y FIN A HORA DETERMINADA(HORA DE RIEGO)      

// TRANSMITIR RF A ARDUINO Y PIN DIGITAL 13 DE RECEPTOR

if (digital_state[8]==1) {
if (rf8==0) {
for (int i=0; i <= 1; i++){
const char *msg = "a";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(500);
}
rf8=1;
aviso= "O";
avis= 1;
delay(5000);
}
}

if (digital_state[8]==0) {
if (rf8==1) {
for (int i=0; i <= 1; i++){
const char *msg = "c";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(5000);
}
rf8=0;
aviso= "P";
avis= 1;
delay(5000);
}
}

// FIN TRANSMITIR RF A ARDUINO Y PIN DIGITAL 13 DE RECEPTOR


// TRANSMITIR RF ENcHUFE RF 2

if (digital_state[2]==1) {
if (rf2==0) {
cli();
sei();
delay(2*period1);
unsigned long A  = 492022;// EL CODIGO DEPENDE DE CADA ENCHUFE RADIOFRECUENCIA
RemoteTransmitter::sendCode(pinEMISOR,A,period1,3);
delay(5000);
rf2=1;
aviso= "K";
avis= 1;
}
}

if (digital_state[2]==0) {
if (rf2==1) {
cli();
sei();
delay(2*period1);
unsigned long A  = 492024;
RemoteTransmitter::sendCode(pinEMISOR,A,period1,3);
delay(5000);
rf2=0;
aviso= "L";
avis= 1;
}
}


// TRANSMITIR RF ENcHUFE RF 3

if (digital_state[3]==1) {
if (rf3==0) {
cli();
sei();
delay(2*period1);
unsigned long A  = 491914;
RemoteTransmitter::sendCode(pinEMISOR,A,period1,3);
delay(5000);
rf3=1;
aviso= "M";
avis= 1;
}
}

if (digital_state[3]==0) {
if (rf3==1) {
cli();
sei();
delay(2*period1);
unsigned long A  = 491916;
RemoteTransmitter::sendCode(pinEMISOR,A,period1,3);
delay(5000);
rf3=0;
aviso= "N";
avis= 1;
}
}

//FIN TRANSMITIR RF

//FIN ACCIONANDO RELES

//TERMINA LEER DATOS DE SERVIDOR

}


// ACTUALIZA LOS DATOS DE TEMPERATURA Y HUMEDAD
if(!client.connected() && (millis() - lastConnectionTime > updateInterval))
{  


// RECIBE TEMPERATURA Y HUMEDAD SENSOR INALAMBRICO


if ((minute() ==0) || (minute() ==15) || (minute() ==30) || (minute() ==45))
{
inte=intensidad();

delay(1000);
 temp=temperatura();

delay(1000);
hume=humedad();


lein=1;
}
else
{
lein=0;
}


// FIN RECEPCION TEMPERATURA Y HUMEDAD SENSOR INALAMBRICO



// CONFECCION DE LOS AVISOS

if ((avis==1) && (lein==0)) {
avisoatycodomo(aviso);
}

// FIN CONFECCION DE LOS AVISOS


else
{
 

if (((inte != "0")&&(temp != "0")&&(hume != "0")) &&((inte != uintensidad)||(temp != utemperatura)||(hume != uhumedad)) &&  (lein==0))

{

uhumedad=hume;
utemperatura=temp;
uintensidad=inte;

temperaturas= String(temp);
humedads= String(hume);
intensidads=String(inte);


String datossensores=("field1="+temperaturas+"&field2="+humedads+"&field3="+intensidads);

escribiratycodomo(datossensores);

}
 
}
}
 


// DESCONECTANDO DE SERVIDOR

if (!client.connected() && lastConnected)
{
//Serial.println("d");
client.stop();
}
lastConnected = client.connected();
}
//TERMINA EL BUCLE


void avisoatycodomo(String aviso)
{
if (client.connect(server, 3000))
{

   
client.print("GET /mailer/avisoatycodomo?[user]login=c1447@coaatac.com&[aviso]=");//SUSTITUYE EL CORREO POR EL CORREO CON EL QUE TE HAS REGISTRADO
client.print(aviso+" HTTP/1.1\n");
client.print("Host: 80.36.75.107\n");
client.print("Connection: close\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print("\n\n");

lastConnectionTime = millis();
resetCounter = 0;
   
avis=0;

}
}

void escribiratycodomo(String datossensores)
{
 
if (client.connect(server, 3000))
{
   
       
client.print("GET /update?key=CLAVEAPI&");// SUSTITUYE CLAVEAPI POR LA CLAVE DE ESCRITURA DE TU CANAL DE SENSORES
client.print(datossensores+" HTTP/1.1\n");
   
client.print("Host: 80.36.75.107\n");
client.print("Connection: close\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print("\n\n");
   
lastConnectionTime = millis();
resetCounter = 0;
   
 
}
}

void leeratycodomo()
{
 
if (client.connect(server, 3000))
{

client.print("GET /channels/2/feed/last.csv?key= HTTP/1.1\n"); // SUSTITUYE EL NUMERO 2 POR EL CANAL CORRESPONDIENTE DE ORDENES
client.print("Host: 80.36.75.107\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+readAPIKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print("0");
client.print("\n\n");

lastConnectionTime = millis();
resetCounter = 0;
 
if (!client.connected() && lastConnected)
{
Serial.println();
Serial.println("...disc");
Serial.println();
client.stop();
}
}
   
else
{
Serial.println("Con Failed.");  
Serial.println();
resetCounter++;
if (resetCounter >=2 )
{
resetEthernetShield();
}
lastConnectionTime = millis();
}
 
}


void resetEthernetShield()
{
Serial.println("Reset");  
Serial.println();
client.stop();
delay(1000);
Ethernet.begin(mac);
delay(1000);
clean_buffer();
}

void clean_buffer() {
pointer = 0;
memset(buff,0,sizeof(buff));
}

//ESTABLECIMIENTO DE HORA del servidor NTP

unsigned long getNtpTime(){
sendNTPpacket(timeServer); // enviar paquete NTP al servidor de hora
delay(5000);// esperar para ver si hay respuesta
 
if ( Udp.parsePacket() ) {
Udp.read(packetBuffer, NTP_PACKET_SIZE); // lee el paquete dentro del buffer
 
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);  
// la hora obtenida son los segundos desde 1 de Enero de 1900
unsigned long secsSince1900 = highWord << 16 | lowWord;  
//Convertir la hora recibida al formato en que trabajan las funciones (hora Unix, 1 de enero de 1970), En segundos, son 2208988800:
const unsigned long seventyYears = 2208988800UL;    
//restar 70 ANOS
unsigned long epoch = secsSince1900 - seventyYears;  
// retornar Unix time: sumando dos horas por la diferencia horaria
return epoch+7200;
}
a=a+1;
}


//Funcion para enviar el paquete NTP


unsigned long sendNTPpacket(byte *address)

{

memset(packetBuffer, 0, NTP_PACKET_SIZE);

packetBuffer[0] = 0b11100011;
packetBuffer[1] = 0;
packetBuffer[2] = 6;
packetBuffer[3] = 0xEC;

packetBuffer[12]  = 49;
packetBuffer[13]  = 0x4E;
packetBuffer[14]  = 49;
packetBuffer[15]  = 52;

Udp.beginPacket(address, 123); //NTP respuesta en el puerto 123
Udp.write(packetBuffer, NTP_PACKET_SIZE);
Udp.endPacket();
}

//FIN ESTABLECIMIENTO DE HORA




String temperatura() {
// RECIBE TEMPERATURA SENSOR INALAMBRICO
for (int i = 0; i <= 1; i++) {
const char *msg = "r";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
//delay(200);
}

vw_setup(2000);     // Bits por sec
vw_rx_start();       // empieza la recepcion PLL
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

vw_wait_rx_max(2000);
if (vw_get_message(buf, &buflen)) // Non-blocking
{
temp = "";
for (int i = 0; i < buflen; i++)
{
temp = temp + String (char(buf[i]));
}
}

vw_rx_stop();
clean_buffer();
return temp;
}
// FIN RECEPCION TEMPERATURA SENSOR INALAMBRICO




// RECIBE HUMEDAD SENSOR INALAMBRICO
String humedad() {

for (int i = 0; i <= 1; i++) {
const char *msg = "m";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
//delay(200);
}

vw_setup(2000);
vw_rx_start();
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

vw_wait_rx_max(2000);
if (vw_get_message(buf, &buflen))
{
hume = "";
for (int i = 0; i < buflen; i++)
{
hume = hume + String (char(buf[i]));
}
}
vw_rx_stop();
clean_buffer();
return hume;
}
// FIN RECEPCION HUMEDAD SENSOR INALAMBRICO

// RECIBE INTENSIDAD SENSOR INALAMBRICO
String intensidad() {

for (int i = 0; i <= 1; i++) {
const char *msg = "z";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();

}

vw_setup(2000);
vw_rx_start();
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

vw_wait_rx_max(2000);
if (vw_get_message(buf, &buflen))
{
inte = "";
for (int i = 0; i < buflen; i++)
{
inte = inte + String (char(buf[i]));
}
}
vw_rx_stop();
clean_buffer();
return inte;
}
// FIN RECEPCION INTENSIDAD SENSOR INALAMBRICO

El código para el receptor es el que sigue:

Código:
// ATYCODOMO ) ) ) INFORMACION Y CONTROL DEL HOGAR
// ATYCODOMO RECEPTOR
// DISEÑADO POR JOSE MANUEL LOURIDO
// http://www.atycocene.com/atycodomo.html
#include <VirtualWire.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
#define ELECTRICITY_SENSOR A0 // PIN ANALOGICO AL QUE SE CONECTA EL SENSOR
#include <DHT.h>
#define DHTPIN 7    // Establecemos la entrada digital en la que tenemos
// conectada la salida data del sensor.
#define DHTTYPE DHT11    // Definimos el sensor que vamos a usar DHT 11
DHT dht(DHTPIN, DHTTYPE);   // Configuramos la entrada y el sensor



const int pinEMISOR=8;
int period1=180;

float amplitude_current;
float effective_value;
int sensorValue;
int sensorMax=0;
int sensorint;
int sensor_max;
//medir intensidad corriente

int v=0;
int t=0;
int h=0;
int inmed=0;
int in=0;
int intot=0;
int utemperatura;
int uhumedad;
int uintensidad;

long tinte=20000;

void setup()


{

delay(1800);
Serial.begin(9600);


 
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(13, OUTPUT);

 Serial.begin(9600);
 Serial.println("setup");


 vw_set_ptt_inverted(true); // SE REQUIERE PARA DR3100
 vw_setup(2000);     // Bits por sec
 vw_set_tx_pin(8);
 // vw_set_rx_pin(5);//pin de recepcion es el pin 11 por defecto. Descomenta la linea si quieres poner otro pin
 vw_rx_start();       // comienza la recepcion
}

void loop()
{



int h = dht.readHumidity();
int t = dht.readTemperature();



 vw_rx_start();

 uint8_t buf[VW_MAX_MESSAGE_LEN];
 uint8_t buflen = VW_MAX_MESSAGE_LEN;

 if (vw_get_message(buf, &buflen))
 {
   int i;


      for (i = 0; i < buflen; i++)
   {

     //ACCIONA EL RELÉ Nº 4 (PORTAL) 1,5 SEGUNDOS
     if (buf[i] == 'p') {
 
       digitalWrite(4, HIGH);
       delay (1500);
       digitalWrite(4, LOW);
 
   delay (25000);  

 }
     //ACCIONA EL RELÉ Nº 5(COMEDERO) 5 SEGUNDOS
     if (buf[i] == 'b') {
       digitalWrite(5, HIGH);
       delay (5000);
       digitalWrite(5, LOW);
     }

     //ACCIONA EL RELÉ NUMERO 5
     if (buf[i] == 'e') {
       digitalWrite(5, HIGH);
       delay (100);
     }
     if (buf[i] == 'f') {
       digitalWrite(5, LOW);
       delay (100);
     }

     //ACCIONA EL RELÉ NUMERO 6
     if (buf[i] == 'g') {
       digitalWrite(6, HIGH);
       delay (100);
     }
     if (buf[i] == 'h') {
       digitalWrite(6, LOW);
       delay (100);
     }

     //ACCIONA EL RELÉ DE PRUEBA Nº 13

     if (buf[i] == 'a') {
       digitalWrite(13, HIGH);
Serial.print("Recibe: ");
       delay (100);
     }

     if (buf[i] == 'c') {
       digitalWrite(13, LOW);
       Serial.print("Recibe: ");
       delay (100);
     }





if (buf[i] == 'r') {

utemperatura = t;

//ENVIO DE TEMPERATURA CON EMISOR BUENO
char msg[10];
sprintf (msg, "%i",t);
for (int i=0; i <= 1; i++){
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // espero a enviar mensaje
delay(500);
}
Serial.print("Temperatura enviada");
}



if (buf[i] == 'm') {

uhumedad = h;

//ENVIO DE TEMPERATURA CON EMISOR BUENO
char msg[10];
sprintf (msg, "%i",h);
for (int i=0; i <= 1; i++){
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(500);
}
Serial.print("Humedad enviada");
}

if (buf[i] == 'z') {


uintensidad = in;

//ENVIO DE INTENSIDAD CON EMISOR BUENO
char msg[10];
sprintf (msg, "%i",inmed);
for (int i=0; i <= 1; i++){
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(500);
}
Serial.print("intensidad enviada");
inmed=0;
intot=0;
v=0;
}



}


}

else

{
if (millis()>=tinte) {
sensor_max = getMaxValue();
amplitude_current=(float)sensor_max/1024*5/800*2000000;
effective_value=amplitude_current/1.414;
int in=effective_value;
v=v+1;
intot=abs(in)+abs(intot);
inmed= abs(intot/v);

Serial.print("Intensidad: ");
Serial.print(in);
Serial.print("Inte med: ");
Serial.print(inmed);
tinte=millis()+30000;
}


}





}

//medir intensidad corriente
void pins_init()
{
pinMode(ELECTRICITY_SENSOR, INPUT);
}



int getMaxValue()
{
int sensorValue;
int sensorMax = 0;
uint32_t start_time = millis();
while((millis()-start_time) < 1000)//ejemplo para 1000ms
{
sensorValue = analogRead(ELECTRICITY_SENSOR);
if (sensorValue > sensorMax)
{

sensorMax = sensorValue;
}
}
return sensorMax;
}
//medir intensidad corriente

También podéis descargarlo en:
http://www.atycocene.com/codigoatycodomo.html

Imprimir

  Atycodomo. Información y control del hogar
Enviado por: atycodomo - 11-25-2014, 01:30 PM - Foro: FORO DE DOMÓTICA. ATYCODOMO - Sin respuestas

Empezamos en un nuevo tema del reciente estrenado foro de Atyco Cene, relativo a Domótica, arquitectura y construcción.
Espero que sea de interés.

Imprimir