Affichage des articles dont le libellé est Raspberry Pi. Afficher tous les articles
Affichage des articles dont le libellé est Raspberry Pi. Afficher tous les articles

lundi 2 novembre 2015

PWM, SPI and I2C Protocols in Raspberry Pi !!

PWM (Pulse Width Modulation) ou en français le MLI (Modulation avec Largeur d’Impulsion).
Commençons tout d’abord par une définition générale du PWM. Ce terme on le trouve presque partout au domaine d’électronique et surtout dans les variateurs de vitesse de moteur a courant continu ou le clignotement d’une diode LED.


Le PWM ou le MLI c’est une outil capable a gérer la valeur de signal de sortie en la partageant entre deux états 1 logique ou 0 logique suivant un rapport cyclique nommé (Alpha) qui représente le pourcentage en niveau haut par rapport au pourcentage totale du période. Autrement dit la largeur de l’impulsion.


Au premier tram l’impulsion est ­a 5% de la valeur de la période et au deuxième tram l’impulsion est à 50% mais a la dernière l’impulsion est à 90%.
Donc logiquement si on va alimenter l’anode d’une diode LED avec ces 3 signaux celle la dernière c’est celle qui va clignoter plus rapidement que les autres.
Sur le même plan si on va alimenter un moteur à courant continu avec ces trois signaux celui l’alimenté avec le dernier signal va tourner avec une vitesse plus haut que les deux autres. Et celui qui sera alimenté avec le deuxième signal tournera à la vitesse plus fort que celui l’alimenté avec le premier signal.
D’ici on peu conclure que le rapport cyclique α est proportionnelle à la vitesse de basculement de diode Led ou à la vitesse de moteur DC.
Passons maintenant a comment faire pour fournir un signal PWM avec le Raspberry Pi et comment faire pour changer le rapport cyclique.

On va réaliser ce petit montage en essayant de voir le comportement de PWM fourni par le pin 21 de Raspberry Pi sur la diode LED.
                               


         Le programme on va l’écrire en python et l’exécuter âpres.


// Lets electronic By Aymen Lachkhem

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(21, GPIO.OUT) #mettre le PWM en sortie de 21
p = GPIO.PWM(21,50)        #enclencher la valeur d’impulsion a 50%
p.start(0) 
try:
while True:
for i in range (100):
p.ChangeDutyCycle(i)
time.sleep(0.02)         
for i in range(100):
p.ChangeDutyCycle(100-i)
time.sleep(0.02 )
p.stop()
GPIO.cleanup()




 Juste après réaliser le montage suivant et exécuter le programme si dessus le comportement de la diode LED va bien indiquer la mise en évidence de l’existence de PWM sur Pin 21.





 On peut varier le vitesse d’un moteur à courant continu comme on veut juste on le branchant a un hacheur tel que le L293D ou un transistor suivant les besoins.
Passons à la deuxième partie . Comment on peut interfacer un capteur ANALOGIQUE avec la Raspberry Pi ?
La Raspberry Pi comme j’ai déjà indiqué avant que c’est un micro-ordinateur basé sur un micro-processeur capable qu’a lire des valeurs numériques 0 ou 1 Logique. Une valeur dedans c’est invisible.

Avant sa il fait bien comprendre les deux protocoles que la réalisation de cette objectif va se baser sur
Protocol I2C :
Historiquement la norme I2C (Inter Integrated Circuit) a été développée par Philips en 1982. Depuis elle est maintenue par NXP (ex-division semiconducteurs de Philips).
La version 1.0 a été publiée en 1992, la version 2.0 en 1998, la version 2.1 en 2000, la version 3.0 en 2007 et la version actuelle 4.0 en 2012.

