This is an old revision of the document!


Remote PC Control

Introducere

Scopul proiectului este de a permite executia unor comenzi predefinite pe PC, cu o telecomanda de la distanta, via un microcontroller.

Cea mai buna motivatie este lenea, si de la asta a venit si ideea pentru acest proiect. Intr-adevar, as putea sa opresc din a ma uita pe netflix la televizor ca sa opresc PCul, dar de ce sa fac asta, cand pot sa apas un buton si sa nu ma mai ridic?

Impreuna cu un daemon ce ruleaza pe PC, tot felul de actiuni mai mult sau mai putin privilegiate pot fi facute printr-o simpla apasare de buton.

Descriere generală

Rosu: alimentare

Albastru: elemente controlate de µC

Hardware Design

  • Arduino (Mega2560)
  • 2N7000 N-MOSFET
  • PC827 Optocoupler
  • VS1838 IR Module (+telecomanda)
  • On/Off switch
  • alte piese de baza (rezistor, fire etc)
  • alte chestii deja existente (PC-ul :), LED strip-ul, fire usb)

Initial am vrut sa folosesc un NPN in loc de MOSFET, dar ledurile au 300mA si nu se aprindeau cum trebuie. La fel, voiam sa folosesc un ATTiny85 in loc de ditamai Mega-ul, ca folosesc doar 3 pini digitali. Problema e ca tiny-ul nu are hardware pentru seriala.

Software Design

Cod µC

CLion + PlatformIO plugin a fost folosit pentru scrierea/uploadul codului.

Foloseste library-ul IRRemote pentru a interactiona cu modulul IR.

Codul e relativ simplu:

#include <Arduino.h>
#include <IRremote.h>
 
#define IR_PIN 53
#define PWR_BTN_PIN 33
#define LIGHTS_PIN 25
 
IRrecv irrecv(IR_PIN);
decode_results results;
 
void setup() {
  pinMode(LIGHTS_PIN, OUTPUT);
  pinMode(PWR_BTN_PIN, OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
}
 
int lightsPower = LOW;
 
void loop() {
  if (irrecv.decode(&results)) {
    switch (results.value) {
      case 0xFFA25D:
        Serial.println("POWER");
        digitalWrite(PWR_BTN_PIN, HIGH);
        delay(100);
        digitalWrite(PWR_BTN_PIN, LOW);
        break;
      case 0xFFE21D:
        Serial.println("FUNC/STOP");
        lightsPower = !lightsPower;
        digitalWrite(LIGHTS_PIN, lightsPower);
        break;
      case 0xFF629D:
        Serial.println("VOL+");
        break;
      case 0xFF22DD:
        Serial.println("FAST BACK");
        break;
        /* snip snip restu butoanelor aici */
      case 0xFFFFFFFF:
        Serial.println("REPEAT LAST");
        break;
      default:
        /* other button */;
    }
    delay(500);
    irrecv.resume();
  }
}

Constantele magice se refera la comenzi NEC: https://github.com/Arduino-IRremote/Arduino-IRremote/issues/631#issuecomment-503101884

Cum sunt folosite fiecare o singura data, nu le-am mai pus intr-un enum.

Node + Typescript pentru command runner-ul de pe PC.

Rezultate Obţinute

Concluzii

Download

Jurnal

  • 25 aprilie - completare idee proiect
  • 14 mai - schema
  • 23 mai - schema v2

Bibliografie/Resurse

pm/prj2021/agrigore/remote-pc-control.1621876870.txt.gz · Last modified: 2021/05/24 20:21 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