Démarrer dans l’IoT avec le Raspberry Pi 3 et Windows 10 : Développement UWP & Capteurs (4/N)

Nouvel article de cette série sur l’IoT, Windows 10 IoT Core et le Raspberry Pi 3 !

Attention article écrit il y’a plusieurs mois (Décembre 2017) avant d’être publié.

Le précédent article abordait les bases du développement UWP pour Windows IoT, maintenant nous allons voir une des spécificités pour l’IoT, l’utilisation de capteurs, comment les câbler et développer une solution complète.

1 – Démarrer dans l’IoT avec le Raspberry Pi 3 et Windows 10 : Installation & Prise en Main (1/N)
1,5 – Démarrer dans l’IoT avec le Raspberry Pi 3 et Windows 10 : Utiliser des Builds Insider (1,5/N)
2 – Démarrer dans l’IoT avec le Raspberry Pi 3 et Windows 10 : Windows Device Portal (2/N)
3 – Démarrer dans l’IoT avec le Raspberry Pi 3 et Windows 10 : Développement UWP (3/N)
4 – Démarrer dans l’IoT avec le Raspberry Pi 3 et Windows 10 : Développement UWP & Capteurs (4/N)

 

Introduction

Comme expliqué au cours du premier article, le Raspberry Pi 3 dispose d’une connectique spéciale, à savoir 40 pins GPIO (pour General Purpose Input Output). Ils sont répartis en 3 types distincts.

  • Des pins de transfert de données, à configurer en mode Input ou Output
  • Des pins masses
  • Des pins d’alimentation 3.3V ou 5.5V

Ces pins vont permettre de connecter ensuite des nouveaux éléments au Raspberry Pi, de les commander et ainsi d’ajouter des fonctionnalités. Le schéma suivant présente les emplacements des connecteurs ainsi que leurs usages. (Je ne parlerais pas des « Alternate Function » affichées sur le schéma dans cet article).

On peut voir que les pins de masse (GND/Ground) sont les 6, 9, 25, 30 34 et 39. Les pins de 3.3V sont les 1 et 17. Les 5.5V sont les 2 et 4.

Kit Sunfounder

Pour répondre à mes tests/bidouilles, j’ai choisi ce kit-ci, le « SunFounder 37 Modules Sensor Kit V2.0 for Raspberry Pi 3, 2 and RPi Model B+, 40-Pin GPIO Extension Board Jump wires« , d’une valeur moyenne de 100€ mais qui peut s’obtenir moins cher grâce à des promotions (50€ au moment où j’écris ces lignes). Ce kit est très complet, car il dispose de 37 capteurs et/ou accessoires (thermomètre, capteur de pression, bouton poussoir, potentiomètre, télécommande etc…), de toutes les connectiques brochés (2/3/4/5 broches) ainsi que d’un support d’extension pour aider le câblage.

SunFounder fournit avec ses composants un guide complet afin de réaliser plusieurs petits projets, on y retrouve le câblage à effectuer avec les différents voltages à choisir. Par contre, pas de code en C#, que des projets samples en C ou en Python, il faudra donc passer par une étape de réflexion afin d’adapter à notre langage. Ou alors s’inspirer de quelques contributions de la communauté comme (https://github.com/DotNetToscana/IoTHelpers/)

La carte d’extension fournie est très très pratique et sera la pierre angulaire de notre dispositif. Elle se connecte directement aux 40 pins GPIO via une nappe qui elle viendra se connecter sur le GPIO Extension Board. Voici le résultat attendu final. Ici en détails, la représentation des différents pins via la carte d’extension.

Alarme : Détecteur de présence

Câblage

Pour illustrer cet article, je vais partir sur une démo : un dispositif d’alarme avec un détecteur de présence et une alarme sonore.

En termes de matériel, je vais utiliser :

  • le Raspberry Pi 3
  • la carte d’extension fournie avec le kit
  • un buzzer actif
  • un capteur de mouvement

