jeudi 13 octobre 2016

[SDR] Logiciel Natpos

Bonjour,

Lors d'un QSO récent, Gabriel F5RZU me parle d'un logiciel SDR permettant pas mal de choses comme
-l'entrée directe de la fréquence centrale au clavier
-le scan
-la réécoute en cliquant dans le waterfall (chute d'eau)
-et bien d'autre que je vous laisse découvrir sur le site de présentation de ce logiciel:
http://www.ecstaticlyrics.com/radio/sdr/natpos/

Vous trouverez également sur ce site la procédure pour l'installation.

Voici une petite vidéo rapide pour vous donnez un aperçu du logiciel.


Je vous invite à le tester !

Jérôme, F4GMU

mercredi 12 octobre 2016

Chameleon Mini RevG

Bonjour,

Je vais vous faire ici une présentation succincte du Chameleon Mini RevG.
C'est un projet Kickstarter qui est terminé et dont les participants sont actuellement livrés.
J'ai reçu le mien hier et je dois dire que je suis bluffé ! J'ai encore beaucoup de choses à découvrir, mais jusque là, tout fonctionne comme espéré.

C'est un outil portable, programmable, qui permet de lire, cloner, émuler, "sniffer" les cartes sans contactes aux protocoles ISO14443 / ISO15693 / NFC.

Cette carte est pourvu d'une batterie rechargeable via un connecteur USB qui sert aussi pour la mise à jour du firmware et à la programmation, d'un interrupteur pour l'utilisation sur batterie (autonomie annoncé par le fabricant : 1h), de 2 boutons poussoir et de 2 leds.

Je ne vais pas entrer dans les détails de programmation car il y a beaucoup à dire et que je n'ai testé qu'une infime partie de cette carte.
Toute la documentation se trouve ici :
https://rawgit.com/emsec/ChameleonMini/master/Doc/Doxygen/html/index.html
Et le firmware se trouve ici :
https://github.com/emsec/ChameleonMini 

Lors de la réception, la carte est livrée avec un firmware de démo permettant de vérifier le bon fonctionnement de la carte.
Le flashage du firmware est très bien expliqué dans la doc et se fait sans problèmes.

Concernant la programmation, elle peut se faire via un terminal série ou via un petit programme python que l'on trouve dans le dossier Github (chamtool.py)

Avec le terminal série, rien de plus simple :
-interrupteur sur OFF
-on branche le CameleonMini revG en USB
-on sélectionne le bon port série (ici avec GtkTerm) sans se soucier de la vitesse et autres paramètres !!!!
La commande 'help' vous renvoie toutes les commandes dispo.

A noté que les boutons poussoir sont totalement programmable avec appui court ou long, ainsi que les leds rouge et verte.
Bon à savoir :
-COMMANDE=
    renvoi le contenu de la commande
-COMMANDE=?
    renvoi les 'variables' dispo pour cette commande

Il y a 10 mémoires dans le ChameleonMini RevG. Chaque mémoires peut contenir une config différentes (hormis pour les leds et les boutons).
Par exemple, la mémoire 1 chez moi est programmé en lecteur, la mémoire 2 en émulateur MiFare Ultralight, la mémoire 3 en émulateur MiFare Classic 1k...
Une pression courte sur le bouton de droite me permet de changer de mémoire, alors qu'une pression longue attribue un UID aléatoire à la carte..



Bref, vraiment tout est programmable à souhait !

Bon à savoir (suite) :
-Pour changer de mémoire pendant la programmation, c'est la commande 'SETTING'
-Pour configurer une mémoire en émulateur ou lecteur ou sniffeur, c'est la commande 'CONFIG'

Voilà pour cette introduction rapide au ChameleonMini RevG.

A bientôt,

Jérôme, F4GMU

[ARDUINO] Rotor site azimuth

Bonjour,

Aujourd'hui je vais vous montrer comment fabriquer un rotor de suivi satellite à moindre coût.

Vous aurez besoin de 2 servomoteurs de modelisme ( j'utilise des servos standard car mon rotor est prévu pour une petite antenne patch très légère), un arduino (uno, nano, mini ou juste un atmega 328 et ses 3 composants vitaux...).
Et c'est tout !

Ceux qui connaissent les servos 'classique' dirons : "Ca marchera pas, ces servos ont une course de 180°..."
C'est vrai! On trouve des servos 360° mais beaucoup plus chère, et voulant réduire les coûts, il fallait trouver une solution.

Voici la solution qui fonctionne en vidéo :
 Concrètement, et pour faire simple,
-du Nord au Sud en passant par l'Est, tout est bon avec les 180° du servo.
-lorsque qu'on passe le Sud, le servo Az fait un 180° alors que le servo de Site inverse sa position. Ce qui permet le suivi de 181° à 360°.


Coté hard, rien de compliqué : Une alim pour les servos et un arduino où l'on branchera les 2 servos (PWM 9 et 10).
Ces 2 derniers sont montés l'un sur l'autre avec quelques petites équerres. Il est possible de vous équiper d'un kit 'tilt-pan' qu'on trouve sur les drones pour bouger la caméra. Ou alors quelques pièces imprimés en 3D !

Coté software, l'arduino interprète les commandes d'un rotor au protocole Easycomm2. Il suffira donc de configurer un rotor 'easycomm2' dans votre logiciel de suivi sat préferé.
Voici la procédure sous Linux avec Gepredict :
-installer 'hamlib'
-dans un terminal : rotctld -m 901 -r /dev/ttyACM0 -s 19200
  ou -m 901 correspond au protocole Easycomm2
       -r le port série de l'Arduino (à adapter en fonction..)
       -s la vitesse du port.
-dans Gpredict:
  Edition/Préférences/Interfaces/Rotor
et ajouter un rotor comme suit :
Pour avoir accès au contrôleur de rotor, cliquer sur la flèche en haut à droite de la fenêtre de Gepredict puis "contrôle d'antenne".
Et voilà !
Le sketch de l'arduino à la fin de cet article.
Bonne bidouille !

Jérôme, F4GMU

#include <Servo.h>
Servo azServo;
Servo elServo;

char az[4];
char el[4]; 
int azInt;  
int elInt;
char inBuffer[13];
int inCount = 0;  

char command;  
bool inBufferFull = false; 

void setup() {
 
  command = 0x00; 
 
  for (int i=0; i<4; i++){
  az[i]=0x0;
  el[i]=0x0;
  }
 

  Serial.begin(19200, SERIAL_8N1);
  azServo.attach(9);
  elServo.attach(10);
  azServo.write(0);
  elServo.write(0);
   
}

void loop() {
  
   
   
    if (command!=0x1f && command!=0x2f) return;
  
    if (command == 0x2f){
      for (int i=0;i<4;i++){   
      az[i] = inBuffer[i+1]-'0'; 
      el[i] = inBuffer[i+6]-'0';
      }
      updateAZEL();   
     
      command=0x0;   
     
      if (azInt > 180){   
        azInt=azInt-180;
        elInt=180-elInt;
      }
      azInt=azInt*(.972);
      elInt=elInt*(1);

      moveServos();
      return;                   
    }
   
    Serial.write(0x57);         
       for (int i=0; i<4; i++){
       Serial.write (az[i]);
       }
      
       Serial.write(0x01); 
      
       for (int i=0; i<4; i++){
       Serial.write(el[i]); 
        }
       
       Serial.write(0x01);     
       Serial.write(0x20);      /
       command=0x0;
}




//--------------------------------------------------------------

void updateAZEL() {
 
  elInt=0;
  azInt=0;
 
  azInt = az[1]*100;         
  azInt = azInt + az[2]*10;
  azInt = azInt + az[3];
 
  elInt = el[1]*100;
  elInt = elInt + el[2]*10;
  elInt = elInt + el[3];
 
  if (azInt >= 360) azInt=azInt-360; 

  char buf[3];
 
  sprintf (buf, "%03i", azInt);
  for (int i = 0; i<3;i++){
    az[i] = buf[i]- '0';
  }
 
  sprintf (buf, "%03i", elInt);
  for (int i = 0; i<3;i++){
    el[i] = buf[i]- '0';
  }
 
  az[3]=0;
  el[3]=0;
 
  if (elInt >= 360) elInt=elInt-360;  //
}

//--------------------------------------------------------------

void serialEvent(){

  while (Serial.available()){
 
    char inChar= (char) Serial.read();
      inBuffer[inCount]=inChar;
      inCount++;
     
  }
 
  if (inCount==13){
    command=inBuffer[11];

    inCount=0;
  }
}



//--------------------------------------------------------------

void moveServos(){

  azServo.write(azInt);
  elServo.write(elInt);
}