Show Posts
Pages: [1] 2 3 ... 19
1  International / Portugues / Re: Multi-tarefa no Arduino Mega on: September 16, 2014, 08:34:36 am
Acredito que dê pra fazer sem problemas amigo, vai depender mais do tamanho da página, pois o Arduino tem pouca RAM. Acho que seria melhor Usar a lib Flash.h para armazenar a página e o SD apenas para salvar os dados caso precise.
http://arduiniana.org/libraries/flash/

Vê também se esse link ajuda, não é bem o que você quer mas tá bem explicadinho

http://www.ladyada.net/learn/arduino/ethfiles.html

Aqui os metódos do SD e Ethernet

http://arduino.cc/en/Reference/Ethernet
http://arduino.cc/en/Reference/SD
2  International / Portugues / Re: [AJUDA]Irrigacao - Sensor + rele + RTC on: September 16, 2014, 08:24:44 am
Não faltou um driver pro Rele ali? Coloca um BC546//BC337 (qualquer coisa na verdade) para acionar o Rele, e um diodo comum em paralelo com a bobina

transistor:
base-----1k-----D8
coletor-----(fio azul rele)
emissor-----gnd

diodo:
Anodo-----(fio azul)
catodo-----(fio verde)
3  International / Portugues / Re: Lâmpada acionada via wifi (Android + Arduino) on: September 11, 2014, 10:43:29 am
Na loja de jardinagem mais próxima de minha casa eu farto-me de ver uns focos de luz com bateria e painel solar...

Basicamente, com a luz do dia os focos carregam e depois dão luz durante a noite. Não é uma iluminação muito forte, mas deve dar para o que pretendes e será bem mais barato. :/

Custou cerca de U$20 tudo, mais ou menos o custo de cada lúminaria por aqui. Sem contar que eu já tinha o Ardiuno e o Ethernet shield. Já está instalado e rodando.

A questão é as possibilidades que esse projeto abre, como fiz questão de destacar a luz seria apenas a desculpa, apenas meu problema a resolver, as possibilidades abertas com essa instalação vai depender da minha criatividade.

Além do mais, qual a graça comprar pronto se eu posso fazer?  smiley
4  International / Portugues / Re: Borda de Letreiro com Leds on: September 11, 2014, 09:16:43 am
Tipo assim?
Code:
if(digitalRead(botao) == HIGH)
{
    delay(300); // debounce preguiçoso
    while(digitalRead(botao) == LOW)
    { **executa sequencia** } // fica executando até apertar de novo
    delay(300);    
}
5  International / Portugues / Dúvidas Android on: September 11, 2014, 08:50:26 am
Queria fazer algo mais "profissional" no Android, como por exemplo funcionar sem a necessidade do app Trigger,
Se alguém puder me ajudar com o código, ou me indicar um bom forum de Android para eu poder fazer isto por conta ou alguém me ajudar lá, talvez até dê para futuramente colocar o app na play store, configurável para a necessidade de quem for usar, 100% free e com os devidos créditos.

Minha ideia de funcionamento ideal:
- App fica em background (serviço) e quando entrar na área pré-configurada (geolocalização) ele acende a lampada via internet (freeDNS). quando conectar de fato no wifi a lâmpada temporiza e desliga.

Sei que é totalmente possível, mas não tenho ideia de como fazê-lo.
6  International / Portugues / Lâmpada acionada via wifi (Android + Arduino) on: September 11, 2014, 08:50:06 am
Olá pessoal, há meses tive a ideia desse projeto para usar na lâmpada externa de minha residência, e resolvi por em prática esta semana. Estou com um pouco de dificuldades no lado do Android (explico no final), mas o projeto está "funcionando" e resolvi compartilhar.

Problema:
Minha residência tem 40m da frente aos fundos, e minha casa fica nos fundos, sendo que eu tenho que atravessar cerca de 3/4 do terreno no escuro para então o sensor acender a lampâda externa.

