Go Down

Topic: ethernet shield + RF 433Mhz (Read 3374 times) previous topic - next topic

ehrja

#30
Apr 23, 2014, 05:10 am Last Edit: Apr 23, 2014, 05:33 am by ehrja Reason: 1
Oh que bien ya encontramos el problema...
Quote
Virtualwire:
Caution: VirtualWire takes over Arduino Timer1, and this will affect the PWM capabilities of the digital pins 9 and 10.


Lo que dice maxid tiene sentido: utilizar el serial para mandar y recibir los datos por el inalambrico
te iba a sugerir eso en mi primer comentario, mirando lo que maxid decia, pero me estaba haciendo bolas comparando lo con virtualwire y no quería confundirte mas jejeje...
De hecho en mi proyecto para la parte que manda y recibe los datos utilizo el USART pero como estoy usando un attiny2313 el codigo es chiquititito, pero bueno nada que ver con el Serial de arduino.

---

es fácil utilizar el serial con los modulos inalambricos:

Arduino -   Receptor                           -----                 Arduino  -   Transmisor
   pin 0   -   data pin (rx)          ~~~~~~~~~~~      pin 1       -      data pin (TX)

Solo pones el pin de datos del receptor en el pin rx del arduino y lo mismo con el otro pero en el tx, y en el código utiliza Serial.print("algo ");  para mandar y el otro lo recibe con Serial.read();
cierto maxid?
28.11.2014  &#8224Roberto Gómez Bolaños, Chespirito.   Q.P.D.
¿Y ahora quien podra defendernos?

gains

#31
Apr 23, 2014, 06:06 am Last Edit: Apr 23, 2014, 09:10 am by gains Reason: 1
Hola Ehrja,
entiendo mas o menos lo que quereis decirme, empezare de nuevo, intentando enviar aunque sea un "hola" y a partir de ahi seguir.

Saludos!


EDITO:

Me he puesto manos a la obra, pero...primera y de frente!. He puesto como me habeis dicho el transmisor en el pin 1 TX, he subido el sketch con el cable del modulo transmisor desconectado, para que no de errores al compartir los pins con el USB, alimentandolo externamente. Una cosa que no me gusta como dije en un anterior post cuando lo probe por primera vez, es que se queda todo el rato de continuo el modulo transmitiendo. Cambio el delay, y retrasa el envio de informacion, se escucha, pero se queda todo el rato el modulo en portadora. una consecuencia de tenerlo asi seria que las baterias durarian mucho menos.
Bueno lo aceptamos y seguimos... ;)

Este es el skecth que he subido al Arduino del transmisor:

Code: [Select]

int i = 3;
void setup(){
 Serial.begin(9600);
}
void loop() {
 Serial.println(i);

 delay(2000);
}


Es asi como decis? Asi me muestra en el serial el numero 3 todo el rato. Cada 2 segundos, entre la portadora que hace el modulo transmisor escucho como se envia la informacion, coincidiendo cada vez que me sale el numero 3 en el serial.
Entonces entiendo que esta enviando la informacion.

Paso al arduino con el modulo receptor.
Misma operacion, envio el sketch con el cable del modulo receptor desconectado para que no de error , luego lo conecto. En este Arduino lo pongo al pin 0 RX y lo alimento externamente tambien.

Este es el codigo del Arduino Receptor:

Code: [Select]

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() {
  lcd.begin(16, 2);  
 Serial.begin(9600);
 Serial.println("hola");
 pinMode(0, INPUT);
}

void loop()
{
  int receptor = digitalRead(0);
  Serial.println(" mensaje: ");
  Serial.println(receptor);
  lcd.setCursor(0, 0);
  lcd.print("M=");
  lcd.print(receptor);
  delay(1000);
}


Que he hecho mal? no llego a recibir nada  :smiley-red:

He probado con o sin pinMode, como salida y entrada, pero nada. Al quedarme sin ver el serial, no puedo ver que sucede, tengo que mostrarlo en el lcd, pero siempre sale el valor de 1 o 0, vamos que va mal.

Sigo mirando informacion.

Saludos!

noter

Hola.
Para enviar bytes deberías usar Serial.write en el emisor y Serial.read en el receptor. Echale un vistazo a la referencia de Serial para ver todos los comandos disponibles.
Con un digitalread por sí solo no podrás leer un dado serializado.

gains

Ok Noter gracias por tu respuesta, voy a mirarlo.  ;)

Saludos!

ehrja

Seria Serial.read() sin utilizar el pinMode() el Serial.begin() se encarga de configurar los dos pines Rx y Tx

