Hur få noggrannare FM-signaler från sändare?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Hur få noggrannare FM-signaler från sändare?

Inlägg av Al_Bundy »

Hej!

För ca ett år sedan beställde jag en FM-sändare och en FM-mottagare på 433 Mhz och idag plockade jag upp den och knackade lite C-kod. Jag har fått det att fungera så det är inga problem. Men det jag är lite besviken över är just kvalitén på signalen.

Min kod fungerar så här. När ena AVR CPU:n skickar en 1:a till sändaren och mottagaren tar upp 1:an så ska mottagaren även säga åt en annan AVR CPU att tända en LED diod. Och om sändaren skickar ut en 0:a så betyder det att LED dioden släcks.

Lyckligvis fanns det även bibliotek för denna till..Arduino *halleluja music*

Men det är inte alla gånger mottagaren kan förstå vad sändaren säger. Ibland går det bra att skicka "00" eller "10" eller "100" som tolkas som antingen "0" eller "1", eller tolkas som inget.

Min antenn på dessa moduler är bara en kabel på ca 150-200 mm. Och dessa moduler är för tillfälligt (test) rätt nära varandra.

Hur kan jag då förbättra så att det blir klarare svar? Är det koden jag måste ändra på då, eller biblioteket eller måste jag minimera störningar?

Dessa moduler med 5 volt och ca 150-200mm lång antenn ska ha en räckvidd på ca 90 meter vid plan och tom yta.

Mottagaren:

Kod: Markera allt

//Reciever Code (Leonardo)
#include <VirtualWire.h>

void setup()
{
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13,LOW);
  
  vw_setup(2000);
  vw_set_rx_pin(7);
  vw_rx_start();
}

void loop()
{
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  uint8_t buf[buflen];
  
  if(vw_get_message(buf, &buflen))
  {
    for(int i = 0;i < buflen;i++)
    {
      if(buf[i] == '1')
      {
        digitalWrite(13,HIGH);
        Serial.println("ON");
      }
      else if(buf[i] == '0')
      {
        digitalWrite(13,LOW);
        Serial.println("OFF");
      }
    }
  }
}
Sändaren:

Kod: Markera allt

//Transmitter Code (Uno)
#include <VirtualWire.h>

void setup()
{
  Serial.begin(9600);
  
  vw_setup(2000);
  vw_set_tx_pin(7);
}

void loop()
{
  if(Serial.available())
  {
    char c = Serial.read();
    
    if(c == '1')
    {
      vw_send((uint8_t *)c, 1);
    }
    else if(c == '0')
    {
      vw_send((uint8_t *)c, 1);
    }
  }
}
Morpheuzz
Inlägg: 17
Blev medlem: 11 november 2007, 08:18:24
Ort: Trosa
Kontakt:

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Morpheuzz »

Har själv lekt lite med 433mhz sändare och mottagare och upptäckte att när dom är nära varandra som när man labbar på en bänk så verkade dom störa ut varandra. Men när jag flyttade mottagaren ett par meter bort så vart det mindre störningar!

Kanske inte samma problem som du har men kan va värt att prova?
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Al_Bundy »

Jag ska göra det!

Än fast sändaren sänder ut på 433.92 Mhz, kan mottagaren ta emot även 433.91 Mhz då?
Nerre
Inlägg: 27215
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Nerre »

Vid nästan all kommunikation måste man räkna med att det kan förekomma störningar, man måste alltså ha ett system för att upptäcka överföringsfel och antingen rätta dem eller sända om. Eller möjligen bara förkasta felaktiga data (har man t.ex. en termometer som sänder temperaturen varannan sekund så gör det inte så mycket om man behöver förkasta nåt felaktigt värde ibland).
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Al_Bundy »

Sant. Jag kanske måste göra så att den får ett tillbaka svar.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Al_Bundy »

Jag skriver bara detta:

Om ni får tanken "What the heck ska Mr Bundy ha massa FM-signaler till??".
Det är så att jag är trött på LCD displayer. Dom har aldrig varit bra enligt mig. Krånglig att hålla på med, dyr, dom är inte heller så imponerande då man lika gärna kan ha några 7-segments på rad med en multiplexer.

Jag har därför tänkt att köra allt via radiosignaler istället.
Jag programmerar även i Visual Basic.NET för att det är enkelt språk, lätt att komma igång osv.
Då har jag byggt ett program som kan skicka data via USB till just TX RX på AVR CPU:n Och ja det fungerar :)

Då tänkte jag att värden ska få skickas tillbaka till datorn så datorn kan fint plotta upp en graf, skriva ut massvis med text osv. Det kan knappast en LCD för 3 dollar...

Om någon vill ha koden så är det bara PM:a.

Dessutom så är 7-segments kaxigt.
Nerre
Inlägg: 27215
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Nerre »

Du vill alltså förlänga en massa serielinor via FM-radio?

Det är egentligen ett rätt dumt sätt att lösa det hela, det finns mycket vettigare protokoll att använda om man ska köra radio. Med de protokollen kan du dessutom få CRC och såna saker "på köpet".
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Al_Bundy »

Jadu. Med tanke på att 10 stycken mottagare och sändare på frekvensbandet 433 Mhz kosta mig ca 58 kr totalt ända till dörren så tyckte jag att det var värt med just dessa.

Ja, jag hade mer tänkt det så att en sändare och mottagare sitter på ett kort och det är kopplat till dator. Varje apparat ska ha en mottagare och en sändare.

