Démarrage Arduino

**Installation Arduino :**

Télécharger (www.arduino.cc) la version actuelle du logiciel de contrôle (Arduino 1.6.8 avril 2016)

Installer/Vérifier la Mise à jour (update) du driver de l'Arduino (Panneau de Contrôle/Système/Gestionnaire des périphériques/Ports (COM+LPT) : chercher l'update sur le PC (arduiino/drivers/arduino.inf)

**Test Carte Arduino :**

Dans fichiers/exemples/ chercher 01.Basics.Blink. Sélectionner dans Outils le type de carte (ex : Uno) et le port (ex : COM3). Téléverser le code. Une fois le transfert terminé, une LED (orange) doit se mettre à clignoter sur la carte Arduino. Changer le délai dans le code et vérifier que la période de clignotement change.

Option : Installer des bibliothèques supplémentaires (par exemple pour avoir les intructions pour communiquer avec un afficheur alphanumérique : Library LiquidCrystal(16fils) ou Bibliothèque LiquidCrystal\_I2C pour communiquer en 2+2 fils).

**Test Afficheur en I2C (2+2 fils) :**

Un module I2C doit être soudé au dos de l'afficheur (voir images).

4 pattes pour communiquer : 5V, GND, SDA, SCL sur le module afficheur et à l'autre bout des fils : 5V et GND du UNO + A4(SDA) et A5(SCL).

