zaterdag 2 mei 2015

Werking & Vorm



In deze post zal ik de werking werking uitleggen van de afstandsbediening en ook de vormgeving tonen met CAD-files (Siemens NX).



Werking

Om de afstandsbediening te doen werken op de Digicorder heb ik natuurlijk de IR codes nodig die de Digicorder ontvangt.

De eerste manier om deze te vinden was gemakkelijkste dacht ik. Ik heb namelijk op internet zitten zoeken naar de codes. Dit waren allemaal HEX of BIN files. Er is gezocht geweest op sites zoals: www.remotecentral.com en www.hifi-remote.com 

Ook zijn er nog een heleboel andere sites aan te pas gekomen.
Omdat deze zoektocht weinig opleverde heb ik beslist om het over een andere boeg te gooien.

Ik ben op zoek om met een Arduino de codes in te lezen die de afstandbediening uitzendt.
(www.arduino.cc)

De Arduino is een microcontroller waar je relatief veel mee kan doen; dus ook IR codes inlezen.

Om de IR codes in te lezen heb ik gebruik gemaakt van:

- Breadboard
- Arduino Uno
- Jumper cables
- TSOP IR receiver (http://www.farnell.com/datasheets/30485.pdf)

Hier de opstelling:

De witte draad loopt naar de naar de D11 van de Arduino. De rode draad loopt naar de 5V en de blauwe is de ground.

Om deze codes in te lezen moet men een bibliotheek toevoegen in de Arduino files; ik heb gebruik gemaakt van deze:
http://shirriff.github.io/Arduino-IRremote/


Om de codes in te lezen ben ik op zoek gegaan naar de juiste code. Ik heb gemerkt dat er veel manieren zijn om de codes van de afstandsbediening in te lezen,

Hieronder drie verschillende codes voor de knop:

1.   3381900107
      3381900107
      3381900107

2.   UNKNOWN: C993B34B
      UNKNOWN: C993B34B

3.   1
      For IR Scope:
      0x7 0x5 0x7 0xC 0x7 0x5 0xE 0xB 0x7 0x6 0xD 0xC 0xD 0xB 0x7 0x6 0x6 0x6 0xE 0xB 0xD           0x6 0x7 0xB 0x7 
      For Arduino sketch:
      unsigned int raw[26] =       {0x7,0x5,0x7,0xC,0x7,0x5,0xE,0xB,0x7,0x6,0xD,0xC,0xD,0xB,0x7,0x6,0x6,0x6,0xE,0xB,0xD,0x6,       0x7,0xB,0x7,};
       irsend.sendRaw(raw,26,38);
    


4.  1
     For IR Scope:
     +400 -250 +300 -650 +350 -300 +600 -600 +350 -300 +600 -600 +650 -600 +350 -300 +350 -300      +600 -600 +650 -300 +300 -600 +350
     For Arduino sketch:
     unsigned int raw[26] =                                                           {400,250,300,650,350,300,600,600,350,300,600,600,650,600,350,300,350,300,600,600,650,300,300,
    600,350,};
    irsend.sendRaw(raw,26,38);




Dus door verschillende programma's up te loaden naar de Arduino ontving ik de voorgaande codes.
Dit was allemaal voor de aan/uit-knop.

Uiteindelijk ben ik voortgegaan met het programma dat in 4 gebruikt werd omdat dit de enige was waarvoor ik ook het programma heb gevonden om de ingelezen code terug uit te zenden.


Eerst en vooral: ik heb het programma niet zelf geschreven; ik heb deze van:


Het programma gebuikt in de Arduino Software: 
// If one keypress results in multiple codes being output, then
// change in IRremoteInt.h:
// #define _GAP 50000

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

int c = 1;

void dump(decode_results *results) {
  int count = results->rawlen;
  Serial.println(c);
  c++;
  Serial.println("For IR Scope: ");
  for (int i = 1; i < count; i++) {
  
               if ((i % 2) == 1) {
               Serial.print("+");
               Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
               }
               else {
               Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
               }
               Serial.print(" ");
  }
  Serial.println("");
  Serial.println("For Arduino sketch: ");
  Serial.print("unsigned int raw[");
  Serial.print(count, DEC);
  Serial.print("] = {");
  for (int i = 1; i < count; i++) {
  
               if ((i % 2) == 1) {
               Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
               }
               else {
               Serial.print((int)results->rawbuf[i]*USECPERTICK, DEC);
               }
               Serial.print(",");
  }
  Serial.print("};");
  Serial.println("");
  Serial.print("irsend.sendRaw(raw,");
  Serial.print(count, DEC);
  Serial.print(",38);");
  Serial.println("");
  Serial.println("");
}

void loop() {
  if (irrecv.decode(&results)) {
               dump(&results);
               irrecv.resume(); // Receive the next value
  }
}

Nu kunnen we de de uitgezonden IR code achterhalen via de Seriële Monitor:





Nu moeten we de codes nog terug uitzenden:




-Arduino Uno
-IR LED



Het gebruikte programma bevindt zich tussen de voorbeelden omdat we de IRremote bibliotheek hebben toegevoegd. 

Open IRsendDemo:

/*
 * IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
 * An IR LED must be connected to Arduino PWM pin 3.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

IRsend irsend;
 unsigned int raw[26] = {350,300,350,550,350,300,650,550,400,250,650,600,650,600,350,300,300,300,650,550,700,300,300,600,350,};
void setup()
{
  Serial.begin(9600);
}

void loop() {
  if (Serial.read() != -1) {
    for (int i = 0; i < 3; i++) {
      irsend.sendRaw(raw,26,38);
      delay(1000);
    }
  }
}


Dit voorbeeld is nu met de Aan/uit-knop.

Om deze code te zenden moeten we de Seriële Monitor openen en bovenaan 1 drukken; erna op verzenden. 
Dit is nog omslachtig dus tegen volgende keer zorg ik ervoor dat dit via de drukknop kan gebeuren.








Vormgeving



Hier de voorlopige CAD files die de vorm en opbouw tonen:

Deze CAD files zijn nog niet af; het enige dat al vast staat is de vorm.

De toetsen zouden uit een Siliconepad bestaan met drukknoppen onder.







Eerst had ik gedacht om de 2 helften met snapfits in elkaar te doen klikken;
na overleg met de leerkracht bleek een schroefboss een beter idee.



Het klepje voor de batterijen zit wel met snapfits vast.







Geen opmerkingen:

Een reactie posten