Control My Garden… v0.2.3

Feb 23
2011

Sei que tenho mais uma vez andado desaparecido daqui do estaminé, mas é porque ao mesmo tempo ando com outros projectos que interagem nao so com o Arduino mas com o nosso dia a dia.

Deem uma olhadela ai no Coisas, Projectos e Ideias 😉

enfim… lembram-se do Save My Plant?

Pois bem, tal como tinha falado espandiu-se ao quintal la de casa e agora chama-se “Control My Garden” e mostra isto:

As funçoes dele sao:

  • Status
  1. Humidade da Terra na SFG
  2. Temperatura no Jardim
  3. Movimento no quintal
  4. Valores actualizados para o Pachube.com ( ver feed do estado do nosso SFG)
  • Automatismos
  1. Rega automatica de todo o quintal
  2. Sensor de Movimento (para manter os animais afastados da horta!!)
  3. Tweets com Reports Diarios do estado da Horta
  4. Tweets em caso de falta de agua ou de movimento no quintal.
  • A implementar:
  1. Nivel da agua nos barris da chuva
  2. Ligar e desligar a bomba que irá tirar a agua dos barris para a horta
  3. Menus no LCD ( para ligar rega, para outros status, etc)
  4. outras ideias 😉

O codigo ja sofreu diversas alteraçoes, e agora estou com um problema de incompatibilidades entre o Twitter lib e o Time lib, ou seja se tenho os alarmes configurados o twitter crasha-me o Arduino se nao tenho alarmes nao tenho uma maneira “precisa” de obter relatorios…

Entretanto hoje adicionei o Pachube.com porque como o pais anda em crise não queremos ter computadores ligados em casa 24×7. Vou testar hoje a noite.

As caixas ainda não estão todas bem colocadas mas isto funciona ao estilo do Gardenbot por módulos, sendo que:

  1. o Cerebro a caixa onde esta o Arduino com um Ethernet over Powerline, que me permite ter o arduino em qualquer parte, seja no telhado, no quintal, na garagem, etc, desde que tenha ponto de electricidade, pumba funciona.
  2. o Centralizador que é a caixa onde se ligam os sensores e que depois segue para o Cerebro
  3. os Sensores que é o conjunto de sensores (humidade, temperatura, movimento, nivel da água)
  4. o LCD que é a imagem que esta ai em cima e esta ligado por um cabo RJ45 ao Cerebro e me da o status do jardim.

Todos este modulos sao ligado atravez de RJ45, basicamente porque tenho la pazadas de cabos de rede compridos e 8 cabos dentro de um so torna-me a vida muito mais facil 😉

Ainda dentro do armario onde temos o Cérebro temos duas valvulas solenoides com os respectivos relays para controlar o sistema da rega que esta em standby devido a incompatibilidade ja antes mencionada entre a Twitter Lib e a Time Lib.

Depois meto aqui um desenho bonito de como tudo esta montado bem como o codigo, se hoje o conseguir por a funcionar a 90%…

NOTA: Cheguei a conclusão que tenho que comprar mais um sensor de movimento e fazer comparações entre os dois sensores porque está me a dar muitos Falsos Verdadeiros devido a excelente sensibilidade do sensor….

LCD Nokia 5110

Jan 05
2011

..como tinha prometido, aqui fica o meu post/tutorial de como colocar este rapaz a funcionar…

Ora bem, depois de alguns mails trocados com quem de direito, aka Filipe Valpereiro e Carlos Rodrigues la consegui por isto a funcionar, mas a realidade é que tive “sorte”.

Sorte porquê? porque devido a não ler tudo ate ao fim podia ter queimado o LCD assim sem mais nem menos, é que este menino funciona a 3.3V e quando se diz 3.3V SAO mesmo TODOS OS PINS, nao é so o VCC…e eu como sou toto nao sabia disso. Devia ter lido o Datasheet!!

Mas felizmente nao queimou e a prova disso é que no dia 31 mandei um tweet com uma imagem do LCD a dizer HAPPY NEW YEAR, hehe…para fugir um pouco ao clássico “Hello World”.

Bem ja chega de conversa e vamos ao que interessa. Existem duas maneira de ligar isto a correcta e que funciona, e a menos correcta, mas que continua a funcionar…ainda estou a espera de ter confirmação se é seguro usar assim.

Para ja vao precisar da seguinte lista de material:

  • 1 x Nokia 5110 LCD
  • 6 x Resistencias de 10K
  • 8 x Jumper Cables
  • 1 x Arduino

Nota: se usarem um arduino que funcione a 3.3V nao precisam de resistencias, podem ligar o LCD directamente!

Depois de terem este material todo é so ligarem os pins com a seguinte ordem:

Nota: Estas ligaçoes sao especificamente para o Nokia 5110 LCD se usarem outro convem verem os pins que veem indicados “normalmente” por tras da board do LCD. no meu caso vinham e sao estas:

