L'Âge de Faire

Saint-NicoLED : Atelier Arduino

organisée par la Faironnerie ABC / @faironnerie_abc

Description plus détaillée de l'atelier sur cette page.

http://gsav.in/fablab/age-de-faire/st-nicoled/

À LED

Matériel

Carte Arduino

Breadboard

Env. de développement

Installation sous Linux

							
# ArchLinux
% yaourt arduino

# Ubuntu
% sudo apt-get install arduino

# Ajout de 'faironnier' au groupe 'uucp'
% sudo usermod -a -G uucp faironnier
							
						

À bon port

Pour vérifier que le bon port USB est utilisé, il suffit de brancher le arduino et d'utiliser la commande dmesg :
							
% dmesg | tail

[65373.194664] usb 1-3.4: new full-speed USB device number 12 using xhci_hcd
[65373.297140] ftdi_sio 1-3.4:1.0: FTDI USB Serial Device converter detected
[65373.297170] usb 1-3.4: Detected FT232RL
[65373.297498] usb 1-3.4: FTDI USB Serial Device converter now attached to ttyUSB0
							
						

Sketch

  • basé sur C/C++
  • code divisé en trois parties
    1. déclaration des constantes et variables
    2. code de configuration, appelé une fois,
      void setup()
    3. code du programme, appelé en boucle,
      void loop()
							/*
 * Ce programme fait clignoter la LED sur la broche 13
 * et donc la LED de test de la carte
 */

//
// La définition des constantes et des variables
//
const int ledBroche = 13; // LED connectée à la broche 13
const int attente = 1000; // En ms

//
// Initialisations
//
// Initialisation des ressources de la carte.
// Configuration des entrées/sorties.
// Définition de la vitesse de fonctionnement du port série, etc.
// La fonction setup() n'est exécutée qu'une seule fois.
//
void setup() {
  pinMode(ledBroche, OUTPUT); // Configure ledBroche comme une sortie
}

//
// Programmation des interactions et comportement.
//
// C'est une boucle "infinie". Elle peut être interrompue que par
// coupure de l'alimentation de la carte ou un appui sur Reset
//
void loop() {
  digitalWrite(ledBroche, HIGH); // Met la sortie à l'état haut, LED allumée
  delay(attente);                // durant attente.
  digitalWrite(ledBroche, LOW);  // Met la sortie à l'état bas, LED éteinte
  delay(attente/3);              // durant attente/3 (division entière)
}
							
						

Syntaxe

  • Variables ?
  • Structures ?
  • Fonctions ?

Électricité

  • U tension, en volts (V)
  • I intensité, en ampères (A)
  • P puissance, en Watts (W)
  • R résistance, en ohms (Ω)

Relations

U = R . I

P = U . I

Alimentation

Caractérisée par :

  • Tension en sortie
  • Intensité maximale en sortie
  • (Tension d'entrée)

Exemple : alimentation de téléphone, courant sortant de 5V pour au max 1A.

Arduino Uno

LEDs

  • Courant 6 à 20mA
  • Tension de seuil 1.6 à 2.0V 2.2V 2.2 à 2.5V 2.5 à 2.8V 3.5V
  • Attention au sens !

Plus d'infos sur les LEDs

Résistances

LED qui clignote

  • 1 LED
  • 1 résistance de 330Ω (orange-orange-brun)
  • 3 câbles

Faire pulser la LED

  • Utiliser un pin PWM (~)
						/*
 * Ce programme fait pulser la LED sur la broche 3
 */

//
// La définition des constantes et des variables
//
const int ledBroche = 3;           // LED connectée à la broche 3
const unsigned int attente = 1000; // En ms

//
// Initialisation(s)
//
void setup() {
  // Configure ledBroche comme une sortie
  pinMode(ledBroche, OUTPUT);
}

//
// Programmation des interactions et comportement.
//
void loop() {
 const float delta = 0.001;
 float entree, sortie;

 for (entree = 0; entree < 2 * PI; entree = entree + delta) {
    // La valeur doit être comprise entre 0 et 255
    sortie = sin(entree) * 127.5 + 127.5;
    analogWrite(ledBroche,sortie);
    delay(3);
  }

  delay(attente);
}
						
					

En guirlande

						// Durée entre les flashs
#define FLASH_DELAY 2000
// Durée du flash
#define FLASH_LENGTH 1000
// Il faut 255ms pour allumer la led,
// le flash s'éteint après 255 + FLASH_LENGTH ms.
#define STOP_FLASH_AT 255 + FLASH_LENGTH
// Il faut aussi 255ms pour éteindre la led,
// la pause commence donc à STOP_FLASH_AT + 255 ms.
#define PAUSE_AT STOP_FLASH_AT + 255

// Tableau des pins utilisés (tous les PWM ~).
int pins[] = {3,5,6,9,10,11};

// Étape de chaque led.
int steps[6];

void setup() {
	// Initialisation
  randomSeed(analogRead(0));

  for(uint8_t i = 0; i < 6; i++) {
    pinMode(pins[i], OUTPUT);
    steps[i] = random(0, 255 * 2 + FLASH_LENGTH + FLASH_DELAY);
  }
}

void loop() {
  for(uint8_t i = 0; i < 6; i++) {
    int s = steps[i]++;

    if (s < 256) {
      analogWrite(pins[i], s);
    }
    else if(s >= STOP_FLASH_AT && s < PAUSE_AT) {
      analogWrite(pins[i], 255 - s + STOP_FLASH_AT);
    }
    else if(s > PAUSE_AT + FLASH_DELAY) {
      steps[i] = 0;
    }
  }

  delay(1);
}