Forum EduPython

Echanges autour d'EduPython.

Vous n'êtes pas identifié(e).

#1 2024-03-08 17:59:48

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

jouer un son avec arduino et python

Bonjour,
Je suis en train d'essayer un tp de physique de l'academie de Besançon sur comment jouer un son avec arduino et python.
Méthode :
1. Script python, microcontroleurs.py

#! encoding: utf-8
import serial


class arduino():
    def __init__(self,port):
        self.serie = serial.Serial(port,baudrate=9600)
        synchro = ord(self.serie.read())
        while synchro != 0:
            synchro = ord(self.serie.read())


    def sortie_numerique(self,pin,etat):
        self.serie.write(chr(1).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        self.serie.write(chr(etat).encode('latin-1'))

    def entree_numerique(self,pin):
        self.serie.write(chr(2).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        val=ord(self.serie.read())
        return val

    def sortie_analogique(self,pin,val):
        self.serie.write(chr(3).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        self.serie.write(chr(val).encode('latin-1'))

    def entree_analogique(self,pin):
        self.serie.write(chr(4).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        val1=ord(self.serie.read())
        val2=ord(self.serie.read())
        return val1*256 + val2

    def son(self,pin,freq,duree=0):
        self.serie.write(chr(5).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        self.serie.write(chr(freq>>8 & 255).encode('latin-1'))
        self.serie.write(chr(freq & 255).encode('latin-1'))
        self.serie.write(chr(int(duree*1000)>>8 & 255).encode('latin-1'))
        self.serie.write(chr(int(duree*1000) & 255).encode('latin-1'))

    def module_us(self,echo,trig):
        self.serie.write(chr(6).encode('latin-1'))
        self.serie.write(chr(echo).encode('latin-1'))
        self.serie.write(chr(trig).encode('latin-1'))
        val1=ord(self.serie.read())
        val2=ord(self.serie.read())
        return val1*256 + val2

    def resistance_pt100(self,cs,di,do,clk):
        self.serie.write(chr(7).encode('latin-1'))
        self.serie.write(chr(cs).encode('latin-1'))
        self.serie.write(chr(di).encode('latin-1'))
        self.serie.write(chr(do).encode('latin-1'))
        self.serie.write(chr(clk).encode('latin-1'))
        val1=ord(self.serie.read())
        val2=ord(self.serie.read())
        return 430*(val1*256 + val2)/32768

    def fermer(self):
        self.serie.close()

2. Script emission son.py

from microcontroleurs import arduino
import time

macarte = arduino("COM3")      #nom du port à adapter

###Creation d'un son

for i in range(3):
    macarte.son(6,262,0.4)
    time.sleep(0.80)

    macarte.son(6,262,0.4)
    time.sleep(0.80)

    macarte.son(6,262,0.4)
    time.sleep(0.80)

    macarte.son(6,294,0.4)
    time.sleep(0.80)

    macarte.son(6,330,0.70)
    time.sleep(1.10)

    macarte.son(6,294,0.70)
    time.sleep(1.10)

    macarte.son(6,262,0.4)
    time.sleep(0.90)

    macarte.son(6,330,0.40)
    time.sleep(0.80)

    macarte.son(6,294,0.40)
    time.sleep(0.80)

    macarte.son(6,294,0.40)
    time.sleep(0.80)

    macarte.son(6,262,0.90)
    time.sleep(1.30)

macarte.fermer()

3. Manip
- le fichier microcontroleurs.py est dans le même répertoire que le fichier emission son.py

- le port choisi est com3 et noté dans le gestionnaire de périphériques de l'ordi

- la connexion est bien entre pin6 et gnd pour le hp

- le hp est 8ohms et 1W avec en série sur le pin6 une résistance 100ohms

Après lancement du fichier :

- La console indique :

*** Console de processus distant Réinitialisée *** 
>>> 

- l'exécution du fichier est bloquée....bug

Pouvez vous m'aider? Merci

Bien cordialement

lj

Hors ligne

#2 2024-03-09 07:42:14

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 314

Re : jouer un son avec arduino et python

Bonjour,

     Je ne vois rien d'anormal, mais je n'ai pas le matériel pour tester, peut-être pouvez-vous déjà mettre quelques print pour suivre le déroulement du code, par exemple :

from microcontroleurs import arduino
import time

print("début")

macarte = arduino("COM3")      #nom du port à adapter
print("carte initialisée")

###Creation d'un son

for i in range(3):
    macarte.son(6,262,0.4)
    time.sleep(0.80)
    print(i)

    macarte.son(6,262,0.4)
    time.sleep(0.80)

    macarte.son(6,262,0.4)
    time.sleep(0.80)

    macarte.son(6,294,0.4)
    time.sleep(0.80)

    macarte.son(6,330,0.70)
    time.sleep(1.10)

    macarte.son(6,294,0.70)
    time.sleep(1.10)

    macarte.son(6,262,0.4)
    time.sleep(0.90)

    macarte.son(6,330,0.40)
    time.sleep(0.80)

    macarte.son(6,294,0.40)
    time.sleep(0.80)

    macarte.son(6,294,0.40)
    time.sleep(0.80)

    macarte.son(6,262,0.90)
    time.sleep(1.30)

print("fin")
macarte.fermer()

print("fini")

Vincent

Hors ligne

#3 2024-03-09 08:33:53

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

Bonjour,
Merci pour vos conseils
Après essais, j'obtiens :
*** Console de processus distant Réinitialisée ***
>>>
début
carte initialisée
fin
fini
>>>
mais pas de son, je ne sais ou ça cloche !
Merci
lj

Hors ligne

#4 2024-03-09 08:44:24

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

Rebonjour,
Avec le fihier arduino :

void setup()
{
  pinMode(6, OUTPUT);  //La broche 6 est une sortie
}

void loop()
{
  tone(6,262,400); //Do
  delay(400);
  tone(6,262,400); //Do
  delay(400);
  tone(6,262,400); //Do
  delay(400);
  tone(6,294,400); //Ré
  delay(400);
  tone(6,330,700); //Mi
  delay(400);
  tone(6,294,700); //Ré
  delay(400);
  tone(6,262,400); //Do
  delay(400);
  tone(6,330,400); //Mi
  delay(400);
  tone(6,294,400); //Ré
  delay(400);
  tone(6,294,400); //Ré
  delay(400);
  tone(6,262,900); //Do
  delay(400);

}


ça fonctionne hp ok, j'ai le son...
sauf que le son ne s'arrête plus !!!!!!
comment faire pour stopper???????

Avec python, pas de son et pourtant même montage
Je ne vois pas le pb !!!!!!

Merci

lj

Hors ligne

#5 2024-03-09 08:56:18

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

Rrbjr
Est -il possible de réinitialiser la carte arduino uno?
Merci
lj

Hors ligne

#6 2024-03-09 09:23:21

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

rrrbjr

Dans la console, j'obtiens :
*** Console de processus distant Réinitialisée ***
>>>
début
carte initialisée
fin
fini
>>>
*** Console de processus distant Réinitialisée ***
>>>
début
>>>
*** Console de processus distant Réinitialisée ***

Après essais,
- le 1ier, ficher se termine sans son
- le 2ieme, blocage de l'exécution du fichier à"debut"
On dirait que l'exécution n'est pas reproductible....
Qu'en penser?
lj

Hors ligne

#7 2024-03-09 09:41:08

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 314

Re : jouer un son avec arduino et python

Pour la partie Arduino, la fonction loop, comme son nom l'indique est exécutée en boucle, donc si vous voulez ne jouer qu'une fois, il est préférable de mettre le code dans la fonction setup.

Pour la partie Python, ça reste fort obscur...

  • Bizarre qu'on ne voit pas le 0, 1, 2 du print dans la boucle.

  • Bizarre aussi qu'on en puisse pas lancer 2 fois de suite le script car avec EduPython, quant on relance tout est réinitialisé....

Par contre, une question côté carte Arduino, vous avez un code qui lit le port série et qui exécute les actions, non ?
Parce que là ce que fait le code, c'est juste envoyer des infos sur le port série, donc côté arduino, il faut un code qui lit le port série et convertit cela en info sur les broches.

Vincent

Hors ligne

#8 2024-03-09 11:17:59

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

Oubli du print(i)
La console donne :
*** Console de processus distant Réinitialisée ***
>>>
début
carte initialisée
0
1
2
fin
fini
>>>
Mais toujours pas reproductible

Pour le port serie, le fichier miroontroleurs.py est dans le même répertire ue le fichier qui doit produire le son...

microcontroleurs.py
#! encoding: utf-8
import serial


class arduino():
    def __init__(self,port):
        self.serie = serial.Serial(port,baudrate=9600)
        synchro = ord(self.serie.read())
        while synchro != 0:
            synchro = ord(self.serie.read())


    def sortie_numerique(self,pin,etat):
        self.serie.write(chr(1).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        self.serie.write(chr(etat).encode('latin-1'))

    def entree_numerique(self,pin):
        self.serie.write(chr(2).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        val=ord(self.serie.read())
        return val

    def sortie_analogique(self,pin,val):
        self.serie.write(chr(3).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        self.serie.write(chr(val).encode('latin-1'))

    def entree_analogique(self,pin):
        self.serie.write(chr(4).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        val1=ord(self.serie.read())
        val2=ord(self.serie.read())
        return val1*256 + val2

    def son(self,pin,freq,duree=0):
        self.serie.write(chr(5).encode('latin-1'))
        self.serie.write(chr(pin).encode('latin-1'))
        self.serie.write(chr(freq>>8 & 255).encode('latin-1'))
        self.serie.write(chr(freq & 255).encode('latin-1'))
        self.serie.write(chr(int(duree*1000)>>8 & 255).encode('latin-1'))
        self.serie.write(chr(int(duree*1000) & 255).encode('latin-1'))

    def module_us(self,echo,trig):
        self.serie.write(chr(6).encode('latin-1'))
        self.serie.write(chr(echo).encode('latin-1'))
        self.serie.write(chr(trig).encode('latin-1'))
        val1=ord(self.serie.read())
        val2=ord(self.serie.read())
        return val1*256 + val2

    def resistance_pt100(self,cs,di,do,clk):
        self.serie.write(chr(7).encode('latin-1'))
        self.serie.write(chr(cs).encode('latin-1'))
        self.serie.write(chr(di).encode('latin-1'))
        self.serie.write(chr(do).encode('latin-1'))
        self.serie.write(chr(clk).encode('latin-1'))
        val1=ord(self.serie.read())
        val2=ord(self.serie.read())
        return 430*(val1*256 + val2)/32768

    def fermer(self):
        self.serie.close()

Je vois pas pourquoi il n'y a pas de son ?
Merci

lj

Hors ligne

#9 2024-03-10 11:34:44

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 314

Re : jouer un son avec arduino et python

Bonjour,

     Comme je vous disais il faut lancer le programme côté carté arduino, c'est l'étape 2 de l'activité : http://sciences-physiques.ac-besancon.f … -a-python/

Avez-vous réalisé l'étape 2 au moment du lancement du code Python ?

VM

Hors ligne

#10 2024-03-10 12:52:11

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

J'ai bien installer la bibliotheque Adafruit_MAX31865
Puis copier coller de microcontroleurs.ino
MAIS lorsque je veux le telever, arduino me demande de l'enregistrer.........je place ou ce fichier?
Merci

Hors ligne

#11 2024-03-10 12:58:07

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

La bibliotheque Adafruit_MAX31865 apparait dans arduino
      Croquis/Inclure bibliotheque/Recommandé Bibliotheque/Adafruit_MAX31865 library

Hors ligne

#12 2024-03-10 13:01:03

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 314

Re : jouer un son avec arduino et python

Le code microcontroleurs.ino doit être téléversé puis executé sur la carte arduino, comme dans votre post :
https://edupython.tuxfamily.org/forum/v … 1027#p1027
C'est ce code qui surveille ce qui est envoyé sur le port série et qui converti cela en instruction arduino pour jouer le son par exemple. Vous pouvez l'enregistrer où vous voulez, ce qui est important c'est de la téléverser sur la carte et de le lancer
VM

Hors ligne

#13 2024-03-10 13:08:04

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

Que veux dire....... "et de le lancer VM"

Hors ligne

#14 2024-03-10 13:24:32

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 314

Re : jouer un son avec arduino et python

VM, c'est mon nom smile
Il faut téléverser le fichier, de mémoire, si le téléversement a fonctionné, le code se lance automatiquement.

Hors ligne

#15 2024-03-10 15:41:24

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

Cela fonctionne, j'ai du son
Merci beaucoup

Hors ligne

#16 2024-03-10 16:50:08

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 314

Re : jouer un son avec arduino et python

Impeccable !
Bonne continuation

Vincent M

Hors ligne

#17 2024-03-10 20:11:41

laurjoli
Membre
Inscription : 2024-03-08
Messages : 12

Re : jouer un son avec arduino et python

Encore merci
Je reviens vers vous via ce forum....si pbs
lj

Hors ligne

Pied de page des forums