Récepteur 434MHz

Informations et questions sur les composants tiers de la boutique (émetteur/récepteur RF, capteurs...)

Récepteur 434MHz

Message non lude SVz » Mer 13 Fév 2013 09:01

Bonjour,

J'ai realise avec un Raspberry le montage emetteur recepteur du tutorial.
Cela ne fonctionne pas et j'ai un doute sur le recepteur.
Contrairement a celui du tutorial, il n'a pas de sticker "A434" et rien n'est coché sur le circuit (315/434).
Ci-joint photo.
J'ai envoyé un mail au support Snootlab sans réponse pour l'instant.

Image

Image

Si vous avez un avis, merci d'avance.
SVz
 
Messages: 7
Inscription: Mar 12 Fév 2013 14:06

Re: Récepteur 434MHz

Message non lude SesechXP » Sam 16 Fév 2013 14:22

Salut,

Tu peux regarder la fréquence inscrite sur le quartz du module ;)

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Récepteur 434MHz

Message non lude SVz » Mar 19 Fév 2013 09:08

Bonjour,

Merci de ta réponse.
J'ai effectivement bien 434 sur le quartz mais le récepteur ne fonctionne pas.
En tout cas je n'ai jamais eu de réponse de la boutique et je commence a douter du sérieux de snootlab.
Une réponse quel-qu’elle soit m'aurait suffit ...
SVz
 
Messages: 7
Inscription: Mar 12 Fév 2013 14:06

Re: Récepteur 434MHz

Message non lude Bemolu » Mar 19 Fév 2013 22:29

SVz a écrit:J'ai effectivement bien 434 sur le quartz mais le récepteur ne fonctionne pas.


As-tu testé en éloignant ton récepteur et ton émetteur? Je ne suis pas sûr que ça marche si près. Peux-tu brancher l'émetteur sur un autre arduino/raspberry.

De quel tuto parles-tu? (C'est quoi la diode verte entre data et ground, à droite sur la photo?)
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Récepteur 434MHz

Message non lude SVz » Mer 20 Fév 2013 09:32

C'est le tuto : [TUTO] Controle de Prise de courant SCS
J'ai fait ce montage et en même temps j'ai juste alimenté le récepteur et j'ai mis une led pour vérifier que je reçois le signal.
L’émetteur marche bien, je pilote la prise électrique sans problème.
Les 2 sont juste a cote en effet et alimentés par le raspberry. Je testerai avec uniquement le récepteur et la télécommande original de la prise.
SVz
 
Messages: 7
Inscription: Mar 12 Fév 2013 14:06

Re: Récepteur 434MHz

Message non lude fred » Mer 20 Fév 2013 13:07

Bonjour,
Je suis désolé de ne pas avoir pu répondre dans les temps que vous attendez, en effet c'est moi qui réceptionne les demandes et les dispatche ou répond.
Je n'avais jamais utilisé le couple RF 434 "pour de vrai avec mes petites mains" du coup c'est maintenant fait pour vérifier le point :
Contrairement a celui du tutorial, il n'a pas de sticker "A434" et rien n'est coché sur le circuit (315/434).


J'ai utilisé le super tuto du forum de SaW3r.

En fait, le sticker ou le point dans la case n'est pas toujours mis, il faut regarder sur l'oscillateur de l'autre côté (le gros composant avec une coque en métal), dessus on a la fréquence gravée.

J'ai testé avec des récepteurs sans sticker ni marque et ça marche très bien.

Ceux qui me connaissent diront "Fred t'es passé level 4 en Ardiuno, bravo !".
Et je réponds "Raté, je suis level 4 en Redboard" <-- Snootleak

Cet aprem', entre deux colis, je vais essayer de faire comprendre à un Raspberry-pi "Snootlab" dit par un Arduino.

A suivre.
Avatar de l’utilisateur
fred
 
Messages: 213
Inscription: Lun 20 Déc 2010 15:32
Localisation: Toulouse

Re: Récepteur 434MHz

Message non lude SVz » Mer 20 Fév 2013 16:58

ok merci pour la reponse ;)
SVz
 
Messages: 7
Inscription: Mar 12 Fév 2013 14:06

Re: Récepteur 434MHz

Message non lude fred » Ven 22 Fév 2013 17:03

Bonjour,
Le Rpi ne voit probablement pas passer les trames qui arrivent sur le récepteur.

Il est facile d'émettre directement avec un Rpi et de piloter des équipements qui reçoivent les trames car équipés de micro-contrôleur, on a plein de tutoriel à commencer sur ce forum.

En revanche, je n'ai pas trouvé un seul projet où on pilote en RF le Rpi sans l'intermédiaire d'un micro-contrôleur; on trouve deux trois choses avec gestion d'interruptions mais cela mobilise le Rpi et encore ça rate des trames, du coup sans intérêt, autant intercaler un Arduino et disposer de la puissance de calcul du Rpi pour la partie "utile".

Le Rpi n'est pas un micro-contrôleur destiné à la gestion d'entrées-sorties et du coup n'est pas prévu pour faire ce genre de truc, en tous cas pas sans l'aide d'un micro-contrôleur :ugeek:

Est-ce que vous avez testé le récepteur avec un Arduino ?
Avatar de l’utilisateur
fred
 
Messages: 213
Inscription: Lun 20 Déc 2010 15:32
Localisation: Toulouse

Re: Récepteur 434MHz

Message non lude SVz » Ven 22 Fév 2013 17:14

Bonjour,
non je n'en dispose pas.
Merci pour les reponses je vais essayer autre chose du coup ;)
SVz
 
Messages: 7
Inscription: Mar 12 Fév 2013 14:06

Re: Récepteur 434MHz

Message non lude SVz » Dim 3 Mar 2013 21:10

