Je n'avais jamais été au courant du mécanisme de télécommande des téléviseurs et des climatiseurs qui me sont familiers, mais j'ai appris le mécanisme d'utilisation de la télécommande infrarouge dans le travail électronique. J'ai également essayé de vérifier comment la communication se fait en utilisant Raspeye.
** Ce que j'ai utilisé **
Tout d'abord, il existe environ trois formats de communication pour la télécommande infrarouge.
La télécommande utilisée cette fois-ci étant au format NEC, nous allons nous concentrer sur cela.
Dans le format NEC, T = 562 [μs] est une unité de temps. Les données «0» et «1» sont représentées de cette manière.
Et toute la communication est à peu près divisée en quatre codes.
Maintenant, utilisons une tarte aux râpes et vérifions si c'est le cas.
Nous analyserons la télécommande infrarouge étiquetée Car mp3, souvent incluse dans les kits de démarrage de travail électronique. <img width="150" alt="carMp3.jpg ", src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551611/1c27be81-e637-922e-e676-f516271f3ba6.jpeg "> Tout d'abord, nous allons faire un circuit.
Le module récepteur infrarouge utilisé cette fois est VS1838B. Les broches du VS1838B sont OUT à gauche, GND au milieu et VCC à droite. Puisque Min de VCC est de 2,7 V et Max est de 5,5 V, connectez-le à 3,3 V sans insérer de résistance. Cette fois, connectez OUT à la broche 21.
Il s'agit du code source qui émet le temps (μs) lorsque le signal est ON / OFF.
irAnalysis.py
import RPi.GPIO as GPIO
import time
IR_PIN = 21
def timeMeasure():
maxTime = 1 #sec
prevState = GPIO.input(IR_PIN)
startTime = time.perf_counter()
while time.perf_counter() - startTime < maxTime:
nowState = GPIO.input(IR_PIN)
if nowState != prevState:
endTime = time.perf_counter()
elapsedTime = (endTime - startTime) * 1000000 #microsec
return round(elapsedTime)
return None
def analysis():
GPIO.setmode(GPIO.BCM)
GPIO.setup(IR_PIN, GPIO.IN)
GPIO.wait_for_edge(IR_PIN, GPIO.BOTH)
try:
while True:
elapsedTime = timeMeasure()
if elapsedTime is None:
break
else:
print(elapsedTime)
except KeyboardInterrupt:
GPIO.cleanup(IR_PIN)
GPIO.cleanup(IR_PIN)
if __name__ == '__main__':
analysis()
J'ai exécuté le programme précédent et appuyé sur le n ° 0 de la télécommande infrarouge. La télécommande étant au format NEC, vérifiez la sortie en la comparant au format.
Tout d'abord, au format NEC, vous pouvez d'abord recevoir le code du lecteur.
Parce que T est 562 μs 16T est 16*562=8992(μs)
8T 8*562=4496(μs) Il devient.
Les deux premières lignes de sortie ressemblent à ceci.
python
9338
4294
Les valeurs sont proches les unes des autres.
Vient ensuite le code personnalisé.
'0': 1T ON, 3T OFF Lorsque ON est de 562 μs et OFF est de 562 μs
'1': 1T ON, 1T OFF Lorsque ON est de 562 μs et OFF est de 1686 μs
Donc, cette fois, le code personnalisé est 0000 0000 1111 1111.
De la troisième ligne au milieu de la sortie
python
484 #'0'
461
543 #'0'
478
546 #'0'
478
543 #'0'
480
545 #'0'
486
548 #'0'
471
538 #'0'
479
546 #'0'
478
544 #'1'
1604
546 #'1'
1596
544 #'1'
1600
544 #'1'
1600
536 #'1'
1602
544 #'1'
1601
485 #'1'
1578
496 #'1'
1596
Vient ensuite le code de données.
Le code de données est 0110 1000, suivi du 1001 01111 inversé.
python
520 #'0'
466
529 #'1'
1587
328 #'1'
1543
335 #'0'
426
449 #'1'
1589
527 #'0'
468
512 #'0'
442
463 #'0'
460
------Inverser d'ici--------
521 #'1'
1573
506 #'0'
467
539 #'0'
484
532 #'1'
1586
460 #'0'
438
527 #'1'
1603
479 #'1'
1575
464 #'1'
1588
Il semble que 1T, 71T, 16T, 4T sont répétés en premier, puis 1T, 172T, 16T, 4T sont répétés. C'est un peu différent du format, mais cela peut être différent pour chaque produit.
python
472
40106
9203
2024
---------------
234
96804
9194
2128
----répétition----
466
96856
9161
2097
----répétition----
451
96858
9212
2168
Il a été constaté que la communication était effectuée selon le format NEC, bien que les valeurs numériques soient légèrement différentes, à l'exception du code de répétition.
Recommended Posts