Om för varje gång en mottagare(1) har fått ett meddelande av en sändare(2) så ska sändare(1) skicka tillbaka till mottagare(2) och bekräfta att den har fått signalen och vilken den är.
Så dom får nog tala lite med varandra innan dem båda apparaterna är överens.

Detta är den metod jag uppfattar som säker, men dock inte den snabbaste.
Nerre
Inlägg: 27215
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Nerre »

Ja, att polla data fungerar ju, men du behöver ju som sagt var då ha ett protokoll med adressering och checksumma. Det finns rätt många färdiga såna så det kan vara idé att titta på vad som finns istället för att uppfinna hjulet på nytt.
Användarvisningsbild
BER
Inlägg: 399
Blev medlem: 9 mars 2005, 00:02:10
Ort: Östergötland

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av BER »

Om inte sändaren/mottagaren har inbyggd manchesterkodning så kan det vara klokt att ordna i koden (modulationstypen styr behovet). Sedan så behövs normalt start och stopp ord samt någon form av kontrollsumma för att erhålla robust kommunikation.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Al_Bundy »

Men vad menar ni? Protokoll, checksumma? Va?

Vi säger att apparat 1 och apparat 2 kommunicerar med varandra. Risken för störning, vilket ger en missuppfattning, är stor. Hur ska man då förebygga denna störning med protokoll och checksumma?
Tänk också på att apparat 3 finns i närheten också.
Nerre
Inlägg: 27215
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Nerre »

Det är ju det protokoll handlar om, att man har bestämda "rutiner" för hur saker ska hanteras.

Säg att centralenheten skickar ett paket till burk A. Hur länge ska den vänta på svar? Vad ska den göra om det inte kommer svar? Ska den försöka igen? Hur många gånger?

Vad ska A göra om den får ett paket som den inte kan tolka? Hur ska A vara säker på att paketet är adresserat till A och att inte en störning gjort att det bara ser ut så?

Hur ska centralenheten hantera om både A och B verkar svara samtidigt?

Felkontroll kan man göra med antingen enkel checksumma eller CRC. Finns även metoder där man kan ha felrättande kod.

En checksumma blir ju fel om det blir fel på överföringen. En checksumma brukar dock bara kunna hantera ETT fel, två fel samtidigt kan göra att checksumman blir rätt fast datat är fel. CRC är bättre på att hantera om det blir flera fel.
Användarvisningsbild
Jonyverse
Inlägg: 1065
Blev medlem: 2 augusti 2005, 22:17:51
Ort: Hässelby, Stockholm

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Jonyverse »

Al_Bundy skrev:Jag ska göra det!

Än fast sändaren sänder ut på 433.92 Mhz, kan mottagaren ta emot även 433.91 Mhz då?
Ja, alla sändare/mottagare som ska föra över information har en bandbredd. FM innebär ju att frekvensen ändras lite uppåt och neråt i takt med signalen som skall föras över. alltså behöver även mottagaren kunna ta emot ett antal KHz över och under 433.92 KHz.
Användarvisningsbild
Icecap
Inlägg: 26645
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Icecap »

Av priset som nämns är det ganska tydligt att det rör sig om dessa billiga skitmoduler utan IQ inbyggd.

För att få skaplig säker och stabil överföring behövs en del saker:
* Sändningen inleds med preamble för att synkronisera och ställa nivåer rätt.
* Då kommer startsekvensen som används för att mottagaren ska kunde fånga starten av datablocket exakt.
* Efter det kommer datablocket. DC-nivån ska vara 50% så Manchesterkodning eller liknande är bra - men man kan göra det vid att varannan bit är "motsatsen" och man kan då antingen använda detta till att checka signalintegriteten eller bara strunta i varannan bit.
* I blocket bör innehållas en CRC i någon form liksom det bör vara information om blockets längd.

När ett block sedan har tagits emot ska längd, CRC osv. kontrolleras och är allt OK är det giltigt.

I essens betyder det att vill man ha en "vettig" överföring med dessa skitmoduler får man koppla till en µC som fixar all hantering av dessa saker och som man kan koppla upp mot via t.ex. en UART.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur få noggrannare FM-signaler från sändare?

Inlägg av Al_Bundy »

Nerre skrev:Det är ju det protokoll handlar om, att man har bestämda "rutiner" för hur saker ska hanteras.

Säg att centralenheten skickar ett paket till burk A. Hur länge ska den vänta på svar? Vad ska den göra om det inte kommer svar? Ska den försöka igen? Hur många gånger?

Vad ska A göra om den får ett paket som den inte kan tolka? Hur ska A vara säker på att paketet är adresserat till A och att inte en störning gjort att det bara ser ut så?

Hur ska centralenheten hantera om både A och B verkar svara samtidigt?

Felkontroll kan man göra med antingen enkel checksumma eller CRC. Finns även metoder där man kan ha felrättande kod.

En checksumma blir ju fel om det blir fel på överföringen. En checksumma brukar dock bara kunna hantera ETT fel, två fel samtidigt kan göra att checksumman blir rätt fast datat är fel. CRC är bättre på att hantera om det blir flera fel.
Jag hade mest tänkt att jag sänder ut en kod som liknar "001:345" där den första koden "001" är adressen och den andra koden "345" är vad modulen ska göra.

Tror du en MD5 checksumma kan fungera? Då kan det antingen bli rätt eller fel, och inte "halv-fel" typ missuppfattning men ändå OK.
Skriv svar