• Aucun résultat trouvé

Abstract.Ce document est destiné à l'auto-formation des étudiants de S2 Lors de leurs projets

N/A
N/A
Protected

Academic year: 2022

Partager "Abstract.Ce document est destiné à l'auto-formation des étudiants de S2 Lors de leurs projets"

Copied!
19
0
0

Texte intégral

(1)

Dujardin stephane

IUT de CERGY N LRSD

01 02 2021

CODEX DUJ

Abstract

.Ce document est destiné à l'auto-formation des étudiants de S2

Lors de leurs projets

Sommaire

Page 1 photos de vacances .

Page 2 Présentation des projets , outils et logiciels

Page 3 partie A Comparaison entre C et Python , philosophie générale les fichiers Page 4 partie A Codage en ligne : débuter en python

Page 5 partie A Codage en Ligne 8 exercices

Page 6 partie A Codage en Ligne 8 exercices pour progresser Page 7 partie A Codage en local l'IDE Thonny

Page 8 partie A Codage en local Premier programme sur l'IDE Thonny Page 9 partie A Codage en local utilisation des capteurs de la carte

Page 10 partie A Codage en local Les sous programmes ..trucs et astuces de python Page 11 partie A Codage en local travaux pratiques avec la carte micro:bit V2 ..

Page 12 partie B exercices de codage en processing .. boutons et étapes Page 13 A&B A+B mise nen œuvre de la DEMO sinus

Page 14 A&B A+ B DEMO PROJET COMPLET mise en Œuvre version 01/02 Page 15 A&B A sur Thonny exo pour envoyer des datas en DUJ5

Page 16 A&B B Processing : étude du programme PJS2duj5 ou programmer ? Page 17 A&B A Python présentation du main.py en version COMPLEXE.

Page 18 A&B A Python ou programmer dans le main.py  ? ..

Page 19 Annexe théorie du protocole DUJ 5

Page 1

(2)

PRESENTATION des « PROJETS technologiques »

BUT :

Réalisation d'un dispositif de mesure, autonome, connectable à un ordinateur.

Il sera constitué de 2 parties reliées ensemble par une liaison série au protocole DUJ5 Partie A une Micro:BIT V2 programmée en Python sur Thonny ou Create.withcode.uk Partie B un ordinateur doté d'un programme écrit en processing

Lors des projets de S2 , vous serez amenés à vous auto-former sur la programmation en Python d'une carte Microbit ( en prêt) .. ce document vous servira de guide

.. Un Répertoire type est à votre disposition : c'est  projetS2.zip ..

: répertoire processing PJSTduj5 : programme affichant des données issues de la carte microbit : répertoire microbi : avec 4 programmes de démonstration .. dont un générateur de sinus

UTILISATION Du DOCUMENT : pour votre auto-formation

En premier : Auto-formation à Python .en ligne . page 3 4 et 5 6 Travaillez sur le site Create.withCode.uk

Faites les exercices proposés

En second : Auto-formation à Python avec la carte microbit, et sur THONNY Travaillez sur Thonny avec les pages 7 et 8 9

En Troisième Processing .. le retour:).. sans carte Essayez la notion de clic et celle d'étape

En quatrième :faites fonctionner le programme processing grâce à la page 13 ..

Recevant les informations de la carte microbit programmée avec sinus.hex ( dans projetS2.zip)

En Cinquième :faire fonctionner le programme type, version 01/02 page 14 et 15 16 et faites fonctionner mon projet de base Mettez la carte en MODE 1 .. et mettez le doigt sur Pin0 ( 0 ) En sixième: avec la carte branchée en mode 1

essayerez de changer des affichages dans la fenêtre processing Regarder la page 13 , Faites un tour page 16

Et consulter le draw dans processing

Faites apparaître votre nom !!.. mettez le doigt sur la broche 0 de la microbit Bon travail:)

Page 2

Pc . Mac .linux

usb - +

Partie A Partie B

Datas capteur

s

MICROBIT

Mini Plaque LAB

arm Programme

Programme

(3)

COMPARAISONS « C et PYTHON »

// LRSD univ exo1

#include "mbed.h"

Serial serial(SERIAL_TX, SERIAL_RX);

int main() {

serial.baud(115200);

while (true) {

serial.printf("bonjour");

wait(10);

} }

# LRSD univ exo1 from microbit import * uart.init(115200) while True:

print("bonjour") Sleep(10000)

Programme écrit en C sur Mbed Programme en Python

Le Python s'inspire du C . Vous n'y verrez plus de pointeurs , les variables son plus souples à déclarer , et il vous sera demandé de la précision avec les tabulations ...

commentaires

;

POINT CLEF : l’indentation C'est la gestion rigoureuse des tabulations, elle remplace

l'usage des { }

Comparaisons philosophiques

Le Compilateur C . vous écrivez les commandes à réaliser. Un logiciel calcule l'espace mémoire utile , et ensuite il les transforme en langage machine composé de 0 et de 1 adapté à l'unité centrale de la carte ou il sera exécuté .

L’éditeur Python Vous écrivez les commandes à faire réaliser par un interpréteur « PYTHON » présent dans votre carte microbit. Ensuite Vous les envoyez en format texte vers la carte microbit .

Approche pratique : Le Python sur votre carte Microbit ..

« micropython » est le fameux « python » pré installé dans le microprocesseur ARM de votre carte microbit. Il sait interpréter ligne à ligne les commandes que vous lui enverrez, il peut exécuter un programme téléchargé .

