Arduino – Python – HC-SR04 – Rick Roll

Ces temps-ci, j’apprends à coder en Python. J’ai donc appris à utiliser le port série pour intéragir avec une carte Arduino. Pour tester ça, je me suis inspiré de cette vidéo : https://www.youtube.com/watch?v=e-l3jg13Pdk. Bien sûr, ma méthode est tout à fait différente et moins efficace; je n’utilise pas d’audio shield ou un capteur très performant.

Le montage est très simple. Il est composé d’une carte arduino, d’un module de détection à ultrason HC-SR04 et de 4 fils. Le capteur a une portée comprise entre 2cm et 4m avec une précision de 3mm et un angle de 15°.

L’idée est la suivante : quand on est à une certaine distance du capteur, la musique se lance. Si on s’éloigne, la musique se met en pause. Elle reprendra dès qu’on sera de nouveau à bonne distance. Donc arduino se charge du capteur et du calcul de la distance puis envoit cette dernière sur le port série. Python lit la valeur et lance ou non la musique.

Le code pour la carte Arduino :

const byte trigger = 2; //déclaration du pin pour le trigger
const byte echo = 3; //déclaration du pin pour l’echo

void setup()
{

Serial.begin(9600); //on démarre la liaison série
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
digitalWrite(trigger, LOW); //le trigger doit être à l’état bas initialement

}

void loop()
{

digitalWrite(trigger, HIGH); //on met le trigger à l’état haut
delayMicroseconds(10); //pendant 10 µs
digitalWrite(trigger, LOW); //puis on le remet à l’état bas

long mesure = pulseIn(echo, HIGH, 25000); //on mesure le temps pendant lequel l’echo se met à l’état haut (réception du son)
long distance = mesure * 0.034 / 2; //on calcule la distance
Serial.println(distance); //on envoit la distance calculée
delay(60); //on attend  60ms avant de recommencer (limite du capteur). Il faut attendre 60ms pour que la musique se mette en pause ou se lance.

}

Le code Python :

#!/usr/bin/python3.4 # à adapter selon votre OS
# -*-coding:utf-8 -* # idem

import pygame # il faut utiliser le module pygame pour se servir de l’audio
from pygame.locals import *
import serial

pygame.init()
pygame.init() # on le met 2 fois au cas où. Sur certaines distrib linux, l’initialisation plante 1 fois sur 2.
son = pygame.mixer.Sound(« rickroll2.ogg ») # on crée un objet Sound et on précise la musique voulue (même dossier que le code et en format .wav ou .ogg)
ser = serial.Serial(‘/dev/ttyACM0’,9600) # on crée un objet Serial et on précise le port série (en bas à droite dans l’IDE arduino) et le nombre de bits par seconde (le même que pour arduino)
i=0 # on déclare une variable i qui vaut 0 initialement et qui prendra la valeur 1 au premier passage devant le capteur

while True:

distance = int(ser.readline()) # on lit la valeur dans le port série, on la converti en int (readline() donne un char) et on nomme cette valeur distance

if distance <= 50: # vous pouvez changer 50 par un autre nombre. Représente le seuil de lancement de la musique

if i == 0: # si on n’est jamais passé à moins de 50cm du capteur

i += 1 # la variable i vaut 1
son.play() # on lance la musique

if i > 0: # si on est déjà passé à moins de 50cm on relance la musique

pygame.mixer.unpause()

if distance > 50 and i > 0: # si on est à plus de 50 cm du capteur et qu’on est déjà passé devant

pygame.mixer.pause() # on met la musique en pause

ser.close() # on ferme la lecture sur le port

 

Parfois, lorsqu’on lance le programme python, l’erreur suivante survient :

Traceback (most recent call last):
File « rickroll.py », line 14, in <module>
distance = int(ser.readline())
ValueError: invalid literal for int() with base 10: ’13\r12\r\n’

Il suffit de renvoyer le script (et recommencer si l’erreur resurvient).

La musique est la version orchestrale de Never Gonna Give You Up de Rick Astley composée par Walt Ribeiro sur http://fororchestra.com/post/19459300022/rick-astley-never-gonna-give-you-up-for-orchestra . Cette version est sous licence Creative Commons. Pour Rick Roll comme il se doit, il faut donc utiliser la chanson originale.

Plus d’infos concernant le capteur de distance HC-SR04 : http://www.micropik.com/PDF/HCSR04.pdf

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s