0% found this document useful (0 votes)
41 views

Synthèse - Labo Systèmes Embarqués

The document contains 8 manipulations (experiments) using an Arduino board to control LEDs and read sensor input. Manipulation 1 turns on an LED when a button is pressed. Manipulation 2 controls two LEDs independently based on two button presses. Manipulation 3 blinks two LEDs at the same frequency. Manipulation 4 blinks an LED and controls a second LED based on a button press. Manipulation 5 blinks two LEDs at different frequencies. Manipulation 6 acts as a remote control for an LED based on button presses. Manipulation 7 controls an LED brightness based on an analog sensor reading. Manipulation 8 allows dimming an LED by long pressing a button to increase or decrease the brightness level.

Uploaded by

Cedrick Tetsina
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
41 views

Synthèse - Labo Systèmes Embarqués

The document contains 8 manipulations (experiments) using an Arduino board to control LEDs and read sensor input. Manipulation 1 turns on an LED when a button is pressed. Manipulation 2 controls two LEDs independently based on two button presses. Manipulation 3 blinks two LEDs at the same frequency. Manipulation 4 blinks an LED and controls a second LED based on a button press. Manipulation 5 blinks two LEDs at different frequencies. Manipulation 6 acts as a remote control for an LED based on button presses. Manipulation 7 controls an LED brightness based on an analog sensor reading. Manipulation 8 allows dimming an LED by long pressing a button to increase or decrease the brightness level.

Uploaded by

Cedrick Tetsina
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

Arduino

Manip 1 : entrée à sortie

#define BP 2

#define LED 13