Solução(ões):
A) Fazer uma instalação elétrica subterrânea no terreno ($$$) e instalar outro/outros sensores de presença.
B) Instalar luminárias solares ($$) em pontos estratégicos para ficarem ligadas a noite toda.
C) Acionar a lampâda automaticamente usando algum gatilho como wifi e/ou bluetooth, geolocalização do celular, etc.

Possibilidades da solução C:
A lâmpada automática era apenas o meu problema, usando um controle para rele ao invés de soquete de lampada, é possível ligar automaticamente qualquer coisa pra quando chegar em casa!
Exemplo controle: http://i.imgur.com/18AO7ln.jpg

Como tinha um Ethernet shield, resolvi fazer o seguinte: Quando meu celular conectar no wifi de casa, a lampada acende por 30 segundos e desliga sozinha.

Usei um controle remoto para lâmpada comprado no eBay e o adaptei para ligar o controle numa fonte 12V e acioná-lo com Arduino
controle: http://i.imgur.com/m4AEusa.jpg
adaptação: http://imgur.com/vzdIezD.jpg
http://imgur.com/cFoOCXO.jpg
Não desenhei esquemático (posso fazer), mas apenas descobri se acionava com gnd ou vcc e liguei transistores em paralelo com os botões on/off. No caso era vcc então liguei transistores PNP associados com transistores NPN para inverter a lógica do PNP e garantir status (0/1).

No Arduino, adaptei o seguinte turorial para usar com ethernet shield e com a lógica do controle: http://ohmyfarads.com/2014/03/15/simple-home-automation-wifi-enabled-light-switch/

ficou assim:

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

//Minhas variaveis
#define pinLamp1on 7
#define pinLamp1off 6

#define SECONDS_ON 30

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 126);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(81);
EthernetClient client;
unsigned long shutTime=0;

void setup() {
  pinMode(pinLamp1on, OUTPUT);
  pinMode(pinLamp1off, OUTPUT);
  
  lampOff();
  
  // Open serial communications and wait for port to open:
  Serial.begin(9600);

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  
  shutTime = millis();
}

void loop() {
  // listen for incoming clients
  client = server.available();
  if (client) {
    writePage();
  }
    
  if ((millis() - shutTime) >= (SECONDS_ON*1000) { //
    lampOff();
    shutTime = millis(); // reset counting
  }
}

void lampOff()
{
  digitalWrite(pinLamp1off, HIGH);                // GET /L turns the LED off
  digitalWrite(pinLamp1On, LOW);                // GET /L turns the LED off
  delay(200);
  digitalWrite(pinLamp1off, LOW);                // GET /L turns the LED off
}

void lampOn()
{
  digitalWrite(pinLamp1on, HIGH);               // GET /H turns the LED on
  digitalWrite(pinLamp1Off, LOW);                // GET /L turns the LED off
  delay(200);
  digitalWrite(pinLamp1on, LOW);               // GET /H turns the LED on
}

void writePage()
{
  Serial.println("new client");
  // an http request ends with a blank line
  boolean currentLineIsBlank = true;
  String currentLine = "";
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
      Serial.write(c);
      // if you've gotten to the end of the line (received a newline
      // character) and the line is blank, the http request has ended,
      // so you can send a reply
      if (c == '\n') {                    // if the byte is a newline character
        // if the current line is blank, you got two newline characters in a row.
        // that's the end of the client HTTP request, so send a response:
        if (currentLine.length() == 0) {
          // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
          // and a content-type so the client knows what's coming, then a blank line:
          client.println("HTTP/1.1 200 OK");
          client.println("Content-type:text/html");
          client.println();

          // the content of the HTTP response follows the header:
          client.print("<font size=\"24\" face=\"arial\">Automacao residencial<br><br><br>");
          client.print("Lampada externa: <a href=\"/H1\">ON</a> | <a href=\"/L1\">OFF</a><br><br>");
          client.print("Lampada escada: <a href=\"/H2\">ON</a> | <a href=\"/L2\">OFF</a><br></font>");
          // The HTTP response ends with another blank line:
          client.println();
          // break out of the while loop:
          break;
        }
        else {      // if you got a newline, then clear currentLine:
          currentLine = "";
        }
      }
      else if (c != '\r') {    // if you got anything else but a carriage return character,
        currentLine += c;      // add it to the end of the currentLine
      }

      // Check to see if the client request was "GET /H" or "GET /L":
      if (currentLine.endsWith("GET /H1")) {
        lampOn(); // acende
        for(int i = SECONDS_ON; i > 0; i--) { delay(1000); } //espera 30s (ou desejado)
        lampOff(); // apaga
      }
      if (currentLine.endsWith("GET /L1")) {
        lampOff(); // apaga
      }
    }
  }
  // give the web browser time to receive the data
  delay(1);
  // close the connection:
  client.stop();
  Serial.println("client disconnected");
}

