Seguridad Wireless - Wifi

Equipos y materiales => Puntos de acceso, routers, switchs y bridges => Openwrt & LEDE => Mensaje iniciado por: peperfus en 11-10-2017, 11:36 (Miércoles)

Título: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 11-10-2017, 11:36 (Miércoles)
Hola, no me voy a extender mucho, que a veces le doy demasiado al teclado.

Me parecía muy interesante el tema de conectar relés a los GPIOS del router para poder encender y apagar, por ejemplo; la luz del acuario.
Por favor, corregidme si me equivoco en algo.


Ok, voy al grano:
Voy a intentar 2 proyectos: el primero más sencillo, que creo que voy a saber hacer prácticamente sin problemas, pero el segundo más avanzado y necesitaré ayuda para entender y aprender.

Lo primero será conectar un simple relé directamente a los GPIOS del router (un GPIO) y alimentarlo con 5V y GND, para encender y apagar cualquier aparato eléctrico en general. Más adelante, lo que me gustaría aprender es a conectarle un bus expansor PCF8574, para poder, con esas mismas salidas (y añadiendo una más), conectar al expansor varios relés independientes.

PRIMER PROYECTO: Conexión de un simple RELÉ a los GPIOS:
Material que voy a utilizar:

*) El relé que pedí,  por lo visto no lleva protección. Luego me enteré de que los recomendables son los optoacoplados, que llevan una especie de protección, por si algo falla, para que no te rompa el aparatito. Tengo pensado pedirme algunos de estos también para cuando haga algo más definitivo.


Las primeras dudas que me surgen, a bote pronto son:
El relé se alimenta a 5V, que los puedo sacar del router. Ahora bien: ¿Qué voltaje necesita la señal para activar y desactivar el relé? ¿Sirven los 3,3V de los GPIOS? Y otra pregunta: Veo que los relés llevan 3 huecos para cablear (me refiero en la salida). 2 Serán para conectar el interruptor en serie a un cable, pero ¿para qué es el otro?
(https://s1.postimg.org/48kpd4anz3/RELE.png)

Gracias y cuando tenga el material, pondré fotos y (supuestos) avances.
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 11-10-2017, 13:58 (Miércoles)
Hola, no me voy a extender mucho, que a veces le doy demasiado al teclado.

Me parecía muy interesante el tema de conectar relés a los GPIOS del router para poder encender y apagar, por ejemplo; la luz del acuario.
Por favor, corregidme si me equivoco en algo.

  • Un relé es una especie de interruptor, pero en vez de accionarse manualmente, se acciona enviándole una señal eléctrica.

Ok, voy al grano:
Voy a intentar 2 proyectos: el primero más sencillo, que creo que voy a saber hacer prácticamente sin problemas, pero el segundo más avanzado y necesitaré ayuda para entender y aprender.

Lo primero será conectar un simple relé directamente a los GPIOS del router (un GPIO) y alimentarlo con 5V y GND, para encender y apagar cualquier aparato eléctrico en general. Más adelante, lo que me gustaría aprender es a conectarle un bus expansor PCF8574, para poder, con esas mismas salidas (y añadiendo una más), conectar al expansor varios relés independientes.

PRIMER PROYECTO: Conexión de un simple RELÉ a los GPIOS:
Material que voy a utilizar:
  • Router, obviamente, con openwrt y cables soldados a sus GPIOS, sobresaliendo de la carcasa.
  • Relé 5V, este es el que he pedido* (http://www.ebay.es/itm/331354379225?_trksid=p2045573.m570.l6004&_trkparms=gh1g%3DI331354379225.N41.S2.R2.TR2)
  • Finalmente, un multímetro para medir tensión en la salida del relé y comprobar que abre y cierra.

*) El relé que pedí,  por lo visto no lleva protección. Luego me enteré de que los recomendables son los optoacoplados, que llevan una especie de protección, por si algo falla, para que no te rompa el aparatito. Tengo pensado pedirme algunos de estos también para cuando haga algo más definitivo.


Las primeras dudas que me surgen, a bote pronto son:
El relé se alimenta a 5V, que los puedo sacar del router. Ahora bien: ¿Qué voltaje necesita la señal para activar y desactivar el relé? ¿Sirven los 3,3V de los GPIOS? Y otra pregunta: Veo que los relés llevan 3 huecos para cablear (me refiero en la salida). 2 Serán para conectar el interruptor en serie a un cable, pero ¿para qué es el otro?
(https://s1.postimg.org/48kpd4anz3/RELE.png)

Gracias y cuando tenga el material, pondré fotos y (supuestos) avances.
El relé puede ir conmutado a un interruptor estándar, para que puedes encender las luces de casa de manera manual y luego apagar con el router o viceversa...
O conmutar a lo que quieras a tipo condicional y analógico. El cable de entrada es el central, la salida conmuta una a ON según este gpio a 0 o a 1. Es decir, siempre habrá salida en una de las dos bocas restantes.

De relé hemos hablado mucho en el hilo de edudi "gpios para darle a usos al router como la raspberry"

Lo más interesante en este tema es el Expansor I2C que con solo dos gpio sacas hasta 64 salidas para relé entre otras cosas y eso ya da para mucho.

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: raphik en 11-10-2017, 14:23 (Miércoles)
Los 3.3V de los GPIOs deben bastar para activar el relé. De hecho, el umbral de activación ronda los 2V. La energía que consume la bobina del relé no la proporciona la entrada IN, sino las entradas VCC y GND, que deberán proporcionar la suficiente energía.

En la parte de potencia, donde se conectan los cables gordos, hay TRES bornes con tornillos rotulados con las letras NC, C y NO. Cuando el relé está desactivado, los bornes C y NC están internamente conectados. Contrariamente, cuando el relé está activado, son los bornes C y NO los que están conectados.

Con el relé desactivado, las siglas NO (Normally Open) y NC (Normally Closed) describen los estados de los bornes con respecto de la entrada común C.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 11-10-2017, 21:08 (Miércoles)
Migro aquí el post que tenía en LCD I2C.

Hace unos días a raíz de este hilo de raphik (https://foro.seguridadwireless.net/openwrt/proyecto-gpio-manejo-de-una-pantalla-lcd-via-bus-i2c/) se me ocurrió la idea de montar un circuito de relés y botones bajo el bus I2C, poco a poco iré agregando sensores y alguna pantalla, es increíble la versatilidad y capacidad de expansión que tiene.
Soy bien consiente de mi carencia de conocimientos en todo esto, pero con pasión, empeño e imaginación lo voy sacando. (mas que nada, confío en la ayuda de la gente de éste foro  ;) )

Los módulos de expansión I2C que estoy usando son los PCF8574, conectados en paralelos, uno tienes salidas a "8" relé y el otro tiene "8" entradas de señal de un teclado tactil.
El modo de instalar los módulos están descritos  =>por raphik aquí en este hilo <= (https://foro.seguridadwireless.net/openwrt/proyecto-gpio-manejo-de-una-pantalla-lcd-via-bus-i2c/).

(http://s9.tinypic.com/n6dppf_th.jpg)  (http://oi63.tinypic.com/n6dppf.jpg)    (http://s9.tinypic.com/zwbb86_th.jpg) (http://oi65.tinypic.com/zwbb86.jpg)

Como los módulos de expansión se han de trabajar en hexadecimal o decimal uso un soft conversor de base bidireccional "GHex" (dec, Octal, hex, binario y ASCII... recomendable para familiarizarse con todo esto)

raphik había comentado esto, confirmando una sospecha que ya tenía...
Citar
Si lo que queremos en realidad es activar una o más patillas dejando invariable el resto, no queda otra que tirar del operador binario OR. Primero habría que conocer el estado previo de todas las patillas, luego habría que calcular el valor a enviar y por último enviarlo.

Esta parte la solucioné de esta manera creando un "nuevo device" (que crea una nueva base GPIO) que para mover los relé veo que es simple y suficiente, aunque hay algo que me dice que puede no ser lo mas eficiente.

Código: [Seleccionar]
echo pcf8574 0x39 > /sys/bus/i2c/devices/i2c-0/new_device
echo pcf8574 0x38 > /sys/bus/i2c/devices/i2c-0/new_device

Las dos nuevas GPIOBase
Código: [Seleccionar]
find /sys/class/gpio/gpio*
/sys/class/gpio/gpio481
/sys/class/gpio/gpio483
/sys/class/gpio/gpiochip458    #base nueva GPIO
/sys/class/gpio/gpiochip466    #base nueva GPIO
/sys/class/gpio/gpiochip474
/sys/class/gpio/gpiochip506



Se ve la carga en el dmesg (extracto)
Citar
i2c 0-0039: uevent
<7>[  268.825591] pcf857x 0-0039: probe
<7>[  268.825666] i2c i2c-0: master_xfer[0] R, addr=0x39, len=1
<6>[  268.826457] pcf857x 0-0039: probed
<7>[  268.830081] i2c i2c-0: client [pcf8574] registered with bus id 0-0039
<6>[  268.830133] i2c i2c-0: new_device: Instantiated device pcf8574 at 0x39
<7>[  281.481288] i2c 0-0038: uevent
<7>[  281.481799] pcf857x 0-0038: probe
<7>[  281.481875] i2c i2c-0: master_xfer[0] R, addr=0x38, len=1
<6>[  281.482559] pcf857x 0-0038: probed
<7>[  281.486199] i2c i2c-0: client [pcf8574] registered with bus id 0-0038
<6>[  281.486263] i2c i2c-0: new_device: Instantiated device pcf8574 at 0x38

---------- Y la carga de todo el Mapeado...

i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  745.166910] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  752.678994] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  752.680005] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  765.262345] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  765.263334] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1

Estoy usando este script pra controlar el estado o salida "./gpio.sh 1 out 0 | ./gpio.sh 1 out 1"

Código: [Seleccionar]
#!/bin/sh
 
show_usage()
{
    printf "\ngpio.sh <gpio pin number> [in|out [<value>]]\n"
}
 
