Cours:ErS2FermetureIUT

De troyesGEII
Révision datée du 20 mars 2020 à 15:24 par SergeMoutou (discussion | contributions) (Sujet 1)
Aller à : navigation, rechercher

Voici le travail que vous avez à réaliser pour la fin du projet du module M2203 :

  • rédaction d'un dossier portant sur les séances jusqu'à la fermeture à déposer sur le bureau virtuel / Mes Cours / M2203 / Devoir : 'Compte rendu carte projet µcontroleur'
    • le travail de recherche, choix des composants
    • le travail réalisé sur eagle
    • la fabrication (suivant votre avancement) de votre carte
  • simulation
    • sur tinkercad
    • fonctions arduino autorisées
    • lien vers le fichier tinkercad à envoyer à votre enseignant


Vous trouverez ci dessous quelques précisions pour les différents projets qui doivent vous aider à faire votre simulation.



fil pilote

On vous demande de faire une simulation avec Tinkercad de l’ « observateur fil pilote »

  • La partie programmée sera réalisée à l’aide d’une carte Arduino UNO.
       Il vous reste à mettre les composants sur la platine d’essais, la raccorder à la UNO et à faire le programme.
  • Pour le programme, vous pouvez au choix utiliser les fonctions Arduino ou programmer exclusivement en C.

mesure de distance par ultrason

Pas de changement pour ce projet qui se simule facilement sur tinkercad.

