quarta-feira, 1 de maio de 2013

Review fita RGB 6W 12V

Introdução:

Este produto foi desenvolvido para atender aplicações que requerem iluminação contínua em superfície plana ou curva. Pode ser facilmente montado em qualquer aplicativo (não-condutor) com fita dupla-face, altamente flexível: slim em tamanho compacto, cabe em qualquer espaço estreito ou curvas. Baixo consumo de energia, super-brilhante, e funciona com temperatura baixa. Já tem conector DC soldado, pronto para ser ligado e funcionar. LED de alta qualidade, intensidade elevada e confiabilidade, longa vida útil> 50.000 horas.



Pode ser ligado ao microcontrolador para criar diferentes efeitos, podendo usar o PWM para mudar intensidade do brilho de cada cor e assim obter todas as cores RGB. O exemplo a seguir é usando o software amblone, que copia as cores do seu monitor na fita de LED, criando um efeito muito bonito, já usado pelas grandes fabricantes de televisores como Ambilight da Philips.



Características:

Tamanho: 1 metro
Core: RGB



Como funciona:

Baixe o amblone:

http://amblone.com/download



Grave esse código em seu Arduino:



// Amblone code for the Arduino Mega
// Author: Bart van der Drift

// License:
// Anyone is free to change, redistribute or copy parts of this code
// as long as it is not for commercial purposes
// Please be so kind to pay credit where due

//---------------------------------------------------------------------------
//---------------------------------- DEFINES --------------------------------
//---------------------------------------------------------------------------

// Flags for the USB communication protocol
#define C_SF1 0xF1 // Startflag for 1-channel mode (1 RGB channel)
#define C_SF2 0xF2 // Startflag for 2-channel mode (2 RGB channels)
#define C_SF3 0xF3 // Startflag for 3-channel mode (3 RGB channels)
#define C_SF4 0xF4 // Startflag for 4-channel mode (4 RGB channels)
#define C_END 0x33 // End flag
#define C_ESC 0x99 // Escape character

// States for receiving the information, see the flow chart for more info
#define S_WAIT_FOR_SF  0
#define S_RECV_RGB     1
#define S_RECV_RGB_ESC 2

//---------------------------------------------------------------------------
//--------------------------- FUNCTION DECLARATIONS -------------------------
//---------------------------------------------------------------------------

// Receives bytes and returns true if a valid packet was received
boolean PacketReceived();

// Uses the rgb values to set the PWMs
void SetPWMs();

//---------------------------------------------------------------------------
//--------------------------- VARIABLE DECLARATIONS -------------------------
//---------------------------------------------------------------------------

int pulse = 0;

// State we are in: one of the S_* defines
int State = 0;
// The payload of a received message
int Payload[32];
// The amount of RGB values we have received
int ByteCount = 0;
// The character we received
int Recv;

// The amount of RGB channels we are using
int ChannelMode;

// PWM pins for channel 1
int r1_pin = 2;
int g1_pin = 3;
int b1_pin = 4;

// PWM pins for channel 2
int r2_pin = 5;
int g2_pin = 6;
int b2_pin = 7;

// PWM pins for channel 3
int r3_pin = 8;
int g3_pin = 9;
int b3_pin = 10;

// PWM pins for channel 4
int r4_pin = 11;
int g4_pin = 12;
int b4_pin = 13;

//---------------------------------------------------------------------------
//----------------------------- IMPLEMENTATIONS -----------------------------
//---------------------------------------------------------------------------

void setup()   {              
  // initialize the serial communication
  Serial.begin(256000); // opens serial port, sets data rate to 256000 bps

  TCCR0B = TCCR0B & 0b11111000 | 0x2;
  TCCR1B = TCCR0B & 0b11111000 | 0x2;
  TCCR2B = TCCR0B & 0b11111000 | 0x2;
  TCCR3B = TCCR0B & 0b11111000 | 0x2;
  TCCR4B = TCCR0B & 0b11111000 | 0x2;

  State = S_WAIT_FOR_SF;
}
//---------------------------------------------------------------------------

void loop()                  
{
  if (Serial.available() > 0) {
    if (PacketReceived()) {
      SetPWMs();
    }
  }
}
//---------------------------------------------------------------------------

boolean PacketReceived() {
  Recv = Serial.read();

  switch (State) {
    case S_WAIT_FOR_SF:
      // =============================== Wait for start flag state
      switch (Recv) {
        case C_SF1:
          // Start flag for 1-channel mode
          ChannelMode = 1;
          State = S_RECV_RGB;
          ByteCount = 0;
          return false;
        case C_SF2:
          // Start flag for 2-channel mode
          ChannelMode = 2;
          State = S_RECV_RGB;
          ByteCount = 0;
          return false;
        case 243://C_SF3:
          // Start flag for 3-channel mode
          ChannelMode = 3;
          State = S_RECV_RGB;
          ByteCount = 0;
          return false;
        case C_SF4:
          // Start flag for 4-channel mode
          ChannelMode = 4;
          State = S_RECV_RGB;
          ByteCount = 0;
          return false;
        default:
          // No action for all other characters
          return false;
      }
      break;
    case S_RECV_RGB:
      // =============================== RGB Data reception state
      switch (Recv) {
        case C_SF1:
          // Start flag for 1-channel mode
          ChannelMode = 1;
          State = S_RECV_RGB;
          ByteCount = 0;
          return false;
        case C_SF2:
          // Start flag for 2-channel mode
          ChannelMode = 2;
          State = S_RECV_RGB;
          ByteCount = 0;
          return false;
        case C_SF3:
          // Start flag for 3-channel mode
          ChannelMode = 3;
          State = S_RECV_RGB;
          ByteCount = 0;
          return false;
        case C_SF4:
          // Start flag for 4-channel mode
          ChannelMode = 4;
          State = S_RECV_RGB;
          ByteCount = 0;
          return false;
        case C_END:
          // End Flag
          // For each channel, we should have received 3 values. If so, we have received a valid packet
          if (ByteCount == ChannelMode * 3) {
            State = S_WAIT_FOR_SF;
            ByteCount = 0;
            return true; // <------------------------ TRUE IS RETURNED
          }
          else {
            // Something's gone wrong: restart
            State = S_WAIT_FOR_SF;
            ByteCount = 0;
            return false;
          }
        case C_ESC:
          // Escape character
          State = S_RECV_RGB_ESC;
          return false;
        default:
          // The character received wasn't a flag, so store it as an RGB value      
          Payload[ByteCount] = Recv;
          ByteCount++;
          return false;
      }
      case S_RECV_RGB_ESC:
        // =============================== RGB Escaped data reception state
        // Store the value in the payload, no matter what it is
        Payload[ByteCount] = Recv;
        ByteCount++;
        State = S_RECV_RGB;
        return false;
  }

  return false;
}
//---------------------------------------------------------------------------

void SetPWMs() {
  // Channel 1
  analogWrite(r1_pin, Payload[0]);
  analogWrite(g1_pin, Payload[1]);
  analogWrite(b1_pin, Payload[2]);

  // Channel 2
  if (ChannelMode > 1) {
    analogWrite(r2_pin, Payload[3]);
    analogWrite(g2_pin, Payload[4]);
    analogWrite(b2_pin, Payload[5]);
  }
  else {
    // turn the rest to 0 (black)
    analogWrite(r2_pin, 0);
    analogWrite(g2_pin, 0);
    analogWrite(b2_pin, 0);
 
    analogWrite(r3_pin, 0);
    analogWrite(g3_pin, 0);
    analogWrite(b3_pin, 0);
 
    analogWrite(r4_pin, 0);
    analogWrite(g4_pin, 0);
    analogWrite(b4_pin, 0);
  }

  // Channel 3
  if (ChannelMode > 2) {
    analogWrite(r3_pin, Payload[6]);
    analogWrite(g3_pin, Payload[7]);
    analogWrite(b3_pin, Payload[8]);
  }
  else {
    // turn the rest to 0 (black)
    analogWrite(r3_pin, 0);
    analogWrite(g3_pin, 0);
    analogWrite(b3_pin, 0);
 
    analogWrite(r4_pin, 0);
    analogWrite(g4_pin, 0);
    analogWrite(b4_pin, 0);
  }

  // Channel 4
  if (ChannelMode > 3) {
    analogWrite(r4_pin, Payload[9]);
    analogWrite(g4_pin, Payload[10]);
    analogWrite(b4_pin, Payload[11]);
  }
  else {
    // turn the rest to 0 (black)
    analogWrite(r4_pin, 0);
    analogWrite(g4_pin, 0);
    analogWrite(b4_pin, 0);
  }
}
//---------------------------------------------------------------------------


E divirta-se:



Célula Peltier 30W

Informações:


O efeito Peltier é a produção de um gradiente de temperatura em duas junções de dois condutores (ou semicondutores) de materiais diferentes quando submetidos a uma tensão elétrica em um circuito fechado (consequentemente, percorrido por uma corrente elétrica).



É também conhecido como Força eletromotriz de Peltier e é o reverso do efeito Seebeck em que ocorre produção de diferença de potencial devido à diferença de temperatura neste mesmo tipo de circuito.

Estes dois efeitos podem ser também considerados como um só e denominado de efeito Peltier-Seebeck ou efeito termelétrico. Na verdade, são dois efeitos que podem ser considerados como diferentes 
manifestações do mesmo fenômeno físico.



Aplicações:
O efeito Peltier é utilizado em coolers em que usando uma diferença de potencial se pode transferir calor da junção fria para quente aplicando-se a polaridade elétrica adequada (É um refrigerador no sentido termodinâmico da palavra).



O mesmo efeito também é utilizado para produzir temperaturas próximas de 0 K onde o terminal aquecido é refrigerado por Nitrogênio líquido cuja temperatura de ebulição é de 77,35 K (-196,15 °C). Tal procedimento é conhecido como ultra-resfriamento termoelétrico sendo capaz de produzir temperaturas próximas ao zero absoluto no terminal refrigerado, O ultra-resfriamento por termopar é utilizado para o estudo de supercondutores e do comportamento de matérias na temperatura do espaço inter-estelar, onde as temperaturas são próximas a 0 K.




Características:



  • Cor: Branco
  • Material: Plastico + cerâmica
  • Chip Model: TEC1-12705
  • Tensão nominal DC 12V, Max. 15.5V
  • Corrente máxima: 5A
  • Refrigeração: 30W (Boa dissipação de calor)
  • Resistência interna: 2,4-1,7 ohm (temperatura ambiente 23 + / - 1'C, 1KHz de Ac test)
  • Diferença de temperatura máxima acima de 60'C
  • Pressão de Montagem: 85N/cm2
  • Ambiente de trabalho: Temperatura range-55'C a 83'C
  • Temperatura:-10ºC a 40ºC
  • Condições de armazenamento: -40 a 60ºC
  • Comprimento do cabo: 30cm
  • Ideal para os amantes de DIY


Ligando Placa:






Review Stepper Motor + ULN2003 Driver Board

Introdução:

Essa é uma placa muito completa, tem as saídas e entradas bem especificadas, todas assinaladas na placa, que tem otina construção por sinal.

Existem LEDs que indicam a forma com que o sinal esta sendo enviado, o que é muito util. A placa é compacta e necessita apenas de fazer as ligações com microcontrolador para funcionar.

O motor de passo fornecido é ótimo para pequenos projetos, alem do preço de vende ser muito bom. Recomendo a todos ter uma dessas, pois pode ser usado com outros motores de passo que respeitem a corrente máxima do ULN2003.





Características:

  • Alta qualidade do motor de passo com driver ULN2003
  • Tensão: DC 5V
  • Diâmetro: 28 milímetros
  • Passo Ângulo: 5.625 x 1/64
  • Relação de redução: 1/64
  • Lista de embalagem:
  • Stepper motor (24 centímetros)
  • Placa de driver ULN2003



Sobre UNL2003:


O ULN2003 é um driver de corrente que drena corrente de dispositivos de médio consumo como: lampada, motores, solenoides, motores de passo


  • Tensão maxima de entrada 30V
  • Corrente de saida(maxima) ; 500mA
  • Potencia dissipada : 1W


O ULN2003 é mais utilizado em motores de passo e solenoides.





Código de Exemplo:


#include <Stepper.h>

// numero de passos

#define STEPS 100

//cria instancia de onde esta ligado no arduino
Stepper stepper(STEPS, 8, 9, 10, 11);

void setup()
{
  // velocidade em RPMs
  stepper.setSpeed(90);
}

void loop()
{
  stepper.step(5);
}








Review OV7670 300KP VGA Camera

Introdução:

Esse modulo de câmera do modelo OV7670 é bem complexo, não é muito simples criar interfaces com esse dispositivo utilizando um microcontrolador de 8/16 bits, qualquer processamento de imagem/cor necessita de um tratamento e um código para processar isso tudo.
O que estamos mostrando aqui esta disponível na internet, o assunto é pouco comentado e tem pouca informação de como fazer, já que existem diferentes tipos de módulos como esse, com diferentes funcionalidades.
Esse post é mais apara aguçar as infinitas possibilidades!



Características:
  • Modelo: OV7670
  • Cor: preto + azul
  • Material: PCB + plástico + metal
  • Matriz fotossensível: 640 x 480
  • Tensão: 2.5V - 3.0V;
  • Potência de operação: 60mW/15fpsVGAYUV;
  • Modo Sleep: <20 uA;
  • Temperatura de Operação: -30 a 70 ° C.
  • Formato de Saída: YUV/YCbCr4: 2 2 RGB565/555/444 GRB4: 02:02 Raw RGB de Dados (8 dígitos); 
  • Tamanho da lente: 1/6 ", Ângulo de visão: 25 graus
  • Max frame Rate:. 30fps VGA 
  • Sensibilidade: 1,3 V / (Lux-sec )
  • Signal to Noise Ratio: 46 dB;
  • DynamicRange: 52 dB
  • Modo de Browse: por linha; exposição eletrônico: 1-510 linha
  • Cobertura Pixel: 3.6um x 3.6um
  • Alta sensibilidade para a operação com pouca luz
  • Baixa tensão de operação para aplicação embarcada, interface SCCB padrão compatível com a interface I2C; Raw RGB, RGB (GRB4: 2:2, RGB565/555/444), YUV (4:02:02) e , YCbCr (04:02:02) formato de saída
  • Suporte VGA, CIF e de CIF a 40 x 30, formato, método Pixel Vario para sub-amostragem; 
  • Auto Controle de Imagem: AEC, AGC, AWB, ABF, ABLC, Controle de Qualidade da Imagem : A saturação de cor, matiz, gama, nitidez e anti-blooming; ISP inclui redução de ruído e correção do ruido
  • Suporte image scaling; correção sombreamento Lens; Flicker 50/60Hz detecção automática; 
  • Cor de saturação com ajuste automático
  • Borda de aprimoramento com ajuste automático



Pinos:
SignalsDescriptionSignalsDescription
+3.3V+3.3V from shield+5V+5V from Arduino
D13.3V logic version of D1D03.3V logic version of D0
D33.3V logic version of D3D23.3V logic version of D2
D53.3V logic version of D5D43.3V logic version of D4
D73.3V logic version of D7D63.3V logic version of D6
D93.3V logic version of D9D83.3V logic version of D8
+3.3V+3.3V from shieldGNDGround
IO1Expansion GPIO1IO0Expansion GPIO0
D113.3V logic version of D11D133.3V logic version of D13
IO2Expansion GPIO2D123.3V logic version of D12
IO3Expansion GPIO3D103.3V logic version of D10
IO5Expansion GPIO5IO4Expansion GPIO4
A03.3V logic version of A0A13.3V logic version of A1
A23.3V logic version of A2A33.3V logic version of A3
A43.3V logic version of A4A53.3V logic version of A5
GNDGroundGNDGround

O Arduino usa as IOs para emular o barramento paralelo para acessar os registros internos ArduChip  e registros LCD externo. O usuário deve criar uma instância da classe ArduCAM e UTFT que utilizam barramento paralelo antes da rotina de instalação. A função de cada pino:



SignalsFunctions
D[7:0]Parallel bus data[7:0]
A0Parallel bus RD, active low
A1Parallel bus WR, active low
A2Parallel bus RS
A3Parallel bus CS, active low
A4I2CSDA for Camera Module
A5I2CSCL for Camera Module
D10LCD chipselect, active low
D9SD/TF chipselect, active low
D11SPI MOSI
D12SPI MISO
D13SPI SCLK

Essa parte é um código para a demonstração do instanciar o ArduCAM e classe UTFT.
01#define SD_CS 9
02
03//UTFT(byte model, int RS, int WR, int RD, int CS)
04UTFT myGLCD(ITDB32S,A2,A1,A0,10);  
05//ArduCAM(byte model,int RS, int WR, int RD, int CS)
06ArduCAM myCAM(OV7670,A2,A1,A0,A3);
07
08void setup()
09{
10  // Setup I2C port
11  Wire.begin();  
12  if (!SD.begin(SD_CS))
13  {
14    while (1);
15  }
16  // Setup ArduChip
17  myCAM.InitCAM();
18  // Setup the LCD
19  myGLCD.InitLCD();
20  ShowStart();
21  delay(2000);
22}
Registradores ArduChip:
ArduChip é o núcleo do ArduCAM, que incorpora um FPGA Altera MAXII CPLD EPM240 como processador principal. A principal tarefa do ArduChip é fazer o real tempo de transferência DMA entre o módulo da câmera e o display 3.2 "LCD e interagir como Arduino, Camera e LCD. Ele também fornece AVR como expansão GPIO, ele pode ser configurado como entrada ou saída e resolver o problema dos recursos limitados IO na placa do Arduino. Os GPIOs pode ser usado como gatilho e desencadear outros eventos(no Arduino por exemplo)
AddressNameModeDescription
0×00DDRR/WData Direction RegisterBit[7:6]: ReservedBit[5]: IO5 input/output selectionBit[4]: IO4 input/output selectionBit[3]: IO3 input/output selectionBit[2]: IO2 input/output selectionBit[1]: IO1 input/output selectionBit[0]: IO0 input/output selection1 = output, 0 = input
0×01PORTR/WOutputPortRegisterThe value will reflect on the Pin IO0~IO6 correspondinglyBit[7:6]: ReservedBit[5]: IO5 output valueBit[4]: IO4 output valueBit[3]: IO3 output valueBit[2]: IO2 output valueBit[1]: IO1 output valueBit[0]: IO0 output value1 = High, 0 = Low
0×03MODER/WBus ModeDetermine who is owner of the data bus, only one owner is allowed.Bit[7:3]: ReservedBit[2]: MCU read LCD busBit[1]: Camera write LCD busBit[0]: MCU write LCD bus
0×80PINROInput Pin RegisterThe value will reflect the IO0~IO6 Pin status correspondinglyBit[7:6]: ReservedBit[5]: IO5 input valueBit[4]: IO4 input valueBit[3]: IO3 input valueBit[2]: IO2 input valueBit[1]: IO1 input valueBit[0]: IO0 input value1 = High, 0 = Low
0×81TriggerROTrigger input RegisterBit[7:2]: ReservedBit[1]: Capture button status, 0 = pressed, 1 = releasedBit[0]: Frame start signal, equal to VSYNC
0×82Revision IDROBit[7:6]: Revision integer partBit[5:0]: Revision decimal partFirst revision released ID is 0×40, means V1.00


ArduCAM GPIO demo(escrevendo):

01// ArduCAM GPIO Write demo (C)2012 Lee
03// This program is a demo of how to use GPIOs in ArduCAM to turn on/off
04// LEDs or trigger any ohter devices.
05//
06// This program requires the ArduCAM library.
07//
08#include <Wire.h>
09#include <ArduCAM.h>
10#include <avr/pgmspace.h>
11#include <SoftwareSerial.h>
12
13#define ARDUCHIP_DDR       0x00  //GPIO direction register
14#define ARDUCHIP_PORT      0x01  //GPIO output register
15#define ARDUCHIP_PIN       0x80  //GPIO input register
16//ArduCAM(byte model,int RS, int WR, int RD, int CS)
17ArduCAM myCAM(OV7670,A2,A1,A0,A3);
18//Uncomment if use software serial
19SoftwareSerial mySerial(8, 9); // RX, TX
20void setup()
21{
22  mySerial.begin(9600);
23  mySerial.println("hello");
24  myCAM.write_reg( ARDUCHIP_DDR, 0xff);     //Set GPIO as output
25
26}
27
28void loop()
29{
30  uint8_t val = 0xff;
31  uint8_t read_val;
32  while(1)
33  {
34    delay(1000);
35    myCAM.write_reg( ARDUCHIP_PORT, val);       //Output Register
36    val = val ^ 0xff;                           //toggle output value
37    read_val = myCAM.read_reg(ARDUCHIP_PORT);   //Read it back
38    mySerial.write(read_val);
39  }
40  return;
41
42}



 ArduCAM GPIO demo(lendo):
01// ArduCAM GPIO Read demo (C)2012 Lee
03// This program is a demo of how to use GPIOs in ArduCAM to read
04// trigger signals from any ohter devices.
05//
06// This program requires the ArduCAM library.
07//
08#include <Wire.h>
09#include <ArduCAM.h>
10#include <avr/pgmspace.h>
11#include <SoftwareSerial.h>
12
13#define ARDUCHIP_DDR       0x00  //GPIO direction register
14#define ARDUCHIP_PORT      0x01  //GPIO output register
15#define ARDUCHIP_PIN       0x80  //GPIO input register
16
17//ArduCAM(byte model,int RS, int WR, int RD, int CS)
18ArduCAM myCAM(OV7670,A2,A1,A0,A3);
19//Uncomment if use software serial
20SoftwareSerial mySerial(8, 9); // RX, TX
21void setup()
22{
23  mySerial.begin(9600);
24  mySerial.println("hello");
25  myCAM.write_reg( ARDUCHIP_DDR, 0x00);     //Set GPIO as input
26}
27
28void loop()
29{
30  uint8_t temp;
31  while(1)
32  {
33    temp = myCAM.read_reg(ARDUCHIP_PIN);      //Read from GPIO
34    mySerial.write(temp);                  //Send value read from GPIO
35    delay(1000);
36  }
37  return;
38
39}