Aller au contenu


Photo
- - - - -

Arduino Nano [testée par Jekert]


11 réponses à ce sujet

#1 Jekert

Jekert

    Auteur

  • Modérateur
  • PipPip
  • 214 messages
  • Gender:Male

Posté 07 juin 2016 - 10:06

Salut !

:13:

 
Ce fil sera dédié au test de la carte Arduino Nano disponible dans la boutique et notamment utilisable avec le kit pour robot quadrupède.

 

Description:
 
L'Arduino Nano est une carte créée afin de miniaturiser les systèmes à bases d'Arduino et ainsi de les rendre plus légers, ce qui est très pratique en robotique lorsque l'on travaille dans un espace restreint et où le poids peut être un des ennemis du Maker :) L'Arduino Nano mesure 45*18 mm et pèse environ 5g. De plus, elle possède la même puissance de calcul qu'une UNO et possède 2 pins analogiques supplémentaires (A6 et A7) et peut fournir 40 mA et 5V par pin digital.

2 - Ardunio Nano.JPG

9 - Nano 1e.JPG

 

Comparaison avec l'Arduino Uno :

10 - Comp Arduino.JPG

 

Et la Mega :

11 - Comp Arduino.JPG

 
Avant de commencer :

Comme vous avez pu le remarquer, l'Arduino Nano arrive sans les pins soudés à la carte, il vous faudra donc souder chaque pin à la carte afin de s'assurer que tous les pins sont en contact avec la carte . Les soudures se font plutôt facilement, il suffit de faire attention à souder chaque pin sans que les soudures se touchent. N'hésitez pas à utiliser une troisième main et de quoi retirer les soudures maladroites (tresse ou pompe à dessouder).
 

12 - Soudure Nano 1.JPG

13 - Soudure Nano 2.JPG

14 - Soudure Nano 3.JPG


Pour connecter la carte à votre PC, il vous faudra un câble MiniUSB qui ressemble à ceci:
 

15 - Cable miniUSB.JPG
 

Il n'est pas fournis avec la carte mais c'est un type de connecteur répandu, vous n'aurez aucun mal à en trouver un chez vous, ou dans le commerce si nécessaire.

 

Vérifier les soudures :

N'étant pas encore très à l'aise avec la soudure, j'ai préféré vérifier que toutes les sorties digitales fonctionnent correctement. Pour cela j'ai fait ce petit montage:

 

18 - Nano test sortie.JPG
19 - Nano test sortie.JPG
 

Il permet de tester chaque sortie digitale, de D2 à D13, avec quelques fils, une breadboard, une résistance et une led. Chaque sortie va émettre une tension de 5V 2 fois de suite pendant 1 seconde puis s'éteindre pendant une seconde. Il faudra donc que vous déplaciez l'extrémité du fil orange de droite à gauche.

Voici le programme du montage :

// Pins :
int led2 = 2;
int led3 = 3;
int led4 = 4;
int led5 = 5;
int led6 = 6;
int led7 = 7;
int led8 = 8;
int led9 = 9;
int led10 = 10;
int led11 = 11;
int led12 = 12;
int led13 = 13;

//Variables :
int a = 0;
int pin = 0;
int liste[] = {led2, led3, led4, led5, led6, led7, led8, led9, led10, led11, led12, led13};

void setup() {

  //Déclarations :
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);
}

void loop() {
  
pin = liste [a];

if (a<11){
a++;
}
else{
  a = 0;
}

digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);

}

Voilà pour le début de mon test sur la carte Arduino Nano. J'ajouterais des détails sur le dernier montage prochainement.

 

A bientôt pour la suite :)

 

N'hésitez pas à poster vos questions, conseils ou commentaires ;)



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 08 juin 2016 - 12:29

Super travail ! =) 

Petites remarques en passant : 

 

Puisque tu as fait la " liste "  tu aurais très bien pu remplace ton setup par : 
 

void setup() {

  //Déclarations :
  for (int8_t i=0; i<12;i++)
  {
      pinMode(liste[i], OUTPUT);
  }
  
}

dans le même genre il est aussi possible de " raccourcir la fonction loop " ce qui peut donner cela :

// Pins :
int8_t led2 = 2;
int8_t led3 = 3;
int8_t led4 = 4;
int8_t led5 = 5;
int8_t led6 = 6;
int8_t led7 = 7;
int8_t led8 = 8;
int8_t led9 = 9;
int8_t led10 = 10;
int8_t led11 = 11;
int8_t led12 = 12;
int8_t led13 = 13;

//Variables :
int8_t liste[] = {led2, led3, led4, led5, led6, led7, led8, led9, led10, led11, led12, led13};
int8_t N = 2;  // Nombre de clignotement 
void setup() {

  //Déclarations :
  for (int8_t i=0; i<12;i++)
  {
      pinMode(liste[i], OUTPUT);
  }
  
}

void loop() {
  
for (int8_t i=0; i<12; i++)
{
  for (int8_t j=0; j<N; j++)
  {
    digitalWrite(liste [i], HIGH);
    delay(1000);
    digitalWrite(liste[i], LOW);
    delay(1000);
  }
}

}

On remarquera que j'ai utilisé int8_t au lieu de int ... Et du coup si ça vous intéresse de savoir pourquoi RDV par ici ( histoire de ne pas polluer le sujet ;) )


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#3 Jekert

Jekert

    Auteur

  • Modérateur
  • PipPip
  • 214 messages
  • Gender:Male

Posté 08 juin 2016 - 12:25

Merci, je n'y avais pas pensé :)



#4 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 08 juin 2016 - 12:57

Un peu plus compacté en utilisant des préprocesseurs ?

#define PIN_MIN 2
#define PIN_MAX 13
#define BLINK_PERIOD 1000

//Variables :
int8_t blinkNumber = 2;  // Nombre de clignotement 

void setup() {
	//Déclarations :
	for(int8_t pin = PIN_MIN; pin <= PIN_MAX; ++pin) {
		pinMode(pin, OUTPUT);
	}
}

void loop() {
	for (int8_t pin = PIN_MIN; pin <= PIN_MAX; ++pin) {
		for (int8_t i=0; i<blinkNumber; i++) {
			digitalWrite(pin, HIGH);
			delay(BLINK_PERIOD);
			digitalWrite(pin, LOW);
			delay(BLINK_PERIOD);
		}
	}
}

Pour rappel, les préprocesseurs #define sont très différents des variables.

Les dernières occupent de l'espace mémoire lors de l'exécution du programme.

Les premiers sont remplacé directement dans le code source juste avant la compilation (on remplace dans le code PIN_MIN par sa valeur, etc.)

 

Si tu veux pouvoir modifier la valeur en cours d'exécution, il faut utiliser des variables, sinon, il est bon de se poser la question d'utiliser soit des variables soit des préprocesseurs #define ;)

(Par exemple, BLINK_PERIOD aurait pu être une variable (blinkPeriod) si tu veux modifier la fréquence de clignotement dans ton programme)


Mon site internet : http://ferdinandpiette.com/


#5 Jekert

Jekert

    Auteur

  • Modérateur
  • PipPip
  • 214 messages
  • Gender:Male

Posté 08 juin 2016 - 04:24

Merci pour vos conseils :)

 

J'ai repris ton programme Black Templar et y ai ajouté quelques commentaires, j'en ai aussi profité pour passer Blink_Number en constante vu que je n'aurais pas à modifier la valeur au cours de l'exécution du programme. Donc maintenant le programme ressemble à ça :

//Constantes :
#define PIN_MIN 2 //Numéro de la première sortie digitale
#define PIN_MAX 13 //Numéro de la dernière sortie digitale
#define BLINK_PERIOD 1000 //Temps en ms entre chaque états
#define BLINK_NUMBER 2  // Nombre de clignotement 

void setup() {
  //Déclarations :
  for(int8_t pin = PIN_MIN; pin <= PIN_MAX; pin++)
  //Itère tous les pins entre PIN_MIN et PIN_MAX et les déclare comme des sorties
  {
    pinMode(pin, OUTPUT);
  }
}

void loop() {
  for (int8_t pin = PIN_MIN; pin <= PIN_MAX; pin++)
  //Itère tout les pins digitales entre PIN_MIN et PIN_MAX 
  {
    for (int8_t i=0; i<BLINK_NUMBER; i++)
    //Répète le code ci-dessous BLINK_NUMBER fois
    {
      digitalWrite(pin, HIGH);
      delay(BLINK_PERIOD);
      digitalWrite(pin, LOW);
      delay(BLINK_PERIOD);
    }
  }
}

Ce qui a permis de passer la taille du programme de 57 lignes à 29, du croquis de 1556o à 1134o et les variables de 61o à 9o.



#6 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 08 juin 2016 - 04:54

Cool.

 

J'en ai aussi profité pour passer Blink_Number en constante vu que je n'aurais pas à modifier la valeur au cours de l'exécution du programme.

Attention au vocabulaire. Ce n'est pas une constante (une constante est une variable qui génère une erreur à la compilation si tu essayes de la modifier), mais un symbole.

Tous les symboles seront remplacés par leurs valeurs respectives lors de la phase de précompilation (avant la compilation).

#define MON_SYMBOLE 5
int maVariable = 5;
const int maConstante = 5;

Voici ce qui se passe lorsque tu cliques sur le bouton compiler d'Arduino :

 

Etape 1 : Pré-traitements

Entrée : Fichiers sources

Sortie : Fichiers sources v2

 

Etape 2 : Compilation

Entrée : Fichiers sources v2

Sorite : Fichiers assembleurs

 

Etape 3 : Edition des liens (link)

Entrée : Fichiers assembleurs

Sortie : Fichier binaire final

 

Fichiers sources => Pré-traitement => Fichiers sources v2 => Compilation => Fichiers assembleurs => Linkage => Fichier binaire final


Mon site internet : http://ferdinandpiette.com/


#7 Jekert

