Pages: [1]   Go Down
Author Topic: Invio stringa con moduli tx 433 Mhz  (Read 418 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 51
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, ho necessità di inviare una stringa, tramite modulo tx 433 Mhz, contenente i seguenti campi:
2013/09/25;12:45:16;3240;3315;0,2700;0,2700;0,2700;0,2763;0,2700;0,0062;228,8
che sono dati relativi alla produzione, consumo, autoconsumo, tensione di rete, data e ora ecc.ecc da un arduino mega ad un arduino uno che poi deve trasferirli in rete tramite la ethernet shield.
Perchè non riesce ad inviarmela tutta?
ci sono limitazioni sulla lunghezza stringa da inviare tramite moduli?
quale soluzione potrei valutare affinchè mi manda tutta la stringa?
N.B. utilizzo la libreria virtualwire
Grazie a tutti per l'aiuto
Saluti
« Last Edit: September 27, 2013, 11:20:33 am by cico_32 » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 51
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Queste sono le prove che faccio e perdo stringhe in ricezione
Aruino mega (lo uso come tx)
Quote
#include <VirtualWire.h>

const int led_pin = 11;
const int transmit_pin = 12;
const int receive_pin = 2;
const int transmit_en_pin = 3;

void setup()
{
  // Initialise the IO and ISR
  vw_set_tx_pin(transmit_pin);
  vw_set_rx_pin(receive_pin);
  vw_set_ptt_pin(transmit_en_pin);
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);    // Bits per sec
}

byte count = 63;

void loop()
{
  char msg[] = "2013/09/25 #";

  msg[11] = count;
  digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
  vw_send((uint8_t *)msg, 12);
  vw_wait_tx(); // Wait until the whole message is gone
  digitalWrite(led_pin, LOW);
  delay(1000);
  count = count + 1;
  if (count > 90) count = 63;
}


Arduino uno (lo uso come RX)
Quote
#include <VirtualWire.h>

const int led_pin = 6;
const int transmit_pin = 12;
const int receive_pin = 11;
const int transmit_en_pin = 3;

void setup()
{
    delay(1000);
    Serial.begin(9600);   // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_tx_pin(transmit_pin);
    vw_set_rx_pin(receive_pin);
    vw_set_ptt_pin(transmit_en_pin);
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);    // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
   int i;

        digitalWrite(led_pin, HIGH); // Flash a light to show received good message
   // Message with a good checksum received, print it.
   Serial.print("Got: ");
   
   for (i = 0; i < buflen; i++)
   {
       Serial.print((char)buf);
       //Serial.print(' ');
   }
   Serial.println();
        digitalWrite(led_pin, LOW);
    }
}

questo è quanto ricevo
Got: 2013/09/25 A
Got: 2013/09/25 B
Got: 2013/09/25 C
Got: 2013/09/25 D
Got: 2013/09/25 E
Got: 2013/09/25 G
Got: 2013/09/25 H
Got: 2013/09/25 J
Got: 2013/09/25 K
Got: 2013/09/25 L
Got: 2013/09/25 M
Got: 2013/09/25 N
Got: 2013/09/25 O
Got: 2013/09/25 P
Got: 2013/09/25 Q
Got: 2013/09/25 R
Got: 2013/09/25 U
Got: 2013/09/25 V
Got: 2013/09/25 W
Got: 2013/09/25 X
Got: 2013/09/25 Y
Got: 2013/09/25 Z
Got: 2013/09/25 ?
Got: 2013/09/25 @

mi ha saltato la F e la I
Come mai?
grazie a tutti per l'aiuto
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 67
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao
Dovresti indicare i moduli 433mhz cosi intanto vediamo a quanti kb/s inviano i dati. A quanti volt alimenti la trasmittente?
Se i dati si "perdono" potrebbe anche essere il lato antenna che non é ben perfezionato( dovresti usare un filo da 17cm sia su lato ricevente che trasmittente)
Altra cosa :
La F e la I te la salta sempre oppure salta a caso alcuni valori? Perché se salta sempre e  solo loro due,potrebbe anche essere che quei sensori (tipo sensori temperatura) richiedono meno di 2000 bit per second quindi  dovresti abbassare il bitrate.
Vedi anche se questo post ti é utile: http://forum.arduino.cc/index.php?topic=22052.0

