Archives par mot-clé : arduino

Nouvelle version du manipulateur K3NG

K3NG contest keyer par XV4Y (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/09/100_3275 NULL.jpg)La saison des concours est entamée avec le CQ WW partie phonie le week-end dernier sa partie télégraphie le mois prochain. Pensez à mettre à jour vos logiciels pour les concours suffisamment tôt pour les tester convenablement!

K3NG vient de sortir une nouvelle version de son manipulateur électronique pour Arduino (http://sourceforge NULL.net/projects/k3ngarduinocwke/files/). L’auteur n’est pas très bavard sur les modifications réalisées dans le code mais tout semble fonctionner pour le mieux chez moi…

Station météo à mémoire avec Arduino et DHT11

Ecran Station météo Arduino (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/10/100_3301 NULL.jpg)A la maison j’ai une petite “station météo” Oregon Scientific BAR310HG avec un capteur distant sans fil. Elle m’a donné toute satisfaction pendant 5 ans pour son prix très correct, mais les conditions du climat tropical commence à avoir raison des contacts et le capteur sans-fil ne fonctionne plus… Ce type de produit là n’étant pas fait pour être réparé je me suis fait une raison.

Capteur Température Humidité DHT11 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/10/100_3303 NULL.jpg)En cherchant après des composants électroniques à Hong Kong, je suis tombé sur la série de capteurs DHT11 et DHT22 qui sont à la fois économique et suffisamment performant pour un usage domestique. Le DHT22 est plus précis mais un peu plus cher, pour mes premier essais j’ai donc choisi le modèle moins cher.

Voici un premier jet d’un programme pour Arduino qui va interroger le capteur, affiche les valeurs en temps réel, mais surtout les sauvegarde dans la mémoire EEPROM pour en faire des statistiques. L’avantage de les sauvegarder en EEPROM c’est qu’on peut faire une mesure, éteindre la station météo, la rallumer bien plus tard pour faire une autre mesure et avoir la moyenne. Pour des raisons de rapidité de traitement seules 10 valeurs sont sauvegardées, mais la mémoire disponible en permet bien d’avantage.

La commande est simple, il suffit d’appuyer brièvement sur le bouton pour sauvegarder une valeur. Un appui long (plus d’une seconde) efface toutes les valeurs en mémoire.