On peut définir L’I2C sous série synchrone bidirectionnel half-duplex.
Plusieurs équipements, soit maîtres, soit esclaves, peuvent être connectés au bus.
Les échanges ont toujours lieu entre un seul maître et un (ou tous les) esclave(s), toujours à l'initiative du maître (jamais de maître à maître ou d'esclave à esclave). Cependant, rien n'empêche un composant de passer du statut de maître à esclave et réciproquement.
La connexion est réalisée par l'intermédiaire de deux lignes :
·          SDA (Serial Data Line) : ligne de données bidirectionnelle,
·         SCL (Serial Clock Line) : ligne d'horloge de synchronisation bidirectionnelle.
Il ne faut également pas oublier la masse qui doit être commune aux équipements.

 Protocole SPI :
 Une liaison SPI (pour Serial Peripheral Interface) est un bus de données série synchrone baptisé ainsi par Motorola, qui opère en mode Full-duplex. Les circuits communiquent selon un schéma maître-esclaves, où le maître s'occupe totalement de la communication. Plusieurs esclaves peuvent coexister sur un même bus, dans ce cas, la sélection du destinataire se fait par une ligne dédiée entre le maître et l'esclave appelée chip select.

Alors ce qu’on peut prendre ici c’est qu’il faut réaliser une conversion analogique numérique en se basant sur un ADC (Analog Direct Converter) qui fonctionne déjà sous les protocoles suivants.
La communication sera comme ceci : le convertisseur analogique numérique inclus plusieurs entrées analogiques qui joueront les rôles d’esclaves (slaves) et une sortie vers le Raspberry Pi qui jouera le rôle de maitre
Prenons par exemple le convertisseur analogique numérique MCP3008 D/A chip qui contient plusieurs entrées analogiques telles que capteurs ou afficheurs …  .
Comme il est indiqué sur la graphe de GPIO antécédente il existe plusieurs protocoles qu’on a connu avec des autres cartes électroniques déjà utilisée tels que le protocole I2C, UART,…. .



Résultat de recherche d'images pour "raspberry pi gpio"



Ces protocoles seront pas automatiquement activées on aura besoin de les activés manuellement avant de les utilisées. Alors il faut réaliser les étapes suivantes avant :   
  • Ouvrons un terminal, depuis une interface graphique, et/ou lancons la commande suivante :

sudo raspi-config
  • Cela lance l'interface de configuration du Raspberry Pi, sélectionnons « Advanced Options » puis validons :

Résultat de recherche d'images pour "enable spi"

  • Sur le nouvel écran, sélectionnons « I2C » par exemple puis validons :
Résultat de recherche d'images pour "enable spi"

  • Répondons « Yes » à toutes les questions qui suivent.
  • Rebootons notre machine en tapant

sudo reboot
  • Testons que l'I2C est active avec la commande suivante :

lsmod | grep i2c_

Le même principe avec les restes de protocoles au but d’activer le protocole qu’on va utilisée selon la tache.
  

vendredi 23 octobre 2015