void setup() {

pinMode(BP, INPUT_PULLUP);

pinMode(LED, OUTPUT);

Serial.begin(9600);

void loop() {

boolean etat = !digitalRead(BP);

digitalWrite(LED, etat);

#define BP1 4

Manip 2 : entrées à sorties #define BP2 2

#define LED1 13

#define LED2 12

void setup() {

pinMode(BP1, INPUT_PULLUP);

pinMode(BP2, INPUT_PULLUP);

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

Serial.begin(9600);

void loop() {

boolean etat1 = !digitalRead(BP1);

digitalWrite(LED1, etat1);

boolean etat2 = !digitalRead(BP2);

digitalWrite(LED2, etat2);

}
#define LED1 12

Manip 3 : clignotement LED #define LED2 13

void setup() {

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

Serial.begin(9600);

void loop() {

digitalWrite(LED1, !digitalRead(LED1));

digitalWrite(LED2, !digitalRead(LED1));

delay(1000);

#define BP 2
Manip 4 : Clignotement LED + autre chose
#define LED1 13

#define LED2 12

void setup(){

pinMode(BP, INPUT_PULLUP);

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

Serial.begin(9600);

unsigned long TICK = 1000;

unsigned long LAST_TICK = 0;

void loop(){

unsigned long current_time = millis();

if (current_time - LAST_TICK >= TICK) {

digitalWrite(LED1, !digitalRead(LED1));

LAST_TICK = current_time;

bool etat = !digitalRead(BP);

digitalWrite(LED2, etat);

}
#define LED1 10

Manip 5 : clignotement 2 LED à fréquences diff #define LED2 11

const float F1 = 1.0;

const float F2 = 0.8;

const float DUTY_CYCLE = 50;

const int VALUE = map(DUTY_CYCLE, 0, 100, 0, 255);

void setup() {

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

Serial.begin(9600);

unsigned long get_tick(float f) {

return (1/f) * 1000;

const unsigned long TICK1 = get_tick(F1);

const unsigned long TICK2 = get_tick(F2);

unsigned long LAST_TICK1 = 0;

unsigned long LAST_TICK2 = 0;

bool ETAT1 = false;

bool ETAT2 = false;

void loop() {

unsigned long current_time = millis();

if (current_time - LAST_TICK1 >= TICK1) {

if (!ETAT1) {

analogWrite(LED1, VALUE);

} else {

digitalWrite(LED1, false);

ETAT1 = !ETAT1;

LAST_TICK1 = current_time;

if (current_time - LAST_TICK2 >= TICK2) {

if (!ETAT2) {

analogWrite(LED2, VALUE);

} else {

digitalWrite(LED2, false);

ETAT2 = !ETAT2;

LAST_TICK2 = current_time;

}
Manip 6 : télérupteur #define BP 2

#define LED 13

void setup() {

pinMode(BP, INPUT_PULLUP);

pinMode(LED,OUTPUT);

Serial.begin(9600);

bool WAS_PRESSED = false;

void loop() {

bool pressed = !digitalRead(BP);

if (!pressed && WAS_PRESSED){

digitalWrite(LED,
!digitalRead(LED));
Manip 7 : mesures analogiques
}

WAS_PRESSED = pressed;

#define PT 0

#define LED 11

void setup() {

pinMode(PT, INPUT);

pinMode(LED, OUTPUT);

Serial.begin(9600);

void loop() {

unsigned int value =


map(analogRead(PT), 0, 1023, 0, 255);

analogWrite(LED, value);

}
#define BP 2

#define LED 11
Manip 8 : Le Dimmer
void setup() {

pinMode(BP, INPUT_PULLUP);

pinMode(LED,OUTPUT);

Serial.begin(9600);

unsigned long TIME =0;

const unsigned long TICK = 1000;

unsigned long ELAPSED = 0;

unsigned int COUNTER = 0;

unsigned int VALUE = 250

bool WAS_PRESSED = false;

bool NEXT = false;

bool ETAT = false;

void loop() {

unsigned long current_time = millis();

bool pressed = !digitalRead(BP);

if (pressed) {

ELAPSED = current_time - TIME;

if (ETAT && ELAPSED >= TICK && ELAPSED >= COUNTER * TICK) {

if (NEXT) {

if (VALUE < 250) {VALUE += 25;}

} else {

if (VALUE > 25) {VALUE -= 25;}

analogWrite(LED, VALUE);

COUNTER++;

if (!pressed) {

if (WAS_PRESSED) {

if (ELAPSED < TICK) {

ETAT =!ETAT;

digitalWrite(LED, ETAT);

} else {

NEXT = !NEXT;

COUNTER = 0;

ELAPSED = 0;

TIME = millis();

WAS_PRESSED = pressed;

}
#define BT 2
Manip Bonus
#define PO 0

#define LED1 11

#define LED2 12

void setup() {

pinMode(BT, INPUT_PULLUP);

pinMode(PO, INPUT);

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

Serial.begin(9600);

void loop() {
NOTES : bool pressed = !digitalRead(BT);
LED: 0 → 255

Potentiomètre: 0 → 1023 if (pressed) {


analogRead → Lire valeur numérique unsigned int value = map(analogRead(PO), 0, 1023,
0, 255);
analogWrite → Écrire valeur numérique
analogWrite(LED1, value);
digitalRead → Lire valeur booléenne
} else {
digitalWrite → Écrire valeur booléenne
digitalWrite(LED1, false);
map(variable, fromMin, fromMax, toMin, toMax)
}
Init Serial: Serial.begin(9600)

Debug: Serial.println
digitalWrite(LED2, pressed ? false : true);
Sucre syntaxique if-else → condition ? SiVrai : SiFaux
}
Ne jamais lire une valeur booléenne d'une led qui a une valeur numérique.
Raspberry
Intro

1. Processeur : il intègre aussi une partie graphique et 1 Go de RAM (en-dessous).

2. GPIO : les Entrées/Sorties digitales simples en 3,3Volts.


3. Port HDMI : l’interface habituelle pour gérer les écrans haute définition.
4. Port Ethernet : le port RJ45 standard pour les connexions réseaux.

5. Port USB : les 4 ports USB pour des périphériques externes.


6. Puce WiFi et bluetooth : elle est protégée derrière une cage métallique.

7. Port alimentation micro USB : le Raspberry consomme peu et est alimenté en 5Volts.

8. Connecteur Camera CSI.


9. Connecteur écran DSI.
10. Port Jack Audio.
11. Port carte micro SD : la carte microSD servira pour sauvegarder le système d’explo itation.

Installation
Choisir l’OS « Raspberry Pi OS 64 bit », choisir la carte SD, aller dans la configuration avancées (Ctrl + Maj + X)
activer SSH via authentification par mot de passe + créer un utilisateur et un mot de passe pour celui-ci. Être sûr
que la carte SD soit vide puis procéder à l’écriture

NE SURTOUT PAS FORMATER APRES L’ECRITURE


SSH
Pour trouver l’IP : Angry IP Scanner / advanced IP scanner / Nmap

Pour savoir quelle IP, débrancher et rebrancher, puis ping (-t pour augmenter la durée), si il échoue quand
débranché : BINGO

Connexion avec PUTTY


Ou avec ssh

Changer le Hostname
Configurer par le menu

Changer le port SSH


Attention à pas utiliser celui d’un autre protocole
Clés publiques et privé
À défaut d’utiliser un mot de passe, nous pouvons utiliser le chiffrement RSA (propriétés de nombres premiers)
« Theorem 1 Tout entier strictement positif peut être écrit comme un produit de nombres premiers d’une unique
façon, à l’ordre près des facteurs. »

Pour pas être trop facile à trouver, nombre très souvent au-dessus de 10100
Fonctionnement : créer une paire de clefs privé (composé de 2 nb premiers servant à générer la clé publique) et
une publique (produits des 2 nombres premiers). Une est diffusée, l’autre non. Pour un échange (comme SSH), les
2 partis de partagent leur clés privées, ils utilisent celle-ci pour chiffrer le message tandis que la privé va le
déchiffrer (permet aussi de valider l’identité du client)

Création des clés


Utiliser PUTTYGen, elles seront créées par le mouvement de la souris. Possibilité de mot de passe pour lire la clé
privé, sauvegarder la clé grâce au bouton prévu pour. La clé publique du client devra se trouver dans le fichier
appelé authorized_keys, lui-même dans un dossier ssh qui se trouvera dans le dossier user. Du côté client, il faudra
spécifier sur PUTTY quelle clé privé utiliser pour déchiffrer
Droits sur les fichiers
Pour voir qui a les droits sur les fichiers présent à cet endroit

On retrouve diverse informations

Wi-Fi
Si on veut utiliser le wifi, tout d’abord dans la configuration : Localisation Option → WLAN country → Belgium

Pour avoir une version chiffré du code Wi-Fi (qu’il faudra recopier dans le fichier du dessus)

Pour envoyer simplement


File Transfer Protocol (FTP/SCP)
Pour transférer des fichiers de notre pc au Raspberry, utiliser WinSCP (SCP pour Linux) ou Filezilla. Information
nécessaire : IP, hostname, mot de passe, port SSH

Pour transférer, click and drag (d’un pc à l’autre)

Communication Arduino vers Raspberry


Nous allons connecter le Raspberry et Arduino via l’interface série, cela peut fonctionner avec les port USB (ou
GPIO)
Pour transmettre une info via la connexion série de l’Arduino, initialiser la connexion avec Serial.begin() et
Serial.println() pour transmettre

Ici la com série se fait par le port USB mais peut aussi se faire sur les pins digitales 0 et 1 de l’Arduino

Communication Raspberry vers Arduino


Utiliser ser.write(data) et remplacer data par la donnée à envoyer, il peut être intéressant d’utiliser le saut de ligne
ou un indicateur spécifique pour marquer la fin du message. Il est recommandé d’utiliser la méthode sur les strings
str.encode(‘utf– 8’) dans le code python.

Pour l’Arduino, Serial.read() récupère le premier bit, un bit à la fois donc qu’un seul caractère en C.
Mieux vaut utiliser Serial.readString() qui est plus optimal pour les messages plus long car il récupère l’entièreté du
buffer (chaque octet représente un caractère). Attention de prendre en compte les éventuels \r\n

Pas hésiter à décomposer le projet en étape et tester les blocs indépendamment. Par défaut, le moniteur série
ajoute un caractère de return à la fin. Possible de désactiver comme sur l’image ci-dessous.

You might also like