2 Types de fichiers compatibles avec la carte microbit

Les fichiers xx.hex , ce sont les programmes que vous pouvez écrive et compiler directement sur le site microbit .. le hex est du langage machine ..

Ce hex englobe vos lignes de texte en python , et l’interpréteur python ! (1,8Mo) Il se place dans la carte , comme un fichier se copie dans une clef USB

Le fichier sinus.hex dans le répertoire projetS2.zip en est un exemple IL s'exécute automatiquement dès la mise sous tension de la carte . Les fichiers xx.py , ce sont ceux que vous éditerez sur Thonny

C'est du texte interprétable par le programme micropython déjà dans la carte (Micropython sera téléchargé au moins une fois avant utilisation ( voyez la doc)) Vos fichiers « py » se chargent par liaison série grâce à Thonny

Le fichier main.py en est un exemple

Seule les fichiers nommés main.py sont exécutés à la mise sous tension .

:

D'autres noms de commandes

Page 3

(4)

CODAGE EN LIGNE débuter en python Create.withcode.uk

Vous programmerez directement sur le site de create.withcode.uk , c'est le site d'une université Anglaise qui fait de la recherche pédagogique en partenariat avec le privé, et partage ses résultats pour les rendre accessibles gratuitement aux écoles du monde entier...

Ici nous apprendrons à nous passer de la carte Micro:BIT ,car nous utiliserons le simulateur de carte microbit présent en ligne .. c'est très pratique pour débuter .. et suffisant ..mais pas si génial au final pour télécharger le résultat sur votre carte ..

.

from microbit import * while True:

display.show(Image.HAPPY) sleep(500)

display.show(Image.SAD) sleep(500)

Arrivée sur le site Create

1/ Vous allez copier ces 6 lignes

vers la fenêtré du haut 3/ regardez les 25 Leds C'est beau

2/ vous faites RUN

Page 4

Une fois réalisé un copier coller

Pour utiliser ces lignes de codes dans createcode Vérifiez si l'indentation est correctement copiée

from microbit import * while True:

display.show(Image.HAPPY) sleep(500)

display.show(Image.SAD) sleep(500)

indentation

(5)

Exo1

from microbit import

display.show(Image.HAPPY)

le Python interprète les commandes Python, ligne après ligne

1/ from microbit import .. indique quelle bibliothèque utilisera l'interpréteur

2/ display.show(Image.HAPPY) commande les 25 led de la carte pour faire un sourire ..

Exo 2

from microbit import * while True:

display.show(Image.HAPPY) sleep(500)

display.show(Image.SAD) sleep(500)

...I .. c'est cela l'indentation ..

« : » 

dit après le True , il y aura des lignes à faire dans le while

elles seront toutes alignées avec le même nombre de "tabulation" ou indentation from microbit import *

while True:

display.show(Image.HAPPY) sleep(500)

display.show(Image.SAD) sleep(500)

...I... regardez ce sleep() il n'est pas aligné , il fera planter l'interpréteur Exo 3

from microbit import * titi = 'A'

while True:

display.show(titi)

Utilisons la liaison série , car elle sera plus utile dans le projet

Exo4

from microbit import * uart.init(115200)

while True:

print('teste fait par LK !') sleep(1000)

À tester > bonjour !

Exo 5 utilisons des variables from microbit import *

uart.init(115200) titi = 100

toto = 'abc' while True:

print(titi) print(toto) sleep(1000)

C'est Python qui gère la déclaration de la nature des variables

Exo 7 jouons avec un bouton

Ici le bouton n'est testé par la carte que lorsque l'instruction le demande

from microbit import * while True:

if button_a.is_pressed():

display.show(Image.HAPPY) sleep(500)

display.show(Image.SAD) sleep(500)

Dans cet exo sans action sur A c'est:(

Avec une action continue c'est :( et :) Exo 6 utilisons des « if »

from microbit import * titi = 0

while True:

if titi > 100 :

display.show(Image.HAPPY) if titi > 200 :

Titi = 0 if titi < 100 :

display.show(Image.SAD) sleep(5)

titi = titi + 1

if test : : faire ce qui est identifié pareil A faire 1

A faire 2

Exo 8 à l’insu de vous,une action sur A ou B incrémente une variable en interruption

from microbit import * while True:

display.show('O') sleep(2000)

titi = button_a.get_presses() if titi > 1:

display.show('1') sleep(2000) display.show('!') sleep(1000))

Seule button_a.get_presses() saura récupérer le nombre de clics , et le remettre à 0

Page 5

(6)

Exercices de Python à faire en ligne pour progresser .

Exo4

from microbit import * uart.init(115200) while True:

rec= ' ' V0= 10*[0]

for i in range (10):

V0[i]=pin0.read_analog() rec = rec + str(V0[i]) + '/' print(rec)

sleep(10000) Exo3

from microbit import * uart.init(115200) rec = 'rr'

while True:

rec = rec + str(20)+ 'A' print(rec)

sleep(10000) Exo2

from microbit import * uart.init(115200) while True:

display.show(Image.SAD) titi = pin0.read_analog() if titi > 512:

display.show(Image.HAPPY) Exo1

from microbit import * uart.init(115200) rec = 'bonjour' while True:

print(rec) sleep(10000)

Ecrit : bonjour

Exo1 bis

from microbit import * uart.init(115200) rec = 125

while True:

print(rec) sleep(10000)

Ecrit : 125

:)

