Show Posts
Pages: [1] 2 3 ... 18
1  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
2  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
3  International / Portugues / Re: Escada Inteligente - A realização de um sonho on: July 23, 2014, 03:17:44 pm
Como prometido:
Como ficou o projeto adaptado > https://www.youtube.com/watch?v=Yu8I_pT2ZEY
4  International / Portugues / Re: Ligando 2 shift register em série com lógica (física) invertida on: July 22, 2014, 12:15:46 pm
as portas do Shift Register são de A à H (0 a 7). ao invés de eu ligar o led L0 a porta A (0), liguei a porta H (7) e inverteu todo o resto (L1 -> 6, L2 -> 5, etc). porém, no segundo shift register ficou certo, L8 na porta A, L9 na porta B, etc

Posso até postar o esquemático, mas não seria de grande ajuda sendo que o erro foi na instalação.

O correto aliás, seria eu corrigir a instalação, mas já me custou o domingo inteiro, prefiro tratar disso no software smiley-sweat
5  International / Portugues / Re: Ligando 2 shift register em série com lógica (física) invertida on: July 22, 2014, 11:30:58 am
http://arduino.cc/en/Reference/BitSet
http://arduino.cc/en/Reference/BitClear
Basicamente seta(1) ou zera o bit i na variável leds.
Creio que deve ser uma espécie de macro para leds |=  (1<<i) e leds &= ~(1<<i)

PS.: Estou quebrando a cabeça a horas, e acredito que está certo mesmo o que eu fiz visto que ordem dos leds é SRA[7..0],SRB[0..7]
6  International / Portugues / Ligando 2 shift register em série com lógica (física) invertida on: July 22, 2014, 09:42:15 am
Pessoal, preciso de ajuda pra desenvolver o raciocínio para melhorar o código da seguinte  questão:

Quero acender 12 leds (L1 à L12)  1 por vez usando dois shift registers em série (SRA e SRB).
A ligação no SRA acabou ficando invertida, o L1 está na porta H.
No SRB está OK.

Eu consegui (mais ou menos) fazer o que queria, porém o código está uma bagunça pois não consegui desenvolver o raciocínio lógico para tal.

Code:
for (int i=0; i<=totalSaidas; i++){
      bitSet(leds, i);
      shiftWrite(leds,i);
      delay(t);
    }
    delay(tempo);
    for (int i=0; i<=totalSaidas; i++){
      bitClear(leds, i);
      shiftWrite(leds,i);
      delay(t);
    }
e o controle do SR:
Code:
void shiftWrite(unsigned int _leds, unsigned int pos) {
  digitalWrite(latchPin, LOW);
  if (pos < 8) {
    shiftOut(dataPin, clockPin, MSBFIRST, _leds);
    shiftOut(dataPin, clockPin, MSBFIRST, _leds >> 8);
  }
  else{
    shiftOut(dataPin, clockPin, LSBFIRST, _leds);
    shiftOut(dataPin, clockPin, LSBFIRST, _leds >> 8);
  }
 
  digitalWrite(latchPin, HIGH);
}

No caso queria melhorar, porque assim preciso de outra função para praticamente cada sequencia diferente que tentar com os LEDs
7  International / Portugues / Re: Criar uma Rede RF entre arduinos... on: July 17, 2014, 09:27:32 am
xbee é legal mas é muito caro comparado aos módulos RF chineses, mas gostei da ideia da rede RF, está anotado para soluções de futuros problemas smiley

Ainda, ligando um dos Arduinos a um Ethernet shield, dá pra expandir ainda mais as possibilidades

ps.: obrigado bubulindo pelo link
8  International / Portugues / Re: Como ler no arduino a porta serial criada pelo Bluetooth? on: July 17, 2014, 09:20:40 am
Primeiro entenda que seu problema é que a porta usada pelo módulo no PC é uma, e a usada pelo Arduino é outra. A não ser que exista algum software pronto na internet que apenas escreve o que recebe de uma porta em outra (é bastante simples, mas eu desconheço algo assim), você terá que programar algo no PC sim.

Aí entra na questão que bubulindo citou, se você vai programar no PC, porque programar mais um Arduino?
9  International / Portugues / Re: Máscara de bits on: June 30, 2014, 07:43:20 am
Eu também tinha dúvida de como funcionava especificamente o comando (1 << x). A resposta na verdade é mais simples do que imaginava: o número 1, só tem 1 bit "válido" (0000 0001), então deslocando este bit 'x' vezes, eu posso manipular facilmente o bit a ser escrito ou comparado.

"Traduzindo para o portugues" a expressão if (i & (1 << x)) seria algo como:
Se o bit atual sendo comparado (for (int x = 0; x <= 7; x++)) do byte (i) possui o bit (1<<x) válido, coloca no registrador (digitalWrite(data,HIGH);). Se não, coloca 0 (digitalWrite(data,LOW);).
O latch grava o bit.
10  International / Portugues / Re: manipular arquivo ini on: June 26, 2014, 03:11:33 pm
Não entendi direito o que deseja fazer, mas as funções na referencia da biblioteca não são suficientes?

http://arduino.cc/en/Reference/SD

11  International / Portugues / Re: Escada Inteligente - A realização de um sonho on: June 25, 2014, 10:35:00 am
Não vou aguentar esperar chegarem meus sensores  smiley-sweat, achei um sensor infrared jogado aqui e vou implementar assim mesmo: Num lado o sensor infrared, do outro lado um interruptor (do tipo campainha). Vou comprar canaletas e cabo de rede neste final de semana para instalar. Quando os sensores ultrassom chegarem eu instalo no lugar e altero o software