Jekert

    Auteur

  • Modérateur
  • PipPip
  • 214 messages
  • Gender:Male

Posté 08 juin 2016 - 06:04

Ok, merci de m'avoir corrigé, j'avais mal interprété ce que disais Arduino Reference :

#define is a useful C component that allows the programmer to give a name to a constant value before the program is compiled. Defined constants in arduino don't take up any program memory space on the chip. The compiler will replace references to these constants with the defined value at compile time.



#8 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 09 juin 2016 - 12:29

Ah ah ^^ Black Templar m'a devancé pour les define :P Le but c'est de montrer les améliorations au fur et à mesure ;) J'en garde encore certaines dans ma manche mais promis très bientôt sur un autre fil de test de jekert je présenterais l'usage des union et des structure =) 

mais puisqu'on est encore en train de donner les "bonnes manières " pour coder , moi je propose cela :  

//Constantes :
#define LEDPIN1 2 //Numéro de la première sortie digitale
#define LEDPIN2 3 //Numéro de la première sortie digitale
#define LEDPIN3 4 //Numéro de la première sortie digitale
#define LEDPIN4 5 //Numéro de la première sortie digitale
#define LEDPIN5 6 //Numéro de la première sortie digitale
#define LEDPIN6 7 //Numéro de la première sortie digitale
#define LEDPIN7 8 //Numéro de la première sortie digitale
#define LEDPIN8 9 //Numéro de la première sortie digitale
#define LEDPIN9 10 //Numéro de la première sortie digitale
#define LEDPIN10 11 //Numéro de la première sortie digitale
#define LEDPIN11 12 //Numéro de la première sortie digitale
#define LEDPIN12 13 //Numéro de la première sortie digitale

#define NLED 12 // nombre de led


int8_t LEDPIN[NLED]={LEDPIN1,LEDPIN2,LEDPIN3,LEDPIN4,LEDPIN5,LEDPIN6,LEDPIN7,LEDPIN8,LEDPIN9,LEDPIN10,LEDPIN11,LEDPIN12};

#define BLINK_PERIOD 1000 //Temps en ms entre chaque états
#define BLINK_NUMBER 2  // Nombre de clignotement 

void setup() {
  //Déclarations :
  for(int8_t i = 0; i < NLED; i++)
  //Itère tous les pins entre PIN_MIN et PIN_MAX et les déclare comme des sorties
  {
    pinMode(LEDPIN[i], OUTPUT);
  }
}

void loop() {
  for (int8_t j = 0; j < NLED; j++)

  {
    for (int8_t i=0; i<BLINK_NUMBER; i++)
    //Répète le code ci-dessous BLINK_NUMBER fois
    {
      digitalWrite(LEDPIN[i], HIGH);
      delay(BLINK_PERIOD);
      digitalWrite(LEDPIN[i], LOW);
      delay(BLINK_PERIOD);
    }
  }
}

L'intérêt n'est pas de racourcir le nombre de ligne mais de rendre le code plus facile et plus pratique à utiliser, 

La version avec moins de ligne de black templar est super pratique si tout les pins des led se suivent, cependant si pour une raison x ou y tu veux échanger deux led , dans le code proposé par black c'est plus possible ça marche plus facilement, en faisant comme ci dessous il suffit d'échanger les valeur des deux define et ça marche directement ... 

Personnellement dans tout mes codes je met un define qui caractérise chacun des pins que j'utilise, et ensuite j'appel toujours ce define, comma ça si j'ai besoin d'échanger un pin par un autre j'ai juste à changer la valeur dans le define et tout est changé dans mon code ... 

J'essaye au maximum d'utiliser des defines , et je crée des tableau pour toute les taches répétitives =) . Si tu as une ligne de code identique qui se répète plus de deux fois ... c'est qu'il y a quelque chose à faire ;)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#9 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 805 messages

Posté 14 octobre 2017 - 03:00

Bonjour, merci et bravo pour cette présentation. 

J'ai une question qui pourra vous paraître bête mais,...

peut-on télécharger le programme dans la carte avec le logiciel Arduino normal ?.. et si oui, quel type de carte faut-il choisir ? (y a t-il un addon à télécharger ?)

merci d'avance.



#10 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 14 octobre 2017 - 04:35

Oui on peut téléverser le programme en utilisant le l'IDE Arduino normale. Il suffit de choisir la carte arduino nano. Aucun addon n'est à télécharger. La seule chose à faire est d'installer le driver  ( télécharger la version WindowsMac ou Linux 

C'est une chose à faire une seule fois sur votre PC =>   voir le point 3 de cette page 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 


#11 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 805 messages

Posté 16 février 2018 - 05:47

c'est encore moi.. je me demandais si cette carte disposait de sorties PWM et si oui lesquelles sont-ce ?... 
merci d'avance. 



#12 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 16 février 2018 - 08:56

Oui elle dispose des même PWM que l'arduino uno :  pins 3 5 6 9 10 et 11. 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !

 

Les réalisations de Mike118  

 

 

 




Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users