Open top menu
segunda-feira, 29 de abril de 2013
no image




Pessoal, depois de muito tempo, vamos voltar com um post de montagem de uma impressora 3D. Após horas e horas de muita pesquisa e indecisão, decidi montar uma  RepRap Prusa V2 http://www.reprap.org/wiki/Prusa, acredito que ela seja a mais indicada para um iniciante no mundo das impressoras 3D.

A montagem será apresentada em diversas postagens com a proposta de apresentar as escolhas dos componentes e dificuldades da montagem. A série de postagens não é um guia de referência, tutorial ou passo a passo de como montar uma impressora 3D, apenas vou aprensentar minhas escolhas, locais de compras, gastos, dificuldades e espero que no final mostre como ficou minha impressora montada e imprimindo peças em uma boa qualidade.






Podemos adquirir de 3 formas:

  • Montada e funcionando.
  • Kit completo com peças para montagem.
  • Comprar peça a peça do kit, vitaminas, ferragens e eletrônica.


Uma impressora RepRap Prusa montada e funcionando está custando em torno de R$ 3.800,00 o kit de peças completo por R$ 2.300,00 e comprando as peças individualmente em torno de R$ 1.200,00.

Na minha opinão, a estrutura mecânica e eletrônica da RepRap não é simples, requer ajustes e trimagens, sendo necessário que se conheça todo o processo da montagem, então descarto a compra de uma RepRap montada, apenas compraria uma impressora 3D montada se fosse um modelo fabricado comercialmente, com garantia, suporte e manutenção permanente.

Entre comprar o kit completo com peças para montagem em alguma loja virtual ou peça a peça depende de sua situação financeira e o tempo que você deseja que ela esteja pronta, como decidi comprar o kit individualmente vou gastar alguns meses para comprar todas as peças e terminar a impressora.

De acordo com a necessidade durante a construção, vou postando as alterações do kit e no final vou montar um tópico com toda a relação de peças compradas e o custo de cada uma delas.





Read more
quinta-feira, 25 de abril de 2013
Controle de acesso com Arduino + RFID + Ethernet

Hoje vou apresentar o hardware de um projeto de controle de acesso de colaboradores baseado em Arduino, RFID e Ethernet, futuramente vou postar uma versão da WEBAPI e site de gerenciamento dos acessos.

Para liberação de acesso o usuário aproxima o cartão RFID, o hardware realiza a leitura do número do cartão e acessa a WEBAPI de validação, se o cartão for válido, retorna o status de liberação com o nome do usuário cadastrado no sistema.

Vamos ver um video e fotos do projeto:


Protótipo do equipamento


Detalhe das conexões


Cada local de acesso é cadastrado com um código e as coordenadas de localização, possibilitando em tempo real acompanhar em um mapa todas as entradas e saídas dos colaboradores nos locais cadastrados.


API de acesso 
Request:

http://SERVIDOR/api/acesso/CODIGOCLIENTE/CODIGOEQUIPAMENTO/NUMEROCARTAORFID


SERVIDOR: IP ou DNS do servidor com WEBAPI publicada.
CODIGOCLIENTE: Codigo fixo do cliente, serve para agrupar os locais e usuários.
CODIGOEQUIPAMENTO: Código de identificação único do hardware, atráves dele é cadastrada as coordenadas para identificação do local do acesso.
NUMEROCARTAORFID: Número do cartão RFID.


Response:
<XML>|STATUS NOMEUSUARIO|</XML>
|: Caracter que identifica o início do retorno de validação do acesso
STATUS: Status da validação do acesso
NOMEUSUARIO: Nome do Usuário
|:Caracter que identifica o término do retorno de validação do acesso


Exemplo do acesso
O que é RFID?
Identificação por radiofrequência ou RFID (do inglês "Radio-Frequency IDentification" ) é um método de identificação automática através de sinais de rádio, recuperando e armazenando dados remotamente através de dispositivos denominados etiquetas RFID.

Uma etiqueta ou tag RFID é um transpondedor, pequeno objeto que pode ser colocado em uma pessoa, animal, equipamento, embalagem ou produto, dentre outros. Contém chips de silício e antenas que lhe permite responder aos sinais de rádio enviados por uma base transmissora. Além das etiquetas passivas, que respondem ao sinal enviado pela base transmissora, existem ainda as etiquetas semi-passivas e as ativas, dotadas de bateria, que lhes permite enviar o próprio sinal. São bem mais caras que do que as etiquetas passivas.
RFID: utiliza transponders ( os quais podem ser apenas lidos ou lidos e escritos) nos produtos, como uma alternativa aos códigos de barras, de modo a permitir a identificação do produto de alguma distância do scanner ou independente, fora de posicionamento. Tecnologia que viabiliza a comunicação de dados através de etiquetas com chips ou transponders que transmitem a informação a partir da passagem por um campo de indução. (ex: muito usado em pedágio "sem parar").

by Wikipedia


Conexões do projeto:

Lista de Componentes:
  • Arduino Mega 2560
  • Arduino Ethernet Shield
  • Arduino Rele Shield *
  • Regulador de tensão LM7805.
  • Leitor RFID ID-12 Innovations
  • Cartões RFid
  • Fonte chaveada 12V x 3A
  • LCD 40 Colunas x 4 Linhas (pode ser usado LCD com 2 linhas)
  • Buzzer
  • Rabicho de alimentação para fonte
  • Fios, barras de terminais e termoretráteis para conexão
* A montagem do rele shield foi apresentada no post Construindo um Relé Shield






Pode ser substuido por Arduino 5V Relay module





Código fonte do Arduino:
/*

Sergio de Miranda e Castro Mokshin
26/04/2013

Todos os direitos reservados

*/

#include 
#include 
#include 

#define PIN_SAIDA_BUZZ 49

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
// assign an IP address for the controller:
byte ip[] = { 
  192,169,1,20 };
byte gateway[] = {
  192,168,1,1}; 
byte subnet[] = { 
  255, 255, 255, 0 };

byte server[] = {  74, 86, 188 ,173 }; 

char serverName[] = "dns.servidor.api"; //trocar pelo DNS API Web
EthernetClient client;

char tagRFID[10];
boolean lastConnected = false;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int rele1 = 22;
char validacaoTag;
char nomeTag[20];
int indexretornoServer;
boolean inicioretornoServer;

int KEY1 = 26;
int KEY2 = 28;
int KEY3 = 30;
int KEY4 = 32;
int localKEY1 = 0;
int localKEY2 = 0;
int localKEY3 = 0;
int localKEY4 = 0;


void setup() {
  
  pinMode(rele1, OUTPUT);  
  digitalWrite(rele1, HIGH); 

  indexretornoServer = 0;
  inicioretornoServer = false;
  
  lcd.begin(20, 4);
  lcd.print("Me Encontre         ");
  lcd.setCursor(0, 1);
  lcd.print("                    ");
  lcd.setCursor(0, 2);
  lcd.print("Iniciando Sistema   ");
  
  Serial.begin(9600);
  delay(1000);
  Serial.println("connecting...");
  
   if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    while(true);
  }
  
  aguardandocomandos();    
  
}


void loop()
{    
  verificacartao();  
  lastConnected = client.connected();   
}

void verificacartao(){
  
  byte i = 0;
  byte val = 0;
  byte code[6];
  byte checksum = 0;
  byte bytesread = 0;
  byte tempbyte = 0;
   
  if(Serial.available() > 0) {      
    if((val = Serial.read()) == 2) { 
      bytesread = 0; 
      while (bytesread < 12) {     
        if( Serial.available() > 0) { 
          
          lcd.setCursor(0, 1);
          lcd.print("                   ");
          lcd.setCursor(0, 2);
          lcd.print("Buscando Dados     ");
          lcd.setCursor(0, 3);
          lcd.print("                   ");
            
          val = Serial.read();          
          if (bytesread < 10)
          {
            tagRFID[bytesread] = val;
          }
                    
          if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) { 
            break;   
          }
   
          if ((val >= '0') && (val <= '9')) {
            val = val - '0';
          } else if ((val >= 'A') && (val <= 'F')) {
            val = 10 + val - 'A';
          }
          
          if (bytesread & 1 == 1) {
            code[bytesread >> 1] = (val | (tempbyte << 4));
            if (bytesread >> 1 != 5) {               
              checksum ^= code[bytesread >> 1];      
            };
          } else {
            tempbyte = val;                          
          };

          bytesread++;                               
        } 
      } 

      if (bytesread == 12) {
        tagRFID[10] = '\0';
        validaAcesso();
      }            
      bytesread = 0;
    }
  }

  
}

void validaAcesso() 
{
  Serial.println(tagRFID);
  if (client.connect(serverName, 80)) {
    Serial.println("connected");
    client.print("GET /api/acesso/INNER/0001/"); //INNER é o codigo do cliente e 0001 o código do Equipamento
    client.print(tagRFID); 
    client.println(" HTTP/1.0");
    client.println("Host: dns.servidor.api"); //trocar pelo DNS API Web
    client.println(); 
  } 
  else {
    Serial.println("connection failed");
    Serial.println();
    lcd.setCursor(0, 1);

    lcd.print("Erro durante acesso ");
    lcd.setCursor(0, 2);
    lcd.print("Tente novamente     ");

  }

  inicioretornoServer = false;
  indexretornoServer = 0;
  
  while(client.connected() && !client.available()) delay(1); //waits for data
  while (client.connected() || client.available()) { //connected or data available
    char c = client.read(); //gets byte from ethernet buffer
    Serial.print(c);
    if (c == '|')
    {
      inicioretornoServer = !inicioretornoServer;
      indexretornoServer = 0;
    }
    
    if (inicioretornoServer)
    {    
      //Serial.println(indexretornoServer);          
      //Serial.println(c); 
      if(indexretornoServer == 1)
      {
            validacaoTag = c;            
      }
      else if(indexretornoServer >= 2 && indexretornoServer <= 22)      
      {
          nomeTag[indexretornoServer-2] = c;            
      }      
      indexretornoServer++;
      //Serial.println(indexretornoServer);          
    }  
  }

  Serial.println(" ");    
  Serial.print("Validacao: ");    
  Serial.print(validacaoTag);    
  Serial.println(" ");    
  Serial.print("Nome: ");    
  Serial.print(nomeTag);    
  
  lcd.setCursor(0, 1);
  lcd.print("                    ");
  lcd.setCursor(0, 2);
  lcd.print(nomeTag);
  lcd.setCursor(0, 3);

  if(validacaoTag == 'E'){
    digitalWrite(rele1, LOW);
    lcd.print("Entrada Registrada  ");}    
    
  if(validacaoTag == 'S'){
    digitalWrite(rele1, LOW);    
    lcd.print("Saida Registrada    ");}

   if(validacaoTag == 'X'){
    lcd.print("Cartao sem Acesso   ");}   

  Serial.println();
  Serial.println("disconnecting.");
  Serial.println("==================");
  Serial.println();


  delay(1000);  
  digitalWrite(rele1, HIGH);
  delay(500);  
  client.stop(); //stop client
  aguardandocomandos();  
}


void consultacartaoserver(){
   
  lcd.setCursor(0, 1);
  lcd.print("Consultando dados   ");   
  lcd.setCursor(0, 2);
  lcd.print("      Aguarde       ");   
    
  Serial.print("Cartao: ");
  Serial.println(tagRFID); 
  
  
  int thisData;
  thisData = 12234;


  
}

void aguardandocomandos(){
  lcd.setCursor(0, 1);
  lcd.print("                    ");
  lcd.setCursor(0, 2);
  lcd.print("Passe o Cartao      ");   
  lcd.setCursor(0, 3);
  lcd.print("                    ");


}


Fluxo de Operação

Código Fonte
O código fonte da API  e site de administração e localização está disponível no github.


Read more
segunda-feira, 1 de abril de 2013
Impressoras 3D


Transformar uma ideia virtual em um objeto real, essa é a proposta das impressoras 3D. Ela é um tipo de impressora que cria modelos tridimensionais depositando sucessivas camadas de material, permitindo a prototipação rápida com um custo inferior aos processos tradicionais.



O primeiro passo para uma impressão 3D é termos um modelo tridimensional do objeto, eles podem ser criados em um software para computação gráfica ou gerados por um scanner 3D. Existem diversos softwares de modelagem como AutoCad, Blender, Google SkecthUP, TinkerCad entre outros. Alguns sites disponibilizam objetos prontos para impressão, um dos que mais se destaca é o thingiverse, onde a própria comunidade cria e compartilha seus objetos.

Exemplos softwares de modelagem 3D:

Google SketchUp 



Blender




TinkerCad



Repositório com modelos compartilhados pelos usuários




Softwares de impressão
Antes de imprimir o modelo 3D, precisamos processar o arquivo por um software chamado de "fatiador",  ele converte o modelo em uma série de camadas finas especificadas no padrão G-CODE. Com o software de impressão é possível  visualizar como a peça será impressa, o total de filamento gasto e tempo total de impressão.





Tipos de impressoras
Nesse artigo vamos apresentar um modelo cartesiano chamado Graber I3, ele foi construído em nosso laboratório. As impressoras cartesianas são as mais comuns, tem um custo baixo, boa impressão e são mais fáceis de montar e calibrar.




A impressora cartesiana utiliza os eixos x, y e z que se movimentam durante a impressão. Cada eixo é controlado diretamente por um parafuso ou correia, para se movimentar em uma determinada distância é necessário apenas a rotação do motor em um ângulo correto.

Vamos entender os componentes básicos da impressora.

Estrutura
Ela é responsável em dar forma física a impressora, no modelo escolhido é feito um corte a laser de uma placa de MDF e utiliza parafusos, porcas, barras lisas, roscadas e rolamentos para montagem.


Arquivo usado para corte do frame



Frame Cortado




Placa Controladora
O principal componente eletrônico da impressora 3D é a placa controladora. Ela é responsável em processar as definições do arquivo G-CODE  como temperatura da mesa, bico, coordenadas de impressão, velocidade de impressão, altura da camada e comandar a eletrônica. No nosso projeto, a placa controladora  é um Arduino Mega e utiliza uma Ramps como placa de comando.

Arduino



Ramps


Esquema de ligação de uma impressora 3D



Motores de Passo
A impressora 3D exige força, velocidade e precisão milimétrica em seus movimentos, motores de passo atendem esses requisitos.




Extrusor
O extrusor é responsável por depositar a camada de filamento durante a impressão. Ele é composto pelo hotend (bico aquecido),  termistor, motor de passo e o parafuso trator.


HotEnd




A cada camada de impressão, a placa controladora gerencia  a temperatura do bico aquecido e a velocidade do motor de passo para extrusão do plástico. A placa controladora utiliza a leitura realizada pelo termistor para controlar a temperatura definida para impressão no arquivo G-CODE.


Mesa de impressão
A mesa de impressão é responsável por acomodar a peça que está sendo impressa, sua limpeza e alinhamento são requisitos essenciais para uma boa qualidade final da peça. De acordo com o tipo de filamento utilizado é necessário utilizar uma mesa aquecida e aplicar uma fita ou cola para evitar o descolamento da peça durante a impressão.





Termistores
São componentes eletrônicos que têm a sua resistência elétrica alterada termicamente. Eles são usados na impressora para que a placa controladora mantenha a temperatura da mesa e bico definida no G-CODE.




EndStops
O endstop é uma chave utilizada pela placa controladora para identificar o final de curso dos eixos X, Y e Z. Com o final de curso identificado, a placa encontra as coordenadas para impressão.


EndStop mecânico


EndStop Ótico



Filamento
É a matéria prima para a impressão, atualmente existem diversos tipo de materiais, com características de resistência e térmica diferentes. Vamos falar sobre ABS e PLA.





ABS: É um dos materiais mais utilizados. Ele é rígido e leve, com um equilíbrio entre resistência e flexibilidade. Requer aquecimento da mesa de impressão. Como vantagem possui um custo um pouco inferior e as peças impressas apresentam melhor resistência mecânica e térmica, como desvantagem, peças grandes tendem a descolar e empenar durante a impressão.

PLA: É produzido a partir de materiais biodegradáveis. Não requer aquecimento da mesa de impressão. Como vantagem tem pouco descolamento e empenamento e como desvantagem um custo superior. As peças possuem uma resistência mecânica e térmica um pouco inferior ao ABS.

No nosso laboratório temos as duas opções de filamento, e de acordo com a peça a ser impressa decidimos qual material usar.


Vamos ver algumas fotos e um vídeo de nossa impressora





















Read more