eso de que se queda transmitiendo todo el rato, no me quedo muy claro.
28.11.2014  &#8224Roberto Gómez Bolaños, Chespirito.   Q.P.D.
¿Y ahora quien podra defendernos?

gains

Hola Ehrja,

te comento, tengo un walky que me sube a 433 Mhz, con lo cual puedo escuchar las señales. Con el VirtualWire cuando transmitia solo transmitia la informacion y paraba. Asi asi todas las veces que transmite solo hace la portadora necesaria para enviar la info.

Con el pin TX no sucede asi, hace portadora continua, y cada tiempo indicado en el delay envia la informacion, pero sigue haciendo portadora.

En la jerga HAMRADIO te diria que hace PTT continuo y cada tiempo envia la informacion.
Imaginatelo asi, tienes un walky y cada vez que hablas (en este caso envias la info) pulsas un boton (se llama PTT) no? Asi seria la forma correcta, hablas y sueltas el boton. Bien con el virtualwire me lo hace asi, que pasa cuando no utilizo el virtualwire y lo pongo directo al TX para hacerlo por serial, pues imaginate, quieres hablar por el walky, y SIEMPRE tienes el boton pulsado, pero hablas cada tiempo.  Con lo cual siempre estas emitiendo portadora, pero cada tiempo emites la info como modulacion por decirlo de algun modo. Si quiero ponerlo remoto, el consumo de bateria aumentara considerablemente, etc etc....

No se si me he explicado bien jejeje  :P

Saludos!

ehrja

si creo que si te entiendo, la señal es mas limpia con el virtualWire que con el serial, nunca probe usar el virtualWire:

                      |                         señal                              |
virtualWire     ---------------11010101-------------------
     Serial         &%&*%$$&#*11010101**&&$&%##%%$/

de hecho en los datos que recupere para mi proyecto menciona que hay que usar interupciones y un truco mandando un dato al inicio de la cadena, como un dato especifico que indica el comienzo de la transmicion, en medio los datos y al final un dato que le llaman checksum este es la suma de los datos y sirve para comprobar la integridad de la cadena, siempre escucha pero cuando escucha ese dato se interrumpe el codigo y se ejecuta el codigo dentro de la interrupcion, que seria para leer y analizar la cadena de datos, todo un reto, no solo por los interruptores(cosa fasil) pero por el continuo ruido que hay en la señal que es supongo es originada por el serial en reposo.

-conrazon ya me estaba interesando el virtualWire jeje, en la documentación mencionan un lado negativo del serial....

