Most Useless Machine - Caixa Teimosa



Neste post estou apresentando um projeto simples e ao mesmo tempo muito divertido, uma caixa que se desliga sozinha. Este projeto ensina alguns princípios básicos como o uso de chave DPDT e microswitches e especialmente os conceitos de montagem mecânica que são sempre o mais interessante quando se quer uma atividade que prenda a atenção das crianças (no meu caso, minha filha de 11 anos que criou a pintura com cara de monstro para a caixa).

Existem centenas de vídeos e páginas com este projeto e até mesmo kits prontos para montar como é o caso deste da solarbotics.

Os materiais para montagem são:

1. Uma caixa de qualquer material rígido e fácil de furar, comprei uma de madeira em uma loja de artesanato por R$ 4,00;
2. Um microswitch e um switch DPDT que podem ser encontrado em qualquer loja de componentes eletrônicos;
3. Um motor, eu utilizei um de 33 rpm com alimentação de 6 volts, testei alguns mais rápidos mas a caixa saiu de controle :-);
4. Um poco de arame e criatividade para montar e adaptar o braço mecanico;
5. Uma fonte de alimentação, no meu caso foi uma bateria de 6 v chumbo ácido que eu tinha aqui mas pode ser com pilhas ou outra fonte.

O esquema de montagem é o seguinte:



Segue um vídeo com o funcionamento interno:



Quando liga-se o switch, o braço move-se na direção para desligá-lo, quando o braço desliga o switch a direção do motor é invertida.
Quando o braço chega ao fim do curso, aciona o microswitch que desliga todo o sistema. Divirta-se!

Som na Caixa!

Estou pesquisando uma forma de incluir som quando o botão da caixa é ligado.

seguem alguns links para minha pesquisa com o chip LM386:

http://josepino.com/audio/mini_amplifier_lm386

http://www.instructables.com/id/Audio-Amplifier

http://www.instructables.com/id/Know-Your-IC-LM386/step4/Project-layout/



Ethernet Shield enviando dados para web



Neste post estou usando o ethernet shield do arduino para enviar as leituras de temperatura de um sensor LM35 para o site  ThingSpeak e exibir estas leituras em forma de gráfico no blog. O site ThingSpeak permite que o usuário envie diversos tipos de dados e acesse estes dados de diversas formas com uma api para inclusão em outros meios como web, twitter ou o que mais você quiser.

No exemplo abaixo estou enviando estas leituras para um pequeno gráfico que pode ser visto em todas as páginas deste blog, esta mesma idéia pode ser usada para enviar outros tipos de leituras e existem ainda formas de fazer com que esta função tenha duas vias para controlar equipamentos e fazer automação doméstica.

Na imagem acima o sensor está conectado na porta analógica 0 e alimentado por 5V a partir da própria placa Ethernet. As leituras analógicas são convertidas para apresentar a temperatura em graus centígrados antes do envio.

(imagem estática de exemplo)

O código para exibição no blog é simples e pode ser encontrado no endereço https://www.thingspeak.com/channels/261 que é o endereço do canal destes dados no site ThingSpeak.

----------------------------------------------------------------------------------------------------


/*

 ThingSpeak Client to Update Channel Feeds
 
 The ThingSpeak Client sketch is designed for the Arduino + Ethernet Shield.
 This sketch updates a channel feed with an analog input reading via the
 ThingSpeak API (http://community.thingspeak.com/documentation/)
 using HTTP POST.
 
 Getting Started with ThingSpeak:
 
    * Sign Up for New User Account - https://www.thingspeak.com/users/new
    * Create a New Channel by selecting Channels and then Create New Channel
    * Enter the Write API Key in this sketch under "ThingSpeak Settings"
 
 Created: January 25, 2011 by Hans Scharler (http://www.iamshadowlord.com)
 
 Additional Credits: Example sketches from Tom Igoe and David A. Mellis
 
*/

#include <SPI.h>
#include <Ethernet.h>

int pin = 0; // analog pin
int tempc = 0,tempf=0; // temperature variables
int samples[8]; // variables to make a better precision
int maxi = -100,mini = 100; // to start max/min temperature
int i;

// Local Network Settings
byte mac[]     = { 0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1 }; // Must be unique on local network
byte ip[]      = { 192, 168,   1,  13 };                // Must be unique on local network
byte gateway[] = { 192, 168,   1,   1 };
byte subnet[]  = { 255, 255, 255,   0 };

// ThingSpeak Settings
byte server[]  = { 184, 106, 153, 149 }; // IP Address for the ThingSpeak API
String writeAPIKey = "sua chave vai aqui";    // Write API Key for a ThingSpeak Channel
const int updateInterval = 10000;        // Time interval in milliseconds to update ThingSpeak   
Client client(server, 80);

// Variable Setup
long lastConnectionTime = 0; 
boolean lastConnected = false;
int resetCounter = 0;

void setup()
{
  Ethernet.begin(mac, ip, gateway, subnet);
  Serial.begin(9600);
  delay(1000);
}

void loop()
{
  
  tempc = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;

  String analogPin0 = String(tempc);
  
  // Print Update Response to Serial Monitor
  if (client.available())
  {
    char c = client.read();
    Serial.print(c);
  }
  
  // Disconnect from ThingSpeak
  if (!client.connected() && lastConnected)
  {
    Serial.println();
    Serial.println("...disconnected.");
    Serial.println();
    
    client.stop();
  }
  
  // Update ThingSpeak
  if(!client.connected() && (millis() - lastConnectionTime > updateInterval))
  {
    updateThingSpeak("field1="+analogPin0);
  }
  
  lastConnected = client.connected();
}

void updateThingSpeak(String tsData)
{
  if (client.connect())
  { 
    Serial.println("Connected to ThingSpeak...");
    Serial.println();
        
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(tsData.length());
    client.print("\n\n");

    client.print(tsData);
    
    lastConnectionTime = millis();
    
    resetCounter = 0;
    
  }
  else
  {
    Serial.println("Connection Failed.");   
    Serial.println();
    
    resetCounter++;
    
    if (resetCounter >=5 ) {resetEthernetShield();}

    lastConnectionTime = millis(); 
  }
}

void resetEthernetShield()
{
  Serial.println("Resetting Ethernet Shield.");   
  Serial.println();
  
  client.stop();
  delay(1000);
  
  Ethernet.begin(mac, ip, gateway, subnet);
  delay(1000);
}

----------------------------------------------------------------------------

Controle Remoto - TV-B-Gone Arduino


O projeto TV-B-Gone foi idealizado pela Adafruit e é vendido como um kit completo para montagem em casa, o objetivo é desligar qualquer TV  que esteja atrapalhando seu almoço ou leitura em lugares públicos.

No kit original o processador utilizado é o ATtiny85, mas o projeto foi portado para a IDE arduino e para o processador ATMega 328 por Ken Shirriff em seu blog (informações e códigos no link).

O esquema de montagem é bastante simples e eu fiz um pequeno esquema que está abaixo:


Este fim de semana me diverti bastante perturbando os amigos e o pessoal em casa, o led ir tem que ser forte, usei um de 8 mm (tirado de um controle remoto velho) para ter um alcance maior. No esquema do autor você vai ver que é sugerido o uso de transistors para controlar até uma série de leds em linha e aumentar muito o alcance.

O projeto pode ser montado com uma placa arduino UNO ou outras clones, eu resolvi montar uma arduino na breadboard pequena  para fazer um aparelho que pudesse esconder no bolso. A força vem de 3 pilhas AA ligadas diretamente na placa e colocadas em um container com liga e desliga incorporado. Não usei o botão de reset que tem no esquema acima. O bootloader foi carregado no chip usando o esquema arduino ISP.

.

Internet of Things

LUX com arduino GPRS shield e sensor LDR.

/*
Graph: Feed 38642, Datastream lux
*/

Laboratórios, Lojas e Produtos

Blogs, Comunidades e Revistas