Aller au contenu


Photo
* - - - - 1 note(s)

Transmission Radio [Résolu]


7 réponses à ce sujet

#1 Cocazero

Cocazero

    Nouveau membre

  • Membres
  • 9 messages

Posté 29 avril 2013 - 01:05

Bonjour,
Je suis en train de réaliser un petit robot qui fonctionne avec une télécommande radio (433Mhz si ma mémoire est bonne).
Les fonctions sont extrêmement simple : avancer, reculer, tourner à droite et gauche.
Le joystick est numérique à 5 interrupteurs.

Si le joystick de la télécommande est:
- "en haut", j'envoi un signal carré de fréquence 1kHz
- "en bas", j'envoi un signal carré de fréquence 2kHz
- "à gauche", j'envoi un signal carré de fréquence 4kHz
- "à droite", j'envoi un signal carré de fréquence 8kHz.

Ceci est imposé.

En revanche je voudrais rajouter une fonction : si j'appuie sur le joystick, j'allume une lumière sur le robot.
Je veux que si l'utilisateur demande d'avancer, relâche rapidement le joystick, appuie dessus et redemande d'avancer une lumière s'allume et le robot continue sa route.

Je me suis donc dit que j'allais ajouter une fréquence 16kHz d'émission. Mais c'est là ou je bloque.

J'avais pensé à :
si f = 16kHz alors lumière = 1 - lumière

Mais comment faire pour que si l'utilisateur reste appuyé, la lumière ne change d'état qu'une seule fois ?


Merci d'avance !!



PS: J'ai pensé aussi à si lumière allumé alors rapport cyclique du signal d'émission égal 50% et si on veut que la lumière soit éteinte alors 25%, mais ca complique un peu tout.

#2 sky99

sky99

    Habitué

  • Membres
  • PipPip
  • 271 messages
  • Gender:Male

Posté 29 avril 2013 - 02:16

Bonjour,
Je suis en train de réaliser un petit robot qui fonctionne avec une télécommande radio (433Mhz si ma mémoire est bonne).
Les fonctions sont extrêmement simple : avancer, reculer, tourner à droite et gauche.
Le joystick est numérique à 5 interrupteurs.

Si le joystick de la télécommande est:
- "en haut", j'envoi un signal carré de fréquence 1kHz
- "en bas", j'envoi un signal carré de fréquence 2kHz
- "à gauche", j'envoi un signal carré de fréquence 4kHz
- "à droite", j'envoi un signal carré de fréquence 8kHz.

Ceci est imposé.

En revanche je voudrais rajouter une fonction : si j'appuie sur le joystick, j'allume une lumière sur le robot.
Je veux que si l'utilisateur demande d'avancer, relâche rapidement le joystick, appuie dessus et redemande d'avancer une lumière s'allume et le robot continue sa route.

Je me suis donc dit que j'allais ajouter une fréquence 16kHz d'émission. Mais c'est là ou je bloque.

J'avais pensé à :
si f = 16kHz alors lumière = 1 - lumière

Mais comment faire pour que si l'utilisateur reste appuyé, la lumière ne change d'état qu'une seule fois ?

Merci d'avance !!

PS: J'ai pensé aussi à si lumière allumé alors rapport cyclique du signal d'émission égal 50% et si on veut que la lumière soit éteinte alors 25%, mais ca complique un peu tout.


Pour ma part, j'ai eu cette problématique avec une interface utilisateur et des boutons poussoirs. Ma solution est d'utiliser une commande de type "toggle". Je m'explique.
Il y aurait une variable x quelquepart qui sert à reternir l'état précédent de la commande. Une seconde variable y stocke l'état de la commande reçue.
Enfin, une variable etatLampe, qui stockerait l'état de la lampe (allumé ou éteint).

Donc du coup tu fais par exemple:

x=0;
etatLampe=0;//eteint par défaut par exemple