:(

v0<512 v0>512

Écrit 0/0/0/0/0/0/0/0/0/0/

si V0 = 0 Ecrit

10/10/10/10/10/10/10/10/10/10/

Si V0 = 10 Écrit

rr20A

Et 10 secondes après rr20A20A

Et 10 sec …ainsi de suite rr20A20A20A

Action de simulation

Attention la barre de simulation donne de -1024 à 1024 , en réalité c'est de 0 à 1024.

rec est ici une variable texte

rec est ici une variable

numérique 32bits Print se débrouille

rec est ici une variable texte

On lui ajoute du texte à sa fin en

transformant la quantité 20 en une chaine de deux ascii . Plus le caractère 'A' VO est un tableau de 10 valeurs = 0

rec est en lettres on lui additionne la transformation

De V0 en une chaîne avec un / en plus

Page 6

(7)

1/ Allons chez Thonny:) Url : thonny.org

L'IDE THONNY .. Ou

Environnement de Développement Intégré

Sur Thonny vous écrirez des lignes de commandes et les enverrez par liaison série vers la carte microbit , ou son interpréteur micropython les exécutera . C'est Thonny gère la carte.

Pour que la carte microbit puisse communiquer par liaison série , il faut que votre ordi possède le bon driver ( c'est celui de la carte Mbed le ARM Mbed WindowSerie port driver ) Logiquement il est déjà installé dans Windows 10.. sinon il faudra le faire )

2/ Téléchargez

suivant votre besoin

4/ paramétrez pour fonctionner avec une carte micro:bit

>>>> Outils :

>> interpréteur

5/ Choisir

l’interpréteur pour microbit

6/ branchez la carte et faites le choix du port 7/ Faites OK

Ici vous initialisez la carte avec l'interpréteur de commandes python nommé « micropython »

3 installez .. vous obtenez ceci

>> vous êtes connectés

Page 7

Téléchargement et installation de Thonny pour microbit

(8)

premier programme sur Thonny et téléopération de la carte

Exo 1

Ce programme utilise la liaison série pour écrire bonjour dans la console en bas de page ..

Logiquement si Thonny est bien paramétré ( page d'avant) Et si La carte est branchée sur le port USB

Thonny l'a vu et écrit « >>> » en bas de page ( faites un Reset carte si problème )

Vous pouvez copier et coller le programme suivant dans la fenêtre exo1.py

from microbit import * uart.init(115200) while True:

print("bonjour") Sleep(10000)

Lancez le programme avec la flèche verte Bonjour apparaît en bas de l'écran

Le fait de lancer le programme par un RUN, envoie les lignes de commandes écrites en Python vers la carte, et les exécute les une après les autres .

Si la carte exécute une commande qui écrit du texte sur la liaison série, le texte apparaît en bas de page dans la console . Cependant, quant vous revenez en mode édition avec un stop, Thonny ne reprend pas la main sur la carte.. Seul un reset carte la réveille et renoue ce lien avec Thonny, alors vous pouvez continuer à écrire du code dans thonny .

Je vous conseille de refaire les exos des pages d'avant !

>>>Indique

Que la carte microbit Est synchronisée avec Thonny Elle vous attend !

« bonjour » est Visible une fois le programme lancé

Page 8

(9)

Utilisation des capteurs de la carte microbit

Nous resterons dans le cadre de La version 01/02 qui limite la capacité de transfert Problème 1 : Duj5 version 01/02 ne peut transférer que des datas de 0 à 1024

Solution 1 : on limitera les chiffres à transmettre entre 1 et 1023 ..

Problème 2 : Duj5 ne sait pas encore transférer des chiffres négatifs

Solution 2 : les négatifs seront limités par -512 et +512 et décalés de 512 avec un +512 Mesures sur pin0

La pin0 , mesure les tensions en 0 et 3,3V pas de négatif ! en 10bits Le résulta sera un chiffre en 0 et 1024 ..

Mettez 0 sur pin0 ou 3,3V

from microbit import * uart.init(115200) while True:

captation = pin0.read_analog() print ( captation )

sleep(1000) from microbit import *

uart.init(115200) while True:

captation = accelerometer.get_z() print('Z',captation)

sleep(1000)

from microbit import * uart.init(115200) while True:

captation = accelerometer.get_z() titi= int ( captation / 4 + 512 ) print('Z',titi)

sleep(1000)

Mesures au magnétomètre ( X Y ou Z) La mesure va de +-1000000 avec un aimant La mesure ira de +-100000 avec la terre

L'axe des z est au dessus L'axe des x de coté

L'axe des y devant ( câble usb) ..

Se limiter à 10 mesures à la seconde

Diviser par 250 borde la mesure aux valeurs du champ magnétique terrestre

Dans le PC on enlèvera 512 et on retrouvera une valeur autour de 0 ( +-512)

from microbit import * uart.init(115200) while True:

titi = compass.get_x() print('g X',titi)

sleep(1000) from microbit import * uart.init(115200) while True:

titi = int(compass.get_x() / 250 + 512) print('g X',titi)

sleep(1000)

from microbit import * uart.init(115200) while True:

titi = microphone.sound_level() print('son',titi)

sleep(1000)

Mesures avec l'accéléromètre ( X Y ou Z) mesure de l’accélération entre +2 et -2g

+2g = 2048 -2g = -2048 L'axe des z est au dessus L'axe des x de coté

L'axe des y devant ( cable usb) ..

Ici mesure sur Bougez la carte

À plat sur Z On mesure l’accélération terrestre Modification pour capter ,

border et minimiser la mesure /4 passe de +-2048 à +-512 +512 passe de +-512 à 0 1024

Mesures sur le micro

La mesure du son donne un résultat avec une valeur comprise entre de 0 à 512 ..

Mesures de la température interne temperature() donne un résultat en Celsius Mais gare au négatif ! Alors je passe en Kelvin avec un + 273

from microbit import * uart.init(115200) while True:

titi = temperature()+ 273 print('dKelvin',titi)

sleep(1000)

Page 9

Annexe 3

(10)

Programmation fine Trucs et astuces de Python

Déclarer un sous programme

L'import rend présentes les lignes de commandes contenues dans spi.py Dans main.py

L'appel de jon() se fait bien Attention aux variables Privilégiez le passage de paramètres dans la fonction

Stocker des fonctions , dans des programmes situés à l'extérieur du programme principal

from microbit import * from spi import*

while True:

print(124) jon()

sleep(500)

Programme principal

nommé main.py Programme secondaire nommé spi.py

def jon():

print(126)

124 126 ..

console

main.py spi.py

Racine carte Micro:Bit

from microbit import * def jon():

print(126) while True:

print(124) jon() sleep(500) Notez les 

:

console

Écrire des sous programmes Permet d’éviter des répétitions

1/ problème du PYTHON : Vous écrivez du code qui sera interprété ensuite, ligne à ligne par le python situé dans la puce .. Cela implique que certaines parties de votre programme peuvent êtres fausses, sans que votre éditeur ne le voit. Ce n'est que quant la ligne corrompue est exécutée qu'une erreur apparaît. Il faudra multiplier les essais pour trouver toutes les erreurs .

2/ Sur Thonny , votre carte est reliée par liaison série avec votre PC.. quant la puce plante , la liaison série plante .. tout s’arrête .. seule solution : Reset sur la carte .. et stop exécution ..

Dans des cas très rares, il faut aller dans > OUTILS > OPTIONS > INTERPRETEUR Et recharger le firmware micropython sur la carte .. puis faire ok

Variables et sous programme

Attention les sous programmes déclarent en local, toutes les variables qu'ils utilisent ..

Sauf si on précéde le nom de la variable par le mot « global » .

Passer des paramètres est ce qui est le mieux . from microbit import * titi = 33

def jon():

global titi titi = titi + 1 print(titi) while True:

print(124) jon() sleep(500)

124 126

.. 124

34 ..

console

Grâce à global Python sait qu'il faut sortir de la fonction pour aller trouver la valeur de titi

Le mieux est de Passer les variables dans la fonction

Importer un sous programme Les sous programmes

DEPANNAGE

Page 10

(11)

TRAVAUX PRATIQUES avec câblage:)

Dans cette partie vous allez câbler des LEDs sur la plaque lab et utiliser la carte microbit pour en faire clignoter une

kito nic

3 p0 p1 p2 p3 p4

3,3 P0 P1 P2 P3 P4 P5 P6 P7 P8 Ov

P20 P19 P16 P15 P14 P13 P12 P10 P11 P9 Ov

Le connecteur extension votre premier Câblage CABLAGE 1 .. allumer une LED VERTE sur le 3,3V

330ohms orange

orange marron LED verte

Grande patte vers le +

3,3V 0V

330ohms

CABLAGE 2 .. faire clignoter une LED jaune Sur Thonny

1/ Trouvez le port COM ( option)

2/ Faire stop .. et faire apparaître les >>

( sinon rechargez le firmware)

3/ copier coller le programme suivant from microbit import *

while True:

pin2.write_digital(0) sleep(500)

pin2.write_digital(1) sleep(500)

Branchez la LED jaune avec 330ohms , entre la broche P2 et le 0V

CABLAGE 2 ..mesurer la tension de la LED verte

1/ Tirez un fil entre la broche P0 du connecteur

( P0 est à coté du 3,3V) , et l'anode de la diode verte 2/ copiez collez le programme à gauche

3/ lancez et regardez Nota

Pin0.read_analog() retourne une valeur de 1024 pour 3,3V D’où la règle de 3 à son égard

from microbit import * uart.init(115200) while True:

pin2.write_digital(0) sleep(500)

pin2.write_digital(1) sleep(500)

titi =pin0.read_analog()

print((titi*3.3)/1024)

Page 11

(12)

// EXO 1 test d'un bouton central

color ON = color(200, 0, 0); // ON veut dire Rouge color OFF = color(0, 0, 200); // Off veut dire bleu int bout = 1 ; // bout est l' etat du bouton

int PX = 100 ; int PY = 100 ; int L = 100; int H = 100; // // pour le dessin du bouton void setup()

{ size(600, 600); }

void draw() // c'est notre main pour dessiner à l'écran {background(50,60,0);

textSize(24); fill ( 250) ; text("bonjour exo 1 ", 50,50);

fill(OFF); if ( bout == 1) fill(ON) ; rect(PX,PY,L,H); //un bouton } // fin du draw

void mousePressed() // programme appelé par un clic souris

{ if ((mouseX>PX)&&(mouseX<(PX+L))&&(mouseY>PY)&&(mouseY<(PY+H)))bout = -bout; }

Processing révisions  

EXO1 : Créer une fenêtre de size(600,600), avec un bouton

Un joli carré rouge y sera dessiné , et lorsque vous cliquerez dessus PC le saura , (car vous avez utilisé le sous programme d'interruption PC mousePressed() ) ..

Dans cette interruption vous ferez un if complexe pour savoir si la position de mouseX et Y se situe dans le fameux carré .. vous y inverserez la couleur du carré à chaque clic .

Regardez comment on utilise les variables color pour fabriquer une couleur avec un nom testez exo1

// EXO 2 test d'un bouton central et d'un systeme avec 2 etats color ON = color(200, 0, 0); // ON veut dire Rouge

color OFF = color(0, 0, 200); // Off veut dire bleu int bout = 1 ; int etat = 0 ;

int PX = 100 ; int PY = 100 ; int L = 100; int H = 100; int off = 100;

void setup()

{ size(600, 600); }

void draw() // c'est notre main pour dessiner à l'écran {if ( etat == 0)

{ background(50,60,0);

textSize(24); fill ( 250) ; text("bonjour exo 2 etat = 0 ", 50,50);

fill(OFF); if ( bout == 1) fill(ON) ; rect(PX,PY,L,H); //un bouton } // fin etat = 0

if ( etat == 1)

{ background(50,0,60);

textSize(24); fill ( 250) ; text("bonjour exo 2 etat = 1 ", 50,50);

fill(OFF); if ( bout == 1) fill(ON) ; rect((PX+off),PY,L,H); //un bouton } // fin etat = 1

}

void mousePressed() // programme appelé par un clic souris

{ if(etat==0){if((mouseX>PX)&&(mouseX<(PX+L))&&(mouseY>PY)&&(mouseY<(PY+H))) {bout = -bout; etat = 1 ;}}

if(etat==1){if((mouseX>(PX+off))&&(mouseX<(PX+L+off))&&(mouseY>PY)&&(mouseY<(PY+H))) {bout = -bout; etat = 0 ;} }

}

EXO2 Créer une fenêtre de size(600,600), avec un boutons et 2 états dans le draw.

Une variable état est testée ,si etat = 0 il y aura un graphisme différent que si etat = 1 Le test dans le mousePressed() est différentié entre les 2 états grâce à etat et off testez exo2

Processing ne s'installe pas, car c'est un programme qui utilise le java (déjà installé sur votre PC ou Mac) .. allez sur le site de la fondation processing , télécharger processing.zip .. et décompressez le dans un répertoire connu .. ensuite allez dans le répertoire pour trouver et lancer processing.exe .. c'est tout

Page 12

(13)

Mise en œuvre de la démo « sinus.hex »

Configuration .ordinateur : Processing en run dans le projet PJSduj5

.carte Microbit : Chargée avec SINUS.hex trouvé dans le répertoire microbit SINUS.hex se copie et se colle dans la carte microbit : ( clef usb)

Faites un run ici

vote fenêtre programme s'ouvrira

! carte micro:bit déconnectée

Elle montre les ports COM utilisés par mon PC , celui de carte microbit n’apparaît pas encore:)

Connectez la carte microbit , sans oublier de lui avoir chargé le

programme main.py ( page d'avant)

Un nouveau port com s'ouvre

Cliquez ( ici dans le 6)

Une nouvelle fenêtre s'ouvre Une Première fenêtre s'ouvre

Ici la carte Microbit est chargée avec le fichier SINUS.hex Le Rôle de SINUS.hex

Est d'emettre un signal sinus observable sur le terminal graphique constitué par le programme processing nommé PJS2duj5

Page 13

(14)

Programmes de lancement

Page 14

PROJETS2 renferme des sous programmes utiles au lancement des projets

Répertoire PJS2duj5

Le programme écrit en processing PJS2duj5 pour votre Ordinateur .Son rôle est de recevoir et d'afficher les datas arrivant de la carte . ICI il n'affiche que les 100 valeurs du tableau V1[]

Dans le répertoire microbit

les 4 programmes pour la carte microbit, ils seront présentés du plus simple au plus complexe

SINUS pour une approche "débutant" .. un bon outil de test de processing SINUS.py est le programme python

Il calcule les 100 valeurs d'un sinu, les place dans le tableau V1[] et le transfert en série un 'h' indique au PC que c'est le mode SINUS

SINUS.hex est le programme en code machine à copier directement dans la carte LIVE pour une approche "test capteur" s'adapte à tous les capteurs, une forme de scop LIVE.py pour Thonny en python

Dans une boucle on échantillonne 100 valeurs de l’accélération en X ( chaque 10 ms) On les place dans le tableau V1[] , et ensuite on les sérialise vers PJS2duj5

un 'g' indique au PC que c'est le mode LIVE

LIVE.hex ..est le programme en code machine à copier directement dans la carte SIMPLE pour une approche "mise en mémoire et restitution, basique "

SIMPLE .py pour Thonny en python

cette version propose 2 possibilités de fonctionnement par une pression sur A et B > clic A record de 100 mesures en flash et attente ( on efface les valeurs d'avant) > clic B lecture flash et transfert dans V1[] et attente

SIMPLE.hex .. .est le programme en code machine à copier directement dans la carte COMPLEXE pour une approche "multi usage "

COMPLEXE.py pour Thonny en python

cette version propose 4 choix de fonctionnement par des actions complexes sur A et B > one shoot : 100 mesures dans V1[] , transfert serie , et attente .

> 100 mesures dans V1[], et transfert en boucle > record de 100 mesures en flash et attente > lecture flash et transfert dans V1[] et attente

COMPLEXE.hex .. est le programme en code machine à copier directement dans la carte mode d'emploi de la carte en mode "COMPLEXE"

A/ Au début à la mise sous tension ou par un reset la carte affiche un 0

B/ à chaque clic sur A on passe de 1 2 3 4 1 2 3 4 l'état est affiché sur les LED état 1: 100 mesures et transfer chaque 0.5s en boucle auto

état 2: one shoot ! et transfert de 100 mesure et retour au point A/

état 3: one shoot et mise en flash de test.txt avec les valeurs, et retour au point A/

état 4: relecture des datas de test.txt et transfert serie, retour au point A/

C/ Choix et lancement d'un des 4 états ..

1/ choisir l'état que l'on désire exécuter par des clics sur le bouton A 2/ lorsque l'état désiré s'affiche

cliquez entre 0,5 à 1 seconde sec sur B la carte fait un petit « o » pendant 1 S

et montrera ensuite un « O » pendant 2 secondes pendant ce « 0 » de 2 secondes faites 2 clics B

la carte répond par un « ! » .. et exécute le mode choisi 3/ quant un mode est fini .. la carte retourne en attente de clic A un Clic B réveille la carte du mode automatique ( état 1)

un marche arrêt annule tout

(15)

Page 15 Étude du programme SINUS.py sur Thonny

Ou comment coder un programme en python qui sache envoyer, automatiquement chaque seconde, un tableau de datas vers le PC en utilisant le protocole DUJ5.

À la fin des exos vous saurez enoyer l100 valeurs d'un sinus r vers le PC équipé de PJTS2duj5 Qui les recevra comme un tableau pour les placer en V1[] grâce au H et R

exo 1

from microbit import * uart.init(115200)

while True: # boucle globale GENEALE

uart.write('a') uart.write('e') Sleep(1000)

Dire au programme du PC que la carte microbit est la, en mode auto.

Je suis la = 'e' mode auto 'a' exo 2

from microbit import * uart.init(115200)

titi = 0

while True: # boucle GENEALE uart.write('a')

uart.write('e') print( titi)

uart.write('H') # cloture d'une data uart.write('R')

sleep(1000)

print(titi) > envoie 0 car titi = 0 H ferme l'envoie d'une data R ferme le transfert du tableau

Ici on envoie un tableau de 1 élément

exo 3

from microbit import * uart.init(115200)

while True: # boucle GENEALE uart.write('a')

uart.write('e') for i in range(100):

print( i)

uart.write('H') # cloture data uart.write('R') # cloture tableau sleep(1000)

La boucle for va envoyer 100 datas Chacune finie par un 'H'

Le tout fini par un 'R' exo 4

from microbit import * uart.init(115200)

while True: # boucle globale GENEALE uart.write('a')

uart.write('e') for i in range(100):

print( 10*i)

uart.write('H') # cloture d'une data uart.write('R')

sleep(1000)

La boucle for va envoyer 100 datas Chacune finie par un 'H' et R Une demi dent de scie sur le PC'

Exo 5

from microbit import * import math

uart.init(115200)

while True: # boucle globale GENEALE uart.write('h')

for i in range(100):

toto = 510 + 250 * math.sin(3.6*i *math.pi/180) titi = int(toto)

print( titi)

uart.write('H') # cloture d'une data uart.write('R')

sleep(1000)

Math est la bibliothèque qui permet de calculer des sinus ( exprimés en radiant) Je calcule 100 valeurs de 0 à 360 ( d'ou le 3,6 i math.pi/180 radiant

Exo 5 est la base du programme sinus.hex ..

(16)

Etude du programme Processing PJS2duj5 

PJS2duj5 est dans le répertoire processing lui même dans le répertoire zip projets S2 . Il fait appel au fichier de sous programmes nommé PROJETS2 ( non décrit)

Dans le draw() : La variable nommée « etat » sépare deux modes de dessins différents

Si etat = 0 , on fera etat0() qui paramétré le bon port COM avec la carte et force l' etat à 11 Si etat = 11 , en tache de fond la carte écoute le port COM et mémorise les datas arrivées if ( état ==11) est le lieu ou vous devez écrire vos programmes

Exemple .. dans état == 1 , une fenêtre montre les 100 données de V1[] arrivées en DUJ5 Les Variables en provenance de microbit sont dans le tableau V1[120] pré créé par PROJETS2 La carte renseigne aussi la variable « type » (accessible) sur l'état de la carte microbit

// PROJET PJ2

// ecoute la carte microbit en version 01/02 ( com carte > Pc) import processing.serial.*; // bibliothèque gestion com de processing

Serial myPort; // myport sera le nom de notre objet de communication serie // Variables du DRAW

int etat = 0;

// variables utiles pour l'etat 0

int kx= 0; int ky= 100 ; int dk= 30 ; int mk= 40 ; int ptk= 1; int nbk= 10 ;String toto; int o= 0;

// variables utiles pour l'état 11

color ON = color(204, 0, 0); color OFF = color(0, 0, 200); color OK = color(0, 200, 0);

int type = 0 ; // 0 pas de carte , 1 carte version 01/02 'e' , 2 carte version ? 'f' // variables liées à votre façon de dessiner dans le if(etat == 11)

// int bl bla void setup() {

textSize(20); size(600, 600); // votre fenetre d'APP sur le PC

initPJS2(); // initialisation de mon programme et des variables client OBLIGEE }

void draw() // c'est notre main pour dessiner à l'écran {

if ( etat == 0) etat0(); //recherche le bon port COM car il le faut !!!!!

if ( etat == 11)

{ int PX = 100 ; int PY = 100 ; // position fenetre de datas de V1[] dans l' ecran // exemple demonstratif d'un programme simple

background(10,60,0);

fill(250); text ( "Datas Vision de test pour Version 01/02 " , PX , 50 );

// scop minimaliste

fill(250); rect(PX,PY,400,400); // couleur et tracé scop for ( int i = 0 ; i < 101; i++)

{ fill(250,0,0); ellipse(4*i + PX, PY + 400 - 4* (V1[i]/10) , 3,3);}

// V1[] va de 1 à 1024 .. l'affichage de 0 à 400 alors je fais 4/10 // car avec un int 0.4 est impossible

// affiche l'etat de la carte

fill(250); // ecoute de la carte pour savoir si elle vit encore text ( "mode" , 100 , 550 ); text ( state , 160 , 550 );

if ( type == 0) text ( "pas de carte Active " , 250 , 550 );

if ( type == 1) text ( "Carte Microbit avec main 01/02 " , 250 , 550 );

}

} // fin du draw

void mousePressed() // programme appelé si on clic avec la souris

{ switch(etat) // les tests de clic souris sont relatifs à l'état dans lequel ils sont utiles { case 0: { testclicetat0(); } break;

case 11: { //**************vos tests de CLIC *******

// if ((mouseX>50)&&(mouseX<150)&&(mouseY>50)&&(mouseY<150))bout = -bout;

} break;

default: ; } // fin switch

}//fin mouse pressed

Page 16

C'est la que vous

pouvez créer une

fenêtre d'affichage

de données à

votre goût

Lieu de vos variables

(17)

initialisations

Init = 0 Prépa mode

Par clics

Init = 1 Mesurage Sur 4 modes

'e' vers COM pause(500)

N O

ON

N O

prépa mode par clics

Etat > led 'e' sur COM

A?

State ++

State =

Bout = 1 Led = 'o' sleep(1s)

B > X+1

N

O

'a' sur COM= 1

'a' sur COM= 4

= 3 'a' sur COM

= 2 'a' sur COM

N

N B?

Bout = 1

En interruption

Led = 'O' X=0 sleep(2s)

X = 2 Led = ' !'

Bout=0 Etat= state

Init = 1

in

out

Etat = 1

i de 1 à 120 print(V1[i]+H

in

Mesurage sur 4 modes

i de 1 à 100 V1[i]=capteurise()

sleep(temps)

R > com A ? Etat = 0

Init = 0

Etat = 2

i de 1 à 120 print(V1[i]+H i de 1 à 100 V1[1]=capteurise()

sleep(temps)

R > com Etat = 0 Init = 0

Etat = 3 i de 1 à 100 V1[i]= capteurise()

sleep(temps)

Etat = 0 Init = 0 i de 1 à 100 V1[i]> flash

Etat = 4

Etat = 0 Init = 0 i de 1 à 120 print(fichier flash)

out

MODE AUTO

MODE one Shoot

MODE Record

MODE Play Programme

COMPLEXE.py

Le fichier

s'appelle test.txt Il est consultable par thonny

Mesure d'un double clic

pendant les 2 sec de visibilité du 'O'

Récupère le fichier pour affichage dans PJS2duj5

Page 17

Sous programme capteurise()

1/ Échantillonne l'entrée désirée ici c'est pin0

2/ norme la valeur entre

min et max soit de 1 à 1023 place un offset de 512 si négatif 3 retourne la valeur norméée

(18)

# base version 1/02 du main 31 duj

# ne pas oublier de mettre l'extension .py de main.py

# quant vous mettrez le main sur la carte microbit from microbit import *

uart.init(115200)

# sous programmes de mesure sur un capteur def capteurise( max , min ):

captation = pin0.read_analog() # ici c'est l'entrée pin0 if captation > max: #limitation à la valeur max transmise captation = max

if captation < min: # limitation à la valeur min transmise captation = min

return int(captation)

while True: # boucle globale GENEALE

# déclaration de variables et leur initialisation

temps = 1 # 1 ms .. c'est votre temps entre 2 mesures etat = 0 # 1 auto 2 shoot 3 men 4 play

state = 0 # etat intermédiaire par le bouton a

init = 0 # = 1 si init aux boutons faites donc mesures bout = 0 # = 0 pas de demande de memo etat

V1= 120*[0] # ouverture tableau pour canal V1

# initialisation des paramètres A/D envoyés vers le PC V1[110] = 0

V1[111] = 100*temps # pour 100 echantillons V1[112] = 1023 # valeur max en 10 bits V1[113] = 1 # valeur min en 10 bits

while True: # boucle « prépa mode » ou « jouer mode » while init == 0: # init=0 prépa

Suivent les lignes de codes prépa mode par clics Choix du mode par clic A

Lancement du mode par clic B et double clic B while init == 1: # init = 1 modes

Suit l’exécution des lignes de mesurage sur 4 modes Avec utilisation de capteurise() pour mesurer

sleep(500)

uart.write('e') # f si mocro < PC

Détails sur le COMPLEXE.py : ou modifier le code ?

Le sous programme capteurise() numérise l'entrée pinA0 (10bits) Partie modifiable

Consultez l'annexe 1

exo capteur DUJ5 pour savoir comment utiliser les capteurs et savoir adapter la mesure à la dynamique de 0>1024 V1/02 Attention DUJ5 ne transfert pas les signes négatifs . .

Partie modifiable Le temps entre 2

échantillons est à définir ici par la variable temps

Mise à 1 (1 ms) au début

Page 18

Dans projetS2.zip , vous disposer du programme main.py que j'ai écrit pour gérer la carte microbit et lui dire d'envoyer les informations numérisées de la pin0 en DUJ5 vers le PC.

Vous allez devoir modifier certaines parties de ce programme ( mais rien ne vous empêche de tout re écrire .. si vous respecter le DUJ5)

Donc logiquement , dans un premier temps, vous vous servirez du programme main.py tel quel , vous regarderez le transfert de 100 valeurs de pin0 , et ensuite vous allez devoir utiliser un autre capteur , et peut être même changer le temps entre 2 mesures .

Le temps entre 2 mesures est géré par la variable temps

Dans V1[11] il sera place 100 x temps .(ms) la durée totale des 100 échantillons . De cette manière le PC sait afficher une valeur en X

Le type de capteur utilisé est modifiable Dans le sous programme capteurise()

Le temps total

(19)

Le Protocole DUJ5 : la théorie

DUJ5 est un protocole de transfert des données codées en ASCII, il est bidirectionnel et symétrique , il utilises des caractères ASCII pour transférer des datas ou des ordres , sur une liaison série généralement à une vitesse de 57600bps ou 115200bps.

Le protocole DUJ5 existe sous la forme d'un sous programme, déjà codé en Mbed ou en Processing ou microbit , vous n'avez qu'a l'utiliser .. en jouant avec ses fonctions ou ses variables qui sont déjà déclarées, et réussir à communiquer avec une partie qui attend ce protocole.

BASES : 3 modes de transfert , 1 d'ordres et 2 de datas

Transfert d'Ordres par un seul caractère ASCII en minuscule Caractères ascii attendus de 'a' 'b' jusqu'à .'z' C'est à vous de de décider la signification d'un ordre Exemple « a » allumera une led , un « b » l’éteindra ..

Transfert d'une variable en décimal, codée par des caractères ASCII en Majuscule Procédure : int codé en ASCII décimal, 5 caractères max, suivi d'un caractère de clôture . Les caractères de clôture permettent de séparer entre elles 6 variables différentes.

Les caractères de clôture sont prédéfinis de K L M N O P à Q Exemple : int toto = 256 (décimal), donne et « 256 »

Transfert de toto par le canal de la variable M

'2' '5' '6' 'M' .. donnera 256 dans M dès l'arrivée du 'M' '6' 'N' .. donnera 6 dans N dès l'arrivée du 'N'

Transfert de plusieurs variables d'un tableau d'int . dit « transfert tableau » Un Le tableau comporte 120 int , dont 100 datas utiles , et 10 de paramètres.

Chaque variable est transmise en décimal codé ASCII , clôture par un H, I ou J Le tableau est fini par un caractère de clôture 'R' 'S' 'T' ( 3 tableaux possibles) Exemple : Tab[] comporte 120 cases (int) , de [0] à [100] ce sont les variables ,

de [110] à [120] ce sont les paramètres liées aux données à transmettre Exemple si V1[] porte 100 variables = 1 et 4 paramètres de [110] à [114] = à 100

On transmet : 100 x '1''H' + 10 x '0''H' + 4 x '1''0''0''H' + 6 x '0''H' et le 'R' de clôture Soit 100 variables 10 vides 4 paramètres 6 vides et la clôture à R

H indique : mise en mémoire intermédiaire et incrémentation du pointeur vers cette mémoire R indique : transfert du tableau intermédiaire vers utilisation, et remise à zéro du pointeur . Caractères ASCII réservés

Caractères minuscules ordres

de a > y .. Le 'z' est réservé pour le reset général Caractères en majuscules

0 à 9 sont les caractères ASCII réservés pour le Décimal

H , I , J caractère de clôture ..transfert d'un élément de tableau, + pointeur+

R , S, T caractère de clôture .. fin de transfert d'un tableau et utilisation, pointeur = 0 K L M N O P caractère de clôture du transfert d'un entier et utilisation directe .

Dans la VERSION 01/02, seule la carte microbit peut émettre des datas ou des ordres Elle est écrite ( pour le moment ) n'émet que le tableau V1[] , et les ordres a b c d e

Le programme processing est non limité .

Pc . Mac .linux

usb +

Datas et Ordres Microbit

K1 led0 Avec processing ou Mbed il est possible de

recevoir et de transmettre des caractères en ASCII sur une liaison série ( port COM) Ces caractères peuvent coder des ordres ou des valeurs ..

Dans les 2 environnements lorsqu'un caractère arrive sur le port COM il exécute un sous programme qui décode les données, le

protocole DUJ5 sert à organiser ce décodage . .

Page 19

Annexe

Références

Documents relatifs

En te servant d’un atlas géographique et d’internet, complète cette carte en replaçant les éléments suivants (n’oublie pas de créer une légende) :..  Colorie en vert

With these two cards, netconfig checks the information stored via your ma- chine's EISA configuration utility and, assuming the parameters don't conflict with those of any

When a target driver completes, the driver passes the address of the SCSI interrupt routine to the host adapter in the sb(D4I) structure (specifically using sc _ int

Programming with UNIX® System Calls Character User Interface Programming Graphical User Interface Programming Network Programming Interfaces Portable Device Interface (POI)

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

Évolutions récentes Des TP|projets à la carte Prototyper avec Nucléo et MBED.. Guide

4 – Carte des dates moyennes par neurones (à gauche : les dates les plus récentes sont en jaunes, les plus anciennes en rouge) et carte du réseau (à droite : les aires des sommets

• Prise en main Mbed pour piloter une carte Nucleo. • Développement d’une interface de pilotage