Le buzzer actif est un élément simple, ressemblant à un buzzer d’ordinateur de bureau (par exemple bip/buzz au lancement ou erreur à l’étape du BIOS). Celui-ci nécessite une alimentation en 3.3V, d’une connexion à la masse et d’un troisième fil de signal. Ce signal sera paramétré par le code afin d’activer le buzzer ou non. A noter qu’une fois le fil de données connecté, le buzzer sera actif dès le début, il sonnera. Il faudra le couper logiciellement via une instruction de code (c’est le comportement par défaut). 

Le capteur de mouvement marche sur le principe de réflexion infrarouge. Le capteur émet en infrarouge en continu, et tant qu’il ne capte rien en réception (pas d’objet pour réfléchir) aucune action ne sera envoyée. Par contre, en cas de détection d’un retour, une action sera notifiée. A noter la présence d’un potentiomètre directement sur le capteur, qui permet de moduler la distance de détection du capteur. Le capteur nécessite une alimentation en 5.5V, d’une connexion à la masse et d’un troisième fil pour le signal.

Point commun entre tous les modules de ce kit, une lumière LED bleue indique la mise en tension du module et pour certains il y a aussi une lumière orange quand pour signaler une activation. Cela permet d’avoir un premier niveau d’information, de s’assurer du bon fonctionnement du matériel.

Pour réaliser notre démonstration d’alarme, voici le câblage à réaliser :

Buzzer : Fil rouge sur 3.3V (ex en haut à gauche) / Fil Noir sur GND (ex au milieu à gauche) / Fil jaune sur GPIO20 (ex en bas à droite)

Détecteur de mouvement : Fil rouge sur 5V (ex en haut à droite) / Fil Noir sur GND (ex en bas à gauche) / Fil jaune sur GPIO21 (ex en bas à gauche)

L’emplacement des fils de données (20 et 21) peuvent changer mais il faut noter leurs numéros car nous nous en servirons lors du développement.

Voilà notre solution est correctement câblée, on peut voir les 2 leds bleues allumées sur les 2 composants, maintenant passons à la partie code.

Code

Dans un projet d’application UWP, nous allons d’abord définir sur quels connecteurs seront reliés notre détecteur de mouvement et notre buzzer. Ainsi pour chaque fil de données, nous allons le mapper à un élément de classe GpioPin. (Ici, j’ai repris les pins de données 20 et 21 cf câblage).

Ensuite, nous allons utiliser un GpioController, qui est le contrôleur global des connecteurs GPIO, il est unique et sera toujours le même. Puis nous allons configurer les ports du buzzer et du détecteur en mode Input/Output. Output pour le buzzer et Input pour le détecteur de mouvement. Dernière étape, il faut s’abonner aux changements de valeur du détecteur de mouvement.

Ainsi lors de la détection d’un mouvement, nous pouvons indiquer une valeur Haute ou Basse (High/Low) au buzzer, qui se déclenchera. (Méthode ActiveBuzzerRun)


private static GpioPin buzzerPin;
private static GpioPin detectorPin;

private const int BUZZER_PIN = 20;
private const int DETECTOR_PIN = 21;
private static bool isPlaying;


public static void Run()
{
var gpio = GpioController.GetDefault();

buzzerPin = gpio.OpenPin(BUZZER_PIN);
detectorPin = gpio.OpenPin(DETECTOR_PIN);

buzzerPin.SetDriveMode(GpioPinDriveMode.Output);
detectorPin.SetDriveMode(GpioPinDriveMode.Input);
detectorPin.ValueChanged += DetectorPin_ValueChanged;
}

private static void DetectorPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
{
ActiveBuzzerRun();
}

private static void ActiveBuzzerRun()
{
if (isPlaying)
{
buzzerPin.Write(GpioPinValue.High);
isPlaying = false;

}
else
{
buzzerPin.Write(GpioPinValue.Low);
isPlaying = true;
}
}

 

 

Pour conclure

Pour conclure, nous avons réalisé simplement une alarme à détecteur de mouvement. Il faut garder en tête que l’installation présentée ici reste assez basique et est plus de l’ordre de l’expérimentation que d’un réel prototype.

Cet article est maintenant terminé, dans le prochain nous aborderons la dernière brique de développement, l’association avec le Cloud Azure.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :