Archive for October, 2009

Štampanje u vazduhu

Rešen da poteram mašinu malo preko nekih definisanih granica napravio sam objekat koji testira koliko je RapMan sposoban da štampa “u vazduhu” tj. koji negativan ugao može da podnese. Standardan limit ovde je 60 stepeni, tj ako je “overhang” veći od 60 stepeni (ugao prema horizontali manji od 60stepeni) mašina neće moći da odštampa isti ako ne koristi support.

Napravljena su tri testa. 2 sam štampao ja i jedan je štampao jedan moj kolega (Tony, čovek koji inače piše firmware za RapMan) pošto on ima ABS u boji (ja imam samo beli).

Svi testovi su napravljeni sa osnovnim setovanjem koje je ovakvo:

CARVE/Layer Thickness: 0.35
CLIP/clip over ..: 1.0
FILL/Grid Extra Overlap (ratio): 0.4
FILL/Infill Solidity (ratio): 0.1
INSET/Infill Perimeter Overlap (ratio): 0.4
INSET/Calculate Overlap from Perimeter and Infill: True
INSET/Remove Extrusion Overlap: True

Prvi test, ja štampao koristeći beli abs na temperaturi od 243 stepena:

Objekat neočišćen:

Objekat očišćen::

Objekat je izuzetno čvrst po celoj visini, “overhang” delovi ne pokazuju znake slabosti.

Drugo štampanje je napravio Tony Koristen je identičan gcode fajl samo je razlika što je korišten crni ABS. Crni ABS inače zahteva malo veću temperaturu štampe nego beli ABS (zbog pigmenta) tako da je ovo približno testu belog ABS-a na 240-242 stepena.

Objekat neočišćen:

Kao što se da primetiti, ovaj print je skoro idealan. Dakle odabirom prave temperature možemo zaobići standardni limit od 60 stepeni. Objekat je vrlo čvrst i ne pokazuje znake slabosti. Ovo uopšte nisam očekivao.

Treći print je test šta se dešava ako štampamo hladnije nego što je idealna temperatura. Ovde je temperatura spuštena na 237 stepeni, dakle 6 stepeni manje nego za prvi print, štampano opet belim ABS-om.

Objekat neočišćen:

Objekat delimično očišćen:

Kao što se sa slike da primetiti objekat je u priličnom haosu, teško ga je očistiti, kvalitet objekta je “neupotrebljiv”, objekat ima dobru čvrstinu na ravnom delu ali na overhang delu nema čvrstinu i može se slomiti na tom delu upotrebom malo jače sile.

Da zaključimo, 60 stepeni limit za overhang bez korišćenja support materijala može da se prebaci ako lepo pogodimo i usaglasimo temperaturu sa materijalom koji koristimo. Uz dobar tuning moguća je štampa overhang-a od čak 30 stepeni.

Objekat, ako želite sami da probate da otštampate možete naći na thingieverse sajtu.

Tags: ,

RapMan Pro

RapMan Pro

RapMan Pro

BitsFromBytes je izbacio i PRO verziju svog repstrap kita RapMan Pro koji je prikazan pre neki dan na nekom sajmu u Engleskoj. RapMan Pro jos uvek nije u prodaji posto BitstFromBytes trenutno radi na dual extruder modelu koji ce biti u stanju da stampa sa dva razlicita materijala (po zelji korisnika moze da bude i isti materijal samo razlicita boja ali je osnovna ideja da drugi extruder pusta PVA ili slican support materijal koji se lako extruduje a moze lako i da se ukloni – PVA se na primer rastvara u vodi) tako da ce biti moguce stampati mnogo komplikovanije oblike.

Tags:

Pravih za rodjaka neki dan neki primer pa reko mozda bi bilo zgodno podeliti ga.

Shema - klikni za celu semu

Shema - klikni za celu semu

Shema sadrzi

  • mikrokontroler PIC16F887 koji radi na internom oscilatoru na 8MHz
  • reset kolo na MCLR pinu
  • primer kako kontrolisati 2 ledare preko samo jednog pina
  • karakter LCD u 4-bitnom modu (zakacena su paralelno dva, jedan sa jednom linijom i jedan sa dve)
  • unipolarni stepper motor vezan preko ULN2003 (koji je u stvari 7 darlingtona u jednoj kutiji)
  • bipolarni stepper motor sa L297+L298 drajver kombinacijom
  • servo motor

Sors je “samoobjasnjihv” tako da, evo ga:


// LCD pinovi
sbit LCD_EN at RD1_bit;
sbit LCD_RS at RD2_bit;
//sbit LCD_RW at RD3_bit; // MikroC ne koristi RW pin
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_EN_Direction at TRISD1_bit;
sbit LCD_RS_Direction at TRISD2_bit;
//sbit LCD_RW_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;

char txt1[] = "TEST TEKST";
char txt2[] = "neki tekst";
char txt3[] = "primer";
char txt4[] = "za lcd";
char txt5[] = "Vozi unapred";
char txt6[] = "UNIPOLARNI STEPP";
char txt7[] = "Vozi unazad";
char txt8[] = "STOP";
char txt9[] = "KRAJ";

// koraci stepper motora
char unipolar_step[] = {0b1100, 0b0110, 0b0011, 0b1001};

#define  Move_Delay() Delay_ms(200)

unsigned char i;

void main(){
  //////////////////////////////////////
  //   INICIJALIZACIJA                //
  //////////////////////////////////////

  // Ugasi ADC (konfigurisi AN pinove kao digital IO)
  ANSEL  = 0;
  ANSELH = 0;

  // Ugasi komparatore
  C1ON_bit = 0;
  C2ON_bit = 0;

  //////////////////////////////////////
  //   PALI, GASI LEDARU              //
  //////////////////////////////////////

  // Na D0 su nam charlieplexed ledare
  TRISD0_bit=1; //postavi D0 na imput - gasi obe ledare
  for (i = 0; i < 10; i++){ //20 puta se izvrti
     //upali prvu ledaru
     RD0_bit=0; //D0 je GND
     TRISD0_bit=0; //D0 je "izlaz"
     Delay_ms(100); //sacekaj 500ms

     //Ugasi ledare
     TRISD0_bit=1;
     Delay_ms(100); //sacekaj 500ms

     //upali drugu ledaru
     RD0_bit=1; //D0 je 5V
     TRISD0_bit=0; //D0 je "izlaz"
     Delay_ms(100); //sacekaj 500ms

     //Ugasi ledare
     TRISD0_bit=1;
     Delay_ms(100); //sacekaj 500ms
  }

  //////////////////////////////////////
  //   LCD  tekstualni                //
  //////////////////////////////////////

  Lcd_Init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);

  Lcd_Out(1,6,txt3);

  Lcd_Out(2,6,txt4);
  Delay_ms(2000);
  Lcd_Cmd(_LCD_CLEAR);

  Lcd_Out(1,1,txt1);
  Lcd_Out(2,5,txt2);

  //iskuliraj 2 sekunde
  Delay_ms(2000);

  //Mrducaj malo tekst na lcd-u
  for(i=0; i<4; i++) {
    Lcd_Cmd(_LCD_SHIFT_RIGHT);
    Move_Delay();
  }

  for(i=0; i<8; i++) {
    Lcd_Cmd(_LCD_SHIFT_LEFT);
    Move_Delay();
  }

  for(i=0; i<8; i++) {
    Lcd_Cmd(_LCD_SHIFT_RIGHT);
    Move_Delay();
  }

  //////////////////////////////////////
  //   UNIPOLARNI STEPPER MOTOR       //
  //////////////////////////////////////

  //mrducaj malo stepper

  //SPREMI RC4 - RC7 da budu izlaz
  TRISC4_bit=0;
  TRISC5_bit=0;
  TRISC6_bit=0;
  TRISC7_bit=0;

  //sacekaj sekund
  Delay_ms(1000);

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,txt5);
  Lcd_Out(2,1,txt6);

  //UNAPRED
  for(i=0;i<100;i++){ // 100 koraka
     RC4_bit =  unipolar_step[i%4] >> 3;
     RC5_bit = (unipolar_step[i%4] >> 2) & 1;
     RC6_bit = (unipolar_step[i%4] >> 1) & 1;
     RC7_bit =  unipolar_step[i%4]       & 1;
     Delay_ms(80); //pauza izmedju koraka, sto manja pauza, brze se vrti stepper
  }

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,txt8);

  //sacekaj sekund
  Delay_ms(1000);

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,txt7);
  Lcd_Out(2,1,txt6);

  //UNAZAD
  for(i=100;i>0;i--){ // 100 koraka
     RC4_bit =  unipolar_step[i%4] >> 3;
     RC5_bit = (unipolar_step[i%4] >> 2) & 1;
     RC6_bit = (unipolar_step[i%4] >> 1) & 1;
     RC7_bit =  unipolar_step[i%4]       & 1;
     Delay_ms(80); //pauza izmedju koraka, sto manja pauza, brze se vrti stepper
  }
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,txt8);
  //sacekaj sekund
  Delay_ms(1000);

  //////////////////////////////////////
  //   BIPOLARNI STEPPER MOTOR        //
  //////////////////////////////////////

  //SPREMI RC0, RC1 da budu izlaz
  RC0_bit = 0;
  RC1_bit = 0;
  TRISC0_bit=0;
  TRISC1_bit=0;
  RC0_bit = 0;

  //vozi unapred
  Delay_ms(1000);
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"Vozi unapred");
  Lcd_Out(2,1,"BIPOLARNI STEPP");

  RC1_bit = 1; // u smeru kazaljke na satu
  for (i=0;i<200;i++){//200 koraka
    RC0_bit = 1;
    Delay_ms(20);
    RC0_bit = 0;
    Delay_ms(20);
  }

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,txt8);
  //sacekaj sekund
  Delay_ms(1000);

  //vozi unazad
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"Vozi unazad");
  Lcd_Out(2,1,"BIPOLARNI STEPP");

  RC1_bit = 0; // suprotno smeru kazaljke na satu
  for (i=0;i<200;i++){//200 koraka
    RC0_bit = 1;
    Delay_ms(20);
    RC0_bit = 0;
    Delay_ms(20);
  }

  //////////////////////////////////////
  //  SERVO MOTOR - DIREKTNA KONTROLA //
  //////////////////////////////////////

  TRISC2_bit = 0; //izlaz
  RC2_bit = 0;

  //DUZINA PULSA ODREDJUJE POZICIJU SERVO MOTORA
  //STANDARD JE 1500us je "centar" 900us je "skroz levo", 2100us je "skroz desno"
  //MADA TO ZAVISI OD MOTORA DO MOTORA, OBICNO PISE U DOKUMENTACIJI MOTORA ALI
  //SE UVEK MOZE EXPERIMENTALNO UTVRDITI

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"SERVO - CENTAR");
  Lcd_Out(2,2,"DIREKTNO");

  for (i=0;i<50;i++){
     //posalji puls
     RC2_bit = 1;
     Delay_us(1500);
     RC2_bit = 0;
     //cekaj do sledeceg pulsa
     Delay_ms(25);
  }

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"SERVO - -90");
  Lcd_Out(2,2,"DIREKTNO");

    for (i=0;i<50;i++){
     //posalji puls
     RC2_bit = 1;
     Delay_us(900);
     RC2_bit = 0;
     //cekaj do sledeceg pulsa
     Delay_ms(25);
  }

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"SERVO - +90");
  Lcd_Out(2,2,"DIREKTNO");

    for (i=0;i<50;i++){
     //posalji puls
     RC2_bit = 1;
     Delay_us(2000);
     RC2_bit = 0;
     //cekaj do sledeceg pulsa
     Delay_ms(25);
  }

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"SERVO - -45");      //53 1200
  Lcd_Out(2,2,"DIREKTNO");

    for (i=0;i<50;i++){
     //posalji puls
     RC2_bit = 1;
     Delay_us(1250);
     RC2_bit = 0;
     //cekaj do sledeceg pulsa
     Delay_ms(25);
  }

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"SERVO - +45");               //36 1700
  Lcd_Out(2,2,"DIREKTNO");

    for (i=0;i<50;i++){
     //posalji puls
     RC2_bit = 1;
     Delay_us(1750);
     RC2_bit = 0;
     //cekaj do sledeceg pulsa
     Delay_ms(25);
  }

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"SERVO - CENTAR");
  Lcd_Out(2,2,"DIREKTNO");

  for (i=0;i<50;i++){
     //posalji puls
     RC2_bit = 1;
     Delay_us(1500);
     RC2_bit = 0;
     //cekaj do sledeceg pulsa
     Delay_ms(25);
  }

  //////////////////////////////////////
  //  SERVO MOTOR - PWM               //
  //  Ovaj uC je suvise brz tako da   //
  //  ne moze da nam da dovoljno spor //
  //  PWM da bi imali full range od   //
  //  min do max. minimalni PWM na    //
  //  8MHZ je 489Hz sto je prebrzo    //
  //  idealan pwm bi bio negde ~100Hz //
  //////////////////////////////////////

  TRISC2_bit = 0; //izlaz
  RC2_bit = 0;
  PWM1_Init(489); //Hz
  PWM1_Set_Duty(0);
  PWM1_Start();

  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,"SERVO - SETAJ");
  Lcd_Out(2,2,"PWM");
  for (i=0;i<200;i+=2){
    PWM1_Set_Duty(i);
    Delay_ms(100);
  }
  PWM1_Stop();

  //KRAJ
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,1,txt9);
  Lcd_Out(2,4,txt9);
  while(1){
    for(i=0; i<4; i++) {
      Lcd_Cmd(_LCD_SHIFT_RIGHT);
      Move_Delay();
    }
    for(i=0; i<4; i++) {
      Lcd_Cmd(_LCD_SHIFT_LEFT);
      Move_Delay();
    }
  }
}
Tags: , , , , ,

Uargh ..

Šta reći, počeo mac čudno da se ponaša, dangira glavi … prilično čudno za tako kvalitetan proizvod. Onda u jednom trenutku zaboda ja lepo stisnem power gumb i ugasim čudo. Iskuliram jedno pola čuke, nešto sam šiljio oko RapMan-a i upalim ga kad ono prc – upalis kmeka, on malo vrti neku trticu i ugasi se… ništa beeep, ništa “fali mi ovo i ono” samo se ugasi … i tako nekoliko puta … Safe mode – jok, single user mode, jok, probaj ovo, probaj ono, ni da bekne. Google druže pomaži, kaže google, butni sa instalacionog cd-a, poteraj disk utility i checkiraj disk. Ok, uradim ja to, kaze disk utitily – ja ne umem ovo da popravim – idi si krepaj….. šta reći osim google pomagaj … kaže google DiskWarrior … ok, nema demo !!! kosta 100E … nećeš ga majci ovo je Srbija, ja ne plaćam ništa što prvo ne probam, demonoid ne radi, radi mininova, ima 4.0, najnoviji 4.1 reko super .. aj sad da spečemo to pa da probamo … kad, šio mi ga Đura, skino se CDR fajl, moz ga narezes sa Linux’a al za malo, isto tako i sa windoza… sve zivo sam probao sto je čika google savetovao, i rename i ovo i ono, ništa … onda mi padne na pamet sledeća ideja:

1. instaliram osx na usb hard od 60G (sva sreća imam ovaj wd passport)
2. pokrenem diskwarrior sa tog novog sistema

Naravno tačka dva nije prošla iz prve ali sam dw kaže kako da klikneš i gde i šta da bi se startovao, odradim to i voila diskwarrior se startuje i kaze “oćeš da ti rebuildujem direktorijum na ovom disku” … pustim ja njega, drnda i čangrlja jedno 3-4h sa vrlo čudnim pauzama (podužim) i na kraju izbaci kako je spaso ovo i ono, nije mogao ovo i ono, disk ne valja i ne može da ga osposobi za rad ali ti daje mogućnost da vidis disk u read only modu kako bi spasao podatke … super, mreža radi, okačim se lepo na sambu na linuxu, iskopiram ceo user direktorijum (60G) prekrstim se i ugasim lap….

Treba sad zameniti hard … u powerbook pro je SATA 2.5″ disk … rasparčam ja lepo lap da proverim (više im ništa ne verujem) .. slike su na picassa-i … zahvalim se cika Jobs-u sto je batalio koncept sa lepljenjem (da stare G3 i G4 lapove moraš da greješ fenom da bi ih razlepio, nemaju šrafove, ovaj samo ima mnoooooooogo šrafova), spomenem mu familiju nekoliko puta za ceo koncept gde se hard nalazi, i na kraju svega oduševim se kako je odrađen poklopac. Oni koji znaju, pre jedno godinicu dana na ovaj lap je prosuta puna solja vruce nes kafe – dobro zasecerene. Samo sam ugasio lap i obriso ga vlaznom krpom, saceko da se osusi i nastavio da koristim, nikad mu nista nije falilo … sada sam imao priliku da vidim i zasto, kada prospes nešto po ovom lapu mnooooooooogo teško to može da prođe dalje od tastature….

Desk je imao najbrže najveci disk, WD Blue nešto 500G za neku siću preko 8000din. Čučno je u kmeka ko beba na nošu i evo ga sad posle ~20min sklapanja na njega se instalira novi sistem…

Zaključak – Time Machine radi EXTRA i stvarno je koristan…

Tags:
Back to top