donderdag 11 juni 2015

Eindproduct



Na maanden werk is de afstandsbediening eindelijk af.

De besturing gebeurt door een Arduino.










De code wordt nog altijd bediend met de computer.
Via multiplexing kan de IR led bediend worden met de knoppen







Arduino Code:

/*
 * 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] = {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,};
unsigned int raw2[26] = {350,300,350,550,350,300,650,550,400,250,650,600,650,600,350,300,600,300,350,300,300,300,350,550,700,};
unsigned int raw3[26] = {350,250,350,600,350,250,700,550,350,300,650,550,700,550,350,300,350,250,700,250,300,650,650,550,400,};
unsigned int raw4[26] = {350,250,400,550,350,300,650,550,400,250,650,600,650,600,350,300,600,600,350,300,300,300,350,300,650,};
unsigned int raw5[26] = {300,300,350,600,350,300,600,600,350,300,650,600,600,600,400,250,650,300,350,550,350,300,350,300,600,};
unsigned int raw6[26] = {350,250,350,600,350,300,600,600,350,300,650,600,650,600,300,300,650,300,350,550,650,300,350,600,300,};
unsigned int raw7[24] = {350,250,350,600,350,250,700,550,350,300,650,600,650,600,350,250,650,600,650,600,650,600,350,};
unsigned int raw8[24] = {350,300,350,550,350,300,650,550,400,250,650,600,650,600,350,300,650,550,650,300,350,550,700,};
unsigned int raw9[26] = {350,300,300,600,350,300,600,600,350,300,600,600,650,600,350,300,600,600,400,300,600,300,300,600,350,};
unsigned int raw10[24] = {400,250,300,600,400,250,650,600,350,300,600,600,650,600,350,300,600,600,650,600,350,300,600,};
unsigned int raw11[26] = {350,300,300,600,350,300,600,600,350,300,600,600,650,600,350,300,650,600,600,300,350,300,350,550,350,};
unsigned int raw12[26] = {350,300,350,550,350,300,650,600,350,250,650,600,650,600,350,250,650,300,350,600,350,250,650,600,350,};
unsigned int raw13[24] = {400,250,350,600,300,300,650,600,300,300,700,550,700,550,350,300,650,300,300,600,650,600,650,};
unsigned int raw14[24] = {350,250,350,600,350,250,700,550,350,300,650,600,650,600,650,550,350,300,350,250,700,550,650,};
unsigned int raw15[24] = {350,250,350,600,350,250,700,550,350,300,650,550,700,550,700,550,350,300,650,600,350,250,650,};
unsigned int raw16[26] = {350,250,350,600,350,300,650,550,350,300,650,600,650,550,700,550,350,300,350,300,650,250,350,600,350,};
unsigned int raw17[28] = {350,250,350,600,350,250,700,550,350,300,650,550,650,600,350,300,600,300,350,300,350,250,350,300,350,550,350,};
unsigned int raw18[26] = {350,250,350,600,350,250,700,550,350,300,650,550,700,550,700,550,350,300,350,300,300,300,650,550,350,};
unsigned int raw19[26] = {350,300,350,550,350,300,600,650,300,300,650,600,650,600,650,600,300,350,300,250,350,300,300,300,650,};


void setup()
{
  Serial.begin(9600);
}

void loop() {
  if (Serial.read() != -1) {
    for (int i = 0; i < 3; i++) {
      irsend.sendRaw(raw,26,38);  //power
      delay(40);
    }
  }
  if (Serial.read() != -2) {
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw2,26,38); //esc
      delay(40);
    }
  }
  if (Serial.read() != -3) {
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw3,26,38); //tvgids
      delay(40);
    }
  }


  if (Serial.read() != -4) {            //OPGENOMEN
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw4,26,38); //home
      delay(40);
  irsend.sendRaw(raw5,26,38); //pijl links
      delay(40);
 irsend.sendRaw(raw6,26,38); //OK
      delay(40);
  }
  }

  if (Serial.read() != -5) {            //channel up
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw7,24,38);
      delay(40);
    }
  }
  if (Serial.read() != -6) {            //channel down
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw8,24,38);
      delay(40);
    }
  }

  if (Serial.read() != -7) {            //volume up
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw9,26,38);
      delay(40);
    }
  }  if (Serial.read() != -8) {            //volume down
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw10,24,38);
      delay(40);
    }
  }

 if (Serial.read() != -9) {            //pijl omhoog
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw11,26,38);
      delay(40);
    }
  }
 if (Serial.read() != -10) {            //pijl rechts
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw12,26,38);
      delay(40);
    }
  }
 if (Serial.read() != -11) {            //pijl omlaag
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw13,24,38);
      delay(40);
    }
  }
 if (Serial.read() != -12) {            //pijl links
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw5,26,38);
      delay(40);
    }
  }

 if (Serial.read() != -13) {            //OK
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw6,26,38);
      delay(40);
    }
  }
 if (Serial.read() != -14) {            //record
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw14,24,38);
      delay(40);
    }
  }
 if (Serial.read() != -15) {            //play
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw15,24,38);
      delay(40);
    }
  }
 if (Serial.read() != -16) {            //stop
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw16,26,38);
      delay(40);
    }
  }
 if (Serial.read() != -17) {            //terugspoelen
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw17,28,38);
      delay(40);
    }
  }
 if (Serial.read() != -18) {            //pause
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw18,26,38);
      delay(40);
    }
  }
 if (Serial.read() != -19) {            //doorspoelen
    for (int i = 0; i < 3; i++) {
     irsend.sendRaw(raw19,26,38);
      delay(40);
    }
  }


}


Tenslotte nog een foto van het toestel in gebruik



zaterdag 23 mei 2015

Keypad



Gisteren heb ik de silicone mal gemaakt voor het maken van de keypad.

Het is een open mal; dit wil zeggen dat de er maar 1 helft is. Ik heb hiervoor gekozen omdat er anders veel aangietpunten en ontluchters nodig zouden zijn; zonder garantie dat het van de eerste keer lukt.

De opbouw:

Een zelfgemaakt doosje (waterdicht); 1 cm langer dan dan de randen van de 3D print.
Voor het doosje gebruik je het best een melanine houdend materiaal zodat je de mal (eens uitgehard; meestal +/- 24u) eenvoudig uit het doosje kunt halen.

Omdat ik dit niet bij de hand had; heb ik een doosje gemaakt uit dunne multiplex (2 à 3 mm). De plaatjes heb ik met ducttape aaneen gekleefd. Dit kun je zien aan de randen van de mal maar dit heeft geen effect gehad op het eindresultaat.


Foto's;


De 3D print is was aan de onderkant van het doosje bevestigd met dubbelzijdige tape om te voorkomen dat het zou gaan drijven; verschuiven.



woensdag 20 mei 2015

3D prints


Dit bericht gaat over de 3D prints.


Doordat de case dunwandig is (1 mm) kon dit door de printer niet perfect geprint worden.
Dit omdat de printer maar 1 kop had en dus geen ondersteuningsmateriaal gebruikt worden.

Was het stuk massief of dikker geweest was dit geen enkel probleem; ik weet nu dat ik de volgende keer beter een 2 koppige printer gebruik.


Hoe de stukken uit de printer gekomen zijn:

De ribben in het midden zijn ondersteuning


De keypad had geen ondersteuning nodige omdat de overbruggingen niet te groot waren







Nadat de ondersteuningsribben verwijdert zijn







De afstandsbediening in voorlopige assemblage


Assembly zonder keypad

Op de foto's is mooi te zien hoe de twee helften juist niet op elkaar passen door vervorming;
De gaten voor de schroeven komen wel mooi overeen.








Details

Boss en positioner (keypad)


Snapfit lock


Batterij klepje: de snapfit is jammer genoeg in de verkeerde richting geprint waardoor deze minder stevig is.
Om de lijnen weg te werken is deze opgevuld met fijnplamuur.


Versterkingsribben en Boss aan de voorkant;
in de linkse ribbe zitten de positioners ingewerkt.



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.







woensdag 1 april 2015

Test

Hier kun je zien hoe ik de afstandsbediening gemaakt heb om te testen en de test zelf.



Maken Afstandsbediening

Dit is een dummy model; quick and dirty.











Video van de test
Ik weet dat het slechte kwaliteit is maar de omstandigheden om te filmen waren niet optimaal.


In de video wordt er een simulatie gedaan: de oudere bedient de digicorder met het dummy model; 
ik bedien met de gewone afstandsbediening.