Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:agrigore:remote-pc-control [2021/05/24 20:06]
silviu.stefan1201 [Software Design]
pm:prj2021:agrigore:remote-pc-control [2021/05/25 19:55] (current)
silviu.stefan1201 [Bibliografie/Resurse]
Line 29: Line 29:
  
 {{:​pm:​prj2021:​agrigore:​remote-pc-control:​schema_v2.png?​800|}} {{:​pm:​prj2021:​agrigore:​remote-pc-control:​schema_v2.png?​800|}}
 +
 +Motivatii pentru piese:
 +
 +Initial am vrut sa folosesc un NPN in loc de MOSFET, dar ledurile au 300mA si nu se aprindeau cum trebuie.
 +
 +Tot initial voiam sa folosesc un ATTiny85 in loc de ditamai Mega-ul, ca am nevoie doar de 3 pini digitali. Problema e ca tiny-ul nu are hardware pentru seriala, si software serial nu prea mergea.
 +
 +Optocuplor - nu vreau sa leg arduino care costa ''​%%$%%''​ direct la PC care costa ''​%%$$$$%%'',​ deci tranzistor nu merge. Cealalta optiune e un releu, dar are 2 dezavantaje,​ anume ca e foarte mare (optocuplorul este mult mai mic), si ca am doar unul singur (optocuploare am o punguta). Una sau mai multe diode din optoculoare au fost arse pana sa-mi aduc aminte de ce nu legi diode direct la VCC.
 +
 +Asa arata construita:
 +
 +{{:​pm:​prj2021:​agrigore:​remote-pc-control:​hardware.jpg?​800|}}
 +
 +Cele 2 fire pentru LED strip actioneaza ca un intrerupator,​ strip-ul fiind alimentat separat.
 +
 +Firele pentru power switch sunt legate direct la pinii de pe motherboard din fpanel. Similar, sunt capetele unui intrerupator.
 ===== Software Design ===== ===== Software Design =====
  
-=== Cod µC ===+==== Cod µC ===
 + 
 +CLion + PlatformIO plugin a fost folosit pentru scrierea/​uploadul codului. 
  
 Foloseste library-ul IRRemote pentru a interactiona cu modulul IR. Foloseste library-ul IRRemote pentru a interactiona cu modulul IR.
  
-Codul e relativ simplu:+Codul e relativ simplu, si scurt:
  
 <code cpp> <code cpp>
Line 91: Line 110:
 </​code>​ </​code>​
  
 +Constantele magice se refera la comenzi NEC: https://​github.com/​Arduino-IRremote/​Arduino-IRremote/​issues/​631#​issuecomment-503101884
  
-CLion + PlatformIO plugin a fost folosit pentru codul de pe µC.+Cum sunt folosite fiecare o singura data, nu le-am mai pus intr-un enum.
  
-Node + Typescript ​pentru ​command ​runner-ul de pe PC.+==== Cod PC ==== 
 + 
 +Command runner-ul de pe PC foloseste Typescript/Node
 + 
 +Link git: https://​github.com/​slak44/​proiect-pm 
 + 
 +Pentru comunicarea cu microcontrollerul,​ am folosit library-ul ''​%%serialport%%''​. Calea catre device-ul serial e configurabila printr-un env variable, ''​%%TTY_PATH%%''​ (''​%%/​dev/​ttyACM0%%''​ in cazul meu). Library-ul citeste linie cu linie (tehnic pana la \r\n), si livreaza continutul printr-un event de date. 
 + 
 +Avand eventuri cu comenzi de la arduino, partea de rulat este simpla. Un switch pe lista de comenzi posibile ​actiunea relevanta (''​%%handleSerialData%%''​ in ''​%%index.ts%%''​). 
 + 
 +Pentru controalele de media, am folosit standardul MPRIS, care specifica un API standard pe Linux pentru ​playere de audio/​video. MPRIS este implementat pe DBus. Fiecare player expune un serviciu DBus care implementeaza metodele si proprietatile din standard. Command ​runner-ul ​listeaza toate serviciile din session bus, si le alege pe cele de tip MPRIS. De asemenea, asculta schimbari ​pe DBus, si isi modifica lista interna de playere (daca se deschide un player nou, sau daca se inchide unul existent). Runnerul permite controlul a mai multor playere simultan, in mod dinamic. 
 + 
 +DBus este relativ low-level, chiar si folosind un library care se ocupa de conexiunea cu el. Am scris un mic wrapper peste o fractiune din MPRIS (play, pause, volume, comenzi de baza). Se poate gasi in ''​%%mpris-proxy.ts%%''​. Codul principal doar foloseste acest wrapper direct, de exemplu: 
 +<code javascript>​ 
 +case SerialMessage.VOLUME_PLUS:​ 
 +      await accessor.player.setVolume(await accessor.player.volume() + volumeDelta);​ 
 +      break; 
 +</​code>​ 
 + 
 +In afara de comenzile media, runner-ul accepta si scripturi custom. Butoanele 0..9 de pe telecomanda sunt mapate la 10 scripturi din folder-ul runnerului, ''​%%script${nr}.sh%%''​. Astfel se pot executa comenzi arbitrare folosind telecomanda.
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 +
 +https://​www.youtube.com/​watch?​v=AwqmG-MQQOQ
 +
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Proiectul e destul de fun, si are potential sa-mi fie chiar util. O posibila miniaturizare + imbunatatirea distantei la care merge telecomanda l-ar face mai practic si mai usor de utilizat. Chiar si in starea lui curenta, merge lasat legat la PC :)
 ===== Download ===== ===== Download =====
  
 +Cod: https://​github.com/​slak44/​proiect-pm/​archive/​refs/​heads/​master.zip
 ===== Jurnal ===== ===== Jurnal =====
  
Line 106: Line 150:
   * 14 mai - schema   * 14 mai - schema
   * 23 mai - schema v2   * 23 mai - schema v2
 +  * 24 mai - documentatie finala
 +  * 25 mai - video cu rezultat + concluzie
 +  * zile random din mai - implementarea in sine
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
 PDF: https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​agrigore/​remote-pc-control?​do=export_pdf PDF: https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​agrigore/​remote-pc-control?​do=export_pdf
 +
 +Cod: https://​github.com/​slak44/​proiect-pm
  
 Hardware: Hardware:
Line 114: Line 163:
   * https://​www.electronics-tutorials.ws/​transistor/​tran_7.html   * https://​www.electronics-tutorials.ws/​transistor/​tran_7.html
   * https://​www.onsemi.com/​pdf/​datasheet/​nds7002a-d.pdf   * https://​www.onsemi.com/​pdf/​datasheet/​nds7002a-d.pdf
 +  * https://​datasheetspdf.com/​pdf/​701590/​LEN/​VS1838/​1
 +  * https://​learnabout-electronics.org/​Downloads/​PC817%20optocoupler.pdf
   * https://​ocw.cs.pub.ro/​courses/​icalc,​ bine ca am ales ic pt eagle   * https://​ocw.cs.pub.ro/​courses/​icalc,​ bine ca am ales ic pt eagle
  
pm/prj2021/agrigore/remote-pc-control.1621876001.txt.gz · Last modified: 2021/05/24 20:06 by silviu.stefan1201
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0