Teste:
http://youtu.be/B1wzsMQ-zcY

Esquemático:
http://imgur.com/wvy21Po

Código modificado para sensor e botão:
Code:
#define SENSOR1 A0 // Analog input pin that  is attached to the sensor
#define SENSOR2 8 //D8
#define ADC_REF 5//reference voltage of ADC is 5v.If the Vcc switch on the seeeduino
//board switches to 3V3, the ADC_REF should be 3.3


#define MAX_DISTANCE 1.0 // deve ser ajustado para distância de trigger desejada

float voltage;//the sensor voltage, you can calculate or find the distance
// to the reflective object according to the figures
//on page 4 or page 5 of the datasheet of the GP2Y0A21YK.


//Variáveis de uso dos registradores 74HC595
int latchPin = 10;  //Pino 8 conectado ao pino 12 do 74HC595 (Latch).
int dataPin = 11;  //Pino 11 conectado ao pino 14 do 74HC595 (Data).
int clockPin = 13; //Pino 12 conectado ao pino 11 do 74HC595 (Clock).

int totalSaidas = 16; // max 16
int t = 100; //tempo entre o acender dos leds.
int tempo = 2000; //tempo que fica aceso os leds para depois apagar.

unsigned int leds;

void setup()
{
  // initialize serial communications at 9600 bps: 
  Serial.begin(9600);
 
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(SENSOR2, INPUT_PULLUP); // porque é botao
  shiftWrite(0);
}
 
void loop()
{
  leds=0;
  voltage = getVoltage();
  Serial.println(voltage);
  if(voltage > MAX_DISTANCE) {
    for (int i=0; i<=totalSaidas; i++){
      bitSet(leds, i);
      shiftWrite(leds);
      delay(t);
    }
    delay(tempo);
    for (int i=0; i<=totalSaidas; i++){
      bitClear(leds, i);
      shiftWrite(leds);
      delay(t);
    }
  }
   
  if (!digitalRead(SENSOR2))
  {
    for (int i=0; i<totalSaidas; i++){
      bitSet(leds, totalSaidas-i);
      shiftWrite(leds);
      //mega.shiftWrite(totalSaidas+1-i, HIGH);
      delay(t);
    }
       
    while(voltage < MAX_DISTANCE) {
      voltage = getVoltage();
    }
   
    for (int i=0; i<totalSaidas; i++){
      bitClear(leds, totalSaidas-1-i);
      shiftWrite(leds);
      //mega.shiftWrite(totalSaidas+1-i, LOW);
      delay(t);   
    }
    voltage = 0;
  }
   
  // wait 500 milliseconds before the next loop
  delay(100);
}
/****************************************************************************/
/*Function: Get voltage from the sensor pin that is connected with analog pin*/
/*Parameter:-void      */
/*Return: -float,the voltage of the analog pin      */
float getVoltage()
{
int sensor_value;
int sum; 
// read the analog in value:
for (int i = 0;i < 20;i ++)//Continuous sampling 20 times
{
sensor_value = analogRead(SENSOR1);
sum += sensor_value;
}
sensor_value = sum / 20;
float voltage;
voltage = (float)sensor_value*ADC_REF/1024;
return voltage;
}

void shiftWrite(unsigned int _leds) {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, _leds);
  shiftOut(dataPin, clockPin, MSBFIRST, _leds >> 8);
  digitalWrite(latchPin, HIGH);
}
12  International / Portugues / Re: Arduino Mega 2560 (Não pode ser usado Codigo 10) on: June 23, 2014, 08:25:17 am
Tem outro Arduino e/ou outro cabo pra testar? Outro PC se possível também. Se o computador reconhece como dispositivo não identificado o problema é a porta usb, o cabo, ou o dispositivo conectado (o Arduino no seu caso), tenta isolar o erro
13  International / Portugues / Re: Escada Inteligente - A realização de um sonho on: June 23, 2014, 08:23:02 am
Muitooo legal, excelente ideia smiley-grin
Já encomendei 4 sensores, vou implementar a ideia do HugoPT. usando 2 sensores no alto, e 2 sensores embaixo da escada, medindo assim a velocidade da pessoa e acendendo dinamicamente os leds. Uma pena que tá demorando séculos para chegar encomendas internacionais no Brasil, mas com certeza lembrarei de compartilhar quando estiver pronto (entre 2 a 4 meses para chegar)
14  International / Portugues / Re: Problema com serial on: June 23, 2014, 08:01:25 am
Code:
const unsigned int Led = 8;
char Ch;

void setup() {
  Serial.begin(9600);
  pinMode(8,OUTPUT);
  Serial.println("Sistema pronto!");
}

void loop(){
  String Msg = "";
  if(Serial.available() == 0) return;
  while(Serial.available()){
//Serial.println(Serial.available()); // esta linha imprime 4 3 2 1, que é o valor retornado pela função Serial.available() no seu caso
    Ch = Serial.read();
    Msg.concat(Ch);
  }
  Serial.println(Msg);
  delay(1000);
}
15  International / Portugues / Re: EasyVR e modo Stand_BY on: June 23, 2014, 07:58:29 am
http://playground.arduino.cc/Learning/ArduinoSleepCode
Pages: [1] 2 3 ... 18