Connexió d'un relé a un Linksys WRT54G

Connexió per a un releEl processador dels Linksys, té alguns pins GPIO lliures o bé que un cop inicialitzat l'equip ja no serveixen per res. S'hi poden fer algunes coses força sofisticades (adquirir temperatures i lectures analògiques si s'implementa un bus I2C per soft, per exemple), però com a primera aproximació, s'hi pot connectar un relé per tal d'actuar en remot sobre una càrrega... ja sigui un altre router per tal de poder-lo resetejar, un calefactor, un ventilador, etc...

El circuit del rele és un transistor NPN BC237 o similar amb una resistència de base de 2K2 amb l'emissor a massa (0 V) i el col·lector a un pin del relé. L'altre pin del relé va a 12V. S'inclou un diode 1N4007 o similar entre els pins del rele per tal d'evitar les tensions induïdes en la commutació del relé:

            +12V
               ^
               |
          ----------
          |         |
        ----      -----
       |---|       / \
        ----       ---
          | Rele    |  Díode
           ----------
                |
                \
                 \
                  \        Resistència
                   |     ------
       Transistor  |----|      |---------------> Al pin GPIO5
                   |     ------
                  /
                 /
                \/
                |
                |
               ----
                0V

El circuit es connecta tal i com es veu a la foto. El cable vermell son els 12V, el del seu costat la massa, i el que queda més apartat, és la sortida GPIO5 del uProcessador del router.

Tant el pin de GPIO 5 com de 12V i 0V si no m'equivoco són al mateix lloc en totes les versions del router per sota de la 5...

Compte, que durant la inicialització del sistema, aquest pin passa per uns instants a nivell alt i fa actuar el relé. Si no es desitja aquest comportament, s'hauria de complicar una mica el circuit.

Un petit programa per poder controlar aquest relé:

#include <stdio.h>
#include <fcntl.h>

#define RELE 32	// GPIO 5
#define REVISIO "0.8"
#define INSTRUCCIONS "Funcionament: rele <on | off>"
#define ESTAT_ON "Rele ON"
#define ESTAT_OFF "Rele OFF"

int main(int argc, char **argv) {
	
	unsigned int uValor;
	int hOutEnable, hOut;

	printf("WRT54G - Control de rele rev.%s\n",REVISIO);
	printf("Pere R. Franquesa <pere__a__franquesa.com>\n\n");
	if (argc!=2) {
		puts(INSTRUCCIONS);
		exit(1);
	}

	if (!strcmp(argv[1],"on")||!strcmp(argv[1],"off")) {

		hOutEnable=open("/dev/gpio/outen",O_RDWR);
		read(hOutEnable, &uValor, sizeof(uValor));
		uValor |= RELE;
		write(hOutEnable, &uValor, sizeof(uValor));

		hOut=open("/dev/gpio/out",O_RDWR);
		read(hOut, &uValor, sizeof(uValor));
		if (!strcmp(argv[1],"on")) {
			uValor|=RELE; 
			puts(ESTAT_ON);
		} else {
			uValor&=~RELE;
			puts(ESTAT_OFF);
		}
		write(hOut, &uValor, sizeof(uValor));

	} else puts(INSTRUCCIONS);

	return 0;
}

Si algú el vol fer servir i no disposa de les eines per compilar-lo, el pot descarregar d'aquí.
Per provar el programa sense haver-lo de posar dins el firmware del router, es pot fer el següent:

1.- Posar en un servidor ftp l'arxiu rele i donar permisos.
2.- Entrar al router que te el circuit del rele
3.- cd /tmp
4.- wget ftp://usuari:password@ip_servidor_ftp/rele
5.- chmod 700 rele
6.- Activar i desactivar el rele amb les instruccions "./rele on" i "./rele off"

Opcions de visualització de comentaris

Escull com vols veure els comentaris i clica 'Desa configuració' per activar els canvis.

Cal obrir el trasto ?

Hola,

Per fer això s'ha d'obrir l'aparell oi?

Carles

Si que cal...

No és massa complicat, el que s'ha de vigilar és que alguna de les versions crec que porta cargols sota les potes de goma (segur que la 2 i la 2.2 no perquè n'he desmuntat d'aquestes) Si la versió no porta cargols, n'hi ha prou amb estirar del frontal de la ràdio (va fort).

He actualitzat la foto del connexionat per incloure-hi les ràdios versió 2 i les que van de la 2.2 a la darrera 3.x (les 4 són molt diferents).

També has de fer sortir els cables cap a l'exterior de la ràdio per tal de posar el relé fora o bé deixar el relé dins i treure els cables de la càrrega cap a fora...

WatchDog

Hola,

Jo ja tenia una idea per l'estil, però no volia obrir el linksys per no perdre la garantia. En vaig fer un desenvolupament, per controlar la senyal de la xarxa:
http://anoia.guifi.net/Interruptorde Vigilància

La meva idea era crear un watchdog. Fer un petit esquema elèctric amb un condensador que s'anés descarregant per una resistència i que un programa en background al linksys actives una sortida periòdicament que tornés a carregar el condensador. Si per alguna cosa, el linksys es bloqueja, deixaria d'enviar la senyal, i al descarregar-se el condensador s'activaria el relé automàticament.

Salut !!!

WatchDog

Molt bona idea. Jo sóc una mica més bruto...Eye-wink
La conclusió que heu tret de la connexió Ethernet, és més o menys correcta, treballa "per corrent" de fet, va acoblada amb transformador, i necessita una càrrega per tal de poder-se obtenir una tensió, normalment, l'acoblament amb altres circuits es fa amb un trafo (doble, un per TX i l'altre per RX), un parell de resistències i un condensador (U7, R5, R6 i C10 per exemple en aquest esquema. De totes maneres, en fer servir el circuit en local es simplifica la llista de components en posar-hi el transistor amb una resistència de base prou alta.

Funciona!

Amb el permis del Xevi faig un copy&paste del missatge de la llista:
Avui he tingut que fer servir l'invent d'en Pere Franquesa per resetejar les ràdios de Victoria, ja que VicAusatelSud tornava a estar OUT (ja li vaig canviar la font d'alimentació i continua igual, al final tindré que provar una altre radio), llavors per no tenir que enfilar-me he anat a la radio 10.138.10.161 que te carregat el programa de reset (és una mica diferent del que descriu en Pere ja que el varem tenir que modificar i enganxar-ho al led del DMZ) i he fet des de la carpeta /tmp un ./reset i ja estat.
A veure si així m'estalvio de fer cames Eye-wink Ara si veieu abans que jo que VicAusatelSud esta caiguda ho podeu provar si així torna a la vida abans de engegar el backup a través del Cepa.
Aquest dies el provem i si funciona correctament sempre és pot millorar perquè controli tot sol el Supernode Sticking out tongue

Jo he pogut entrar per Nord a 10.138.10.161
Després:
cd /tmp
./reset

Codi del programa de reset

Per si a algú li interessa el programa modificat és:

#include <stdio.h>
#include <fcntl.h>

#define RELE 128	// 32 = GPIO 5 - 128 = GPIO 7 DMZ
#define REVISIO "0.9"

int main(int argc, char **argv) {
	
	unsigned int uValor;
	int hOutEnable, hOut;

	printf("WRT54G - Reset amb control relé DMZ rev.%s\n",REVISIO);
	printf("Pere R. Franquesa <pere@franquesa.com>\n\n");

	hOutEnable=open("/dev/gpio/outen",O_RDWR);
	read(hOutEnable, &uValor, sizeof(uValor));
	uValor |= RELE;
	write(hOutEnable, &uValor, sizeof(uValor));

	hOut=open("/dev/gpio/out",O_RDWR);
	read(hOut, &uValor, sizeof(uValor));

	uValor&=~RELE;
	write(hOut, &uValor, sizeof(uValor));

	sleep(10);

	uValor|=RELE; 
	write(hOut, &uValor, sizeof(uValor));	

	close(hOutEnable);
	close(hOut);

	return 0;

}

Es pot descarregar en codi font i també compilat d'aquí.

pàgina generada en: 0.583 segons.