|                                       señal ejemplo con el serial                                     |
**/$&(/&#%$/(/(11111111 10101110 1100101 checksum (/)&%&%#$#((&$&($&

ahora recuerdo que en mi proyecto me quede pensando en una forma de evitar ese ruido y ahora mismo se me ocurrió una muy sencilla pero no se si funcione, utilizar un transistor o un mosfet para habilitar la coneccion entre el pin Tx y el transmisor, con otro pin lo habilitamos antes de mandar la señal y lo deshabilitamos al final, bueno es solo una idea.
-que no creo que sea tan buena despues de todo, ahora que lo pienso tambien recibia ruido cuando el transmisor estaba apagado, bueno en fin lo dejo aquí "for the record".
28.11.2014  &#8224Roberto Gómez Bolaños, Chespirito.   Q.P.D.
¿Y ahora quien podra defendernos?

gains

Entonces si que puede que sea eso Ehrja, faltaria mirar eso, la forma de que no fuera de continuo.
Pero bueno esto cada vez se va liando mas, al final optare por desistir de la ethernet, comprar un lcd mas grande, y dejarlo todo para mas adelante o cuando comprenda mejor las cosas.

Sigo probando!

Saludos

ehrja

No bueno yo tampoco quería des motivarte, yo en cambio le echaría un ojo clínico al virtualWire o esperar que maxid nos sugiera algo con el serial

saludos.
28.11.2014  &#8224Roberto Gómez Bolaños, Chespirito.   Q.P.D.
¿Y ahora quien podra defendernos?

gains

No no todo lo contrario Ehrja! aun que me dais pistas y voy buscando y probando cosas, sino creo que hace dias que no hubiera continuado jejeje De todas formas quiero agradeceroslo!

Saludos

maxid

#40
Apr 23, 2014, 04:44 pm Last Edit: Apr 23, 2014, 05:02 pm by maxid Reason: 1

Hola Ehrja,

te comento, tengo un walky que me sube a 433 Mhz, con lo cual puedo escuchar las señales. Con el VirtualWire cuando transmitia solo transmitia la informacion y paraba. Asi asi todas las veces que transmite solo hace la portadora necesaria para enviar la info.

Con el pin TX no sucede asi, hace portadora continua, y cada tiempo indicado en el delay envia la informacion, pero sigue haciendo portadora.

En la jerga HAMRADIO te diria que hace PTT continuo y cada tiempo envia la informacion.
Imaginatelo asi, tienes un walky y cada vez que hablas (en este caso envias la info) pulsas un boton (se llama PTT) no? Asi seria la forma correcta, hablas y sueltas el boton. Bien con el virtualwire me lo hace asi, que pasa cuando no utilizo el virtualwire y lo pongo directo al TX para hacerlo por serial, pues imaginate, quieres hablar por el walky, y SIEMPRE tienes el boton pulsado, pero hablas cada tiempo.  Con lo cual siempre estas emitiendo portadora, pero cada tiempo emites la info como modulacion por decirlo de algun modo. Si quiero ponerlo remoto, el consumo de bateria aumentara considerablemente, etc etc....

No se si me he explicado bien jejeje  :P

Saludos!


soy radio aficionado LU4HNE, el ptt es push to talk.

Me parece raro que transmita todo el tiempo, porque esos bichitos son en  AM y emiten solo con el bit alto, salvo tengan algun otro metodo de emision como manchester que el 0 y 1 siempre hay bits altos.
Haz la prueba de conectar solo sin arduino el transmisor en un protoboard +5, gnd y data conentado a una resistencia de 10k a gnd.
Y prueba de ponerlo en transmision manualmente con un pulsador, no sea que tenes ruido y emite por eso todo el tiempo y escuchas con tu walky.
Y no es mala idea poner un par de capacitores de desacople de 100nf y 10uf en la alimentacion.

Hay algunos modelos que tienen un 4to pin para habilitar la transmision, con lo que poner un mosfet pequeño que lo prenda antes de enviar no seria mala idea
El que pregunta aprende, el que responde aprende a responder.

maxid

Perdon, corregi el grafico por que sino no va a funcionar.

Otra cosa que puede ser que virtualwire tenga un protocolo, y este se encargue de leer datos validos y descartar el ruido.
Que para esto puedes usar librerias como messenger, hay muchos mas por ahi dando vuelta.
playground.arduino.cc/Code/Messenger

Puedes hacer tu protocolo esperando por ejemplo un valor b01111110 para seguir leyendo el resto y ese tambien puede ser el terminador.  trama 01111110 + datos + 01111110
El que pregunta aprende, el que responde aprende a responder.

gains

Hola Maxid,

si eres radioaficionado entonces me habras entendido ;)

Que bueno el circuito que me has pasado, lo acabo de montar y es asi como deberia funcionar mas o menos en el Arduino, cada vez que pulsas el boton hace portadora y deberia de enviar la info. Me lo guardo para cualquier invento jejeje
Al montarlo en el pin 1 TX siempre hace portadora, y cada tiempo (el que indico con el delay) manda los datos pero siguiendo la portadora continuamente.
Este modulo el transmisor FS1000A solo tiene 3 pins, el receptor si que tiene 4 pins, gnd, vcc, y 2 data.
Ok, buscare informacion sobre la libreria "Messenger" a ver si encuentro alguna pista mas.

Saludos!

maxid

Pero con el circuito manual emite portadora?
Con arduino sin enviar datos emite portadora?
Leiste con un multimetro si no hay tension?, recuerda que es cmos y con 2 voltios ya toma como 1.
Probaste de pones un capacitor de 10uf en la alimentacion del modulo?
Probaste de poner la resistencia entre el data y gnd con arduino? Esto te asegura el 0.
El que pregunta aprende, el que responde aprende a responder.

gains

hola Maxid,

Quote
Pero con el circuito manual emite portadora?

Si, emite portadora cada vez que pulso, cuando no no hace portadora.

Quote
Con arduino sin enviar datos emite portadora?

Si, con o sin datos solo poniendolo en el pin 1 TX ya se pone en portadora.

Quote
Leiste con un multimetro si no hay tension?, recuerda que es cmos y con 2 voltios ya toma como 1.
Probaste de pones un capacitor de 10uf en la alimentacion del modulo?

No a las dos cosas, buscare en el baul de trastos a ver si puedo sacar algun capacitor de 10uf.

Quote
Probaste de poner la resistencia entre el data y gnd con arduino? Esto te asegura el 0.

No, no lo he llegado a probar, en el esquema que lo tenia montado en el Arduino es como el equema que puse en el anterior post.

Saludos

Go Up