mardi 26 février 2013

Astuce : Comment utiliser une carte Arduino comme programmeur FTDI ?

Dernièrement, j'ai commandé une carte Arduino Ethernet dans l'optique de réaliser un système d'alarme (je présenterai le système dans un futur article). Seulement je n'avais pas consulté en détail les caractéristiques et il se trouve que cette Arduino ne possède pas de port USB mais 6 broches pour un adaptateur FTDI.

Il faut donc utiliser un programmeur pour charger des programmes. Il en existe dans le commerce mais pourquoi ne pas se débrouiller tout seul comme un grand ? Il vous suffit d'avoir une Arduino Uno (OU Duemilanove, Diecimila, Mega 2560, Mega 1280 ou Nano), dans le but de programmer : Arduino Pro / Pro Mini / Mini / LilyPad (ou tout Arduino avec  ATmega168 / ATmaga328). Attention, seules les cartes 5V.

Préparer la carte Uno, celle qui servira de programmeur

Retirer le PIC (ATmega328) de la carte en prenant soin de ne pas tordre les broches. Penser avant tout à noter le sens.
Puis préparer les fils de cette manière (on remarque que le PIC a été enlevé) :

Utiliser votre nouveau programmeur

Vous pouvez connecter votre Uno programmeur à la carte que vous voulez programmer. Pour le sens, il faut vérifier la position de la broche GND (masse). Exemple :

Brancher votre nouveau programmeur sur l'ordinateur (par câble USB), le voyant power de la carte qui va être programmée doit s'allumer. Dans le logiciel Arduino, sélectionner le nom de la carte programmée dans la Outils / Type de carte. C'est prêt, n'hésiter pas à téléverser un exemple pour vérifier.


dimanche 10 février 2013

Réaliser un thermomètre électronique avec Arduino

Internet, je te salut et je te remercie pour l'accueil !

Bien, aujourd'hui je vais vous expliquer comment réaliser un thermomètre électronique sans trop de difficulté. Il vous faudra :
  • Une carte Arduino (celle utilisée est une Uno)
  • Un breadbord
  • Un résistance 2,2k
  • Une sonde de température deux broches
    • J'utilise une KTY 10-5 (référence exacte: Q62705-K110), je vous invite à consulter la fiche technique.
Ce genre de sonde est en faite une résistance variable. Lorsque la température augmente, la résistance augmente. Pas proportionnellement malheureusement.

Etape 1 : Ohmmetre

Une Arduino ne peut mesurer directement la valeur d'une résistance sur ses ports analogiques, il faut réaliser un pont diviseur de tension. En cherchant un peu, on peut trouver facilement un montage dans le genre, par exemple celui de wiki.t-o-f.info.

Voici mon montage :


Pour trouver la valeur de la résistance R1, on utilise le calcul suivant:
Or, à 25°C, la sonde résiste à une valeur de 1950 à 1990Ω. Donc la résistance minimal doit être au alentours de 100Ω et la maximale de 50k environs... 2,2K convient.
Cependant, pour plus de précision, j'ai vérifier la valeur de R1 avec un ohmmètre du commerce pour être plus précis car une résistance n'est jamais à la valeur exacte indiquée. J'ai donc trouvé R1=2178Ω.

On branche les fils, on programme l'Arduino et c'est fini !
La résistance de droite corresponds à R2 (pour cette mesure, elle vaut 220Ω)


Le programme (à copier-coller dans le logiciel) :
int Vcc = 5; //V
int R1 = 2178; //omh (résistance fixe = racine carrée(valeur minimale de la résistance variable * valeur maximale de la résistance variable)   )
float U1;
float R2;

void setup() {
  Serial.begin(9600);
}

void loop() {
    // tension U1 en mv
    U1 = analogRead(A0)*5.0/1023.0;

    // valeur de la résistance R | Pont diviseur de tension
    R2 = ((Vcc - U1)*R1)/U1;

    // envoi de la valeur de la résistance sur le port serie
    Serial.println(R2);
}

 Etape 2: conversion de la résistance en température

Maintenant que l'on est capable de mesurer une résistance, c'est un jeu d'enfant. On consulte la fiche technique du composant (rappel: KTY 10-5) et on récupère la fonction qui donne la température en fonction de la résistance. Soit:
On code ça en language Arduino:

// tension U1 en mv
U1 = analogRead(A0)*5.0/1023.0;

// valeur de la résistance R | Pont diviseur de tension
R2 = ((Vcc - U1)*R1)/U1;

Kt = R2 / R25;
    
temperature = 25 + ( sqrt ( pow(alpha,2) - 4 * beta + 4 * beta * Kt) - alpha ) / ( 2 * beta );
 Avec (définit plus haut dans le programme):
//Conversion resistance => température
int R25 = 1970;
float alpha = 7.88*pow(10,-3);
float beta = 1.937*pow(10,-5);
float Kt;
float temperature;

On peut à présent afficher la température sur le port série en remplacement  Serial.println(R2); par Serial.println(temperature);.

Etape 3:

Un afficheur LCD c'est mieux qu'un écran d'ordinateur, n'est-ce pas ? Le but de cet article n'étant pas d'apprendre à utiliser un LCD, je ne détaillerai pas. Cependant voilà comment brancher :
Le code complet:

// inclure la librairie pour le LCD
#include <LiquidCrystal.h>

// preparer les broches du lcd
LiquidCrystal lcd(11,10,5,4,3,2);

int Vcc = 5; //V
int R1 = 2178; //omh (résistance fixe = racine carrée(valeur minimale de la résistance variable * valeur maximale de la résistance variable)   )
float U1;
float R2;

//Conversion resistance => température
int R25 = 1970;
float alpha = 7.88*pow(10,-3);
float beta = 1.937*pow(10,-5);
float Kt;
float temperature;

void setup() {
  lcd.begin(16, 2);
  lcd.print("Temperature :");
}

void loop() {
    // tension U1 en mv
    U1 = analogRead(A0)*5.0/1023.0;

    // valeur de la résistance R | Pont diviseur de tension
    R2 = ((Vcc - U1)*R1)/U1;
    
    Kt = R2 / R25;
    
    temperature = 25 + ( sqrt ( pow(alpha,2) - 4 * beta + 4 * beta * Kt) - alpha ) / ( 2 * beta );
    
    // envoi de la valeur de la température
    lcd.setCursor(0, 1);
    lcd.print(temperature);
    lcd.print("  ");
    lcd.write(11011111);
    lcd.print("C");
    delay(500);
}
Petit photo preuve !