Application sur Microprocesseur (Raspberry Pi's GPIO)


Application sur Microprocesseur (Raspberry Pi's GPIO) 







 On va essayer de se communiquer avec la Raspberry en touchant leurs entrées sorties ou autrement dit GPIO.       
GPIO c’est (General Purpose Input Output), parmi les avantages de notre  Raspberry l’inclusion d’une collection de connecteurs qui jouent l’interface entrée sortie avec le monde externe, ils sont des entrées sorties supplémentaires accessibles directement a la carte mère.
Le nombre de ces pattes se diffère de modèle à autre.

Il faut bien mettre en compte que les GPIO ne possèdent aucune protection. Il ne faut donc pas oublier d'utiliser des buffers ou des optocoupleurs si nous avons des doutes avec le montage.
Les modèles A et B possédaient un port GPIO à 26 points. Les modèles A+, B+ et B2 possèdent un port GPIO à 40 points, correspondant aux 26 points des modèles A/B plus 14 points supplémentaires. Un circuit conçu pour les versions A/B est donc compatible A+/B+/B2.
Concernant les modèles A et B, il y a eu plusieurs révisions. Le câblage du GPIO a été modifié entre ces différentes versions. Le GPIO des versions A et B que nous verrons ici correspond à la dernière révision, qui est également la plus répandue.
Les entrées-sorties sont de type CMOS, et fonctionnent donc en +3.3V. N'essayez surtout pas de brancher des circuits TTL (+5V) sur les entrées-sorties, sans adaptation. Vous risqueriez de détruire votre Raspberry Pi.


 
 L'ensemble de ces fonctionnalités peuvent être activées une à une selon nos besoins.
Il faut bien mettre en compte que il existe deux numérotations pour les GPIO expliquée au dessous:
Les GPIO.BOARD cette option elle nécessite l’utilisation de numérotation déjà imprimé sur la carte électronique. 
The GPIO.BCM  cette option elle annule la numérotation antécédente et elle va s’adresser avec les pins lisibles directement sur le pus ou Broadcom SOC channel .
 
Il est bien recommandé d’utiliser la première numérotation que le deuxième surtout en travaillant dans un projet qui inclut plus que la Raspberry seule.  

Sur la graphe suivante la numérotation BCM elle est celle la colorée en vert.




Comme il est indiqué sur la graphe de GPIO antécédente il existe plusieurs protocoles qu’on a connu avec des autres cartes électroniques déjà utilisée tels que le protocole I2C, UART,…. .
Ces protocoles seront pas automatiquement activées on aura besoin de les activés manuellement avant de les utilisées. Alors il faut réaliser les étapes suivantes avant :   
  • Ouvrons un terminal, depuis une interface graphique, et/ou lancons la commande suivante :

sudo raspi-config
  • Cela lance l'interface de configuration du Raspberry Pi, sélectionnons « Advanced Options » puis validons :


  • Sur le nouvel écran, sélectionnons « I2C » par exemple puis validons :

  • Répondons « Yes » à toutes les questions qui suivent.
  • Rebootons notre machine en tapant

sudo reboot
  • Testons que l'I2C est active avec la commande suivante :

lsmod | grep i2c_
Le même principe avec les restes de protocoles au but d’activer le protocole qu’on va utilisée selon la tache.
Aujourd’hui nous allons voir comment utiliser les entrées/sorties (GPIO) du Raspberry-pi pour interfacer du matériel extérieur (Diode LED). Pour ceci on va utiliser le langage de programmation Python dont nous allons faire la découverte avec un premier programme.
Découvrons Python d’abord:
Python en définition est un langage de programmation si simple. Le grand avantage de ce langage est qu’il sera interprété et non compilé.
 Ceci signifie qu’il n’y a pas besoin de compilateur pour commencer à programmer. Un simple éditeur de texte est capable de tout réalisée et puis exécuté directement en ligne de commande avec la console. Le Raspberry-pi elle est prête  par défaut de tout ce dont nous avons besoin pour programmer en Python.
Alors notre premier programme qu’on va réaliser c’est programmer une diode LED de façon a l’allumer puis l’éteindre.
Pour ceci il faut suivre les étapes suivantes :
·         Aller au répertoire  /home/pi  et créer une répertoire qu’on la nomme Travaux_pratiques et dedans un fichier texte nommé LED.py
·         Ecrire le programme si dessous dedans ( # s’écrit pour les commentaries)
Import RPi.GPIO as GPIO
#
appel au piblioteque GPIO
import time
# appel au timer
GPIO.setmode(GPIO.BOARD)
#l’utilisation de numérotation inclut sur la carte
GPIO.setup(12,GPIO.OUT)
#déclaration de port 12 comme etant sortie
GPIO.output(12,GPIO.HIGH)
# enclenchement en niveau haut de port 12
time.sleep(0.5)

·         On compte de gauche à droite. La broche 1 pour l’alimentation 3.3V, broche 2 correspond à l’alimentation 5V. La masse se trouve sur la broche 6. Les GPIO sont représentées avec les pastilles vertes. Dans notre code nous avons utilisé les broches 12 corresponde aux GPIO 16.
Prenons une diode LED, (éventuellement une résistance de 270 ohms) et quelques fils. Puis réaliser le câblage suivant sur une petite platine de test:




·         Maintenant après avoir tout verifier il nous reste qu’exécuter le programme et pour ceci il faut revenir au Terminal et taper
cd /home/pi/Travaux_Pratiques pour aller dans le répertoire qui contient votre programme
sudo python LED.py pour executer le programme

·         Et voila c’est tout on a réalisé notre objectif.

Si on cherche à éteindre la diode LED il suffit de changer HIGH par LOW.