Une version plus évoluée et utilisant un capteur DHT22 sera prochainement proposée en kit sur la boutique (http://xv4y NULL.radioclub NULL.asia/boutique/). Elle utilisera une horloge RTC pour faire de statistiques sur une période calendaire. Les sauvegardes seront interrogables par port série, et la possibilité d’interroger un capteur à distance via des modules radio 433 MHz sera incluse.

/*
Arduino Thermometer and Humidity display with EEPROM saved statistics using DHT11 sensor v1.00
By Yannick DEVOS - XV4Y
http://xv4y.radioclub.asia/

Copyright 2012 Yannick DEVOS under GPL 3.0 license
Any commercial use or inclusion in a kit is subject to author approval

====
This program sense and displays the current temperature and relative humidity
It saves 10 values in memory when button is pressed and display an average
Pressing the button more than 1 second will erase all the values
Values are stored in EEPROM, you can do measuring, turn off the Arduino, then do other measuring the day after...

The display is on a 16x2 LCD Display with HD44780 compatible driver, use the traditional 4 bits interface on pins 10, 9, 8, 7, 6, 5

In order to compile this program with Arduino 1.0.1, you will need to install 3 libraries :
- Arduino Bounce Library
http://www.arduino.cc/playground/code/bounce
- New LiquidCrystal
https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
- DHT-sensor Library by Adafruit
https://github.com/adafruit/DHT-sensor-library

====
Revision history :
v1.00    2012-10-26
         First release
====
The DHT11 Sensor need to be connected as described here below
- Connect pin 1 (on the left) of the sensor to +5V
- Connect pin 2 of the sensor to whatever your DHTPIN is (here pin D12)
- Connect pin 4 (on the right) of the sensor to GROUND
- Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
We also need a push button on pin D2.

====
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You can download a copy of the GNU General Public License at <http://www.gnu.org/licenses/>
*/

#include <Wire.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>
#include <Bounce.h>
#include "DHT.h"

#define DHTPIN 12     // What pin we have connected the DHT sensor
#define BUTTON 2      // What

#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(10, 9, 8, 7, 6, 5);  // You can change this settings to your convenance, please see the library documentation
Bounce button_debounce = Bounce( BUTTON, 10 ); 

int t = 0, h = 0, a = 0, b = 0, avg_t = 0 , avg_h = 0, saved_t = 0, saved_h = 0;
int current_address = 1, i_address = 1;

void setup() {
  lcd.begin(16,2);
  lcd.home ();

  dht.begin();

  pinMode(BUTTON,INPUT_PULLUP);

  // We read where was the last saved value
  current_address = int(EEPROM.read(0));

}

void loop() {
  button_debounce.update ( );

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  h = int(dht.readHumidity());    // we convert to integer since the DHT11 has not enough precision anyway
  t = int(dht.readTemperature());

  // check if returns are valid, 0 degrees and 0 percent humidity is impossible with the DHT11 sensor...
  if (h == 0 && t == 0) {
    lcd.clear ();
    lcd.home ();
    lcd.print("Sensor Error");
    delay(1000);
    lcd.clear ();
    lcd.home ();
  } else {
    lcd.setCursor ( 0, 0 );
    lcd.print("T:    "); 
    lcd.setCursor ( 3, 0 );
    lcd.print(t);
    lcd.setCursor ( 5, 0 );
    lcd.print("*C");
    lcd.setCursor ( 0, 1 );
    lcd.print("H:    ");
    lcd.setCursor ( 3, 1 );
    lcd.print(h);
    lcd.setCursor ( 5, 1 );
    lcd.print("%");
  }

 int button_status = button_debounce.read();

 // If the button is pressed
 if (button_status == LOW) {
   if (button_debounce.duration()>1000) {  // For more than 1 second we erase the saved values in the EEPROM
     lcd.clear ();
     lcd.home ();
     lcd.print("Erasing");
     lcd.setCursor ( 0, 1 );
     lcd.print("All values");

     for (int i = 0; i <= 45; i++)  // We erase the 10 sets of values
        EEPROM.write(i, 0);
     current_address = 1;
     EEPROM.write(0, 1);

     delay(1000);
     lcd.clear ();
     lcd.home ();
   } else {                                // For shorter we save the value in the EEPROM
     lcd.clear ();
     lcd.home ();
     lcd.print("Saving value");
     lcd.setCursor ( 0, 1 );
     lcd.print("in memory ");
     lcd.setCursor ( 10, 1 );
     lcd.print(round((current_address/4)+1));

     EEPROM.write(current_address, byte(t & 0xFF));
     EEPROM.write(current_address+1, byte(t >> 8));
     EEPROM.write(current_address+2, byte(h & 0xFF));
     EEPROM.write(current_address+3, byte(h >> 8));
     current_address = current_address + 4;
     if (current_address >= 41) current_address = 1;
     EEPROM.write(0, byte(current_address & 0xFF));

     delay(500);
     lcd.clear ();
     lcd.home ();
   }
 }

 // Here we read the saved values in the EEPROM and do the average
 avg_t = 0;
 avg_h = 0;
 for (i_address = 1; i_address <= 41; i_address = i_address + 4) {

   a = EEPROM.read(i_address);
   b = EEPROM.read(i_address+1);
   saved_t = (b << 8 | a);
   if (saved_t != 0)
     if (avg_t == 0) {
       avg_t = saved_t;
     } else {
       avg_t = (saved_t + avg_t) / 2;
     };

   a = EEPROM.read(i_address+2);
   b = EEPROM.read(i_address+3);
   saved_h = (b << 8 | a);
   if (saved_h != 0)
     if (avg_h == 0) {
       avg_h = saved_h;
     } else {
       avg_h = (saved_h + avg_h) / 2;
     };
 }

 // Here we display the averaged values
 lcd.setCursor ( 8, 0 );
 lcd.print("Avg    "); 
 lcd.setCursor ( 12, 0 );
 if (avg_t != 0) {  // Display only when the value is significant
   lcd.print(avg_t);
 } else {
   lcd.print("--");   
 }
 lcd.setCursor ( 14, 0 );
 lcd.print("*C");
 lcd.setCursor ( 8, 1 );
 lcd.print("Avg    ");
 lcd.setCursor ( 12, 1 );
 if (avg_h != 0) {  // Display only when the value is significant
   lcd.print(avg_h);
 } else {
   lcd.print("--");   
 }
 lcd.setCursor ( 14, 1 );
 lcd.print("%");

}

Spectroscope Audio avec Arduino

[GTranslate]

Si vous souhaitez réaliser ce montage, je propose sur ma boutique en ligne un kit facile à monter contenant tous les composants nécessaires avec la carte micro-contrôleur préprogrammé (http://xv4y NULL.radioclub NULL.asia/boutique/?slug=product_info NULL.php&products_id=29).

Arduino Spectrum Scope FFT XV4Y (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/10/100_3300 NULL.jpg)Je vous l’avais dit, c’est une petite idée qui me trottait dans la tête depuis quelques temps et j’ai enfin pu la mettre en application. Le montage (ou plutôt le programme car de montage il y en a peu) que vous propose affiche le spectre d’un signal audio de 150 Hz à 3150 Hz en vous donnant le niveau maxi et la bande de fréquence où celui-ci se trouve. Ce n’est pas un analyseur de spectre à proprement dit, puisqu’il utilise la Transformée de Fourier Rapide (http://fr NULL.wikipedia NULL.org/wiki/Transformée_de_Fourier_rapide) à point fixe sur des entiers. En pratique ça fait la même chose…

Le but, c’est de faire joli et d’impressionner les filles d’aider l’opérateur télégraphie à ajuster son VFO pour se caler sur la fréquence de la station reçue (faire le battement nul, quoi).

Pour le réaliser, vous avez besoin :

  1. d’un Arduino avec ATMega168 ou ATMega328,
  2. Arduino Spectrum Scope FFT XV4Yd’un écran LCD 16×2 avec contrôleur Hitachi HD44780 ou compatible
  3. de fils et cavaliers en bon nombre
  4. d’une capacité de 10µF/16V (valeur non critique) avec le point froid (le “-“) sur l’entrée A0 de l’Arduino pour coupler l’audio de votre récepteur au montage
  5. du programme que je mets à disposition ci-dessous que vous allez compiler et télécharger dans l’Arduino

Je vais être franc, je n’ai pas beaucoup écrit de lignes de code pour faire ce programme et je me suis basé sur des librairies existantes. Mon talent (si j’en ai un) est de faire que ça marche! Toutes les références de librairies sont indiquées dans les sources et je vous conseille de vous reporter à leurs documentations respectives.

Arduino Spectrum Scope FFT générateur BF NE555 XV4Y (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/10/100_3298 NULL.jpg)Les niveaux audio attendus sont entre 0 et 5V (ceux de l’ADC de l’Arduino). Vous pouvez changer l’échelle d’affichage en fonction de ce que vous mettez en entrée. Par exemple, la sortie audio fixe du port ACC du TS-590s donne 1,2V maximum, donc je mettrais le paramètre MAX_AUDIO à 256. Pour mes essais (et les photos), j’ai fait un petit montage générateur BF à base de NE555 (http://electroniccircuitsforbeginners NULL.blogspot NULL.com/2009/12/tone-generator-circuit NULL.html). Celui-ci fourni un beau signal carré plein d’harmoniques qui fait très beau sur l’afficheur!

Ce programme est libre d’utilisation et de modification dans le cadre de la licence GNU GPL v3 (http://www NULL.gnu NULL.org/licenses/gpl NULL.html). Toute inclusion dans un produit commercial ou un kit de composant est sujette à autorisation préalable de l’auteur (moi) et au respect des licences des autres librairies. J’apprécie tous commentaires ou toutes idées d’amélioration!

/*
Arduino HAM Audio Spectrum v1.01
By Yannick DEVOS - XV4Y
http://xv4y.radioclub.asia/

Copyright 2012 Yannick DEVOS under GPL 3.0 license
Any commercial use or inclusion in a kit is subject to author approval

====
This program act as an audio Spectrum scope for the low frequency range
It is aimed at help HAM operators to "zero beat" a CW station

You just need to feed some audio (5V peak) into Analog Input 0 of an Arduino board and connect an LCD display.

The display is on a 16x2 LCD Display with HD44780 compatible driver, use the traditional 4 bits interface on pins 12,11,5,4,3,2
It as a graphical display for 20 spectrum bands and also display the numbers for the highest received signal and its band
Frequency is displayed in 20 150 Hz band between 150Hz and 3150Hz

In order to compile this program with Arduino 1.0.1, you will need to install 3 libraries :
- New LiquidCrystal
https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
- LCDBitmap
http://arduino.cc/playground/Code/LCDBitmap
- Fixed FFT lib for Arduino 1.0
http://code.google.com/p/neuroelec/downloads/detail?name=ffft_library_for_Arduino_1.0.zip&can=2&q=

It is based on various works, please see below.

====
Revision history :
v1.00    2012-10-10
         First release
v1.01    2012-10-11
         Adding the F_STEP parameter and explaining how to change the sample rate    

====
This Example acquire analog signal from A0 of Arduino, and Serial out to Processing application to visualize.
Tested with preamplified audio data. Take a look at http://www.youtube.com/watch?v=drYWullBWcI

Analog signal is captured at 9.6 KHz, 64 spectrum bands each 150Hz which can be change from adcInit()
Load the this file to Arduio, run Processing application.

Original Fixed point FFT library is from ELM Chan, http://elm-chan.org/works/akilcd/report_e.html
A way to port it to the Arduino library and most demo codes are from AMurchick http://arduino.cc/forum/index.php/topic,37751.0.html
Processing app is based on codes from boolscott http://boolscott.wordpress.com/2010/02/04/arduino-processing-analogue-bar-graph-2/

====
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You can download a copy of the GNU General Public License at <http://www.gnu.org/licenses/>
*/

#include <stdint.h>
#include <ffft.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <LCDBitmap.h>

// Here a few things that yoy may want to change

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // You can change this settings to your convenance, please see the library documentation

LCDBitmap bitmap(&lcd, 0, 0);

#define  IR_AUDIO  0    // ADC channel to capture
#define  F_STEP    150  // Width of the frequency bands in Hertz. This constant is only for display. To actually change the
                        // the size of the bands you have to change the FFT_N constant in ffft.h.
                        // 64 gives 300Hz (6300Hz displayed), 128 gives 150Hz (3150Hz displayed), 256 gives 75Hz.
                        // More samples means slower execution. Values higher than 256 do not seem to work. SRAM exhaustion ?
#define  MAX_AUDIO 512  // The maximum audio level you're expecting (for scaling), 5V is 1023
#define  OFFSET    1    // Spectrum band offset for display, first band has a lot of 50Hz hum so we skip it
#define  REFR_RATE 10   // Rate for refreshing the numerical display

// There are no user settings that you can modify here below

volatile  byte  position = 0;
volatile  long  zero = 0;
volatile  int   val, j, max_i, max_val, refresh;

byte graph[20];

int16_t capture[FFT_N];			/* Wave captureing buffer */
complex_t bfly_buff[FFT_N];		/* FFT buffer */
uint16_t spektrum[FFT_N/2];		/* Spectrum output buffer */

void setup() {
  lcd.begin(16,2);
  lcd.home ();

  adcInit();
  adcCalb();

  lcd.clear();
  bitmap.begin();
}

void loop() {
   if (position == FFT_N) {
     fft_input(capture, bfly_buff);
     fft_execute(bfly_buff);
     fft_output(bfly_buff, spektrum);

     max_val = max_i = 0;

     for (byte i = 0; i < 21; i++) {                 // We are capturing more (64 bands) than we can actually display (only 20)...
        j = i+OFFSET;
        val = map(spektrum[j],0,MAX_AUDIO,0,16);   // Scaling for display, only 16 dots high
        graph[i] = val;
        if (spektrum[j]>max_val) {          // Save the higher values for further display it
          max_val = spektrum[j];            // The value
          max_i = j;                        // Its band
        }
     }

    // Here we draw the graph
    bitmap.barGraph(20, graph, ON, UPDATE);

    // Here we display the highest numerical value but not each cycle because it flickers
    refresh++;
    if (refresh == REFR_RATE) {
      lcd.setCursor ( 4, 0 );
      lcd.print("Max F:    ");
      lcd.setCursor ( 10, 0 );
      lcd.print((max_i+1)*F_STEP);
      lcd.setCursor ( 14, 0 );
      lcd.print("Hz");
      lcd.setCursor ( 4, 1 );        // go to the next line
      lcd.print("Value:    ");
      lcd.setCursor ( 10, 1 );
      lcd.print(max_val*5);
      lcd.setCursor ( 14, 1 );
      lcd.print("mV");
      refresh = 0;
    }
    position = 0;
  }
}

// free running ADC fills capture buffer
ISR(ADC_vect) {
  if (position >= FFT_N)
    return;

  capture[position] = ADC + zero;
  if (capture[position] == -1 || capture[position] == 1)
    capture[position] = 0;

  position++;
}

void adcInit() {
  /*  REFS0 : VCC use as a ref, IR_AUDIO : channel selection, ADEN : ADC Enable, ADSC : ADC Start, ADATE : ADC Auto Trigger Enable, ADIE : ADC Interrupt Enable,  ADPS : ADC Prescaler  */
  // free running ADC mode, f = ( 16MHz / prescaler ) / 13 cycles per conversion 
  ADMUX = _BV(REFS0) | IR_AUDIO; // | _BV(ADLAR); 
//  ADCSRA = _BV(ADSC) | _BV(ADEN) | _BV(ADATE) | _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1) //prescaler 64 : 19231 Hz - 300Hz per 64 divisions
  ADCSRA = _BV(ADSC) | _BV(ADEN) | _BV(ADATE) | _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); // prescaler 128 : 9615 Hz - 150 Hz per 64 divisions, better for most music
  sei();
}

void adcCalb() {
  lcd.setCursor ( 0, 0 );        // go to the next line
  lcd.print("FFFT Spectrum");
  lcd.setCursor ( 0, 1 );        // go to the next line
  lcd.print("Calibration");
  long midl = 0;
  // get 2 meashurment at 2 sec
  // on ADC input must be NO SIGNAL!!!
  for (byte i = 0; i < 2; i++) {
    position = 0;
    delay(200);
    midl += capture[0];
    delay(200);
  }
  zero = -midl/2;
}

A l’étroit avec un Arduino ou un LaunchPad ?

Texas Instruments fait encore une fois très fort! Si vous vous sentez restreints dans vos ambitions par les performances et les capacités mémoires limitées des ATMega328 ou MSP430G2553 des Arduino (http://arduino NULL.cc/en/Main/Hardware) ou LaunchPad, courrez acheter un Stellaris LaunchPad.

StellarPad (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/10/med_ek-lm4f120xl_stellarislaunchpad_tool NULL.jpg)Non seulement le Stellaris LaunchPad LM4F120 (http://www NULL.ti NULL.com/tool/ek-lm4f120xl#buy) embarque un processeur beaucoup plus puissant que tout ceux dont j’ai parlé jusqu’à présent, mais offert au prix de 5 USD par TI il est à peine plus cher que le LaunchPad et surtout 4 fois moins cher que n’importe lequel des Arduino!!! Ce nouveau petit jouet embarque un processeur 32 bits Stellaris LM4F120H5QR (http://www NULL.ti NULL.com/product/lm4f120h5qr) construit sur l’architecture Cortex M4F d’ARM, la version “électronique embarquée” des processeur tournant aujourd’hui des les iPad, iPhone. Tournant à 80MHz et possédant 256Ko de flash et 32Ko de SRAM, il est le chaînon manquant entre la catégorie “Arduino” et la catégorie “Rabsperry Pi”, plus proche des ChipKIT dont je vous parlais récemment (http://xv4y NULL.radioclub NULL.asia/2012/09/20/programmer-un-micro-controleur-pic-comme-un-arduino/). Le nombre des entrées-sorties, périphérique et canaux de communications est aussi à l’avenant, de quoi penser à de gros projets…

Cerise sur le gâteau, Robert Wessels vient de m’informer qu’il travaille sur l’incorporation du StellarPad (plus court que Stellaris LaunchPad) à Energia et qu’il sera donc très prochainement possible de programmer ce micro-contrôleur exactement comme un LaunchPad MSP430 ou un Arduino. Si après tout cela vous n’avez pas encore commandé celui-ci chez Texas Instruments, je ne sais pas ce qu’il me reste à faire!

Futurs projets pour micro-contrôleurs

Ecran LCD 16x2 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/09/LCD16_2 NULL.jpg)Ce n’est pas pour tout de suite mais je commence à me gratter la tête pour de nouveaux projets autour de mon Arduino (vais-je en acheter un deuxième ?) ou de mon LaunchPad.

Je viens de recevoir un écran LCD 16×2 commandé à très bon prix sur eBay (http://www NULL.ebay NULL.com/itm/1pcs-1602-16x2-HD44780-Character-LCD-Display-Module-LCM-blue-blacklight-New-/251155458075?pt=LH_DefaultDomain_0&hash=item3a7a08281b). Le vendeur basé à Hong Kong s’étant montré très bien, je lui ai commandé un capteur de température et d’humidité (http://www NULL.ebay NULL.com/itm/1pcs-DHT11-Digital-Humidity-Temperature-Sensor-/251056594544?pt=LH_DefaultDomain_0&hash=item3a74239e70), un ensemble émetteur-récepteur 433 MHz (http://www NULL.ebay NULL.com/itm/1pcs-433Mhz-RF-transmitter-and-receiver-kit-Arduino-project-/261041100836?pt=LH_DefaultDomain_0&hash=item3cc7431824) et un convertisseur port USB vers signaux RS232/TTL (http://www NULL.ebay NULL.com/itm/1pcs-PL2303-USB-RS232-TTL-Converter-Adapter-Module-/251082091781?pt=LH_DefaultDomain_0&hash=item3a75a8ad05). Avec les trois premiers, j’aimerai bien essayer de monter un petit capteur météo à distance autour d’un ATTiny8 par exemple. Un Arduino ferait la collecte des résultats et l’affichage sur le LCD. Ensuite le micro-ordinateur viendrait récupérer des points de mesure une fois par jour pour faire des stats… Le convertisseur pour port USB c’est au passage, histoire de pouvoir faire tourner des micro-contrôleurs de manière indépendante.

L’écran LCD me servirait aussi pour un autre projet, celui de faire un analyseur de spectre Audio (par FFT) pour brancher sur le transceiver. Rien de révolutionnaire mais avoir un affichage centré autour de 600 Hz pourrait être une aide intéressante pour se caler sur le bon signal en CW. Je n’ai pas une très bonne oreille et parfois dans le feu de l’action en entendant un indicatif rare je ne me cale pas bien. Je n’ai jamais perdu de QSO à cause de cela mais ce n’est pas très poli pour l’autre opérateur… Plusieurs projets construits autour d’un Arduino existent sur ce sujet dont celui-ci qui me plaît bien (http://lusorobotica NULL.com/index NULL.php?topic=2985 NULL.0).

Video analyseur de spectre audio Arduino (http://www NULL.youtube NULL.com/watch?v=Zpz8XP4go3U)

Ici un autre mais je comprends moins bien le polonais que le portugais (http://www NULL.youtube NULL.com/watch?v=Bn6BIfr_UgY)

Programmer un micro-contrôleur PIC comme un Arduino [MAJ]

ChipKIT Max32 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/09/chipKIT-Max32-obl-500 NULL.jpg)Après Energia pour la plateforme LaunchPad à MSP430 de Texas Instruments (http://xv4y NULL.radioclub NULL.asia/2012/04/27/les-micro-controleurs-msp430-de-texas-instruments/), voici une autre alternative sérieuse à Arduino. Sérieuse d’une part parce qu’elle est 100% fonctionnelle et disponible facilement, et d’autre part parce qu’elle offre des spécificités intéressantes par rapport à Arduino ou LaunchPad.

Il s’agit de l’initiative ChipKIT (http://chipkit NULL.org/wiki/index NULL.php?title=Main_Page) de Microchip (le créateur de la famille de micro-contrôleurs PIC). Cette plateforme est composée d’un côté de circuits reprenant volontairement le format des Arduino UNO, Mega et consorts, et qui sont vendus par Digilent sous le nom de ChipKIT Uno32, ChipKIT Max32, etc (http://www NULL.digilentinc NULL.com/Products/Catalog NULL.cfm?NavPath=2,892&Cat=18), et d’un autre côté d’un environnement de développement (IDE) appelé MPIDE et basé sur Arduino mais produisant du code pour les PIC.

ChipKIT-WiFi (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/09/chipKIT-WiFi-Shield-obl-600 NULL.jpg)Je ne rentrerais pas dans le débat de savoir quelle architecture est supérieure à l’autre entre AVR, PIC ou   MSP430, car tout dépend de vos besoins. Il est toutefois intéressant de noter que ces cartes intègrent des microprocesseurs PIC32 qui bien qu’ils portent le même nom utilisent une architecture interne toute différente des PIC16 traditionnels. Les PIC32 sont des processeurs 32bits de type MIPS32 et qui sont cadencés à 80MHz sur les cartes ChipKIT. La mémoire Flash embarquée va de 128Ko à 512Ko et la RAM de 16Ko à 128Ko. Contrairement aux AVR les PIC32 ne contiennent pas d’EEPROM, mais la carte ChipKIT MAX32 inclue un circuit EEPROM accessible par I2C. Comparer les performances entre deux architectures différentes est très difficile et il ne faut pas se fier aux chiffres. Toutefois il est fort probable que pour un prix équivalent les ChipKIT offrent des performances et des fonctionnalités supérieures aux Arduino, sans égaler le rapport qualité / prix du LaunchPad (http://www NULL.ti NULL.com/tool/msp-exp430g2) bien entendu.

MAJ : J’ai eu le temps de me documenter un peu plus sur l’architecture PIC32 (http://www NULL.microchip NULL.com/stellent/groups/SiteComm_sg/documents/DeviceDoc/en542879 NULL.pdf) et c’est vraiment une architecture plus avancée que l’AVR d’Atmel. Elle offre des performances plus grandes (1,5 Drystone MIPS / MHz), un système de bus matriciel à haute vitesse, un cache à anticipation pour l’accès à la Flash et un mécanisme pour améliorer la compacité code (mélange d’instructions 16 et 32 bits apportant une réduction de 40% du code). L’architecture comparable chez Atmel s’appelle AVR32 (http://en NULL.wikipedia NULL.org/wiki/AVR32) et possède d’autre arguments en sa faveur (instructions SIMD et DSP, machine virtuelle JAVA par exemple). Actuellement aucun projet comparable à Arduino n’est disponible pour AVR32. Après tout cela, même si PIC32 est plus puissante que AVR, cela ne veut pas dire que vous en tirerez parti. Pour faire clignoter une LED, faire un manipulateur électronique ou même piloter un DDS, les Arduino actuels sont plus que largement suffisants.

Il est intéressant de noter que Microchip fait ouvertement référence à Arduino et vante la compatibilité physique et la portabilité du code entre les deux. Les shields proposés par Digilent sont aussi très intéressants et l’idée d’accéder à un Arduino par WiFi me trotte toujours dans la tête (le problème c’est que je n’ai pas trouvé d’application pratique et concrète!). A noter que comme le MSP430, le PIC32 utilise des tensions de 3,3V là où les ATMega sont en 5V. En pratique ça ne pose pas de problèmes, mais c’est à prendre en compte quand vous concevez vos circuits ou adaptez un circuit existant venant du monde Arduino.

On entend souvent la remarque suivante : ” Pour le même prix qu’un Arduino Mega (ou un ChipKIT MAX32) on peut avoir un Rapsberry PI ou une platine de développement à base (http://www NULL.arm9board NULL.net/sel/prddetail NULL.aspx?id=337&pid=199)Carte ARM9 OK6410 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/09/OK6410_itf NULL.jpg)d’ARM (http://www NULL.arm9board NULL.net/sel/prddetail NULL.aspx?id=337&pid=199) qui sera beaucoup plus puissante! “. C’est à la fois vrai et faux. C’est vrai qu’en terme de puissance brute, de mémoire et de fonctionnalités, une carte à base d’ARM9 fait beaucoup mieux qu’un Arduino Mega. Toutefois, en terme de facilité d’accès aux périphériques et de robustesse, le micro-contrôleur l’emporte haut la main. Sur un “PC embarqué”, le système d’exploitation rajoute une couche non négligeable et le temps de développement pour un petit projet sera multiplié par 10. L’autre avantage net du micro-contrôleur c’est qu’une fois votre code rodé, vous pouvez très facilement concevoir vos circuits indépendants utilisant le micro-contrôleur sans la carte autour. Si vous voulez concevoir des petites séries, la réduction des coûts et la simplification du matériel sont très importantes. Là encore, tout dépend de vos besoins, mais pour le bricoleur occasionnel comme moi, le micro-contrôleur est ce qui offre le plus d’avantages.

Manip électronique compatible Winkeyer avec Arduino sur base K3NG

K3NG contest keyer par XV4Y (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/09/100_3275 NULL.jpg)Ca y est, j’ai enfin fini de monter le petit circuit de mon manipulateur électronique compatible Winkeyer. En fait de circuit il s’agit en gros d’un transistor et de quelques résistances et condensateurs : pas de quoi casser trois pattes à une diode. le plus gros du travail est fait par le micro-contrôleur de la platine Arduino-Nano, et le code qui tourne sur celui-ci est écrit par K3NG (http://sourceforge NULL.net/projects/k3ngarduinocwke/).

Il y a quelques mois mes essais s’étaient avérés infructueux et je n’arrivais pas à avoir un fonctionnement stable du circuit. Avec les dernières versions du logiciel tout semble réglé et j’ai compilé un binaire qui fonctionne parfaitement bien. J’ai toutefois noté que certaines combinaisons de fonctionnalités (activées à la compilation par des #define) sont instables ou ne se compilent tout simplement pas. Faites des tests en ajoutant progressivement des fonctionnalités si vous trouvez que cela ne marche pas comme vous l’attendez.  Le blog de K3NG étant indisponible depuis le Viêt-Nam en ce moment je n’ai pu lui communiquer mes remarques…

Comme vous pouvez le voir sur la photo j’ai fait une implémentation minimaliste du circuit. En fait je compte l’utiliser uniquement en conjonction avec le logiciel de N1MM pour envoyer les numéros de série durant les concours. La grande majorité des composants sont de récupération (les touches et le buzzer piezo viennent d’un vieux téléphone Panasonic) et comme j’avais la place j’ai ajouté trois touches et le connecteur pour le manip. J’ai fait un petit calcul rapide du coût de ce circuit et en comptant comme composant le plus cher l’Arduino Nano 3.0 de Gravitech (http://www NULL.gravitech NULL.us/arna30wiatp NULL.html) à 35 USD (port non inclus), on arrive à environ 50 USD pour un manipulateur plutôt haut de gamme. Bien entendu, si on souhaite ajouter l’écran LCD (j’attends un LCD 16×2 commandé pas cher sur eBay (http://www NULL.ebay NULL.com/itm/New-1602-16x2-Character-LCD-Display-Module-HD44780-Controller-blue-blacklight-/300777230298?_trksid=p4340 NULL.m1850&_trkparms=aid%3D222002%26algo%3DSIC NULL.FIT%26ao%3D1%26asc%3D11%26meid%3D2126416898780744236%26pid%3D100011%26prg%3D1005%26rk%3D1%26)) et le connecteur pour clavier PS/2, le prix peut monter un peu. A noter que K1EL propose maintenant le WKUSB-Lite (http://k1el NULL.tripod NULL.com/WKlite NULL.html) pour 38 USD (+10 USD de port), ce qui est prix franchement attractif même sans le boîtier ou les boutons.

Arduino Nano clone

En faisant cette recherche je suis tombé sur des clones d’Arduino Nano vendus sur eBay (http://www NULL.ebay NULL.com/itm/Nano-V3-ATmega328P-Free-Mini-USB-Cable-Arduino-compatible-/320983464502?pt=LH_DefaultDomain_0&hash=item4abc1afa36) à moins de 10 USD port inclus. Fabriqués en Chine (soit) en vendus à Hong Kong (bien sûr) ils semblent copier à 100% et parfois améliorer un peu le design de Gravitech (http://www NULL.ebay NULL.com/itm/Meduino-Nano-Enchancement-Arduino-Compatible-3-3-5V-adjustable-16MHz-MEGA328-/150889585154?pt=LH_DefaultDomain_0&hash=item2321b85a02). Comme il n’y a rien de sorcier dans celui-ci et que le code du bootloader Arduino est disponible librement, ces alternatives sont tout à fait viable techniquement. Avec un prix divisé par quatre, il est difficile de résister… Je me disais justement qu’avoir un Arduino supplémentaire pour quelques projets que j’ai en tête et dont je vous parlerai bientôt pourrait être utile, car même le LaunchPad et son MSP430 devraient être bloqués sur ma balise WSPR (http://xv4y NULL.radioclub NULL.asia/2012/05/11/balise-autonome-wspr-avec-msp430/) qui aura mon attention dans les semaines qui viennent.

J’ai lu sur des forums que certains de ces clones à bas prix ne marchaient pas. Il semblerait surtout que ce soit comme d’habitude le contrôle qualité qui est défaillant. Certaines soudures sont mal faites ou des ponts électriques involontaires existent entre des broches de l’ATMega328. Si vous êtes un peu bricoleur, cela ne vous effrayera pas, sinon préférés tout de même le modèle original de Gravitech…

Toujours sur le même thème, on peut utiliser avec un Arduino ou un Launchpad l’écran LCD d’un Nokia 5110 (http://www NULL.ebay NULL.com/itm/84-48-LCD-Module-White-backlight-adapter-pcb-for-Nokia-5110-/140730843931?pt=LH_DefaultDomain_0&hash=item20c436431b). Il est plus souple d’utilisation qu’un traditionnel 16×2 caractères et se trouve pour juste un peu plus cher. Le contrôleur n’est pas le même mais les librairies se trouvent facilement que ce soit pour les AVR ou le MSP430. Par contre, adapter le code de K3NG pour cet écran pourrait demander un peu de travail…

Le Manipulateur électronique Arduino K3NG, circuit par F6ITU

Implémentation du manip Arduino K3NG par F6ITU (http://wiki NULL.electrolab NULL.fr/Projets:Perso:2012:ArduiKeyer)Après avoir essuyé quelques fonctionnements erratiques du manipulateur sans en pouvoir déterminer la cause, j’avais un peu laissé tombé ce projet. De toutes façons je n’avais pas trop le temps pour les concours et ce qui me motivait à monter un manipulateur autour du code de K3NG (http://radioartisan NULL.wordpress NULL.com/arduino-cw-keyer/) c’était de pouvoir l’interfacer en mode WinKeyer avec le logiciel de N1MM (http://n1mm NULL.hamdocs NULL.com/tiki-index NULL.php).

Ces derniers jours j’ai téléchargé une nouvelle version du code sur le nouveau dépôt SourceForge du projet (http://sourceforge NULL.net/projects/k3ngarduinocwke/), pour me rendre compte qu’elle semblait fonctionner parfaitement en local avec Winwarbler de DXLabs. En jetant un oeil sur le blog de K3NG j’ai aussi lu dans les commentaires que F6ITU s’y intéressait et qu’il avait écrit une très belle page en français, bien documentée, autour de son implémentation du circuit (http://wiki NULL.electrolab NULL.fr/Projets:Perso:2012:ArduiKeyer). Je reprocherais toutefois à F6ITU de s’éloigner un peu trop des caractéristiques matérielles définie par K3NG, ce qui va rendre difficile le suivi par des tiers des mises à jour, par ailleurs très régulières. Mais tout est histoire de choix, et rien ne vous empêche de vous inspirer de ce qu’il a fait en restant plus proche de l’origine.

Mon propre objectif pour ce projet est beaucoup plus simpliste puisque je veux juste la fonctionnalité Winkeyer. Toutefois, cette page intéressera beaucoup les francophones qui peuvent être rebutés par le blog de K3NG dont la clarté n’est pas un exemple du genre.

Un PC miniature Quad-Core à 129$

Vu sur ArsTechnica (http://arstechnica NULL.com/gadgets/2012/07/korean-company-offers-3-5-inch-quad-core-arm-linux-computer-for-129/), la société coréenne Hardkernel propose sa carte ODROID-X qui vient compléter la famille des Raspberry Pi, BeagleBoard et consorts.

Carte ODROID-X, PC embarqué (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/07/201206301841017729 NULL.jpeg)Visiblement orientée sur le haut du marché, la carte comprend un processeur à quatre coeurs (Samsung Exynos 4 à 1,4 GHz), un processeur graphique quadri-core Mali 400, 1 Go de RAM, 6 ports USB, un port Ethernet, une entrée-sortie audio et un lecteur de carte SDHC. Le processeur étant construit sur l’architecture Cortex A9 d’ARM, il permet de faire tourner Ubuntu et Android.

La carte semble disponible à la vente immédiatement avec une expédition internationale à partir de fin juillet (http://www NULL.hardkernel NULL.com/renewal_2011/products/prdt_info NULL.php?g_code=G133999328931), livraison prévue en 2 semaines par EMS. Le prix de 129$ (plus 30$ de port) est plus élevé que celui d’autres cartes, mais les performances sont à la hausse. A noter la garantie de 4 semaines et l’ensemble de petites notes en bas qui vous font comprendre que l’achat est à vos risques…

Un nouveau PC miniature à 49$

VIA Android PC board (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/05/apc-banana-640x358 NULL.jpg)Vu sur l’excellent site Ars Technica (http://arstechnica NULL.com/gadgets/2012/05/another-tiny-computer-vias-49-apc-offers-android-hdmi-video-out/). La société VIA, très connue pour ses chipsets et microprocesseurs pour micro-ordinateurs et compatibles PC, a annoncé la disponibilité d’un nouveau concurrent du Raspberry Pi et consorts (http://xv4y NULL.radioclub NULL.asia/2012/03/15/beagleboard-raspberry-pi-et-autres-pc-embarques-pour-les-radioamateurs/). C’est le APC ou Android PC qui embarque un processeur ARM (ARM11, donc compatible Android contrairement au Raspberry Pi), 512Mo de RAM, 2 Go de mémoire Flash, des sorties VGA, HDMI et audio, une entrée audio, un port MicroSD, un port Ethernet et 4 ports USB. La carte vendue nue et annoncée comme au format Neo-ITX consomme entre 4 et 13,5 Watts et est livré avec une version adaptée d’Android 2.3.

AllWiner Android PC USB clé (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/05/ea687cbe6b22cba6b63b77472f9c876d NULL.jpeg)L’article parle aussi d’un autre micro PC à 74$ mais mieux équipé avec Wifi et un processeur Cortex A8 à 1,5GHz qui fait tourner Android 4.0 (http://arstechnica NULL.com/gadgets/2012/05/new-74-android-mini-computer-is-slightly-larger-than-a-thumb-drive/). Avec tout cela, il y a du choix et avec un peu de chance ces produits seront réellement disponibles (qui a un Rasbperry Pi entre les mains ?)…