No Android, fiz um aplicativo que quando aberto manda a URL "192.168.0.126/H1" e fecha logo em seguida:
Code:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        makePostRequest();
        Toast toast = Toast.makeText(this, "Lampada ligada", Toast.LENGTH_LONG);
        toast.show();
        this.finish();
    }

    void makePostRequest()
    {
        try {
            HttpClient httpclient = new DefaultHttpClient();
            httpclient.execute(new HttpGet("http://192.168.0.126:81/H1"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Tá, mas e onde entra o "automático"?

Aí que tá, dá pra melhorar e muito esse software do Android, por hora estou usando o app Trigger configurado para abrir o app que fiz ao conectar do wifi de casa (mais fácil fazer que falar).
https://play.google.com/store/apps/details?id=com.jwsoft.nfcactionlauncher

Terminei de fazer isto um pouco tarde ontem, hoje eu upo um video do projeto funcionando.
7  International / Portugues / Re: Ethenet com cartao SD on: September 11, 2014, 07:39:44 am
Vê se esse link ajuda

http://www.ladyada.net/learn/arduino/ethfiles.html
8  Topics / Home Automation and Networked Objects / Solution on: September 11, 2014, 07:25:31 am
on Android app:
Code:
void makePostRequest()
    {
        WebView webview = new WebView(this);
        setContentView(webview);

        webview.loadUrl(arduino_IP+ "/H1");
    }
9  International / Portugues / Re: FLASH_STRING_ARRAY com IDE Arduino Beta on: September 10, 2014, 09:27:22 am
Achei uma solução: só adicionar no cabeçalho da lib (Flash.h)
typedef PROGMEM char prog_char;

ou substituir cada prog_char por PROGMEM char na library.

fontes:
https://code.google.com/p/arduino/issues/detail?id=795
http://arduino.cc/en/Reference/PROGMEM

Depois de ler o seu post, li este outro, de outro utilizador do forum:
http://forum.arduino.cc/index.php?topic=265986.0;topicseen
onde é dito:
Quote
"Arduino 1.5.7" is for the DUE.  For a regular Arduino use Arduino 1.0.5.

Não é este também o seu problema? Ou está a utilizar o Arduino DUE?

Na verdade que eu saiba isso não é regra, o DUE requer a 1.5.x, mas o contrário não é verdade, posso usar (teoricamente) a 1.5.7 com o Diecimilia.

Estava usando a 1.0.5 e realmente compila normal, mas a interface e os menus do 1.5.7 estão bem melhores, queria aproveitar a versão.

De qualquer forma, consegui resolver o problema e já comuniquei o dev da lib. Obrigado pela atenção!
10  International / Portugues / [resolvido] FLASH_STRING_ARRAY com IDE Arduino Beta on: September 10, 2014, 07:24:34 am
Olá, estou tentando usar a IDE Beta do Arduino (1.5.7), com a biblioteca Flash.h
http://arduiniana.org/libraries/flash/

Percebi que ela não é compatível, pois a IDE Beta suporta o macro objeto.print(F("flash string")). Até aí OK, só não usar a biblioteca e o erro some.

Mas e quanto aos objetos?
Code:
FLASH_STRING(big_string, "Moreover, as you might appreciate, "
    "their implications were such as to provoke a certain "
    "degree of sorrow within me. Indeed - why should I not "
    "admit it? - at that moment, my heart was breaking.");
FLASH_ARRAY(float, temperatures, 23.1, 23.1, 23.2, 23.2, 23.4,
    23.7, 25.0, 26.0, 26.8, 28.8, 30.2, 31.9, 33.1, 33.1, 33.2,
    33.2, 33.4, 33.7, 35.0, 36.0, 36.8, 38.8, 40.2, 41.9);
FLASH_TABLE(boolean, font_table, 7, {0,0,0,0,0,0,0},
    {0,0,0,1,0,1,1}, {1,0,1,1,1,0,1}, {1,1,0,0,0,0,0},
    {0,1,0,1,0,1,0}, {1,0,1,1,1,0,1}, {1,0,0,1,0,0,1},
    {0,0,1,1,0,1,1}, {1,0,1,1,1,1,1});
FLASH_STRING_ARRAY(digits, PSTR("Zero"), PSTR("One"),
    PSTR("Two"), PSTR("Three"), PSTR("Four"), PSTR("Five"),
    PSTR("Six"), PSTR("Seven"), PSTR("Eight"), PSTR("Nine"));

Existe uma maneira de usar isto na IDE Beta?

--
edit:

Se ajudar, aqui está os macros na lib (que não está sendo usada):

Code:
#define FLASH_STRING(name, value) \
  static const char name##_flash[] PROGMEM = value; \
  _FLASH_STRING name(name##_flash);

// Example: FLASH_ARRAY(float, temperatures, 98.1, 98.5, 99.1, 102.1);
#define FLASH_ARRAY(type, name, values...) \
  static const type name##_flash[] PROGMEM = { values }; \
  _FLASH_ARRAY<type> name(name##_flash, sizeof(name##_flash) / sizeof(type));

// Example: FLASH_TABLE(uint8_t, fonts, 7, {ON, OFF, ON, ON, OFF, ON, OFF}, {OFF, ON, OFF, ON, OFF, ON, OFF});
#define FLASH_TABLE(type, name, cols, values...) \
  static const type name##_flash[][cols] PROGMEM = { values }; \
  _FLASH_TABLE<type> name((const PROGMEM type *)name##_flash, sizeof(name##_flash) / sizeof(name##_flash[0]), cols);

// Example: FLASH_STRING_ARRAY(nums, PSTR("One"), PSTR("Two"), PSTR("Three"), PSTR("Four"), PSTR("Five"));
#define FLASH_STRING_ARRAY(name, values...) \
  const PROGMEM char *name##_arr[] = { values }; \
  _FLASH_STRING_ARRAY name(name##_arr, sizeof(name##_arr) / sizeof(name##_arr[0]));
11  Using Arduino / Sensors / Re: Does INA128/129 need negative voltage or can I use GND? on: September 08, 2014, 10:09:46 am
Thanks for advice! But I have plent of INA129, if I didn't find a way to use it, I would replace for INA122 and discard the INA129
12  Using Arduino / Sensors / Does INA128/129 need negative voltage or can I use GND? on: September 08, 2014, 08:22:46 am
Is The following right?


If not, how can I make INA129 works with V- to GND?
13  Topics / Home Automation and Networked Objects / [solved] Arduino Ethernet + Android: how to send commands via Android to Arduino on: September 08, 2014, 06:59:32 am
Hello,

I'm working on a simple project, but I don't know nothing about GET POST methods, my code is mostly copy/paste...
Idea is at the moment I get connected to my home wifi, Arduino will do something (like turn on the outside lamp, but you know, possibilities are infinite).

at Android side, I'm thinking in run it from Trigger. So Trigger will run the address, or open an app wich will send the command to Arduino.
Trigger: https://play.google.com/store/apps/details?id=com.jwsoft.nfcactionlauncher

Arduino is currently running the following code:
Code:
IPAddress ip(192,168,0,126);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetServer server(81);
EthernetClient client;

void setup() {
  pinMode(pinLamp, OUTPUT);
  pinMode(pinGND, OUTPUT);
  digitalWrite(pinGND, LOW);
    // Open serial communications and wait for port to open:
  Serial.begin(9600);
  
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // listen for incoming clients
  client = server.available();
  if (client) {
    writePage();
  }
}

void writePage()
{
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n') {                    // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();

// the content of the HTTP response follows the header:
client.print("<font size=\"24\" face=\"arial\">Automacao residencial<br><br><br>");
client.print("Lampada externa: <a href=\"/H1\">ON</a> | <a href=\"/L1\">OFF</a><br><br>");
client.print("Lampada escada: <a href=\"/H2\">ON</a> | <a href=\"/L2\">OFF</a><br></font>");
// The HTTP response ends with another blank line:
client.println();
// break out of the while loop:
break;
}
else {      // if you got a newline, then clear currentLine:
currentLine = "";
}
}
else if (c != '\r') {    // if you got anything else but a carriage return character,
currentLine += c;      // add it to the end of the currentLine
}

// Check to see if the client request was "GET /H" or "GET /L":
if (currentLine.endsWith("GET /H1")) {
digitalWrite(pinLamp1, HIGH);               // GET /H turns the LED on
}
if (currentLine.endsWith("GET /L1")) {
digitalWrite(pinLamp1, LOW);                // GET /L turns the LED off
}
if (currentLine.endsWith("GET /H2")) {
digitalWrite(pinLamp2, HIGH);               // GET /H turns the LED on
}
if (currentLine.endsWith("GET /L2")) {
digitalWrite(pinLamp2, LOW);                // GET /L turns the LED off
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disconnected");
}

when I put Arduino IP on my my web browser, it shows a page with 4 links, each one will execute the action for /L1, /H1, /L2, /H2.

Question is, how can I send it from Android without request an action from user?

If I make a script to send /L1 directly to Arduino, how it will looks like?
192.168.0.126/H1 or 192.168.0.126?H1, or neither, or both... some light?
14  International / Portugues / Re: Escada Inteligente - A realização de um sonho on: July 24, 2014, 07:46:17 am
Ficou muito engraçado!
Não percebi 2 coisas:
1- Os interruptores são os que já estavam na instalação, certo? (e foi aproveitada essa altura para colocar o sensor, não é?)
2- na parte de baixo não tem nenhum sensor ou o sensor é diferente? (vê-se uma pequena placa no vídeo, mas é diferente da de cima)

Sim e sim  smiley
Eu comprei os sensores ultrasonicos no ebay e vai demorar uns 3-4 meses para chegar. Para não ter que esperar improvisei com uma chave embaixo e um sensor IR em cima.

Ia colocar os sensores na altura dos pés para ficar mais discreto, mas tenho gatos em casa, seria um inferno com eles ativando o tempo todo a iluminação  smiley-sweat
15  International / Portugues / Re: Ligando 2 shift register em série com lógica (física) invertida on: July 23, 2014, 03:28:03 pm
Luis, acredito que o código é aquilo mesmo, estava com a cabeça tão cansada que não sabia direito o que estava fazendo e na tentativa e erro acabou funcionando para o que eu queria daquele jeito mas não conseguia trabalhar em cima do código.

No caso de mudar a sequencia, é só levar em consideração que a variável led contem os bytes pra cada registrador, e a variável i indica a posição do led na ordem em que ele está instalado.

Postei o vídeo do projeto "final" no outro tópico, mas vou por aqui também para referência futuras:

https://www.youtube.com/watch?v=Yu8I_pT2ZEY
Pages: [1] 2 3 ... 19