Bonjour,
C'est bon j'ai réussi a lire le code de ma télécommande chacon avec le raspberry.
Le récepteur fonctionne correctement.
++
SVz
 
Messages: 7
Inscription: Mar 12 Fév 2013 14:06

Re: Récepteur 434MHz

Message non lude SVz » Lun 4 Mar 2013 10:30

Voici le code du decodeur. J'ai modifié un code de Geoff trouvé sur le forum Raspberry (tout le merite lui revient ;) ).

    Pre-requi : Librairie wiringpi
    Compilation : g++ -o easydecoder easydecoder.cpp -lwiringPi -lrt
    Usage : sudo ./easydecoder 8
(attention numérotation GPIO8 = 8)
http://elinux.org/RPi_Low-level_peripherals

Code: Tout sélectionner
// g++ -o easydecoder easydecoder.cpp -lwiringPi -lrt
// use the line above to compile this.

#define MINCYCLE 200000
#define MAXCYCLE 2800000
#define THRESHOLD 1000000

#include <wiringPi.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <fcntl.h>
#include <assert.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <unistd.h>
#include <math.h>

int main(int argc, char **argv)
{
        int times[10000];
        int timeIndex = 0;

        char bits[100];
        char IDdevice[100];
   char Codedevice[8];
        int bitIndex = 0;
        int loToHiTime;
        int hiToLoTime;

        timespec t,sleepTime;
        sleepTime.tv_sec = 0;
        sleepTime.tv_nsec = 50000;

        int currentTime = 0;

        char temp[100];

        int missedLoToHi = 0;
        int missedHiToLo = 0;
        int wrongTime = 0;

    if (argv[1]=="")
   {
      printf("Usage : easydecoder pinnumber\n");
      fflush(stdout);
      return 0;
   }
   int pin = atoi(argv[1]);
   
        wiringPiSetupSys();

        pinMode (pin, INPUT);

        sprintf(temp, "gpio edge %d both",pin);
        printf("%s\n",temp);

        system(temp);


        bitIndex = 0;
        memset(bits,0,100);

        waitForInterrupt(pin, 1000);
        while (!digitalRead(pin) == 0)
        {
                waitForInterrupt(pin, 1000);
                clock_gettime(CLOCK_MONOTONIC, &t);
        }

        while (1)
        {
                loToHiTime = t.tv_nsec;
                waitForInterrupt(pin, 1000);
                clock_gettime(CLOCK_MONOTONIC, &t);
                if (nanosleep(&sleepTime,NULL))
                {
                         printf("Sleep error\n");
                }
                if (digitalRead(pin))
                {
                        bitIndex = 0;
                        missedHiToLo ++;
                }
                else
                {
                        hiToLoTime = t.tv_nsec;

                        waitForInterrupt(pin, 1000);
                        clock_gettime(CLOCK_MONOTONIC, &t);
                        nanosleep(&sleepTime,NULL);
                        if (!digitalRead(pin))
                        {
                                missedLoToHi ++;
                                bitIndex = 0;
                                while (!digitalRead(pin))
                                {
                                        waitForInterrupt(pin, 1000);
                                        clock_gettime(CLOCK_MONOTONIC, &t);
                                }
                        }
                        else
                        {
                                int totalTime = t.tv_nsec - loToHiTime;
            int lowDuration = t.tv_nsec - hiToLoTime;

                                if (totalTime < 0)
                                {
                                        totalTime += 1000000000;
                                }

                                  if (totalTime < MINCYCLE || totalTime > MAXCYCLE)
                                  {
                                    wrongTime++;
                                        bitIndex = 0;
            }
                                else
                                {
                                        // probably a valid bit.
                                        int hiDuration = hiToLoTime - loToHiTime;

                                        if (lowDuration < 0)
                                        {
                                                hiDuration += 1000000000;
                                        }

                                        if (lowDuration > THRESHOLD)
                                        {
                                                bits[bitIndex]= '1';
                                        }
                                        else
                                        {
                                                bits[bitIndex]= '0';
                                        }
                                       
               bitIndex ++;

                                        if (bitIndex == 64)
                                        {
                                                //printf("Missed L->H:%d    Missed H->L:%d    Wrong Time:%d\n", missedLoToHi, missedHiToLo, wrongTime);
                                                missedLoToHi = missedHiToLo = wrongTime = 0;
                                                bits[bitIndex] = '\0';
                                                //system("date");
                                                printf("%s\n",bits);
                  int i = 0;
                  int idcode = 0;
                  for (int a = 0; a < 52; a = a +2)
                  {
                     IDdevice[i] = bits[a];
                     if (IDdevice[i] == '1')
                     {
                        idcode = idcode + pow(2,25-i);
                     }
                     i++;
                  }
                  IDdevice[i] = '\0';
                  i = 0;
                  for (int a = 56; a < 63; a = a +2)
                                                {
                                                        Codedevice[i] = bits[a];
                                                        i++;
                                                }
                                                Codedevice[i] = '\0';
                  printf("%s : %c : %c : %s\n",IDdevice,bits[52],bits[54],Codedevice);
                  printf("Identifiant emeteur :%d\n",idcode);
                                                bitIndex = 0;
                                                fflush(stdout);

                                                return 0;
                                        }
                                }
                        }
                }
        }
        return 0;
}

SVz
 
Messages: 7
Inscription: Mar 12 Fév 2013 14:06

Re: Récepteur 434MHz

Message non lude fred » Lun 8 Juin 2015 16:30

En complément un tuto sur le site de idleman et Gladys.
Avatar de l’utilisateur
fred
 
Messages: 213
Inscription: Lun 20 Déc 2010 15:32
Localisation: Toulouse


Retourner vers Composants tiers

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron