Instalando o Amsn 0.98 com AntiAliase no Linux

Para instalar o Amsn 0.98 com o AntiAliase basta fazer o download do pacote .DEB caso você uma distribuição baseada no debian ou .RMP caso utilize alguma distribuição baseada nesse tipo de pacote.

Para efetua a instalação .deb utilize o seguinte comando:

dpkg -i aMSN-0.98SVN-10-03-2008-tcl-tk8.6_libsnack-2.noarch.deb


Para efetua a instalação .rpm utilize o seguinte comando:

rpm -i --nodeps aMSN-0.98SVN-10-03-2008-tcl-tk8.6_libsnack-2.noarch.rpm


Com a algumas mudanças feitas pela MICROSOFT nos servidores do MSN deve ser necessário efetuar os seguintes comandos para conectar-se:

$ cd /usr/local/amsn/share/amsn
$ sudo mv protocol.tcl protocol.tcl.bkp
$ sudo wget http://www.e_portifolio.kit.net/download/protocol.tcl


fonte: http://ubuntuforum-br.org/index.php?topic=33912.0
fonte: http://www.vivaolinux.com.br/topico/aMSN/conexao-mal-sucedida-Amsn

Criando um Live CD/DVD da Instalação do [K]ubuntu

Depois que adquirir meu novo notebook um HP Pavilion dv5-1125br Entertainment Notebook PC, vi a necessidade de após a instalação criar um cd de restauração, pois depois de configurar a placa de rede wifi, os controles do notebook, instalar as maquinas virtuais e configurar o ambiente de desenvolvimento, não ia ter o saco pra configurar tudo de novo, dai que usei o Remastersys.

Informações de como utilizar o remastersys pode ser encontrado AQUI.

Gravando conversas do Skype

Um dia tive a necessidade de gravar as minhas conversas do skype, e em minhas googladas encontrei o Skype Call Recorder aplicativo responsável por esse feito.

No Viva o Linux há um ótimo tutorial informando como proceder com a instalação.

OBS: Só funciona para linux.

Elevador Microcontrolado

Nesse post vou mostrar os passos efetuados no desenvolvimento do elevador microcontrolado, que foi tema de um trabalho da faculdade. O objetivo do trabalho era entender o funcionamento de um microcontrolador. Em cima desse objetivo e muitas discussões optamos (eu e minha equipe) em fazer um elevador comercial.



Obs: Todo o desenvolvimento foi efetuado em ambiente Windows :(



Ferramentas Utilizadas:  



Software:



Compilador: CCS PCWH v4.074



Simulador: Proteus Asis 7



Gravador: PICkit 2 V2.55.01



PCB Design : Proteus Ares 7  



Hardware



Gravador: MicroICD ZIF da Microgenios



Microcontrolador PIC 16F877A



LCD de 16x2



Motor de passo



Display de 7 Segmentos Ânodo Comum




    O desenvolvimento inicio-se com a resolução e entendimento do problema, onde o procedimento a ser tomado pelo elevador era:

  • 1 - Conter 3 andares

  • 2 - A prioridade de chamada é dada aos usuários internos do elevador

  • 3 - A chamada externa é guardada em memoria e atendida conforme o andar

  • 4 - A prioridade de andar e feita por proximidade

  • 5 - O controle de andar sendo efetuado pelo controle de passo do motor

  • 6 - Um LCD 16x2 mostrando a informação de que andar está e pra onde vai

  • 7 - Temporizador de 30 segundos, para verificação de tempo de uso

  • 8 - Display de informação de andar

  • 9 - Sistema de desligamento


  • Depois de montado o layout de resolução foi efetuado o algoritmo em C.



    [sourcecode language="css"]
    //Elevador.h

    #include
    #device adc=8

    #FUSES NOWDT //No Watch Dog Timer
    #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
    #FUSES NOPUT //No Power Up Timer
    #FUSES NOPROTECT //Code not protected from reading
    #FUSES NODEBUG //No Debug mode for ICD
    #FUSES NOBROWNOUT //No brownout reset
    #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
    #FUSES NOCPD //No EE protection
    #FUSES NOWRT //Program memory not write protected

    #use delay(clock=4000000)

    </pre>
    <pre class="brush:c">//Elevador.c

    //ELEVADOR MICROCONTROLADO
    //Trabalho de SDM II - Engenharia de Controle e Automação e Telecomunicação
    //Equipe: Hamilton Sena
    // André Fazione
    // Leandro Rossi
    // Robson Molgaro

    #include "Elevador.h"
    #include

    #define MAX_PASSO 3 // 0-3 (Total de 4 passos)

    //Variaveis Globais
    char Passos[4]={8,4,2,1}; //Full Step 1
    int index=0;//indice para matriz de passos
    int TempoPasso=75;//Tempo de cada passo
    int viAndar = 0;
    int vaPinosPassado[7];
    static int viContador;
    int viSegundos;
    int viPino5;
    int viPino4;
    int viPino3;

    #int_timer0
    //Essa função conta até 125 formando 1 segundo
    void ControleTimer(){

    //Se tiver no terreo ou 1 andar e for chamado no 2 andar
    if(input(PIN_A5) == 1){

    viPino5 = 1;
    output_high(pin_c7);//2 Andar

    }

    //Se tiver no terreo ou 2 andar e for chamado no 1 andar

    if(input(PIN_A4) == 1){

    viPino4 = 1;
    output_high(pin_c6);//1 Andar

    }

    //Se tiver no 1 andar ou 2 andar e for chamado no terreo
    if(input(PIN_A3) == 1){

    viPino3 = 1;
    output_high(pin_c5);//Terreo

    }

    set_timer0(131-get_timer0());
    viContador++;

    }

    //Função que controla o display de 7 segmentos
    int ControlaDisplay(int vaPinos[]){

    output_bit(pin_c0,vaPinos[0]);
    output_bit(pin_c1,vaPinos[1]);
    output_bit(pin_c2,vaPinos[2]);
    output_bit(pin_c3,vaPinos[3]);
    output_bit(pin_e2,vaPinos[4]);
    output_bit(pin_e1,vaPinos[5]);
    output_bit(pin_e0,vaPinos[6]);

    return 0;
    }

    //Função Responsavel de girar o motor em sentido horario ou anti-horario
    int MovimentaMotor(int nibble, int viSentido){

    if (viSentido == 0){

    //Testa um bit determinado da variavel passada, onde nibble é a
    //variavel passada e o outro algarismo é o bit testado
    output_bit(pin_b3,bit_test(nibble,0));
    output_bit(pin_b2,bit_test(nibble,1));
    output_bit(pin_b1,bit_test(nibble,2));
    output_bit(pin_b0,bit_test(nibble,3));
    return 0;

    }else{

    output_bit(pin_b3,bit_test(nibble,3));
    output_bit(pin_b2,bit_test(nibble,2));
    output_bit(pin_b1,bit_test(nibble,1));
    output_bit(pin_b0,bit_test(nibble,0));
    return 0;
    }

    }//FIM FUNÇÃO MOVIMENTA MOTOR

    //Função que faz Girar o motor e modificar o display de 7 segmentos quando passa no 1 andar
    int MovimentaElevador(int viQtdPassos, int viSentidoAndar, int viAndarSentido, int viMostraPasso ){

    int viControle = 0;
    while(viControle = MAX_PASSO){//Controla os passos (indice da matriz)
    index=0;
    }else{
    index++;//incrementa para proximo passo
    viControle++; //Incrementa os passos
    }
    }//FIM WHILE

    return 0;

    }//FIM MOVIMENTA ELEVADOR

    int vFuncAndar_T(){

    output_low(pin_c5);//Não pode ser feito chamada no terreo
    viPino3 = 0;

    lcd_putc("\f -&gt; Terreo");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    vaPinosPassado[0] = 1;
    vaPinosPassado[1] = 1;
    vaPinosPassado[2] = 1;
    vaPinosPassado[3] = 1;
    vaPinosPassado[4] = 1;
    vaPinosPassado[5] = 1;
    vaPinosPassado[6] = 0;
    ControlaDisplay(vaPinosPassado);

    if (viPino4 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    delay_ms(2000);
    //move motor para andar 1
    MovimentaElevador(82,0,0,0);
    viAndar = 1;
    viPino4 = 0;
    output_low(pin_c6);
    return 0;

    }

    if (viPino5 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Comercial");
    delay_ms(2000);
    //move motor para andar Comercial
    //Quando chamar no Comercial passa o valor 1 viAndarSentido e o valor 82 para viQtdPassos
    MovimentaElevador(168,0,1,82);
    viAndar = 2;
    viPino5 = 0;
    output_low(pin_c7);
    return 0;

    }

    while(viAndar == 0){

    output_low(pin_c5);//Não pode ser feito chamada no terreo
    viPino3 = 0;

    if (viPino4 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    delay_ms(2000);
    //move motor para andar 1
    MovimentaElevador(82,0,0,0);
    viAndar = 1;
    viPino4 = 0;
    output_low(pin_c6);
    return 0;

    }

    if (viPino5 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Comercial");
    delay_ms(2000);
    //move motor para andar Comercial
    MovimentaElevador(168,0,1,82);
    viAndar = 2;
    viPino5 = 0;
    output_low(pin_c7);
    return 0;

    }

    //Se desligar o sistema retorna para o MAIN()
    if(input(PIN_B4) == 0){

    return 0;

    }

    if ((input(PIN_A1) == 1) &amp; (input(PIN_A0) == 0)){

    lcd_putc("\f Subindo para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    //move motor para andar 1
    MovimentaElevador(82,0,0,0);
    viAndar = 1;
    return 0;

    }

    if ((input(PIN_A1) == 0) &amp; (input(PIN_A0) == 1)){

    lcd_putc("\f Subindo para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Comercial");
    //move motor para andar 2
    MovimentaElevador(168,0,1,82);
    viAndar = 2;
    return 0;

    }

    if ((input(PIN_A1) == 1) &amp; (input(PIN_A0) == 1)){

    lcd_putc("\f Subindo para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    //move o motor para o andar 1
    MovimentaElevador(82,0,0,0);
    viAndar = 1;
    return 0;
    }

    if (input(PIN_A4) == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    //move o motor para o andar 1
    MovimentaElevador(82,0,0,0);
    viAndar = 1;
    viPino4 = 0;
    return 0;

    }

    if (input(PIN_A5) == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Comercial");
    //move o motor para o andar 2
    MovimentaElevador(168,0,1,82);
    viAndar = 2;
    viPino5 = 0;
    return 0;

    }

    }//FIM WHILE

    }//FIM FUNÇÃO vFuncAndar_T

    int vFuncAndar_1(){

    output_low(pin_c6);//Não pode ser feito chamada no 1 andar
    viPino4 = 0;

    viSegundos = 0;
    lcd_putc("\f -&gt; 1 Andar");
    lcd_gotoxy(1,2);
    printf(lcd_putc, " R.H.");
    vaPinosPassado[0] = 0;
    vaPinosPassado[1] = 1;
    vaPinosPassado[2] = 1;
    vaPinosPassado[3] = 0;
    vaPinosPassado[4] = 0;
    vaPinosPassado[5] = 0;
    vaPinosPassado[6] = 0;
    ControlaDisplay(vaPinosPassado);

    if (viPino3 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    delay_ms(2000);
    //move motor para o terreo
    MovimentaElevador(82,1,0,0);
    viAndar = 0;
    viPino3 = 0;
    output_low(pin_c5);
    return 0;

    }

    if (viPino5 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Comercial");
    delay_ms(2000);
    //move motor para andar terreo
    MovimentaElevador(85,0,0,0);
    viAndar = 2;
    viPino5 = 0;
    output_low(pin_c7);
    return 0;

    }

    while(viAndar == 1){

    output_low(pin_c6);//Não pode ser feito chamada no 1 andar
    viPino4 = 0;

    if (viPino3 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    delay_ms(2000);
    //move motor para o terreo
    MovimentaElevador(82,1,0,0);
    viAndar = 0;
    viPino3 = 0;
    output_low(pin_c5);
    return 0;

    }

    if (viPino5 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Comercial");
    delay_ms(2000);
    //move motor para andar terreo
    MovimentaElevador(85,0,0,0);
    viAndar = 2;
    viPino5 = 0;
    output_low(pin_c7);
    return 0;

    }

    //Mostra contador de segundos
    if(viContador == 125){
    viSegundos++;
    viContador = 0;
    lcd_gotoxy(1,2);
    printf(lcd_putc, " R.H. -&gt; %i",viSegundos);
    }

    //Se desligar o sistema retorna para o MAIN()
    if(input(PIN_B4) == 0){

    return 0;

    }

    if ((input(PIN_A2) == 1) &amp; (input(PIN_A0) == 0)){

    lcd_putc("\f Descendo para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    //move motor para andar Terreo
    MovimentaElevador(82,1,0,0);
    viAndar = 0;
    return 0;

    }

    if ((input(PIN_A2) == 0) &amp; (input(PIN_A0) == 1)){

    lcd_putc("\f Subindo para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Comercial");
    //move motor para andar 2
    MovimentaElevador(85,0,0,0);
    viAndar = 2;
    return 0;

    }

    if ((input(PIN_A2) == 1) &amp; (input(PIN_A0) == 1)){

    lcd_putc("\f Descendo para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    //move o motor para o andar Terreo
    MovimentaElevador(82,1,0,0);
    viAndar = 0;
    return 0;
    }

    if (input(PIN_A3) == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    //move o motor para o andar terreo
    MovimentaElevador(82,1,0,0);
    viAndar = 0;
    viPino3 = 0;
    return 0;

    }

    if (input(PIN_A5) == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Comercial");
    //move o motor para o andar 2
    MovimentaElevador(85,0,0,0);
    viAndar = 2;
    viPino5 = 0;
    return 0;

    }

    //viTempoControle = viTempoControle + 1;

    if(viSegundos == 30){

    lcd_putc("\f Descendo...");
    lcd_gotoxy(1,2);
    lcd_putc("Tempo Esgotado");
    MovimentaElevador(82,1,0,0);
    viAndar = 0;
    return 0;
    }

    }//FIM WHILE

    }//FIM FUNÇÃO vFuncAndar_1

    int vFuncAndar_2(){

    output_low(pin_c7);//Não pode ser feito chamada no 2 andar
    viPino5 = 0;

    viSegundos = 0;
    lcd_putc("\f -&gt; 2 Andar");
    lcd_gotoxy(1,2);
    printf(lcd_putc, " Comercial");
    vaPinosPassado[0] = 1;
    vaPinosPassado[1] = 1;
    vaPinosPassado[2] = 0;
    vaPinosPassado[3] = 1;
    vaPinosPassado[4] = 1;
    vaPinosPassado[5] = 0;
    vaPinosPassado[6] = 1;
    ControlaDisplay(vaPinosPassado);

    if (viPino4 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    delay_ms(2000);
    //move motor para andar 1
    MovimentaElevador(83,1,0,0);
    viAndar = 1;
    viPino4 = 0;
    output_low(pin_c6);
    return 0;

    }

    if (viPino3 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    delay_ms(2000);
    //move motor para andar terreo
    //Quando chamar no Terreo passa o valor 2 viAndarSentido e o valor 83 para viQtdPassos
    MovimentaElevador(166,1,2,83);
    viAndar = 0;
    viPino3 = 0;
    output_low(pin_c5);
    return 0;

    }

    while(viAndar == 2){

    output_low(pin_c7);//Não pode ser feito chamada no 2 andar
    viPino5 = 0;

    if (viPino4 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    delay_ms(2000);
    //move motor para andar 1
    MovimentaElevador(83,1,0,0);
    viAndar = 1;
    viPino4 = 0;
    output_low(pin_c6);
    return 0;

    }

    if (viPino3 == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    delay_ms(2000);
    //move motor para andar terreo
    MovimentaElevador(166,1,2,83);
    viAndar = 0;
    viPino3 = 0;
    output_low(pin_c5);
    return 0;

    }

    //Mostra contador de segundos
    if(viContador == 125){
    viSegundos++;
    viContador = 0;
    lcd_gotoxy(1,2);
    printf(lcd_putc, " Comercial -&gt; %i",viSegundos);
    }

    //Se desligar o sistema retorna para o MAIN()
    if(input(PIN_B4) == 0){

    return 0;

    }

    if ((input(PIN_A1) == 1) &amp; (input(PIN_A2) == 0)){

    lcd_putc("\f Descendo para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    //move motor para andar 1
    MovimentaElevador(83,1,0,0);
    viAndar = 1;
    return 0;

    }

    if ((input(PIN_A1) == 0) &amp; (input(PIN_A2) == 1)){

    lcd_putc("\f Descendo para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    //move motor para andar terreo
    MovimentaElevador(166,1,2,83);
    viAndar = 0;
    return 0;

    }

    if ((input(PIN_A1) == 1) &amp; (input(PIN_A2) == 1)){

    lcd_putc("\f Descendo para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    //move o motor para o andar 1
    MovimentaElevador(84,1,0,0);
    viAndar = 1;
    return 0;
    }

    if (input(PIN_A4) == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" R.H.");
    //move o motor para o andar 1
    MovimentaElevador(84,1,0,0);
    viAndar = 1;
    viPino4 = 0;
    return 0;

    }

    if (input(PIN_A3) == 1){

    lcd_putc("\f Chamada para...");
    lcd_gotoxy(1,2);
    lcd_putc(" Engenharia");
    //move o motor para o andar terreo
    MovimentaElevador(167,1,2,83);
    viAndar = 0;
    viPino3 = 0;
    return 0;

    }

    //viTempoControle = viTempoControle + 1;

    if(viSegundos == 30){

    lcd_putc("\f Descendo...");
    lcd_gotoxy(1,2);
    lcd_putc("Tempo Esgotado");
    MovimentaElevador(167,1,2,83);
    viAndar = 0;
    return 0;
    }

    }//FIM WHILE

    }//FIM FUNÇÃO vFuncAndar_2

    //Programa Principal
    void main(){

    //------- Codigo gerado pelo Compilador
    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    setup_psp(PSP_DISABLED);
    setup_spi(SPI_SS_DISABLED);
    //Configura timer0 para clock interno e prescaler dividido por 64
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
    set_timer0(131);//inicia o timer 0 em 131
    enable_interrupts(global | int_timer0);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC_NC_NC);
    setup_vref(FALSE);
    //--------------------------------------

    //Definindo as porta do MCU
    set_tris_b(0b00010000);//Coloca o pino RB4 como entrada e os outros pino RB como saida
    set_tris_a(0b11111111);//Coloca todos os pino RA como entrada
    set_tris_e(0b00000000);//Coloca todos os pino RE como Saida
    set_tris_c(0b00000000);//Coloca todos os pinos RC como saida

    //Definido estado dos pinos
    output_b(0b00000000);//todos os pinos de saida da porta b desligados
    //output_e(0b00000000);
    //output_c(0b00000000);
    //output_low(pin_b5);//Deixa desligado o Backlite do LCD

    //Iniciliaza o LCD
    lcd_init();
    vaPinosPassado[0] = 0;
    vaPinosPassado[1] = 0;
    vaPinosPassado[2] = 0;
    vaPinosPassado[3] = 0;
    vaPinosPassado[4] = 0;
    vaPinosPassado[5] = 0;
    vaPinosPassado[6] = 0;
    ControlaDisplay(vaPinosPassado);

    //Loop infinito do Programa
    while(true){

    if (input(PIN_B4) == 1){//Sistema ligado

    //output_high(PIN_B5);//Liga o BackLith do LCD

    if (viAndar == 0){

    vFuncAndar_T();

    }

    if (viAndar == 1){

    vFuncAndar_1();

    }

    if (viAndar == 2){

    vFuncAndar_2();

    }

    }else{
    //Caso o pino de ativação do sistema estive desligado inicializa/desliga o sistema

    vaPinosPassado[0] = 0;
    vaPinosPassado[1] = 0;
    vaPinosPassado[2] = 0;
    vaPinosPassado[3] = 0;
    vaPinosPassado[4] = 0;
    vaPinosPassado[5] = 0;
    vaPinosPassado[6] = 0;
    ControlaDisplay(vaPinosPassado);

    switch(viAndar){

    case 0:
    lcd_putc("\f ");//Apaga se tiver alguma coisa escrita no LCD
    output_low(pin_c7);
    output_low(pin_c6);
    output_low(pin_c5);
    viPino3 = 0;
    viPino4 = 0;
    viPino5 = 0;
    break;

    case 1:
    lcd_putc("\f Desligando...");
    MovimentaElevador(82,1,0,0);
    lcd_putc("\f");//Apaga se tiver alguma coisa escrita no LCD
    viAndar = 0;
    output_low(pin_c7);
    output_low(pin_c6);
    output_low(pin_c5);
    viPino3 = 0;
    viPino4 = 0;
    viPino5 = 0;
    break;

    case 2:
    lcd_putc("\f Desligando...");
    MovimentaElevador(167,1,0,0);
    lcd_putc("\f");//Apaga se tiver alguma coisa escrita no LCD
    viAndar = 0;
    output_low(pin_c7);
    output_low(pin_c6);
    output_low(pin_c5);
    viPino3 = 0;
    viPino4 = 0;
    viPino5 = 0;
    break;

    }//SWITCH

    }//FIM ELSE PIN_B4

    }//FIM WHILE PRINCIPAL

    }//FIM Função MAIN

    [/sourcecode]



     



    Abaixo segue o layout do simulador, Design Elevador - SDM II



     



    Abaixo o layout do circuito impresso, Placa Circuito Impresso do elevador O final da historia foi a aprovação direta para o próximo período e mais conhecimento. Abaixo deixo os arquivos a serem compilados e testados. Acesso aos arquivos



    Abaixo segue um video com o funcionamento do elevador http://www.youtube.com/watch?v=n49V2sRLX9k

    Primeiro projeto com microcontrolador

    O pessoal deve ter percebido que estou meio sumido, tudo culpa da minha rotina louca trabalho-faculdade-trabalho-faculdade-trabalho-faculdade-faculdade-faculdade.....affff, principalmente a faculdade ("porque escolhi engenharia? ahuahauhauahuah, porque ADORO :)"), mas tudo bem um dia isso passa.
    Estou com muitas novidades para postar aqui no blog, e uma delas é a minha iniciação no mundo dos microcontroladores, e só pra não deixar passar em branco meu primeiro projeto, fiz um vídeo mostrando o funcionamento do motor de passo de uma impressora Mecaf, girando no sentido horário e anti-horário, com sinalização dos bits de saida das portas RDB com leds.
    O mais breve possível disponibilizarei um tutorial informando como fiz, o que utilizei e minhas dificuldades, também colocarei algumas informações sobre sistemas digitais.
    Até a próxima...

    http://www.youtube.com/watch?v=vjyRC8xzqeM

    Remasterizando um LiveCd do [K]ubuntu com o UCK (Ubuntu Customization Kit)

    Hoje vou mostrar com remasterizar um livecd do ubuntu com o UCK. Antes de conhecer o UCK eu utilizava o Reconstructor, mas como sou curioso por novas ferramentas...
    Deixando de bla bla bla, vamos ao que interessa, como o modo de geração da ISO via linha de comando é bastante simples, iremos utiliza-lo, isso não quer dizer que o UCK não tenha um modo gráfico (podendo ser acessado via "uck-gui --wait-before-exit" *sem as aspas).

    Antes de mais nada vamos instalar o UCK:


    $ wget -c http://sourceforge.net/project/downloading.php?group_id=169959&use_mirror=ufpr&filename=uck_2.0.3_all.deb&46020298

    $ sudo dpkg -i uck_2.0.3_all.deb && apt-get -f install


    Depois de instalado vamos a brincadeira:

    Por padrão a saída dos comandos serão salvas em /home/usuario/tmp

    Para descompactar a ISO

    $ sudo uck-remaster-unpack-iso distribuicao.iso


    Mounting ISO image...
    Unpacking ISO image...
    Unmounting ISO image...

    Montando o arquivo casper/filesystem.squashfs

    $ sudo uck-remaster-unpack-rootfs


    Removing remastering root dir...
    rm: cannot remove directory `/home/usuario/tmp/remaster-root/tmp/.X11-unix': Device or resource busy
    Mounting SquashFS image...
    Unpacking SquashFS image...
    Unmounting SquashFS image...


    Agora vamos acessar o sistema da ISO para efetuar algumas modificações

    $ sudo uck-remaster-chroot-rootfs


    Ao término da configuração do sistema, é normal que surjam muitos pacotes "órfãos", bibliotecas e arquivos que não são mais usados por nenhum programa, servem apenas para ocupar espaço. Você pode localizar estas sobras facilmente usando o comando:

    # deborphan


    Ele retorna uma lista dos pacotes orfãos que você pode remover com segurança através do apt-get. Isso vai quase sempre liberar alguns megas.
    Caso você tenha usado o apt-get update e o apt-get install você pode liberar mais um bom espaço limpando o cache local de pacotes:

    # apt-get clean


    Delete também o histórico de comandos do root, este arquivo armazena os últimos comandos usados. Não existe necessidade de divulgá-los ao mundo. Aproveite para eliminar também o diretório .rr_moved:


    # rm -f /home/root/.bash_history
    # rm -rf /.rr_moved

    Depois de efetuar todas as suas configurações pressione CTRL+D para fechar o chroot.

    O próximo passo é preparar o ambiente para geração da ISO

    $ sudo uck-remaster-pack-rootfs 


    Updating files lists...
    Packing SquashFS image...
    Parallel mksquashfs: Using 1 processor
    Creating little endian 3.0 filesystem on /home/usuario/tmp/remaster-iso/casper/filesystem.squashfs, block size 65536.
    [==========================================================================================================================] 73596/73596 100%
    Exportable Little endian filesystem, data block size 65536, compressed data, compressed metadata, compressed fragments, duplicates are removed
    Filesystem size 419377.71 Kbytes (409.55 Mbytes)
    35.60% of uncompressed filesystem size (1178153.99 Kbytes)
    Inode table size 755770 bytes (738.06 Kbytes)
    30.92% of uncompressed inode table size (2444062 bytes)
    Directory table size 683576 bytes (667.55 Kbytes)
    46.89% of uncompressed directory table size (1457786 bytes)
    Number of duplicate files found 5868
    Number of inodes 74066
    Number of files 62250
    Number of fragments 6536
    Number of symbolic links 5373
    Number of device nodes 399
    Number of fifo nodes 3
    Number of socket nodes 1
    Number of directories 6040
    Number of uids 13
    root (0)
    messagebus (105)
    unknown (3001)
    haldaemon (107)
    hamilton (1000)
    daemon (1)
    dhcp (100)
    www-data (33)
    man (6)
    avahi (106)
    news (9)
    unknown (108)
    hplip (103)
    Number of gids 31
    video (44)
    audio (29)
    tty (5)
    kmem (15)
    disk (6)
    lp (7)
    dip (30)
    dialout (20)
    cdrom (24)
    adm (4)
    daemon (1)
    uucp (10)
    messagebus (113)
    avahi-autoipd (112)
    bin (2)
    dhcp (101)
    shadow (42)
    utmp (43)
    scanner (104)
    fuse (106)
    plugdev (46)
    admin (109)
    nvram (105)
    www-data (33)
    ssl-cert (107)
    staff (50)
    src (40)
    root (0)
    nogroup (65534)
    ssh (111)
    mail (8)

    E por fim, o comando para gerar a ISO em /home/usuario/tmp/remaster-new-files/Livecd.iso

    $ sudo uck-remaster-pack-iso


    Preparing directory for new files
    Updating md5sums...
    ~/tmp/remaster-iso ~
    ~
    Packing ISO image...
    ISO description set to: Remastered Ubuntu LiveCD
    Unknown file type (unallocated) /home/usuario/tmp/remaster-iso/.. - ignoring and continuing.
    Size of boot image is 4 sectors -> No emulation
    2.20% done, estimate finish Sat Sep 13 21:40:24 2008
    4.40% done, estimate finish Sat Sep 13 21:40:46 2008
    6.61% done, estimate finish Sat Sep 13 21:40:39 2008
    8.81% done, estimate finish Sat Sep 13 21:40:35 2008
    11.01% done, estimate finish Sat Sep 13 21:40:33 2008
    13.21% done, estimate finish Sat Sep 13 21:40:31 2008
    15.41% done, estimate finish Sat Sep 13 21:40:30 2008
    17.61% done, estimate finish Sat Sep 13 21:40:29 2008
    19.82% done, estimate finish Sat Sep 13 21:40:34 2008
    22.01% done, estimate finish Sat Sep 13 21:40:42 2008
    24.22% done, estimate finish Sat Sep 13 21:40:44 2008
    26.42% done, estimate finish Sat Sep 13 21:40:42 2008
    28.62% done, estimate finish Sat Sep 13 21:40:44 2008
    30.82% done, estimate finish Sat Sep 13 21:40:46 2008
    33.03% done, estimate finish Sat Sep 13 21:40:45 2008
    35.22% done, estimate finish Sat Sep 13 21:40:46 2008
    37.43% done, estimate finish Sat Sep 13 21:40:48 2008
    39.63% done, estimate finish Sat Sep 13 21:40:46 2008
    41.83% done, estimate finish Sat Sep 13 21:40:47 2008
    44.03% done, estimate finish Sat Sep 13 21:40:48 2008
    46.23% done, estimate finish Sat Sep 13 21:40:49 2008
    48.43% done, estimate finish Sat Sep 13 21:40:48 2008
    50.64% done, estimate finish Sat Sep 13 21:40:49 2008
    52.83% done, estimate finish Sat Sep 13 21:40:52 2008
    55.04% done, estimate finish Sat Sep 13 21:40:53 2008
    57.24% done, estimate finish Sat Sep 13 21:40:53 2008
    59.44% done, estimate finish Sat Sep 13 21:40:54 2008
    61.64% done, estimate finish Sat Sep 13 21:40:53 2008
    63.85% done, estimate finish Sat Sep 13 21:40:53 2008
    66.04% done, estimate finish Sat Sep 13 21:40:54 2008
    68.25% done, estimate finish Sat Sep 13 21:40:53 2008
    70.45% done, estimate finish Sat Sep 13 21:40:53 2008
    72.65% done, estimate finish Sat Sep 13 21:40:54 2008
    74.85% done, estimate finish Sat Sep 13 21:40:54 2008
    77.05% done, estimate finish Sat Sep 13 21:40:53 2008
    79.25% done, estimate finish Sat Sep 13 21:40:54 2008
    81.46% done, estimate finish Sat Sep 13 21:40:54 2008
    83.66% done, estimate finish Sat Sep 13 21:40:56 2008
    85.86% done, estimate finish Sat Sep 13 21:40:56 2008
    88.06% done, estimate finish Sat Sep 13 21:40:56 2008
    90.26% done, estimate finish Sat Sep 13 21:40:56 2008
    92.46% done, estimate finish Sat Sep 13 21:40:56 2008
    94.67% done, estimate finish Sat Sep 13 21:40:56 2008
    96.87% done, estimate finish Sat Sep 13 21:40:58 2008
    99.07% done, estimate finish Sat Sep 13 21:40:57 2008
    Total translation table size: 2048
    Total rockridge attributes bytes: 37962
    Total directory bytes: 141436
    Path table size(bytes): 908
    Max brk space used 42000
    227123 extents written (443 MB)

    Pronto a ISO está criada.
    Qualquer duvida e correções mande um comentario, até a proxima.

    Criando um Pen-Drive de Boot com o Unetbootin

    Uma forma de criar um pendriver de boot com muita facilidade, tanto no linux como no windows é utilizadando o UNETBOOTIN, o sistema é bastante intuitivo, por isso não vou explicar aqui o seu funcionamento mas fica ai a dica.