O que da as seguintes ligaçoes:

  • LCD —– > Arduino
  • 1 ———> 3.3V
  • 2 ———> GND
  • 3 ———> D7
  • 4 ———> D6
  • 5 ———> D5
  • 6 ———> D4
  • 7 ———> D3
  • 8 ———> (Este eu não liguei porque são os leds do LCD, mas por motivos de teste podem ligar em qualquer um desde que o PIN esteja HIGH)

E afinal onde é que colocamos as resistências???

Ok aqui entra a minha duvida, que talvez quem perceba mais de electronica possa esclarecer, ha duas maneiras de ligar, eu para ja estou a usar uma que assume que a board do LCD tenha um Diodo que assegura que nao queima, mas ha maneiras mais correctas segundo me informou tanto o Filipe Valpereiro com o Carlos Rodrigues, estes dois a quem gabo a paciência para me aturarem os mais 😉 eu ja tinha metido um filtro para spam para mim mesmo…hehe..

O melhor mesmo é verem este Tutorial da Sparkfun que explica tudo como devem fazer, e depois se não vos agradar ou quiserem arriscar fazer a minha maneira passem para o parágrafo seguinte.

Eu liguei metendo nada mais nada menos do que uma resistência de 10K entre cada pin do LCD e cada pin do Arduino, e ei esta a funcionar as mil maravilhas, pelo menos por enquanto ainda nao vi fumo, seja ele branco ou de outra cor qualquer… Por isso voces é que sabem, é a vossa responsabilidade!

Note-se que este desenho é apenas a titulo ilustrativo e a minha primeira experiencia, falhada, diga-se de passagem 😉 com o Fritzing, mas da para perceberem a ideia…

Apesar de so estarem 6 resistencias se quiserem ligar o Pin 8 do LCD (LED) ao arduino o esquema é o mesmo, é so meterem la uma resistencia de 10K.

Em seguida depois de tudo ligado e conferido, so teem que sacar a LIB Arduino Library ( Thanks to Carlos Rodrigues) instalarem no vosso local do costume, e carregarem o exemplo que vem com a LIB ou simplesmente copiarem o seguinte sketch.

/*
 * PCD8544 - Interface with Philips PCD8544 (or compatible) LCDs.
 *
 * Copyright (c) 2010 Carlos Rodrigues
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
 
/*
 *
 * Since these LCDs are +3.3V devices, you have to add extra components to
 * connect it to the digital pins of the Arduino (not necessary if you are
 * using a 3.3V variant of the Arduino, such as Sparkfun's Arduino Pro).
 */
 
#include
 
// A custom glyph (a smiley)...
static const byte glyph[] = { B00010000, B00110100, B00110000, B00110100, B00010000 };
 
static PCD8544 lcd;
 
void setup() {
  // PCD8544-compatible displays may have a different resolution...
  lcd.begin(84, 48);
 
  // Add the smiley to position "0" of the ASCII table...
  lcd.createChar(0, glyph);
}
 
void loop() {
  // Just to show the program is alive...
  static int counter = 0;
 
  // Write a piece of text on the first line...
  lcd.setCursor(0, 0);
  lcd.print("Hello, World!");
 
  // Write the counter on the second line...
  lcd.setCursor(0, 1);
  lcd.print(counter, DEC);
  lcd.write(' ');
  lcd.write(0);  // write the smiley
 
  delay(500);
  counter++;
}

E se de facto tiverem tudo bem ligado deverá aparecer um glorioso “Hello World” no vosso lcd com um pequeno smiley e um numero a incrementar.

Confesso que a mim não me aconteceu isso da primeira vez, porque primeiro como ja mencionei estava a ligar a 5V e segundo porque não estava a olhar correctamente para os pins de um lado e de outro.  Por isso em caso de duvida ligem usando este esquema que aqui vos coloco.

Se por acaso, depois quiserem mudar a ordem dos pins no Arduino, teem que alterar directamente na lib PCD8544.h que tem quase no incio algo tipo

// The pins used by this library...
#define PCD8544_SCLK  8  /* clock       (display pin 2) */
#define PCD8544_SDIN  4  /* data-in     (display pin 3) */
#define PCD8544_DC    5  /* data select (display pin 4) */
#define PCD8544_RESET 6  /* reset       (display pin 8) */
#define PCD8544_SCE   7  /* enable      (display pin 5) */

E que como podem constatar este é o meu, e ja foi alterado. mudei o pin 3 para pin 8 uma vez que estou a usar o pin 3 para outra shield.

E pronto, penso que mais simples que isto não pode ser, é mesmo como dizem no site, “Plug and Pray” 😉

Como sempre dúvidas, ajudas e mais importante sugestões são muito bem vindas…

Follow Me