2 fils (0V et 5V) vont alimenter le module, 2 fils vont envoyer les informations (un fil d'horloge et un fil de données).

La bibliothèque NewliquidCrystal\_1.3.4.zip doit être installée.

Voici un programme qui marche pour tester l'afficheur en I2C.

L'adresse I2C de l'afficheur (souvent c'est 0x3F) se trouve en faisant tourner le programme suivant qui scanne toutes les adresses et affiche le résultat sur le moniteur série Arduino

**Utilisation d'une interruption pour mesurer précisément des temps.**

   Pour surveiller le déclenchement d'un capteur (=l'arrivée d'un événement), au lieu de scruter très souvent une entrée de l'Arduino pour vérifier si elle est à 0 ou 5V, il est préférable d'utiliser une interruption. Le programme ne s'occupe pas de l'événement et si cett eévénement arrive, une interruption est déclenchée, met le programme principal en pause et exécute un sous programme défini à l'avance. Cette interruption est déclarée dans le programme ainsi que la patte de l'Arduino associée (patte 2 ou 3 pour l'Arduino Uno). On définit aussi l'événement attendu (passage 0 à 5V, passage de 5V à 0, l'un ou l'autre ...) et le programme à exécuter. Lorsque l'interruption survient, le programme associé est exécuté (par exemple la mesure du temps), puis le programme principal continue. Exempleà tester :

**Test Ecriture Afficheur(16 fils) (Si I2C impossible) :**

(prévoir afficheur muni de 16 connections soudées (pinoches ou fils) + 1 potentiomètre 10 kOhm) :

Broches afficheur (1 : Vss (masse 0V), 2 : Vdd (+5V), 3 : contraste (potentiomètre pour créer une tension 0V-5V), 4 : RS sélection du registre (commande ou donnée), 5 : R/W (Read/Write), 6 : E (Enable), 7 à 14 8 bits de données, 15 : + (+5V) du rétro éclairage, 16 : - (0V) du rétro éclairage).

La communication peut se faire en 8 fils (mode parallèle) ou en 4 fils (mode I2C). La bonne bibliothèque doit être chargée selon le choix de liaison. Bibliothèque (=Library) LiquidCrystal à avoir dans le logiciel Arduino pour la liaison 8 fils. Sinon bibliothèque à télécharger voir paragraphe afficheur I2C.

**Test Pilotage Moteur pont en H :**

**Fichier:Moteur Pont-en-H L298N 23Mai2016.pdf**

**Test Télémètre ultrason :**

(prévoir 2 diodes + 2x 470 Ohm pour affichage optionnel)

Capteur (module HC-SR04).

Brochage : (Vcc=5V, pin13 Arduino Digital OUT, pin12 Arduino Digital IN, GND).

1. ↑ #include "Wire.h"

#include "LCD.h"

#include "LiquidCrystal\_I2C.h"

#define I2C\_ADDR 0x3F  // Utiliser I2C scanner pour vérifier l'adresse I2C de l'afficheur

#define Rs\_pin 0

#define Rw\_pin 1

#define En\_pin 2

#define BACKLIGHT\_PIN 3

#define D4\_pin 4

#define D5\_pin 5

#define D6\_pin 6

#define D7\_pin 7

LiquidCrystal\_I2C lcd(I2C\_ADDR,En\_pin,Rw\_pin,Rs\_pin,D4\_pin,D5\_pin,D6\_pin,D7\_pin);

void setup()

{

 lcd.begin (16,2); //  Si 16 caractères et 2 lignes

// LCD Backlight ON

lcd.setBacklightPin(BACKLIGHT\_PIN,POSITIVE);

lcd.setBacklight(HIGH);

lcd.home (); // go home on LCD

lcd.print("PHY404-2017");

delay(5000);

lcd.clear();

}

void loop()

{

 lcd.setCursor (2,0); //  3er caractère 1ère ligne

 lcd.print("Grenoble-Alpes");

 lcd.setCursor (4,1); // 5e caractère 2eme ligne

 lcd.print("Comm : I2C");

 delay(500);

}
2. ↑ /\*=================================================================

Ce sketch est un scanner I2C: il essaye de communiquer avec toutes

les adresses I2C possibles et affiche celle(s) qui réponde(nt).

                      BRANCHEMENT

\* Pin SCD du moule à scanner  ----------->  SCD de l’Arduino

\* Pin SDA du moule à scanner  ----------->  SDA de l’Arduino

================================================================ \*/

#include <Wire.h>

void setup()

{

  Wire.begin();

  Serial.begin(9600);

  Serial.println("\nI2C Scanner");

}

void loop()

{

  byte error, address;

  int nDevices;

  Serial.println("Recherche en cours...");

  nDevices = 0;

  for(address = 1; address < 127; address++ )

  {

    Wire.beginTransmission(address);

    error = Wire.endTransmission();

    if (error == 0)

    {

      Serial.print("Equiment I2C trouve a l'addresse 0x");

      if (address<16)

        Serial.print("0");

      Serial.print(address,HEX);

      Serial.println("  !");

      nDevices++;

    }

    else if (error==4)

    {

      Serial.print("Erreur inconnue a l'address 0x");

      if (address<16)

        Serial.print("0");

      Serial.println(address,HEX);

    }

  }

  if (nDevices == 0)

    Serial.println("Aucun Equipement I2C trouve\n");

  else

    Serial.println("Fini\n");

  delay(5000);

}
3. ↑ // constantes et variables à initialiser

const byte EntreeCapteur = 2; //Interruptions sur pattes numériques 2 ou 3 seulement (UNO). Ici patte 2
float temps\_ecoule, temps\_depart;
float nouvelle\_vitesse ;
float nouvelle\_vitesse\_moyenne;
float ancienne\_vitesse\_moyenne=0;
float taux = 0.5; // moyennage  (1=pas de moyenne, 0.5= 50% nouvelle valeur, 0.1=10% nouvelle valeur)

// code d'initialisation exécuté une fois au démarrage

void setup ()
{
 Serial.begin(9600); //connection série avec l'odinateur pour lire le moniteur série

 digitalWrite (EntreeCapteur, HIGH);  // internal pull-up resistor

attachInterrupt (digitalPinToInterrupt(EntreeCapteur), arrivee\_signal, RISING);  // définition de l'interruption "arrivée signal"

temps\_depart = millis();

Serial.println("Vitesse");
}  // end of setup

// Interrupt Process = Programme associé à l'interruption
void arrivee\_signal ()
{
temps\_ecoule=millis()-temps\_depart;         //en  millisecondes
nouvelle\_vitesse=0.45/(temps\_ecoule/1000);  // vitesse en m/s pour parcourir 45 cm
nouvelle\_vitesse\_moyenne = taux \* nouvelle\_vitesse + (1-taux) \* ancienne\_vitesse\_moyenne;
temps\_depart=millis();                    //remise à zero
}                                         // end of Interrupt Loop

// Programme pincipal
void loop ()
{
 Serial.print(temps\_ecoule);
 Serial.print(" ");
 Serial.println("ms");
 delay(1000);
}