| Ligne 28 : |
Ligne 28 : |
| | Il est très facile de se faire une idée de la réponse lumière/résistance en utilisant des conditions d'illumination constante et en pratiquant une série de mesure en positionnant la main à une hauteur donnée puis en mesurant la réponse sur le convertisseur ADC. | | Il est très facile de se faire une idée de la réponse lumière/résistance en utilisant des conditions d'illumination constante et en pratiquant une série de mesure en positionnant la main à une hauteur donnée puis en mesurant la réponse sur le convertisseur ADC. |
| | | | |
| − | En utilisant le câblage du Theremin, le petit script [https://github.com/mchobby/pico-2-explorer/blob/main/projects/theremin/read.py read.py] (présent dans le projet Theremin) permet d'effectuer les relevés nécessaires "sans main" (la valeur 99999) puis à 30cm, 25cm, 20cm, 15cm, 10cm, 5cm et enfin 1cm? | + | En utilisant le câblage du Theremin, le petit script [https://github.com/mchobby/pico-2-explorer/blob/main/projects/theremin/read.py read.py] (présent dans le projet Theremin) permet d'effectuer les relevés nécessaires "sans main" (la valeur 99999) puis à 30cm, 25cm, 20cm, 15cm, 10cm, 5cm et enfin 1cm simplement en pressant le bouton lorsque la main est positionnée. |
| | + | |
| | + | Les valeurs obtenues sont encodées sur 10 bits significatifs (donc de 0 à 1023) pour rester au dessus du bruit (voir [https://wiki.mchobby.be/index.php?title=P2E-Analog-Input-FR#ENOB_.3D_Bits_significatifs tutoriel sur l'entrée analogique]). |
| | + | |
| | + | <syntaxhighlight lang="python"> |
| | + | import micropython, time |
| | + | from machine import Pin, ADC |
| | + | micropython.alloc_emergency_exception_buf(100) |
| | + | |
| | + | counter = 0 |
| | + | |
| | + | def bouton_cb( obj ): |
| | + | global counter |
| | + | counter += 1 |
| | + | |
| | + | # https://docs.micropython.org/en/latest/library/machine.Pin.html |
| | + | # https://docs.micropython.org/en/latest/reference/isr_rules.html |
| | + | btn = Pin( Pin.board.GP16, Pin.IN, Pin.PULL_UP ) |
| | + | btn.irq( handler=bouton_cb, trigger=Pin.IRQ_FALLING ) |
| | + | |
| | + | a1 = ADC( Pin( Pin.board.GP27 ) ) |
| | + | |
| | + | read_for_cm = [99999,30,25,20,15,10,5,1] |
| | + | |
| | + | index = 0 |
| | + | print( "read for %i cm" % read_for_cm[index] ) |
| | + | while True: |
| | + | if counter>0: # Button pressed? |
| | + | val = 0 |
| | + | # Acquire analog on 10 bits |
| | + | val = 0 |
| | + | for i in range( 10 ): |
| | + | val += (a1.read_u16()>>6) |
| | + | # calculer la moyenne |
| | + | val = val/10 |
| | + | |
| | + | print( " %i of 1024" % vald ) |
| | + | index += 1 |
| | + | if index>=len( read_for_cm ): |
| | + | index = 0 |
| | + | |
| | + | # next value |
| | + | print( "read for %i cm" % read_for_cm[index] ) |
| | + | |
| | + | # Reset button detection |
| | + | time.sleep_ms( 500 ) |
| | + | counter=0 |
| | + | else: |
| | + | time.sleep_ms( 200 ) |
| | + | </syntaxhighlight> |
| | + | |
| | + | Ce qui permet de faire un relevé comme celui-ci dessous. |
| | + | |
| | + | <nowiki>read for 99999 cm |
| | + | 793 of 1024 |
| | + | read for 30 cm |
| | + | 770 of 1024 |
| | + | read for 25 cm |
| | + | 758 of 1024 |
| | + | read for 20 cm |
| | + | 755 of 1024 |
| | + | read for 15 cm |
| | + | 742 of 1024 |
| | + | read for 10 cm |
| | + | 708 of 1024 |
| | + | read for 5 cm |
| | + | 634 of 1024 |
| | + | read for 1 cm |
| | + | 499 of 1024</nowiki> |
| | + | |
| | + | A noter également le minima de 500 et maxima de 793. |
| | | | |
| | == Brancher == | | == Brancher == |