loop()
{
   y=lireRadio()
   if(y==LIGHT)
   {
     if(y!=x)//si la valeur lue n'était pas déjà "LIGHT" à la précédente lecture,
     {
        etatLampe=not(etatLampe);//on inverse l'état. Si c'était allumé, on éteint, et vice versa.
        digitalPinWrite(ledPin,etatLampe);//et la ben on écrit effectivement l'état de la broche de controle de la led.
     }
   }
   //ici on insère les blocs des autres commandes
   x=y;//ne pas oublier de mettre à jour la variable "état précédent" pour le tour suivant!
}

Du coup, la commande de lumière ne prend effet que si l'on avait une autre commande avant. Si l'utilisateur maintient
alors que c'était éteint, la lumière s'allumera et le restera, jusqu'à ce que l'utilisateur lache et réappuie.
Idem pour le cas inverse.

Le système peut toutefois être sensible aux perturbations du signal radio, donc si l'utilisateur appuie en continu,
mais que le contrôleur voit ça comme plusieurs appuis, il pourrait clignoter (par exemple si il y a des perturbations).

Pour régler ce problème, une solution serait de ne changer l'état que si celui ci est similaire depuis au moins 100ms par exemple,
avec un compteur tout simple de tours de boucle, et une variable stockant quand la dernière lecture de la lampe a été faite.

Ainsi on filtrerait les microcoupures, et 100ms, c'est bien assez rapide pour que l'utilisateur ne remarque pas le délai à l'allumage/extinction.
Au pire on peut adapter cette valeur après des tests (utile si on veut envoyer du morse avec le robot ^^)

Mon site principal : http://www.nagashur.com/ (format blog, un wiki y est aussi)

Mon profil sur hackaday.io : https://hackaday.io/sky99 (hackerspace en anglais, j'y ai plein de projets)

Mon Github : https://github.com/sarinkhan/


#3 Cocazero

Cocazero

    Nouveau membre

  • Membres
  • 9 messages

Posté 29 avril 2013 - 02:55

Merci beaucoup !!
Je vais faire comme cela!

Au passage, j'avais oublié de préciser que la carte n'est pas Arduino mais un FPGA, mais le principe reste le même. ;)

#4 sky99

sky99

    Habitué

  • Membres
  • PipPip
  • 271 messages
  • Gender:Male

Posté 02 mai 2013 - 08:50

Du coup, ça a fonctionné comme tu voulais?

Mon site principal : http://www.nagashur.com/ (format blog, un wiki y est aussi)

Mon profil sur hackaday.io : https://hackaday.io/sky99 (hackerspace en anglais, j'y ai plein de projets)

Mon Github : https://github.com/sarinkhan/


#5 Cocazero

Cocazero

    Nouveau membre

  • Membres
  • 9 messages

Posté 02 mai 2013 - 09:28

Je n'ai pas encore fini le code, je suis en train de galèrer sur le fréquencemètre (côté robot), qui déduira de la fréquence reçue les instructions demandées.

Je pense compter 25.000 tops d'horloge (soit 1ms) et pendant ce temps compter les fronts montants du signal reçu et en déduire la fréquence.

Voilà :)
Je vous tiendrais au courant!

Merci encore !!

#6 sky99

sky99

    Habitué

  • Membres
  • PipPip
  • 271 messages
  • Gender:Male

Posté 02 mai 2013 - 10:38

Bon courage alors :)

Mon site principal : http://www.nagashur.com/ (format blog, un wiki y est aussi)

Mon profil sur hackaday.io : https://hackaday.io/sky99 (hackerspace en anglais, j'y ai plein de projets)

Mon Github : https://github.com/sarinkhan/


#7 Cocazero

Cocazero

    Nouveau membre

  • Membres
  • 9 messages

Posté 07 mai 2013 - 12:50

J'ai fini mon code en VHDL, les simulations fonctionnent parfaitement !!

J'attend maintenant la rentrée pour fabriquer la carte (je viens de finir le typon) puis tester en condition réelle.

#8 Cocazero

Cocazero

    Nouveau membre

  • Membres
  • 9 messages

Posté 03 juin 2013 - 05:59

Tout a fonctionné parfaitement!
J'ai effectuer les test vendredi et aujourd'hui c'était la soutenance. Au top !!

Merci ;)



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users