Vous devez donc faire la saisie du schéma avec les afficheurs, un bouton pour lancer une mesure et le module ultrason (attention il y en a 2 sur tinkercad, c'est bien le hc-sr04 !)

Quelques remarques :

  • les afficheurs sont forcément multiplexés
  • les afficheurs sont soit à anodes ou cathodes communes (propriété de l'objet)
  • connecter tous les segments sur le même port, programmation plus simple
  • un prochain td d'info pourra vous être utile pour gérer les afficheurs

téléinformation

Nous mettons à disposition deux sujets. Suivant l'avancement de ce que vous avez fait en classe vous pouvez choisir entre les deux :

  • Sujet 1 : vous partirez d'un schéma Tinkercad fourni qui possède deux Arduinos : un qui envoie un ensemble de lignes simulant la téléinformation et l'autre qui la reçoit
  • Sujet 2 : un arduino un potentiomètre une led : tout est fait avec un seul Arduino mais de manière très partielle !

Faites le choix entre le premier sujet (plus réaliste) et le deuxième.

Sujet 1

Vous partirez d'un schéma Tinkercad fourni qui possède deux Arduinos : un qui envoie une trame complète. Il vous faudra donc analyser cette trame, repérer les champs HCHC et HCHP et surveiller leurs valeurs pour décider quand 1 Wh a été consommé.

Vous devez partir du Schéma Tinkercad fourni. Vous pouvez ajouter une LED sur le deuxième Arduino pour l'allumer tous les Wh comme demandé.

Si vous avez traité le sujet 1, ne lisez pas la suite !

Sujet 2

Vous allez faire le schéma Tinkercad donné (mais non fourni) et travailler sur le champ PAPP qui est le seul champ fourni ICI. Il n'y a donc pas d'analyse de ligne à faire pour retrouver la bonne ligne puisque seule la bonne ligne est envoyée !

Théorie : un peu de physique

Si l'information qui vous intéresse est précédée par l'étiquette PAPP (Puissance apparente) et est donnée en en Volt.ampères. On vous demande d'allumer une led verte tous les Wh.

Question.jpg Vous recevez sans arrêt la trame (partielle)

ADCO 031428005988 ?
HCHC 000643083 ^
HCHP 000825429 1
IINST 003 Z
IMAX 029 J
PAPP 00620 )
MOTDETAT 000000 B

Au bout de combien de temps êtes vous susceptible d'allumer la led verte (si la puissance active et la puissance apparente sont égales) ?

Question.jpg En déduire le calcul que vous avez à faire à chaque réception de trame avec la donnée PAPP pour connaître à chaque réception le nombre de Wh consommé.

Indication : on notera l'intervalle de temps entre deux réceptions DT et on le supposera en millisecondes.


ATTENTION : La suite des questions est encore réalisée avec le champ PAPP mais serait plus facile à décoder avec le champ BASE si vous n'avez aucun abonnement Heures pleines/Heures creuses ou les champs HCHC et HCHP dans le cas contraire.

Programmation

Travail 1

Tinkercad 1.png

Question.jpg Réaliser sur Tinkercad un ensemble comprenant :

  • un Arduino UNO
  • un potentiomètre câblé sur A0
  • une led verte câblée sur la broche 5 (afin que je puisse vérifier vos programmes)

Question.jpg Le potentiomètre est destiné à modifier la puissance qui sera envoyée à votre programme principal. Ceci se fait à partir de votre programme par l'appel d'un sous programme fourni : Serial_get_trame(). Contrairement à ce que laisse supposer son nom, il n'a rien à voir avec une liaison série (mais il le devrait sur un compteur réel). Il est complété pour vous montrer comment l'utiliser ci-dessous.

void setup()
{
  pinMode(5, OUTPUT);
  Serial.begin(9600);
}

char *Serial_get_trame() {
  char trame[15]="PAPP 00000 ?"; 
  uint16_t puissance;
  uint8_t i;
  puissance=analogRead(A0);
  trame[6] = puissance/1000 + '0';
  trame[7] = (puissance%1000)/100 + '0';
  trame[8] = (puissance%100)/10 + '0';
  trame[9] = (puissance%10) + '0';
  delay(1000); // version simple
  // pour la version plus compliquée décommenter la ligne suivante
  //for (i=0;i<100+random(0,20);i++) delay(1);
  return trame;
}

void loop()
{
  // put your main code here, to run repeatedly:
  char trame[15];
  strcpy(trame , Serial_get_trame());
  Serial.print("loop trame is ");
  Serial.println(trame);
}

Ce programme envoie toutes les secondes une valeur de puissance en format texte.

Faire fonctionner cet exemple en faisant bouger le potentiomètre.

Travail 2

Pour comprendre le travail demandé, il vous faut distinguer la chaîne de caractères qui contient un nombre (mais sous forme de caractères) et le nombre lui même que l'on vous demande de calculer.

Question.jpg Écrire un programme qui reconstitue la valeur du champ PAPP d'une trame sous forme numérique en l'envoyant par liaison série. La valeur numérique envoyée doit être identique à celle que l'on a initialement dans la trame.

Travail 3

Question.jpg Modifier le programme précédent (Travail 2) pour utiliser les valeurs numériques reçues au fur et à mesure pour calculer l'énergie en Wh.

Indication

  • Vous remarquerez pour ce travail que votre appel strcpy(trame , Serial_get_trame()); se fait toutes les secondes, non pas à cause d'un delay dans la boucle loop() mais à cause du delay dans Serial_get_trame()  ! En clair ici DT = 1s.
  • Les puissances ne s'additionnent pas, ce sont les énergies qui s'additionnent.

Travail 4

Question.jpg Écrire un programme complet qui affiche correctement la led verte tous les Wh.

mesure de consommation

Comme il est difficile de simuler la consommation d'un appareil USB sur tinkercad, nous utiliserons des lampes. En faisant varier la tension du générateur, le courant dans les ampoules va varier avec un maximum proche de 1A.

Vous récupérerez le schéma sur le lien suivant :

https://www.tinkercad.com/things/eCAHGzwWqyu


Câblage

vous ajouterez des afficheurs 7 segments afin d'afficher la valeur de la consommation. Bien entendu ces afficheurs doivent être multiplexé.

Attention, sur tinkercad les afficheurs peuvent être à cathodes ou anodes communes (cf propriété de l'objet).

Pensez à relier tous les segments sur le même port du µcontrôleur afin de simplifier la programmation. Un TD d'informatique embarquée à venir permettra de vous aidera si besoin pour la réalisation du programme.

Attendu

Vous devez ensuite programmer le µcontrôleur de la carte arduino UNO (atmega328p) pour afficher le courant circulant dans les lampes.

Vous pouvez utiliser les fonctions arduino. Pour la conversion analogique pensez à utiliser la fonction analogReference().