if [ \( $# -eq 0 \) -o \( $# -gt 3 \) ] ; then
    show_usage
    printf "\n\nERROR: incorrect number of parameters\n"
    exit 255
fi
 
GPIOBASE=`cat /sys/class/gpio/gpiochip*/base | head -n1`
GPIO=`expr $1 + $GPIOBASE`
 
#doesn't hurt to export a gpio more than once
(echo $GPIO > /sys/class/gpio/export) >& /dev/null
 
if [  $# -eq 1 ] ; then
   cat /sys/class/gpio/gpio$GPIO/value
   exit 0
fi
 
if [ \( "$2" != "in" \) -a  \( "$2" != "out" \) ] ; then
    show_usage
    printf "\n\nERROR: second parameter must be 'in' or 'out'\n"
    exit 255
fi
 
echo $2 > /sys/class/gpio/gpio$GPIO/direction
 
if [  $# -eq 2 ] ; then
   cat /sys/class/gpio/gpio$GPIO/value
   exit 0
fi
 
 
VAL=$3
 
if [ $VAL -ne 0 ] ; then
    VAL=1
fi
 
echo $VAL > /sys/class/gpio/gpio$GPIO/value 


En /etc/rc.local queda establecido al final del arranque en que estado está el circuito, es decir, los 8 del teclado como "in". pero aquí es donde viene el problema de esta configuración, que el logread solo escucha los eventos que están predefinidos en la programación del la placa del router, es decir, aquellos gpios que controlan botones físicos del router o los que corresponden a los led.

No he encontrado aún la manera de que el router se entere de los eventos que están sucediendo en las GPIO "libres" y tampoco escucha las instrucciones "de manera precisa" enviadas con los comandos de I2C-tools, en cualquier caso la salida es esta y no sirve para nada.
Citar
Wed Oct 11 17:52:28 2017 kern.debug kernel: [ 3009.519362] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
Wed Oct 11 17:52:28 2017 kern.debug kernel: [ 3009.521031] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1

Supongo que hay que registrar en el kernel el nuevo boton a usar, o decirle al logread que preste atención a determinadas salidas GPIO pero no he visto forma de hacerlo.

Esta manera es lo que buscaba en un inicio, pero por "falta de recursos cerebrales" he seguido al menos de momento con la solución de tratarlos como GPIO, Aunque lo próximo que me viene de camino son sensores y de aquí no me escaparé... jejeje ya tendré que hacerlo en hex...
Citar
Lo vemos con un ejemplo: activar P7 preservando el estado de las demás salidas. Sabiendo que 0x10000000 equivale a 0x80,
Código:
prevState=$((i2cget -y 0 0x27))  # lectura del estado actual
newState=$(($prevState | 0x80))  #cálculo del nuevo valor respetando el estado previo
i2cset -y 0 0x27 $newState  # escritura del nuevo estado

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 16-10-2017, 15:00 (Lunes)
Hola... esto no es tan simple como me imaginaba o algo estoy haciendo mal.

(https://s1.postimg.org/8mgedq3fjj/Whats_App_Image_2017-10-16_at_14.54.25.jpg)

Hago las conexiones en la parte electrónica, cambio el value del puerto in entre 3,3V y 0V y no hace nada. Los Leds verde y rojo siguen encendidos y en la parte de potencia (la parte eléctrica), sigue habiendo continuidad entre los mismos dos polos que antes.

¿Alguna sugerencia? Lo estoy midiendo con un multímetro, en modo continuidad.

Por cierto....  ^-^ Eso de Low Level trigger, supongo que significa que el interruptor se activa al pasar la señal de 1 a 0, ¿no?
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 16-10-2017, 15:36 (Lunes)
Hola... esto no es tan simple como me imaginaba o algo estoy haciendo mal.

(https://s1.postimg.org/8mgedq3fjj/Whats_App_Image_2017-10-16_at_14.54.25.jpg)

Hago las conexiones en la parte electrónica, cambio el value del puerto in entre 3,3V y 0V y no hace nada. Los Leds verde y rojo siguen encendidos y en la parte de potencia (la parte eléctrica), sigue habiendo continuidad entre los mismos dos polos que antes.

¿Alguna sugerencia? Lo estoy midiendo con un multímetro, en modo continuidad.

Por cierto....  ^-^ Eso de Low Level trigger, supongo que significa que el interruptor se activa al pasar la señal de 1 a 0, ¿no?
Hola peperfus.
No entiendo bien cómo tienes las conexiones.
Un relé tiene tres circuitos.
1 circuito de alimentación. Que son normalmente los que llevan los pines pequeños a los lados, y van a 5v (5+ y -) constantes.
2 circuito de activación, que normalmente es el del centro (en el caso del relé único) y este se conecta al GPIO y es el que activa o desactiva el electroimán.
3 Es el circuito de carga que son los tres tornillos que hay en la boca del otro extremo, en este la corriente entra por el centro y sale por uno u otro lateral según este el relé, si activado o no.

Es importante no equivocarse con el GPIO, pues de conectarlo mal, el soc se estropeara con seguridad.

Si puedes dibuja un esquema de cómo lo tienes conectado y vemos que puede estar pasando.

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 16-10-2017, 18:10 (Lunes)
Gracias

Lo tengo conectado así:

(https://s1.postimg.org/8astimmzwv/RELE.jpg)

Lo que hago es poner a 0 ó a 1 el value de ese GPIO, pero no influye en nada

Me acabo de fijar que si desconecto el cable del IN, el interruptor cambia de posición. En cambio, con el cable conectado siempre está en la misma posición, aunque le cambie el voltaje de 0 a 3,3 o viceversa.
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 16-10-2017, 18:13 (Lunes)
Gracias

Lo tengo conectado así:

(https://s1.postimg.org/8astimmzwv/RELE.jpg)

Lo que hago es poner a 0 ó a 1 el value de ese GPIO, pero no influye en nada
En teoría está bien, y al poner el GPIO a 0 o a 1 debería hacer un click y activarse.


Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 16-10-2017, 18:16 (Lunes)
Gracias

Lo tengo conectado así:

(https://s1.postimg.org/8astimmzwv/RELE.jpg)

Lo que hago es poner a 0 ó a 1 el value de ese GPIO, pero no influye en nada
En teoría está bien, y al poner el GPIO a 0 o a 1 debería hacer un click y activarse.


Enviado desde mi PRA-LX1 mediante Tapatalk
Has verificado que el GPIO queda a 0 y no queda con voltaje?

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 16-10-2017, 18:48 (Lunes)
Sí, lo acabo de volver a verificar y el cambio de voltaje va perfecto. Pasa de 3,32 a 0,00

Lo que me he dado cuenta es de que si le desconecto el cable IN, entonces sí que cambia el interruptor.  ???

Lo acabo de probar con el otro relé (me pedí 2 iguales), por si estuviera defectuoso o se hubiera estropeado, pero nada; hace lo mismo. Sí que oigo el click cuando conecto el cable del GPIO y lo desconecto; pero el cambio de voltaje no le influye en nada.

Qué rallada. No debería tener ningún misterio, no tiene sentido.   ¿Qué estará pasando?
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 16-10-2017, 20:43 (Lunes)
Sí, lo acabo de volver a verificar y el cambio de voltaje va perfecto. Pasa de 3,32 a 0,00

Lo que me he dado cuenta es de que si le desconecto el cable IN, entonces sí que cambia el interruptor.  ???

Lo acabo de probar con el otro relé (me pedí 2 iguales), por si estuviera defectuoso o se hubiera estropeado, pero nada; hace lo mismo. Sí que oigo el click cuando conecto el cable del GPIO y lo desconecto; pero el cambio de voltaje no le influye en nada.

Qué rallada. No debería tener ningún misterio, no tiene sentido.   ¿Qué estará pasando?

Mírate en éste link (https://foro.seguridadwireless.net/openwrt/routers-con-gpio's-operativos-para-darle-usos-como-con-la-raspberry-pi/) la placa intermedia, si tienes los componentes para fabricarla, es un diodo  transistor y dos resistencias.

Si tienes al menos alguna resistencia de 4kΩ, yo la pondría a ver que pasa, aunque si tienes algún otro GPIO pues prueba, no todos están cableados igual.
En el hilo de edudi hay muco sobre GPIO:

(https://wiki.openwrt.org/_media/media/doc/hardware/gpio_high_low.png?w=600&tok=ed2831)
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Tki2000 en 16-10-2017, 22:11 (Lunes)
Ummm.
Creo que intuyo lo que puede ser.
Si la placa tiene lógica inversa, es decir, un 0 activa el relé, puede ser que el pin de activación (IN) sea del tipo sink, con lo que para activarlo tendremos que puentearlo a tierra. No vale con darle voltaje 0, hay que puentearlo a tierra.
Yo haría una prueba: conecta una resistencia entre el pin GND y el IN, y luego conecta además el IN al GPIO del router. Cuando el GPIO tenga voltaje (1), debe inhibir el relé, ya que la resistencia le impide que la intensidad se vaya a tierra y va para el pin IN, y cuando no tenga (0), el relé debe de puentearse a tierra a través de la resistencia, y ponerse a activo. También pondría un diodo, entre el GPIO y el pin IN, no sea que haya corriente inversa que pueda quemar el GPIO. Haz esto mejor, antes que conectarlo directamente el pin IN al GPIO del router, por si las moscas.

Prueba, tocando la resistencia, si ésta se calienta demasiado. Si es así, desconecta todo lo más rápido que puedas.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 16-10-2017, 22:29 (Lunes)
Según he leído por ahí...

Citar
"Si queremos un relé para nuestro Arduino UNO necesitaremos un relé cuya bobina se pueda excitar con 5V, si lo queremos para nuestra Arduino MKR1000 deberá ser de 3V. Puedes comprar el relé suelto, pero necesitarás para tu circuito un optoacoplador y un diodo. El optoacoplador es un componente muy interesante, hace las funciones de conmutador con un diodo emisor y un fototransistor ajustando la corriente que necesita el relé. También necesitaremos un diodo para evitar que los picos de voltaje del relé llegue a nuestro Arduino.

Pero ya existen reles ensamblados en circuitos impresos con estos componentes por lo que te sugiero que adquieras uno de estos. Cada fabricante pone los pines de conexión de forma diferente, así es que toma esta imagen como ejemplo aunque no variara mucho de tu relé."
(Extraído de https://programarfacil.com/blog/arduino-blog/rele-y-arduino-mkr1000/ (https://programarfacil.com/blog/arduino-blog/rele-y-arduino-mkr1000/))

Creo que de momento me voy a dejar de experimentos y ya tengo encargados otros relés con optoacoplador. Como no tengo prácticamente ni pajolera idea de estas cosas y no quiero correr demasiados riesgos, me esperaré a que me lleguen y los pruebo.

Lo que me he pedido ahora es esto (http://www.ebay.es/itm/Modulo-4x-RELE-10A-250V-Optoacoplado-Arduino-Raspberry-Pi-Pic-AVR-ARM/271515041748?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649), que al tener 4 relés en la placa, me valdrá para experimentar con la expansora PCF8574... para aprender a conectarlo todo y hacerlo rular. Pero eso más adelante, primero subir un escalón y luego subir la escalera  ;D

Lo que no termino de entender muy bien es... que si esos componentes extras: (el optoacoplador y el diodo) son tan recomendados (¿obligatorios?), ¿por qué no vienen de serie incluídos en todos los relés?  ???

@Ficht, tú qué relés utilizaste? tenían optoacoplador?? no utilizaste ningún circuito intermedio entre la placa expansora y el relé, verdad? no parece verse en la foto...
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 16-10-2017, 22:42 (Lunes)
....
También pondría un diodo, entre el GPIO y el pin IN, no sea que haya corriente inversa que pueda quemar el GPIO. Haz esto mejor, antes que conectarlo directamente el pin IN al GPIO del router, por si las moscas.
...

Pero el riesgo sólo está cuando conectas un aparato en la parte eléctrica, ¿no?, es decir, en la parte de 230V, como una lámpara o similar. Si sólo es para probar el funcionamiento del relé en sí, no hay riesgo de corriente inversa, ¿verdad?

Y otra cosa; ¿como diodo se podría usar un simple LED? O si no,  ¿Qué diodo tengo que comprar? Perdonad, pero de electrónica sólo sé poca cosa.
Entiendo que un diodo es un componente que sólo deja pasar la electricidad en un sentido, por lo que protegería al router de la temible electricidad inversa, ¿correcto?

De momento no voy a probar nada hasta que esté un poco más seguro de que no se me va a joder el router...

Gracias por los comentarios. Os merecéis una birra.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 17-10-2017, 00:57 (Martes)
....
También pondría un diodo, entre el GPIO y el pin IN, no sea que haya corriente inversa que pueda quemar el GPIO. Haz esto mejor, antes que conectarlo directamente el pin IN al GPIO del router, por si las moscas.
...

Pero el riesgo sólo está cuando conectas un aparato en la parte eléctrica, ¿no?, es decir, en la parte de 230V, como una lámpara o similar. Si sólo es para probar el funcionamiento del relé en sí, no hay riesgo de corriente inversa, ¿verdad?

Y otra cosa; ¿como diodo se podría usar un simple LED? O si no,  ¿Qué diodo tengo que comprar? Perdonad, pero de electrónica sólo sé poca cosa.
Entiendo que un diodo es un componente que sólo deja pasar la electricidad en un sentido, por lo que protegería al router de la temible electricidad inversa, ¿correcto?

De momento no voy a probar nada hasta que esté un poco más seguro de que no se me va a joder el router...

Gracias por los comentarios. Os merecéis una birra.

Perdón, quería decir transistor y no se porqué escribí diodo... lo que hace el transistor es amplificar el pulso del GPIO y las resistencias lo mitigan o erutan a tierra (gnd) de manera controlada. (es una explicación rápida con mis palabras....)

Aquí hay un ejemplo de un hg556a con 8 relé's y una placa con resistencias y transistores. https://foro.seguridadwireless.net/openwrt/routers-con-gpio's-operativos-para-darle-usos-como-con-la-raspberry-pi/msg341970/#msg341970

Aquí está la foto del circuito http://i.imgur.com/4HzhwYB.jpg

Si, los relé's estos casi siempre ya vienen con opto-acopladores (sobre todo los que son múltiples), mira bien los componentes de la plaquita y busca su hoja de datos (no vaya a ser que también lo sean) pero bueno, los he tenido que no lo son "estos individuales" me refiero.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 10:54 (Martes)
Se lo he preguntado al vendedor y esto es lo que me ha contestado:
Cita de: el que me lo vendió por eBay
Supongo que el problema está en que intentas accionarlo aplicando un nivel alto a la entrada del relé, es un problema muy común.

Los relés optoacoplados (como es el caso de este) están diseñados para que el consumo sea mínimo en el accionamiento del relé, de manera que puedas conectar varios a la placa Arduino sin que la placa sufra por un consumo excesivo en las salidas. Es por ello que se alimentan con Vcc y GND preferiblemente no conectadas a la placa Arduino sino en paralelo y a la entrada de señal IN se le debe aplicar una masa cuando quieres accionar el relé. Es decir en lugar de ponerlo a una salida con nivel HIGH, se accionará con nivel LOW.

Comprueba que el relé se acciona aplicando masa a la entrada de señal.

Lo cual me anima a hacer la prueba esa de puentear con gnd ...
Sigo sin entender, si estos componentes son necesarios para que funcione el relé.... por qué no vienen de serie en el propio conjunto.  ???
En fin, me pondré a hacer pruebas y comentaré los resultados.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 17-10-2017, 11:21 (Martes)
Si, puedes hacer la prueba de la resistencia que te sugerimos tki2000 y yo más atrás.

Pero también si quieres, directamente monta en las GPIO el bus I2C y trabaja con una de las patitas del expansor (no sé si lo tienes ya) hacia el relé y así te evitas todo el resto de adaptaciones. (Funcionará directo sin problemas)

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: antares en 17-10-2017, 12:01 (Martes)
Segun lo tienes, añade una resistencia de 4700 ohm entre el pin VCC 3V3 del conector serie y el IN de la placa de rele. Veras como te funciona.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 13:08 (Martes)
Mientras escribíais, he hecho esta prueba:

(https://s1.postimg.org/57120j0qfz/PRUEBA1.png)

He utilizado esa resistencia de 1800 ohm que son las que tengo. No ha funcionado.

La plaquita del bus expansor aún no me ha llegado, pero debe de estar al caer.

Cita de: antares
Segun lo tienes, añade una resistencia de 4700 ohm entre el pin VCC 3V3 del conector serie y el IN de la placa de rele. Veras como te funciona.

La alimentación del router me da 5V, ¿servirá?...
Como no tengo de 4700ohm, le pongo 2 de 1800 en serie (=3600) ¿será suficiente?.
Puedo conseguir 4500 ohm con 2 de 1800 en serie + 2 de 1800 en paralelo (900) = 3600 + 900 = 4500 ohm.
Espero comentarios.
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 17-10-2017, 13:20 (Martes)
Mientras escribíais, he hecho esta prueba:

(https://s1.postimg.org/57120j0qfz/PRUEBA1.png)

He utilizado esa resistencia de 1800 ohm que son las que tengo. No ha funcionado.

La plaquita del bus expansor aún no me ha llegado, pero debe de estar al caer.

Cita de: antares
Segun lo tienes, añade una resistencia de 4700 ohm entre el pin VCC 3V3 del conector serie y el IN de la placa de rele. Veras como te funciona.

La alimentación del router me da 5V, ¿servirá?...
Como no tengo de 4700ohm, le pongo 2 de 1800 en serie (=3600) ¿será suficiente?
Pruébalo

Enviado desde mi PRA-LX1 mediante Tapatalk


Si tienes algún aparato viejo que no sirva quítale resistencias y así tomas más práctica todavía con el soldador
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 13:24 (Martes)
@Ficht, sí, sí....

Decía que ya lo he probado, en la práctica, en real. Pero no ha funcionado.

Por ahí (http://forum.arduino.cc/index.php?topic=333650.0) dice uno que lo consiguió arreglar pasándole un imán.

Ah, bueno.... ¿te refieres a que pruebe lo que dice antares?, Ficht? a eso te referías?
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 13:30 (Martes)
Cita de: antares
Segun lo tienes, añade una resistencia de 4700 ohm entre el pin VCC 3V3 del conector serie y el IN de la placa de rele. Veras como te funciona.

antares, ¿puedes ser un poco más específico?
AAahhh.... ya entiendo.... del puerto serie del router; perdona la torpeza, no te había pillado. En cuanto lo pruebe comento.

Edito:

¿Así?
(https://s1.postimg.org/2ofhl81fa7/ANTARES.png)
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: antares en 17-10-2017, 13:38 (Martes)
Pon tres de 1800 en serie. No tiene que ser un valor exacto, entre 3K y 10K puede valer, es una resistencia de polarizacion. Pero a los 3v3 que tienes en el cuarto pin del conector serie del router. No la conectes a 5v.

Edito: Igual que has puesto en el dibujo
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 13:42 (Martes)
Oído, cocina.

En cuanto lo haga, comento. Gracias.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 15:48 (Martes)
Lo mismo. Nada de nada.
He conectado el pin vcc del serie del router a un cable, a ese cable le he soldado 3 R's en serie y de ahí al medio de otro cable cuyos extremos van al IN y al GPIO y nada. Al encender el Router, se activa el relé, pero al meter el 1 en el value del GPIO, se queda igual, no se entera.

Intentaré arreglarlo con un imán de neodimio que pueden prestarme, a ver si es que se ha quedado "atascado" por dentro de alguna manera y con el imán se desatasca  ???

Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 17-10-2017, 16:04 (Martes)
Lo mismo. Nada de nada.
He conectado el pin vcc del serie del router a un cable, a ese cable le he soldado 3 R's en serie y de ahí al medio de otro cable cuyos extremos van al IN y al GPIO y nada. Al encender el Router, se activa el relé, pero al meter el 1 en el value del GPIO, se queda igual, no se entera.

Intentaré arreglarlo con un imán de neodimio que pueden prestarme, a ver si es que se ha quedado "atascado" por dentro de alguna manera y con el imán se desatasca  ???
Es posible que ese GPIO lo estés usando en la antigua conexión I2C cuando lo programas te para la pantalla??


Prueba cambiar de GPIO, usar otro diferente.

Enviado desde mi PRA-LX1 mediante Tapatalk
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 16:47 (Martes)
Sí es el mismo, de hecho es el que usaba para el SDA. Pero he desinstalado los módulos de I2C, y todo lo demás. Sólo tengo instalado lo de GPIO.

Lo pruebo con el otro cable (el que era del SCL) a ver....

Nada. Lo mismo. Nada de nada.
Piro a curra, ya seguiré haciendo pruebas.
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 17-10-2017, 16:54 (Martes)
Sí es el mismo, de hecho es el que usaba para el SDA. Pero he desinstalado los módulos de I2C, y todo lo demás. Sólo tengo instalado lo de GPIO.

Lo pruebo con el otro cable (el que era del SCL) a ver....
Edita el módulo
Código: [Seleccionar]
vi /etc/modules.d/59-i2c-gpio-custom

Borra los números de los GPIO, para acceder a los caracteres picas la " i "  guardas y sales con esc :wq
Y reinicias.
Prueba esto.

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 19:20 (Martes)
Ese archivo lo borré cuando desinstalé todo lo que tenía que ver con i2c...
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: antares en 17-10-2017, 19:21 (Martes)
Dices que al encender el router se activa el rele pero que al meter un 1 se queda igual. Eso es normal que ocurra. ¿Pero has probado a meter un 0 a ver si se desactiva?

Lo estoy probando ahora mismo en un AR5387un CHAOS CALMER 15.05 con el circuito de la foto y funciona bien conectando el pin 2 del optoacoplador al gpio10. En este circuito se activa el rele al meter un 0 en el gpio.

(http://i63.tinypic.com/fuxmau.jpg)
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 17-10-2017, 19:27 (Martes)
Dices que al encender el router se activa el rele pero que al meter un 1 se queda igual. Eso es normal que ocurra. ¿Pero has probado a meter un 0 a ver si se desactiva?

Lo estoy probando ahora mismo en un AR5387un CHAOS CALMER 15.05 con el circuito de la foto y funciona bien conectando el pin 2 del optoacoplador al gpio10. En este circuito se activa el rele al meter un 0 en el gpio.

(http://i63.tinypic.com/fuxmau.jpg)
Peperfus, prueba las resistencias en serie hacia el GPIO, es decir, a continuación del cable i tocando el pin in del relé, no se me ocurre otra cosa que resetear el router si esto no va.

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 20:10 (Martes)
@Ficht, sigue sin funcionar, PERO ha habido un cambio sospechoso:

El LED verde, al poner el value del GPIO a 1 se atenua un poco, es decir, brilla menos. Al cambiar el value a 0, vuelve a brillar otra vez.

Reseteando a valores de fábrica....

EDITO:

Nada, todo igual.
A ver si mañana me puedo hacer con un imán de neodimio y se lo restriego al relé por toda la cara, a ver si hace algo.

Esta clase de misterios son "apasionantes"  ;D
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 17-10-2017, 20:45 (Martes)
@Ficht, sigue sin funcionar, PERO ha habido un cambio sospechoso:

El LED verde, al poner el value del GPIO a 1 se atenua un poco, es decir, brilla menos. Al cambiar el value a 0, vuelve a brillar otra vez.

Reseteando a valores de fábrica....

EDITO:

Nada, todo igual.
A ver si mañana me puedo hacer con un imán de neodimio y se lo restriego al relé por toda la cara, a ver si hace algo.

Esta clase de misterios son "apasionantes"  ;D

Hola, compra un transistor y resistencias, todo vale menos que 1 € en cualquier tienda de electrónica y soldarlo son 15 min. (el esquema esta en el enlace que te dejé mas atrás)
Pero NO HAGAS lo del imán, esto puede ser peligroso según lo que te dé por hacer, puede crear una corriente inducida  que sea mucho peor.

PD: Si esto es asi con la resistencia en serie....
Citar
El LED verde, al poner el value del GPIO a 1 se atenua un poco, es decir, brilla menos. Al cambiar el value a 0, vuelve a brillar otra vez.
Entonces ponle mas resistencias, hasta que se atenué del todo. (siempre toca y mira a ver si llega a quemar)
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 17-10-2017, 21:11 (Martes)
Y si me espero a recibir la plaquita de bus expansor?
Con eso ya debería funcionar, no?

No me imaginaba que conectar un simple relé necesitara tanta cosa extra y tantas pruebas, que cansino.
Menos mal que tengo ganas de hacerlo y paciencia.  :P
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 17-10-2017, 21:20 (Martes)
Y si me espero a recibir la plaquita de bus expansor?
Con eso ya debería funcionar, no?

No me imaginaba que conectar un simple relé necesitara tanta cosa extra y tantas pruebas, que cansino.
Menos mal que tengo ganas de hacerlo y paciencia.  :P
Jajaja
Te ha tocado el malo... Yo ya me hubiese liado a buscar otro GPIO en la placa...


Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Hwagm en 17-10-2017, 21:40 (Martes)
mmm

siempre preferi poner las bobinas despues de los emisores de los transistores

de hecho los automatas colocamos las bobinas despues de sus salidas. obvio funcionamiento PNP. y siempre es mas factible comprobar con tester

licadmito en mantenimiento odiamos los NPN


configuración que esta en la ultima foto

igualmente puedes poner el diodo para descargar bobina y evitar picos alta tensión
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Tki2000 en 18-10-2017, 08:41 (Miércoles)
mmm

siempre preferi poner las bobinas despues de los emisores de los transistores

de hecho los automatas colocamos las bobinas despues de sus salidas. obvio funcionamiento PNP. y siempre es mas factible comprobar con tester

licadmito en mantenimiento odiamos los NPN


configuración que esta en la ultima foto

igualmente puedes poner el diodo para descargar bobina y evitar picos alta tensión

Amén. 
Yo también trato con autómatas, aunque más a nivel informático, y desde luego que los actuadores son un coñazo...
;D
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 18-10-2017, 14:23 (Miércoles)
Hola
Me acaba de llegar esto (http://www.ebay.es/itm/Modulo-4x-RELE-10A-250V-Optoacoplado-Arduino-Raspberry-Pi-Pic-AVR-ARM/271515041748?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649):
(https://s1.postimg.org/907t0a692n/image.jpg)

Ahora mismo me voy a comer; en cuanto vuelva lo pruebo (directamente desde GPIO y 5V), como probé el otro.

Ansío la llegada del bus expansor.
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 18-10-2017, 14:31 (Miércoles)
Hola
Me acaba de llegar esto (http://www.ebay.es/itm/Modulo-4x-RELE-10A-250V-Optoacoplado-Arduino-Raspberry-Pi-Pic-AVR-ARM/271515041748?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649):
(https://s1.postimg.org/907t0a692n/image.jpg)

Ahora mismo me voy a comer; en cuanto vuelva lo pruebo (directamente desde GPIO y 5V), como probé el otro.

Ansío la llegada del bus expansor.
Pásate de camino por una tienda de electrónica y cómprate dos resistencias y un transistor como lo que sale aquí, de los contrario corres el riesgo de repetir.

http://i.imgur.com/4HzhwYB.jpg

Suerte!!

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 18-10-2017, 15:08 (Miércoles)
El tema es que donde vivo prácticamente no hay ni una tienda de electrónica, así que todas estas cosas las tengo que pedir por Internet.

Tengo encargados estos transistores:
http://www.ebay.es/itm/20x-2N2222-Transistor-NPN-40V-800mA-300MHz-Small-Signal-Switching-TO-92-T0006/201698890538?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649 (http://www.ebay.es/itm/20x-2N2222-Transistor-NPN-40V-800mA-300MHz-Small-Signal-Switching-TO-92-T0006/201698890538?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649)

También resistencias de 10K y 2K2, como pone en el dibujo.

Ok, no lo toco entonces. En cuanto me llegue eso, lo monto y lo pruebo. Habrá que tener paciencia, pero no tengo prisa.

Por cierto, ¿alguien me puede decir para qué es el jumper que lleva?
Puentea dos pines llamados:
VCC y JD-VCC

Y otra pregunta: Cuando conecte la plaquita expansora de bus I2C, supongo que también necesitaré un conjunto de (transistor+resistencias) aparte para cada uno de los relés... ¿es correcto?

Gracias por vuestra paciencia infinita.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: antares en 18-10-2017, 17:37 (Miércoles)
El puente vale para separar la alimentacion de los reles y la de activacion.
Si quitas el puente puedes poner +5V en el pin JD-VCC y +3V3 en VCC.
Asi se queda un circuito practicamente igual al que probe yo ayer y no necesite poner transistores intermedios. Recuerda que el rele se activa mandando un 0 al gpio.

Aqui tienes un esquema de la placa que has comprado
http://www.profetolocka.com.ar/2015/05/09/modulo-de-4-reles-para-arduino/
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 18-10-2017, 17:38 (Miércoles)
El tema es que donde vivo prácticamente no hay ni una tienda de electrónica, así que todas estas cosas las tengo que pedir por Internet.

Tengo encargados estos transistores:
http://www.ebay.es/itm/20x-2N2222-Transistor-NPN-40V-800mA-300MHz-Small-Signal-Switching-TO-92-T0006/201698890538?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649 (http://www.ebay.es/itm/20x-2N2222-Transistor-NPN-40V-800mA-300MHz-Small-Signal-Switching-TO-92-T0006/201698890538?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649)

También resistencias de 10K y 2K2, como pone en el dibujo.

Ok, no lo toco entonces. En cuanto me llegue eso, lo monto y lo pruebo. Habrá que tener paciencia, pero no tengo prisa.

Por cierto, ¿alguien me puede decir para qué es el jumper que lleva?
Puentea dos pines llamados:
VCC y JD-VCC

Y otra pregunta: Cuando conecte la plaquita expansora de bus I2C, supongo que también necesitaré un conjunto de (transistor+resistencias) aparte para cada uno de los relés... ¿es correcto?

Gracias por vuestra paciencia infinita.
No, no lo necesitas, la polaridad de cada pin es la misma, no así como los GPIO, que en la placa están cableados de manera diferente. Los pines del puente en la placa de relé son para conmutar el 5V de alimentación, yo en ocasiones lo uso para alimentar otra placa a continuación... Y así.

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 20-10-2017, 19:19 (Viernes)
Hola, me acaban de llegar los transistorianos de transistoria.

Tienen 3 pines. Según entiendo del dibujo, debería conectarlos tal que así...

(https://s1.postimg.org/5v6r2juy9r/transistoriano.png)

¿Es correcto?
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 20-10-2017, 19:24 (Viernes)
Hola, me acaban de llegar los transistorianos de transistoria.

Tienen 3 pines. Según entiendo del dibujo, debería conectarlos tal que así...

(https://s1.postimg.org/5v6r2juy9r/transistoriano.png)

¿Es correcto?

En principio si, pero mejor busca el datasheet por el código del transistor ahí te explica bien las conexiones (recuerda las resistencias).
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Hwagm en 20-10-2017, 20:24 (Viernes)
 ;D

me gusta ver que en el foro, no solo se habla de wifislax y crack wifi

Citar
Yo también trato con autómatas, aunque más a nivel informático, y desde luego que los actuadores son un coñazo...

jejeje, eso quiere decir que tienes algunos xispas que te montan todo, y tu luego solo haces el programa xd

estamos de vacas flacas, asi que me toca hacerlo todo, hasta cambiar los fluorescentes de los lavabos xd
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 20-10-2017, 20:31 (Viernes)
;D

me gusta ver que en el foro, no solo se habla de wifislax y crack wifi

Citar
Yo también trato con autómatas, aunque más a nivel informático, y desde luego que los actuadores son un coñazo...

jejeje, eso quiere decir que tienes algunos xispas que te montan todo, y tu luego solo haces el programa xd

estamos de vacas flacas, asi que me toca hacerlo todo, hasta cambiar los fluorescentes de los lavabos xd


jajajaja y pensar que uno aquí se rompe los cuernos con estas cosas de hobby.  ;D
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Tki2000 en 21-10-2017, 00:30 (Sábado)
;D

me gusta ver que en el foro, no solo se habla de wifislax y crack wifi

Citar
Yo también trato con autómatas, aunque más a nivel informático, y desde luego que los actuadores son un coñazo...

jejeje, eso quiere decir que tienes algunos xispas que te montan todo, y tu luego solo haces el programa xd

estamos de vacas flacas, asi que me toca hacerlo todo, hasta cambiar los fluorescentes de los lavabos xd

Pues sí. Y no sabes lo que se suda cuando estás implantando a 8000 km de distancia en remoto, el que te explica lo que está fallando no entiende ni papa, con más de un cuarto de millón de líneas de código y estando tú solito. Y todo esto a las 2:00am hora española, y por cuatro perras.

En fin, perdón por el offtopic.  >:D
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Hwagm en 21-10-2017, 15:52 (Sábado)
por eso nunca monto telecontrol.

los jefes quieren. yo me niego.

hay que estar delante de la maquina y sufrirla

yo no dejo a nadie que me haga los planos eléctricos. ni decidan el material. ni que monten los cuadros ni la instalación eléctrica de la máquina

cuando hay sobredemanda y viene soporte externo. saben que hay tres formas de hacer las cosas. bien. mal y a mi manera

tienen hacerme caso. pero es que luego el que va a la puerta en marcha soy yo

no soy el mejor programador. los he conocido buenísimos. pero luego no distinguian un dectector inductivo de un final de carrera

y ya no te digo si deben hacer un poco de ajuste mecánico

y si hablamos de servos jajajajajajajajaja algunos se asustan

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: sanson en 21-10-2017, 16:16 (Sábado)
A ver la chavalería ¿volvemos al tema ?


Jejjejejejej

Enviado desde mi SM-G920F mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 22-10-2017, 00:13 (Domingo)
Por fin funciona  !!!

Al final he utilizado las resistencias que tenía de 1,8K. He puesto 6 en serie para acercarme a la de 10K y la de 2,2 la he dejado en una de 1,8.

Lo he montado todo en plan chapucilla en una protoboard pequeña y ha funcionado.

Por cierto, lo activo con 1 y lo desactivo con 0.

Ahora sólo me falta entenderlo  ;D
Es decir, entender ese circuito intermedio; que no entiendo muy bien qué hace exactamente y por qué es necesario.

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 22-10-2017, 00:16 (Domingo)
Ahora sólo me falta entenderlo  ;D
Es decir, entender ese circuito intermedio; que no entiendo muy bien qué hace exactamente y por qué es necesario.



 >:( >:( >:( >:(

Seguramente tu GPIO esta cableado en la placa, de forma parecida al tercero de esta foto (obviando siempre el botón) por lo que en cualquier caso se activaba con el circuito de la placa a GND, pero al poner las resistencias, lo conviertes a algo parecido al tipo 4, cosa que las resistencias le quitan continuidad a GND  y deja de activarse solo, y claro, al ponerlo a hi la señal ya llega al optoacoplador de la placa. Y creo que en el caso concreto de tu GPIO en lo que corresponde el botón del 4 caso, hay una resistencia de algún valor menor del que tienes ahora mismo a la salida en tu protoboard. (todo esto es supuesto y claro que puedo estar totalmente equivocado, pero es lo que me parece).



(https://wiki.openwrt.org/_media/media/doc/hardware/gpio_high_low.png?w=600&tok=ed2831)
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 25-10-2017, 19:19 (Miércoles)
Hoy me acaba de llegar el Transfuncionador del contínuo (cuyo misterio tan sólo es superado por su poder)  ;D

La plaquita expansora de bus I2C, vamos.  ;D ;D

Ahora estoy bastante liado, pero el finde lo probaré y volveré con dudas, comentarios y bonitos palabros.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 28-10-2017, 12:59 (Sábado)
Con permiso del todopoderoso raphik, copio su post del hilo de la LCD que montó:

@Fitch

Para manejar relés vía I²C se suele utiliza un expansor de bus tipo PCF8574.
(https://i.imgur.com/8Vyn15Q.jpg)

El módulo de la foto no incorpora relés, pero vale perfectamente para entender cómo se controla este tipo de dispositivos.

El cable I²C del router se enchufa al conector dupont macho de la izquierda. A la derecha hay otro conector dupont hembra al que se podría conectar a su vez un segundo módulo expansor, y a éste un tercero... y así sucesivamente hasta un total de ocho módulos.

Cuando se conecta más de un módulo a mismo bus, hay que asignar una dirección física distinta a cada uno de ellos. Esto se consigue modificando la posición de los tres jumpers de color naranja.

En la parte superior hay un conector amarillo. El pin de más a la izquierda es 0V. El resto son 8 salidas digitales que pueden tomar los valores 0 o +5V, en función los valores binarios 0 o 1 que les asignemos.

Las 8 salidas digitales se pueden controlar desde una consola de OpenWRT o desde un script. Para establecer el valor de las salidas se usa el comando "i2cset" y para conocer su estado previo "i2cget".

Para entender lo que sigue ahora, hay que estar un poco familiarizado con los sistemas de numeración binario, hexadecimal y su aritmética.

Supongamos que queremos poner la patilla P7 de la tarjeta expansora a +5V y el resto a 0V. Bastará con enviar a la placa el valor binario 0b10000000. El problema es que los scripts no trabajan con binarios. Sólo se puede utilizar decimal y hexadecimal. Sabiendo que el valor decimal 0b10000000 equivale al valor hexadecimal 0x80 y suponiendo que el módulo estuviera conectado en la dirección 0x27 del bus 0, el código a enviar será
Código: [Seleccionar]
i2cset -y 0 0x27 0x80
Si lo que queremos en realidad es activar una o más patillas dejando invariable el resto, no queda otra que tirar del operador binario OR. Primero habría que conocer el estado previo de todas las patillas, luego habría que calcular el valor a enviar y por último enviarlo.

Lo vemos con un ejemplo: activar P7 preservando el estado de las demás salidas. Sabiendo que 0x10000000 equivale a 0x80,
Código: [Seleccionar]
prevState=$((i2cget -y 0 0x27))  # lectura del estado actual
newState=$(($prevState | 0x80))  #cálculo del nuevo valor respetando el estado previo
i2cset -y 0 0x27 $newState  # escritura del nuevo estado

Como esto se está poniendo un poco tocho lo dejo ya. Si de verdad interesa, podemos ver cómo desactivar determinadas patillas, respetando los valores previos, en una próxima entrega.

(https://s1.postimg.org/1e80gfpqzz/Whats_App_Image_2017-10-28_at_12.45.47.jpg)

De momento he conectado el PCF8574 (creo que es el mismo que el de la foto), pero al hacer el i2cdetect no me lo detecta...

EDITO:
APS !!, creo que ya sé porqué es...
Tengo que pasarle continuidad de una sección de columnas a otra en la protoboard.  :P
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 28-10-2017, 13:00 (Sábado)
Con permiso del todopoderoso raphik, copio su post del hilo de la LCD que montó:

@Fitch

Para manejar relés vía I²C se suele utiliza un expansor de bus tipo PCF8574.
(https://i.imgur.com/8Vyn15Q.jpg)

El módulo de la foto no incorpora relés, pero vale perfectamente para entender cómo se controla este tipo de dispositivos.

El cable I²C del router se enchufa al conector dupont macho de la izquierda. A la derecha hay otro conector dupont hembra al que se podría conectar a su vez un segundo módulo expansor, y a éste un tercero... y así sucesivamente hasta un total de ocho módulos.

Cuando se conecta más de un módulo a mismo bus, hay que asignar una dirección física distinta a cada uno de ellos. Esto se consigue modificando la posición de los tres jumpers de color naranja.

En la parte superior hay un conector amarillo. El pin de más a la izquierda es 0V. El resto son 8 salidas digitales que pueden tomar los valores 0 o +5V, en función los valores binarios 0 o 1 que les asignemos.

Las 8 salidas digitales se pueden controlar desde una consola de OpenWRT o desde un script. Para establecer el valor de las salidas se usa el comando "i2cset" y para conocer su estado previo "i2cget".

Para entender lo que sigue ahora, hay que estar un poco familiarizado con los sistemas de numeración binario, hexadecimal y su aritmética.

Supongamos que queremos poner la patilla P7 de la tarjeta expansora a +5V y el resto a 0V. Bastará con enviar a la placa el valor binario 0b10000000. El problema es que los scripts no trabajan con binarios. Sólo se puede utilizar decimal y hexadecimal. Sabiendo que el valor decimal 0b10000000 equivale al valor hexadecimal 0x80 y suponiendo que el módulo estuviera conectado en la dirección 0x27 del bus 0, el código a enviar será
Código: [Seleccionar]
i2cset -y 0 0x27 0x80
Si lo que queremos en realidad es activar una o más patillas dejando invariable el resto, no queda otra que tirar del operador binario OR. Primero habría que conocer el estado previo de todas las patillas, luego habría que calcular el valor a enviar y por último enviarlo.

Lo vemos con un ejemplo: activar P7 preservando el estado de las demás salidas. Sabiendo que 0x10000000 equivale a 0x80,
Código: [Seleccionar]
prevState=$((i2cget -y 0 0x27))  # lectura del estado actual
newState=$(($prevState | 0x80))  #cálculo del nuevo valor respetando el estado previo
i2cset -y 0 0x27 $newState  # escritura del nuevo estado

Como esto se está poniendo un poco tocho lo dejo ya. Si de verdad interesa, podemos ver cómo desactivar determinadas patillas, respetando los valores previos, en una próxima entrega.

(https://s1.postimg.org/1e80gfpqzz/Whats_App_Image_2017-10-28_at_12.45.47.jpg)

De momento he conectado el PCF8574 (creo que es el mismo que el de la foto), pero al hacer el i2cdetect no me lo detecta...
Mira a ver si scl y sda están invertidos...

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 28-10-2017, 13:08 (Sábado)
Yatá, era eso. He movido la PCF a la misma sección de columnas de la protoboard que los jumpers, ahora están más cerquita  :-* :-*  ;D y al estar en la misma sección ya hay continuidad.

(https://s1.postimg.org/1vnumhd7y7/pcf.jpg)
(Nótese la diferencia de posición de la PCF, de una sección de columnas de la protoboard en la foto anterior a la misma sección que los jumpers en esta foto)

Código: [Seleccionar]
root@OpenWrt:~# i2cdetect  -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 28-10-2017, 13:40 (Sábado)
Funciona !!

Datos de la PCF:
Bus: 0
Dirección: 20

Patilla conectada al IN del relé en la posición 4. Esto equivale al binario= 10000 (contando de derecha a izquierda, empezando desde 0), lo que equivale al valor decimal 16, lo cual equivale al valor hexadecimal 10. (Ver calculadora para pasar de un formato a otro (http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html) si no lo queréis hacer de cabeza)

Comandos a utilizar:
root@OpenWrt:~# i2cset  -y 0 0x20 0x10
root@OpenWrt:~# i2cset  -y 0 0x20 0x00

Con el primero, desactivo el Relé, ya que es "Low level trigger" y con el segundo lo activo; es decir: se activa enviando 0 voltios a su pin IN y se desactiva enviando 5V.

 ;D

Estoy disfrutando de estas "chorradillas" como un crío y ya tengo 38 añitos  ;D ;D ;D ;D

Luego igual pruebo a conectar la plaquita de varios relés y usar la operación binaria OR para activar y desactivar de forma individual.

PD: Con la expansora PCF no me ha hecho falta conectar resistencias, ni transistores ni carajos.
PD2: Me acabo de pedir un relé de estado sólido, que tiene pinta de molar, ya que se puede activar y desactivar muchísimo más rápido que estos con electroimán. Intentaré fundir una bombilla de led encendiéndola y apagándola súper rápido, a ver qué pasa.

Edito:
Aquí el vídeo con varios relés conectados al módulo expansor de bus I2C PCF8574:


Al final ha sido más fácil conectar varios relés por I2C con la expansora que uno sólo por simples GPIOS. xD  :P  ;D

Con esto doy el tema por concluído prácticamente. En cuanto me llegue el relé de estado sólido lo probaréy comentaré...

Gracias a todos por la ayuda.
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 28-10-2017, 13:44 (Sábado)
Funciona !!

Datos de la PCF:
Bus: 0
Dirección: 20

Patilla conectada al IN del relé en la posición 4. Esto equivale al binario= 10000 (contando de derecha a izquierda, empezando desde 0), lo que equivale al valor decimal 16, lo cual equivale al valor hexadecimal 10. (Ver calculadora para pasar de un formato a otro (http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html) si no lo queréis hacer de cabeza)

Comandos a utilizar:
root@OpenWrt:~# i2cset  -y 0 0x20 0x10
root@OpenWrt:~# i2cset  -y 0 0x20 0x00

Con el primero, desactivo el Relé, ya que es "Low level trigger" y con el segundo lo activo; es decir: se activa enviando 0 voltios a su pin IN y se desactiva enviando 5V.

 ;D

Estoy disfrutando de estas "chorradillas" como un crío y ya tengo 38 añitos  ;D ;D ;D ;D

Luego igual pruebo a conectar la plaquita de varios relés y usar la operación binaria OR para activar y desactivar de forma individual.

PD: Con la expansora PCF no me ha hecho falta conectar resistencias, ni transistores ni carajos.
PD2: Me acabo de pedir un relé de estado sólido, que tiene pinta de molar, ya que se puede activar y desactivar muchísimo más rápido que estos con electroimán. Intentaré fundir una bombilla de led encendiéndola y apagándola súper rápido, a ver qué pasa.
Yo alguna vez casi he fundido los relés...
Prueba
i2cdump -y 0 0x20

A ver qué ocurre con un solo relé, pero con 8 o más, parece que salen volando.
Jejeje

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 28-10-2017, 16:55 (Sábado)
Cita de: Ficht
Prueba
i2cdump -y 0 0x20

Jooooder, qué susto !  ;D ;D

Lo he probado con los 5 relés que tengo puestos ahora mismo.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Tki2000 en 28-10-2017, 17:23 (Sábado)
Cuidado, que los relés también se funden. Y los de estado sólido son más sensibles, y aguantan menos. Son más susceptibles a la corriente inversa, y aguantan mucha menos intensidad.
Lo más normal es que se suelde la patilla móvil interna, y ya no se suelta, con lo que se queda fijo en una posición. Los de estado sólido, directamente dejan de funcionar.
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 28-10-2017, 17:36 (Sábado)
Cuidado, que los relés también se funden. Y los de estado sólido son más sensibles, y aguantan menos. Son más susceptibles a la corriente inversa, y aguantan mucha menos intensidad.
Lo más normal es que se suelde la patilla móvil interna, y ya no se suelta, con lo que se queda fijo en una posición. Los de estado sólido, directamente dejan de funcionar.
Éstos relés azules yo encuentro que salen muy buenos. Los tengo bastante probados y mientras lo mantengas en su rango de operaciones no los he visto fallar. De hecho no me ha fallado ninguno. En la nave ya hace dos años que los uso a diario y estoy muy satisfecho. Desde luego las cargas fuertes de la parte más industrial las paso por otros relés de mayor amperaje.

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 12-11-2017, 20:25 (Domingo)
Ya he estado jugando con el relé de estado sólido. Mola mucho y la velocidad de reacción es alucinante.

(https://s8.postimg.org/r4pu8gjid/rele.jpg)





La bombilla no se ha fundido  :D

Me he equivocado en el orden de los vídeos. El primero es el más rápido de los dos, prácticamente el parpadeo es inapreciable.
Título: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 12-11-2017, 21:02 (Domingo)
Ficht, esta idea tuya que te montaste, me mola mucho. Estoy pensando que igual hago algo así. Lo llamaría un "panel de control". Le pondría unos enchufes de superficie, 4 para manejarlos con el módulo de 4 relés conectado a la pcf8574, todo sobre una tabla de madera con unos ganchos para colgar en la pared.

(https://s1.postimg.org/5bocsx979r/panel_Ficht.jpg)
(Imagen de Ficht)

Lo del panel ese de botones táctiles que tienes ahí arriba a la derecha, supongo que es para poder activar y desactivar los relés manualmente, ¿correcto? ¿al final lo conseguiste? ¿Podrías explicar como lo hiciste? Me parece muy interesante, pero no veo la forma de combinar ambos métodos al mismo tiempo (pcf8574 + panel botones). Gracias.
Supongo que con la instrucción i2cget, el bus y el número de pcf8574 lees el estado de sus pines y con eso puedes saber qué botón se ha pulsado, pero.... supongo que por eso preguntabas si había alguna manera de detectar que se ha pulsado un botón, ¿no?; para no tener que hacer un i2cget cada x segundos, ¿es así? ¿Al final lo conseguiste? ¿Cómo lo hiciste?

Por cierto, ¿qué es ese otro circuito que hay a la derecha del todo, qué es lo que hace? Ese que marca unos dígitos con 3.4 ??
Título: Re: Re: Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 12-11-2017, 21:33 (Domingo)
Ficht, esta idea tuya que te montaste, me mola mucho. Estoy pensando que igual hago algo así. Lo llamaría un "panel de control". Le pondría unos enchufes de superficie, 4 para manejarlos con el módulo de 4 relés conectado a la pcf8574, todo sobre una tabla de madera con unos ganchos para colgar en la pared.

(https://s1.postimg.org/5bocsx979r/panel_Ficht.jpg)
(Imagen de Ficht)

Lo del panel ese de botones táctiles que tienes ahí arriba a la derecha, supongo que es para poder activar y desactivar los relés manualmente, ¿correcto? ¿al final lo conseguiste? ¿Podrías explicar como lo hiciste? Me parece muy interesante, pero no veo la forma de combinar ambos métodos al mismo tiempo (pcf8574 + panel botones). Gracias.

Por cierto, ¿qué es ese otro circuito que hay a la derecha del todo, qué es lo que hace? Ese que marca unos dígitos con 3.4 ??
Bueno, hasta donde se, para que el panel sea efectivo hay que definir el puerto I2C en el dts de la placa, para definir botones de entrada, ya sea haciendo GPIO's en el 8574 o definiendo en tablero I2C tal cual, para que cree eventos recogidos en el kernel, esto lo tengo ahí aparcao...
El regulador que marca 3.y pico alimenta un LCD que jugaba con el, pero montando un puerto SPI, también está aparcao...
De lo contrario habría que hacer rodar un script que leyera constantemente teclado o gpios y hacer el trabajo, pero eso no es eficiente.



Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re:Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 27-10-2018, 18:53 (Sábado)
SCRIPT que utilizo para modificar el estado de una plaquita de 4 relés, conectados al bus expansor: PCF8574. En realidad se puede utilizar para cualquier propósito, siempre para los 4 pines primeros de la expansora.
Requiere la utilidad bc (se puede instalar fácilmente desde software con luci, o con opkg...)

Lo he probado y creo que va bien en todos los casos. Si alguien descubre algún bug, etc...., comentarios son bienvenidos. Así como críticas (siempre constructivas), mejoras, etc...

Código: [Seleccionar]
#!/bin/sh

# ACTIVA O DESACTIVA UN RELE, RESPETANDO EL ESTAOD DE LOS DEMAS
# SINTAXIS:
# rele.sh num ON/OFF
# rele.sh num 1/0
# siendo num el numero de rele que queremos modificar
# <PUBLICIDAD>
# www.formulamanager.com Nuevo juego online manager de carreras.
# </PUBLICIDAD>



if [ $# -eq 2 ]; then
  #Nos devuelve en hexadecimal:
  prevState_bruto=$(i2cget -y 0 0x20)
  # formatearlo, quitarle el 0x y pasar a mayuscula,
  # porque el BC es muy tiquismiquis
  # Ademas solo nos interesa el primer digito
  # (los primeros 4 bits)
#echo "PREVSTATE=$prevState_bruto"
  prevState=$(echo $prevState_bruto|cut -c 3 | tr [a-z] [A-Z])
#echo "PREVSTATE=$prevState"
  # convertirlo a binario:
  ESTADOBIN_=$(echo "ibase=16;obase=2;$prevState" | bc)
  # rellenar con ceros segun sea necesario:
  ESTADOBIN=$(printf "%04d" $ESTADOBIN_)


#echo "PREVSTATE=$prevState"
#echo "ESTADOBIN=$ESTADOBIN"


  case $1 in
    1)
      case $2 in
        ON|on|On|oN|1) newState=$(echo $ESTADOBIN | cut -c 1-3)"0"
        ;;
        OFF|off|Off|oFF|0) newState=$(echo $ESTADOBIN | cut -c 1-3)"1"
        ;;
      esac
    ;;
    2)
      newState_izq=$(echo $ESTADOBIN | cut -c 1-2)
      newState_der=$(echo $ESTADOBIN | cut -c 4)
      case $2 in
        ON|on|On|oN|1)
          newState=$newState_izq"0"$newState_der
        ;;
        OFF|off|Off|oFF|0)
          newState=$newState_izq"1"$newState_der
        ;;
      esac
    ;;
    3)
      newState_izq=$(echo $ESTADOBIN | cut -c 1)
      newState_der=$(echo $ESTADOBIN | cut -c 3-4)
      case $2 in
        ON|on|On|oN|1)
          newState=$newState_izq"0"$newState_der
        ;;
        OFF|off|Off|oFF|0)
          newState=$newState_izq"1"$newState_der
        ;;
      esac
    ;;
    4)
      newState_der=$(echo $ESTADOBIN | cut -c 2-4)
      case $2 in
        ON|on|On|oN|1) newState="0"$newState_der
        ;;
        OFF|off|Off|oFF|0) newState="1"$newState_der
        ;;
      esac
    ;;
    *)
      echo "SINTAXIS MAL"
    ;;
  esac




  # convertir nuevoestado a HEXADECIMAL:
  # primero a decimal por bc tiquismiquis:
   ESTADODEC=$(echo "ibase=2; $newState"|bc)
   ESTADOHEX=$(echo "obase=16; $ESTADODEC"|bc)
   ESTADOHEXOK=0x$ESTADOHEX
#echo ESTADOBIN=$ESTADOBIN
#echo newState=$newState
#echo ESTADODEC=$ESTADODEC
#echo ESTADOHEXOK=$ESTADOHEXOK
#echo "i2cset -y 0 0x20 $ESTADOHEXOK"F
 i2cset -y 0 0x20 "$ESTADOHEXOK"F
else
  echo "SINTAXIS rele.sh numEnchufe ON/OFF"
fi
Título: Re:Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 27-10-2018, 23:11 (Sábado)
Hola @peperfus.

Yo es que no lo hago así a pelo, resulta altamente engorroso (por lo menos para mi)
yo lo que hago es cargar el módulo al kernel y que el haga los cálculos.... (lo cargo en el arranque /etc/rc.local)

Código: [Seleccionar]
echo pcf8574 0x39 > /sys/bus/i2c/devices/i2c-0/new_device
De este modo, ya los tratas como 8 GPIO nuevos en gpiochipX, y para simplificar el uso de ellos uso este script de la siguiente manera; /etc/gpio 3 out 0 para encender el relé o /etc/gpio  3 out 1 para apagar el relé

Código: [Seleccionar]
#!/bin/sh
 
show_usage()
{
    printf "\ngpio.sh <gpio pin number> [in|out [<value>]]\n"
}
 
if [ \( $# -eq 0 \) -o \( $# -gt 3 \) ] ; then
    show_usage
    printf "\n\nERROR: incorrect number of parameters\n"
    exit 255
fi
 
GPIOBASE=`cat /sys/class/gpio/gpiochip*/base | head -n1`
GPIO=`expr $1 + $GPIOBASE`
 
#doesn't hurt to export a gpio more than once
(echo $GPIO > /sys/class/gpio/export) >& /dev/null
 
if [  $# -eq 1 ] ; then
   cat /sys/class/gpio/gpio$GPIO/value
   exit 0
fi
 
if [ \( "$2" != "in" \) -a  \( "$2" != "out" \) ] ; then
    show_usage
    printf "\n\nERROR: second parameter must be 'in' or 'out'\n"
    exit 255
fi
 
echo $2 > /sys/class/gpio/gpio$GPIO/direction
 
if [  $# -eq 2 ] ; then
   cat /sys/class/gpio/gpio$GPIO/value
   exit 0
fi
 
 
VAL=$3
 
if [ $VAL -ne 0 ] ; then
    VAL=1
fi
 
echo $VAL > /sys/class/gpio/gpio$GPIO/value 
nota: el script ya exporta el gpio y tu lo mismo lo declaras out que in según te interese en la instrucción en si con el script, también te permite tratar todos los gpio's como 1, 2, 3, etc... hasta el ultimo es decir, gpio 1 y no gpio 477.

Luego con un simple condicional => a un boton xxx  controlas el relé (mirate triggerhappy o procd buttons)

Código: [Seleccionar]
#!/bin/sh
A=`cat /sys/class/gpio/gpio479/value`
                           
if [ $A -ne 1 ];then       
        /etc/gpio 7 out 1
elif [ $A -eq 1 ];then     
        /etc/gpio 7 out 0
else                       
        /etc/gpio 7 out 1                 
fi                     
Es la forma más cómoda que se me ocurre a mi, no se si tienes tu otra idea....
Saludos.
Título: Re:Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 29-10-2018, 23:22 (Lunes)
Hola, Ficht
Mucho mejor tu forma, pero ya que había empezado, me he encabezonado con terminar el script, hasta que lo he conseguido hacer funcionar.
Cualquier día pruebo lo que comentas, que tiene muy buena pinta. No sabía que se podía hacer eso. (En realidad soy muy novato en linux todavía..., pero poco a poco aprendiendo cosillas).

Saludos y gracias por compartir !!
Título: Re:Un bocata de relés, por favor. Novato empezando...
Publicado por: raphik en 30-10-2018, 14:41 (Martes)
...
El SCRIPT que utilizo para modificar el estado de una plaquita de 4 relés, conectados al bus expansor: PCF8574. En realidad se puede utilizar para cualquier propósito, siempre para los 4 pines primeros de la expansora.
Requiere la utilidad bc
...

En realidad se puede hacer sin la utilidad bc.

Para recoger el estado de los relés:
Código: [Seleccionar]
DISPOSITIVO=0x20
prevState=$(printf "%d" $(i2cget -y 0 $DISPOSITIVO))

Para establecer el estado de los relés:
Código: [Seleccionar]
DISPOSITIVO=0x20
$(printf "i2cset -y 0 %s 0x%02x\n" $DISPOSITIVO $lastState)

El valor de lastState se calcula a partir de la variable prevState y del parámetro $1.
Se utiliza lógica negativa. Es decir, el 0 activa el relé y el 1 lo desactiva.

Para ACTIVAR:
Código: [Seleccionar]
# ON => a AND NOT(b)
lastState=$(( $prevState & $(( ~$(( 2**$1 )) )) ))

Para DESACTIVAR:
Código: [Seleccionar]
# OFF => a OR b
lastState=$(( $prevState | $(( 2**$1 )) ))

El script completo.

rele.sh
Código: [Seleccionar]
#!/bin/sh                                                                                                       

DISPOSITIVO=0x20                                                                                               

verSintaxis(){
  printf "\n  rele.sh v1.0\n"
  printf "\n  SINTAXIS ./rele.sh ENCHUFE ESTADO"
}                                                                                                               

if [ $# -ne 2 ]; then
  verSintaxis
  printf "\n  ERROR: Se requieren dos par..metros\n\n"
  exit
fi

if ! [ "$1" -eq "$1" ] 2>/etc/null || [ "$1" -lt 0 ] || [ "$1" -gt 7 ]; then
  verSintaxis
  printf "\n  ERROR: ENCHUFE = 0 .. 7\n\n"
  exit
fi

MANIOBRA=$(echo $2 | tr [a-z] [A-Z])

if [ $MANIOBRA != "ON" ] && [ $MANIOBRA != "1" ] && [ $MANIOBRA != "OFF" ] && [ $MANIOBRA != "0" ]; then
  verSintaxis
  printf "\n  ERROR: ESTADO = OFF | ON | 0 | 1\n\n"
  exit
fi

# Leer estado previo
prevState=$(printf "%d" $(i2cget -y 0 $DISPOSITIVO))
                                                                                                               
# Activar
if [ $MANIOBRA == "ON" ] || [ $MANIOBRA == "1" ]; then
  # printf "Activar #$1\n"
  # ON => a AND NOT(b)
  lastState=$(( $prevState & $(( ~$(( 2**$1 )) )) ))
fi                                                                                                             

# Desactivar
if [ $MANIOBRA == "OFF" ] || [ $MANIOBRA  == "0" ]; then
  # printf "Desactivar #$1\n"
  # OFF => a OR b
  lastState=$(( $prevState | $(( 2**$1 )) ))
fi

# Enviar orden a los relés
$(printf "i2cset -y 0 %s 0x%02x\n" $DISPOSITIVO $lastState)
# Para visualizar el estado inicial y final de los relés descomentar las dos líneas siguientes
# printf "Estado inicial: "; awk -v var="$prevState" 'BEGIN { for (i = 0; i <= 7; i++) { printf int(var/2^(7-i))%2 } print }'
# printf "Estado - final: "; awk -v var="$lastState" 'BEGIN { for (i = 0; i <= 7; i++) { printf int(var/2^(7-i))%2 } print }'

La sintaxis de llamada al script es
Código: [Seleccionar]
./rele.sh 0 on   # Activar relé P0
./rele.sh 5 off  # Desactivar relé P5

¿Y si tuviéramos que manejar más de ocho relés?
(https://i.imgur.com/MjSYxpH.png)
Para manejar más de ocho relés hay que usar tarjetas expansoras adicionales. Sería necesario desincrustar del código la dirección i2c y pasarla como parámetro.

La sintaxis quedaría así
Código: [Seleccionar]
./rele.sh 0x20 0 on   # Activar relé P0 de la expansora 0x20
./rele.sh 0x21 5 off  # Desactivar relé P5 de la expansora 0x21

Saludos.
Título: FANTASMAS
Publicado por: peperfus en 18-11-2018, 12:36 (Domingo)
Muchas gracias por los comentarios y las opciones propuestas.

Comento ahora porque me está pasando una cosa absolutamente fantasmagórica con mi script. (Y no exagero, me he roto la cabeza durante horas y no entiendo qué coj... está pasando).
Aviso que esto es para valientes  ;D

El misterio es que mi script, en teoría (y en la práctica), aún siendo menos eficiente que los vuestros.... funciona perfectamente:
Enciende y apaga cada relé independientemente de los demás.
Sin embargo.... hay algún caso particular, según el orden de encendido que hace que el comando cut falle:
Me explico breve y directamente:

ESTADOBIN=1010
Si a eso le aplico un cut -c 2-4 debería devolverme 010, verdad?
Pues me devuelve 8  ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? WTF.

Le he puesto un par de echos en el script, antes del comando cut, para asegurarme de que el contenido de la variable es exactamente correcto. Y LO ES.
Este es el trozo FANTASMA (fallo totalmente inexplicable, sucesos paranormales) del script:

Código: [Seleccionar]
echo "ESTADOBIN en 4 es $ESTADOBIN"
      newState_BRUTO_der=$(($(echo $ESTADOBIN | cut -c 2-4)))
      newState_BRUTO_der_OK=$(printf "%03d" $newState_BRUTO_der)

echo "_____________"

  echo "newState_BRUTO_der $newState_BRUTO_der (cut 2-4)"
  echo "newState_BRUTO_der_OK $newState_BRUTO_der_OK printf %03d"

echo "_____________"

Y esta es la salida:
Código: [Seleccionar]
ESTADOBIN en 4 es 1010
_____________
newState_BRUTO_der 8 (cut 2-4)
newState_BRUTO_der_OK 008 printf %03d
_____________

Me joden muchísimo estas cosas, porque deja mi razonamiento y mi lógica por los suelos. Es como si un duendecillo se estuviera cachondeando de mí.

Si algún valiente e intrépido detective  no le tiene miedo a los expedientes X y se atreve a enfrentarse a lo desconocido.... que me avise. Lo invitaré a una cerveza con mucho gusto.

El caso es que el relé número 4 se enciende y apaga perfectamente, de forma independiente. Es cuando hago cierta secuencia de encendido y apagado de otros relés cuando se produce el inexplicable fallo del cut. Esta es la secuencia que produce fallo:
./rele.sh 1 on (OK, perfecto)
./rele.sh 2 on (OK, perfecto)
./rele.sh 3 on (OK, perfecto)
./rele.sh 2 off (OK, perfecto)
./rele.sh 4 on  SUCESO PARANORMAL. cut debe devolver 010, en cambio, me devuelve 8  :P
Totalmente inexplicable.
Título: Re:Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 18-11-2018, 16:10 (Domingo)
Hola @peperfus

Tu estás usando el AR-5387un ?
Yo tengo en uso este "AR-5387UN"  un "VH4032N" y otro "HG556a" también con reles en bus I2C, no se si te ayuda pero a mi caso parece ser la fuente de la placa del AR-5387un,  cuando se producen "armónicos" en la corriente eléctrica de mi casa, el estado de los pcf8574 del bus, se ve afectado en este router (cambia de estado a voluntad) "fantasmagórico"....  en cambio, no pasa en el VH4032N ni en el HG556A (por supuesto que he ido descartando tomas de conexiones de otros puntos de la casa y temas así) la secuencia me ocurre con las luces de la cocina, que al encenderlas o apagarlas, producen un estado "como de flotación en los pines del pcf8574 (en el AR-5387un)", al repetir el script dos o tres veces  se corrige el estado.
Buscando la parte positiva, esto me ha servido para ver éste fallo en mi casa, que he ido afinando y ya solo ocurre aveces y solo al encender la cocina (en un tema aveces complejo)
Título: Re:FANTASMAS
Publicado por: eduperez en 18-11-2018, 21:39 (Domingo)
Sin embargo.... hay algún caso particular, según el orden de encendido que hace que el comando cut falle:
Me explico breve y directamente:

ESTADOBIN=1010
Si a eso le aplico un cut -c 2-4 debería devolverme 010, verdad?
Pues me devuelve 8  ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? WTF.

Le he puesto un par de echos en el script, antes del comando cut, para asegurarme de que el contenido de la variable es exactamente correcto. Y LO ES.
Este es el trozo FANTASMA (fallo totalmente inexplicable, sucesos paranormales) del script:

Código: [Seleccionar]
echo "ESTADOBIN en 4 es $ESTADOBIN"
      newState_BRUTO_der=$(($(echo $ESTADOBIN | cut -c 2-4)))
      newState_BRUTO_der_OK=$(printf "%03d" $newState_BRUTO_der)

echo "_____________"

  echo "newState_BRUTO_der $newState_BRUTO_der (cut 2-4)"
  echo "newState_BRUTO_der_OK $newState_BRUTO_der_OK printf %03d"

echo "_____________"

Si ejecutas "$(echo $ESTADOBIN | cut -c 2-4)", el resultado es directamente "010", no necesitas más.
Si ejecutas "$(($(echo $ESTADOBIN | cut -c 2-4)))", entonces estás pidiendo que se interprete "(010)", pero los números que comienzan por 0 se asume que están en octal, y "010" en octal es "8".
Título: Re:Un bocata de relés, por favor. Novato empezando...
Publicado por: peperfus en 18-11-2018, 23:00 (Domingo)
eduperez, MIL GRACIAS.

No tengo prácticamente ni idea de la sintaxis del $ y los paréntesis para asignar valores a las variables....
Lo vi por ahí en Internet, lo probé y como me funcionaba, ya suponía que era correcto, pero ya he visto que no.

Lo he corregido y ya funciona perfectamente.  >:( >:( >:( >:(

Fantasma cazado  ;D ;D ;D
Voy a corregir el script que puse en un post anterior por si alguien lo quiere utilizar, para que no se lleve el mismo error.

Gracias otra vez. Si hay la posibilidad, te invito a una cerveza.

(Ficht, a ti también te invito, jejejeje)
Título: Re:Un bocata de relés, por favor. Novato empezando...
Publicado por: eduperez en 20-11-2018, 15:13 (Martes)
eduperez, MIL GRACIAS.

No tengo prácticamente ni idea de la sintaxis del $ y los paréntesis para asignar valores a las variables....
Lo vi por ahí en Internet, lo probé y como me funcionaba, ya suponía que era correcto, pero ya he visto que no.

Lo he corregido y ya funciona perfectamente.  >:( >:( >:( >:(

Fantasma cazado  ;D ;D ;D
Voy a corregir el script que puse en un post anterior por si alguien lo quiere utilizar, para que no se lleve el mismo error.

Gracias otra vez. Si hay la posibilidad, te invito a una cerveza.

(Ficht, a ti también te invito, jejejeje)

En el fondo no es tan complicado...

Te agradezco la cerveza, la próxima vez que me tome una lo haré a tu salud.
Título: Re:Un bocata de relés, por favor. Novato empezando...
Publicado por: raphik en 29-05-2019, 13:02 (Miércoles)
Repasando viejos temas (https://foro.seguridadwireless.net/openwrt/(desarrollo)-openwrt-en-huawei-hg556a/msg346147/#msg346147), he visto que las nuevas compilaciones de OpenWrt vuelven a incluir el paquete crelay (https://openwrt.org/docs/guide-user/services/automation/crelay).

El paquete crelay permite manejar relés conectados al USB del router, tanto por comandos como por GUI incluida. La ventaja fundamental es que no hay que soldar cables a los GPIOs.
(https://i.imgur.com/Az8dfSB.png)
Web-GUI incluída en crelay.
(https://i.imgur.com/MifXNFs.png)

Saludos.
Título: Re:Un bocata de relés, por favor. Novato empezando...
Publicado por: Ficht en 29-05-2019, 17:58 (Miércoles)
Lo tengo compilado en el vh4032n y no lo he probado aún jaja, ahora estoy jugando mucho con los RTL-SDR, igual está noche lo pruebo...
Saludos.