Con dispositivi fissi l'antenna ideale che ti permette di aumentare il guadagno anche di 5/6 volte ,a paritá di voltaggio, é questa: http://bsrg.org/aatn/hawgant1.gif
« Last Edit: September 28, 2013, 10:53:58 am by Spaceuniversal » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 51
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

i sensori sono questi
http://www.ebay.it/itm/KIT-controllo-remoto-RF-Trasmettitore-e-Ricevitore-433Mhz-compatibile-Arduino-/151030866890?pt=Attrezzature_e_strumentazione&hash=item232a2423ca&_uhb=1

L'antenna è messa nel tx ma al momento sono messi a distanza di 5 cm che li ho sul tavolo...

sono alimentati a 5v. Salta in modo random le lettere non sempre le stesse
« Last Edit: September 28, 2013, 10:58:48 am by cico_32 » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 67
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I moduli vedo che sono quelli piú economici classici.
A quale distanza tieni i due? Considera che con pareti di cemento( il cemento ferma in modo elevato le radiofrequenze come anche il wifi) che fanno da schermo inviare quella stringa senza errori e senza elevare il voltaggio della tx é quasi un'impresa.. (La tx  puó arrivare fino a 12v)
Ps: non avevo letto bene.. Devi montare intanto l'antenna anche sulla ricevente stessa lunghezza.
« Last Edit: September 28, 2013, 11:11:35 am by Spaceuniversal » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 51
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

come ti dicevo, al momento sto facendo prove e i due arduino sono a 5 cm di distanza l'uno dall'altro.
che tipo di moduli potrei acquistare in sostituzione a questi? magari economici..
grazie
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 67
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per i moduli prendi quelli ben documentati che trovi sul link( potresti considerare anche bluetooth)
Qui vedi la lista completa e sito serio: https://www.sparkfun.com/pages/Wireless_Guide

Per vedere se non ci sia problema a livello di codice, aumenta intanto il voltaggio da dare alla tx..
« Last Edit: September 28, 2013, 11:15:07 am by Spaceuniversal » Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 82
Posts: 4168
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non entro nel merito della ricezione del messaggio errato, ma comunque mi sembra che stai usando male la libreria ...


La funzione vw_get_message(buf, &buflen) va chiamata SOLO quando sei sicuro che c'è un messaggio completo, cosa che DEVI verificare prima o con la funzione bloccante vw_wait_rx() o con la funzione NON bloccante vw_have_message(), o con la via di mezzo basata su timeout vw_wait_rx_max(timeout_ms).


Del resto le istruzioni parlano chiaro :

vw_get_message(buf, &buflen)) : Read the last received message. This should be called only when a message is known to be received with any of the 3 functions above. "buf" is an array where the message is copied. "buflen" should have the array's maximum size upon input, and upon return the number of bytes actually copied is retured. The function itself returns true if the message was verified correct, or false if a message was received but appears to have been corrupted.


Tutto preso da QUI ... che poi riporta quanto descritto nel sito ufficiale QUI    smiley-wink

Guglielmo
« Last Edit: September 28, 2013, 11:18:43 am by gpb01 » Logged

Search is Your friend ... or I am Your enemy !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 51
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie a tutti per le risposte.
Farò tutte le prove e poi vi farò sapere.
Saluti
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

visto che sto inizaindo ad utilizzare anche io i moduli rf e ho visto diversi sketch e risposte in questo e altri post che mi sono tornate utili, volevo chiedere questo: a cosa serve l'istruzione byte count = 63; e anche msg [11] = count??? grazie  smiley 11 indica per caso la lunghezza del messaggio??? pero mi potete comunque spiegare l'altra istruzione??? assume qualche rilevanza in questo caso particolare e se ne puo fare quindi anche a meno??? dipende quindi dalle esigenze???
« Last Edit: January 27, 2014, 04:17:14 pm by ardufisher » Logged

Pages: [1]   Go Up
Jump to: