GPIO & PHOTORESISTANCE

bien que le GPIO du RPI n’ait pas de broche analogique, nous allons voir comment lire l’intensite lumineuse avec une photo résistance .

le principe de la mesure est simple , on va utiliser la librairie ” gpiozero ” , et un condensateur de 1μF en série avec la photorésistance.

cela va constituer un circuit RC pour lequel la fonction Lightsensor() de la librairie GPIOZERO va mesurer le temps de charge et décharge du condensateur pour en déduire la résistance correspondante et donc la luminosité résultante. R = f ( luminosité).

LE MONTAGE

le programme Python:

from gpiozero import LightSensor

ldr = LightSensor(4)  # ici broche GPIO4
while True:
    print(ldr.value)

ne reste plus soit qu’a faire varier l’intensité lumineuse sur la photorésistance avec une lampe LED ou couvrir plus ou moins avec les doigts et/ou des filtres et voir comment varie la valeur affichée . bien entendu il est possible d’améliorer le programme avec une petite interface visuelle sous Tkinter …

GPIO & Capteur HC-SR501

voyons comment utiliser un capteur HC-SR501 sur le GPIO RPI.

  • broche Vcc du HC-SR501 sur le 5V du RPI
  • broche Gnd du capteur sur Gnd du RPI
  • broche Out (3,3V TTL) sur GPIO 4

LE PROGRAMME PYTHON:

from gpiozero import MotionSensor

pir = MotionSensor(4)

while True:
	pir.wait_for_motion()
	print("Ca Bouge !...")
	pir.wait_for_no_motion()

voila pas plus compliqué que ça , encore une fois c’est la librairie qui fait tout .

GPIO 8 entrées analogiques avec le MCP3008

le MCP3008 est un module de conversion ANALOGIQUE / NUMERIQUE qui fonctionne avec le Bus SPI du RPI .

nous allons voir comment l’utiliser directement sur une breadboard , mais on peut le commander en petit modules du genre du Ras Pio Analog Zero ci dessous :

CONFIGURATION du BUS SPI

pour pouvoir utiliser le Bus SPI du RPI , il va falloir tout d’abord l’activer , pour cela aller dans le menu de config du RPI et activer l’option SPI puis rebooter le RPI.

LE MONTAGE DE TEST

pour tester le fonctionnement du MCP 3008 nous allons utiliser un potentiomètre . ci dessous schéma de câblage de l’ensemble avec le potard sur la breadboard.

pour memo rappel des brochages GPIO SPI du RPI : ( voir RPI generalites)

LE PROGRAMME PYTHON

from gpiozero import MCP3008
pot = MCP3008(0)
while True:
    print(pot.value)

le MCP3008 possède 8 canaux d’entrée notés de 0 a 7 ( de bas en haut sur le montage a droite du MCP3008 ) , dans ce bout de programme on lit le canal 0 que l’on met dans la variable pot via la commande : “pot = MCP3008(0) ” puis on fait afficher la valeur dans une boucle while .

si l’on voulait lire 3 capteur Analogiques ( 3 potards par exemple sur les canaux 0 – 1 et 2 ) , il suffirait d’avoir 3 lignes du genre:

pot1 = MCP3008(0) 
pot2 = MCP3008(1) 
pot3 = MCP3008(2) 

voila synthétisée la façon de pouvoir utiliser jusqu’à 8 capteurs analogiques pour une station meteo par exemple.

moteur Pas a Pas type NEMA 17

comme pour l’Arduino, nous allons voir ici comment piloter un moteur Pas a Pas sur GPIO avec un programme Python. de la meme façon , nous allons utiliser un driver POLOLU A4988 , mais le principe est le même avec les autres drivers de la gamme POLOLU

avant de commencer la partie conexion RPI , petit rappel du schéma de principe d’un POLOLU A4988 (pour memo, le niveau logique TTL admissible est entre 3 et 5,5 V donc compatible avec la logique TTL 3,3V du RPI):

CABLAGE

GPIO 20 sur STEP du Pololu et GPIO 21 sur DIR du Pololu. MS1-MS2-MS3 non connecté => full step. pour le réglage de la limite d’intensité du Pololu voir la rubrique ARDUINO CNC.

ne pas oublier de mettre un condensateur 100micro Fahrad entre + et 6 de l’alim de puissance (Power Supply sur le schéma).

EXEMPLE PROGRAMME PYTHON n°1

le programme ci dessous fait faire un tour dans un sens puis un tour dans l’autre sens

from time import sleep
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(20, GPIO.OUT)
GPIO.setup(21, GPIO.OUT)

GPIO.output(21, 1)
for x in range(200):
	GPIO.output(20, GPIO.HIGH)
	sleep(0.005)
	GPIO.output(20, GPIO.LOW)
	sleep(0.005)

sleep(0.5)

GPIO.output(21, 0)
for x in range(200):
	GPIO.output(20, GPIO.HIGH)
	sleep(0.005)
	GPIO.output(20, GPIO.LOW)
	sleep(0.005)