Páginas

sábado, 23 de novembro de 2013

Player com seletor ultrasonico


A ideia aqui é aproveitar  um tocador que tinha feito para o Android que tocava músicas do pc escolhidas no celular. O que vamos fazer aqui é criar uma interface com sensor ultrasonico sendo utilizado como seletor utilizando o Arduino, e um celular Android, com o afastamento ou aproximação da mão e relação ao  sensor ultrasonico é escolhida e mostrada  a música ou video na tela do celular, e depois ou automaticamente tocada no celular e  com o aperfeiçoamento do projeto enviando para tocar no computador.

Começando primeiramente tocando música somente no Arduino.

Então vamos lá...

Materiais utilizados :

1 Sensor Ultrasonico
1 Arduino UNO
1  Sensor de presença PIR
1 Autofalante de 8 Ohms
1 Laser efeito Visual




1- Pré projeto - Tocando som  no Arduino

Ideia do funcionamento

Este primeiro projeto tem um resultado bastante simples, emite sons dos Speakers conectados ao Arduino. Assim que ligamos o tocador, temos que fazer uma calibração com a mão ou um objeto na frente do sensor ultrassonico afastando (valor máximo)  e aproximando para obter um valor  minimo, neste estagio o laser acende, apagando após o tempo de calibração que é de 5s.
O aparelho só emite som quando tem alguem por perto, isto é quando o sensor de presensa detecta alguem . Quando o sensor não detecta, o laser fica piscando em modo standby. E ainda podemos ligar e desligar o som atraves da porta serial enviando parametros, para ligar e desligar.

Ligação dos componentes com  o Arduino

Através do códogo abaixo que esta bem comentado, podemos ver a ligação dos disppositivos com Arduino, o Laser, o sensor PIR, o sensor ultrasonico usam o 5v e o GND, o Arduino não tem tres pinos 5v, então use uma protobord ou placa para unir os fios 5v e Gnd dos dispositivos.
Quanto ao laser vc tem de usar um resistor para diminuir a voltagem, no meu caso o meu laser usa 3v.
QQ duvida entre em contato estarei disposto a responder as duvidas:
e-mail : porskoll@hotmail.com

O proximo passo é fazer tocar notas musicais, se alguem estiver disposto a ajudar !

Referencias:

http://youtu.be/57S3dylfw3I

http://youtu.be/Q7nZWcOivpA



Segue agora o código :

// tocador simples se som com sensor ultasonico

int valorSensorUltra =0; // inicializa o valor do sensor com zero
int valorMAXSensorUltra =0; // valor maximo lido na calibragem
int valorMINSensorUltra =500; // valor minimo lido na calibragem
int triPin =12; // sensor ultrasonico Trigger pino 12
int echoPin = 13; // sensor ultrasonico  Echo mpino 13
int PirSensorPresenca = 10; // sensor de presença pino 10
int laser = 7; // lus do laser pino 7
int pinSpeaker = 11;  // determina o pino do buzzer usando um pino PWM
int periodo=0; // tempo de leitura do sensor ultrasonico
int Mapeado=0; //  variavel que guarda o valor mapeado por map
int distancia=0; // distancia lida no sensor
int presenca = LOW; // utilizado pelo PIR
void ultrasonico(); // declaracao da funcao
char botao; // recebe parametro da serial para ligar= l  e deligar= d
int estadoBotao = 1; // um ligado 0 desligado

void setup () {

  Serial.begin(9600);
  pinMode(laser,OUTPUT);
  pinMode(triPin,OUTPUT);
  pinMode(echoPin,INPUT);
  calibragem(); 
  Serial.println(valorMINSensorUltra); // manda os valores para a serial 
  Serial.println(valorMAXSensorUltra);
}

void loop ()
{
  presenca = digitalRead(PirSensorPresenca);
  botao = Serial.read();
  Serial.flush();
  Botao(); // liga ou desliga o som
  
    if (presenca == HIGH && estadoBotao == 1)
    {
      ultrasonico(); // executa a funcao
      tocaSom(10,20,4000); //parametros (delay de espera,valor min,valor max)
    }
    
    else 
    {
      Standby(); // entra em estado de espera
    }
}  

//------------------------------------------------------------------------------------------------------------
// funçoes utilizadas 
void ultrasonico() // faz a leitura do sensor ultrasonico e grava na variavel global distancia
  digitalWrite(triPin,LOW);
  digitalWrite(triPin,HIGH);
  delay(10);
  digitalWrite(triPin,LOW);
  periodo = pulseIn(echoPin,HIGH);
  distancia = (periodo / 58);// em centimetros
}

void calibragem() // funcao calibragem
{
  digitalWrite(laser,HIGH); // liga o laser

  while (millis() < 5000 ) // faz a calibragem entre o menor e maior valor do sensor
  {
    ultrasonico();
    if (distancia  > valorMAXSensorUltra) 
    {
      valorMAXSensorUltra = distancia;
    }
    if (distancia  < valorMINSensorUltra) 
    {
      valorMINSensorUltra = distancia;
    }
  }
  digitalWrite(laser,LOW);  // desliga o laser
}

void tocaSom(int espera,int mapMin,int mapMax) // funcao para tocar o som
  valorSensorUltra = distancia; // grava o valor lido na funcao ultrasonico
  int mapeado = map(valorSensorUltra, valorMINSensorUltra,valorMAXSensorUltra,mapMin,mapMax); // mapeia o o valor maximo e minino feito na calibragem  entre a maior e menor frequencia
  tone(pinSpeaker,mapeado,20); // toca um som no pino com a frequencia do mapeamento por 20 mili segundos
  delay(espera);
}

void Standby()
{
  digitalWrite(laser,HIGH);
  delay(300);
  digitalWrite(laser,LOW);
  delay(300);
}

void Botao()
{
  if (botao == 'd')
  {
    estadoBotao = 0;
  }
  
  if (botao == 'l')
  {
    estadoBotao = 1;
  } 
}

domingo, 17 de novembro de 2013

Engenharia Reversa - Descompilando > Modificando > Recompilando > Ativando e instalando um APK do Android.


O texto abaixo mostra como desconpilar um APK do Android para modificações.
Como utilizamos a conexão bluetooth em muitos projetos, temos a solução para o erro que ocorre : erro de permissão ADMIN BLUETOOTH.
A instalação do aplicativo feito no APPInventor com sistema Android na versão Android 2.3 (Gingerbread) ocorre sem nenhum problema, e funciona corretamente. Mas quando instalado  na versão 4.1.2 ocorre um erro de permissão ADMIN BLUETOOTH e o aplicativo não funciona.
Para resolver este problema, utilizamos da engenharia reversa, iremos decompilar o aplicativo fazer as modificações necessárias e recompila-lo e ativa-lo.
Utilizando os conhecimentos apreendidos no site links  para download (apktool e  SignApk) AQUI -->  http://www.reddit.com/r/Android/comments/11852r/how_to_modify_an_apk/ iremos ver como fazer para que o APK possa ser instalado e utilizado em um Android com versão 4.1.2. Outras versões não posso afirmar que funcionarão, pois o problema apareceu e tenho estes dois Smartfones com a versão descrita acima  e foram resolvidos como abaixo.
Os aplicativos para modificação são feitos em Java e para que funcione o JDK tem de estar instalado no computador, e o caminho Java tem de ser colocado no PATH do Windows. As modificações serão feitas no arquivo depois de decompilado chamado AndroidManifest.xml é neste arquivo que encontramos algumas das configurações da aplicação Android, acrescentei a linha [<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />], é ela responsável pelo acerto do erro exibido na aplicação na versão 4.1.2. Veja na figura a seguir os itens marcados que foram modificados.


Figura 22 - Android Manifest
Passos para criação do novo APK:
1.      Baixei os aplicativos apktool e  SignApk e descompactei os arquivos, na raiz c:\.
2.      Copiei aplicação  [apknome.apk] que voce quer modificar para  para a pasta apktool
3.      Rodei o comando pelo DOS: apktool d [apknome].apk
4.      Entrei pelo Windows na pasta apknome que foi criada pelo comando anterior e editei o arquivo AndroidManifest.xml como descrito na figura 22 e salvei o arquivo
5.      Rodei o comando: apktool b [nome da pasta descompilada] [apknovonome].apk
6.      Será gerada uma nova aplicação, copiei para a pasta SignApk
7.      Rodei o comando: java -jar signapk.jar certificate.pem key.pk8 [apkcopiado].apk [apknovonome].apk


Copiei o novo apk para o smartfone e instale.

sábado, 16 de novembro de 2013

Ponte H para movimentar um carrinho + Arduino e Android

Boa Tarde, Galera do Ardroid.


Neste post vamos ver como criar uma ponte H, para controlar o sentido um motor DC de um carrinho e tambem um software para controlar a velocidade e sentido do motor no Arduino + o software do celular Android  criado no APPInventor do MIT, utilizando um modulo Bluetooth conectado a um Arduino UNO.


Veja no video abaixo do projeto:



Antes de descrever o projeto vamos a um pouco de teoria...

O que é uma ponte H  e para que serve ?

Fonte Wikipedia

Ponte H é um circuito eletrônico que permite que o microcontrolador forneça a corrente necessária para o funcionamento do Motor de corrente contínua, visto que o micro controlador normalmente trabalha em 5V e em baixas correntes, enquanto o motor DC costuma exigir altas potências.

Além disso, a Ponte-H torna possível que o motor rode tanto para um sentido quanto o outro. Estes circuitos são geralmente utilizados em robótica e estão disponíveis em circuitos prontos ou podem ser construídos por componentes.


Quer saber + sobre ponte H veja este PDF

Transistores

Fonte Wikipedia

O transistor  é um componente eletrônico que começou a popularizar-se na década de 1950, tendo sido o principal responsável pela revolução da eletrônica na década de 1960. São utilizados principalmente como amplificadores e interruptores de sinais elétricos, também são usados como retificadores elétricos em um circuito podendo ter variadas funções . O termo provém do inglês transfer resistor(resistor/resistência de transferência), como era conhecido pelos seus inventores.

O processo de transferência de resistência, no caso de um circuito analógico, significa que a impedância característica do componente varia para cima ou para baixo da polarização pré-estabelecida. Graças a esta função, a corrente elétrica que passa entre coletor e emissor do transistor varia dentro de determinados parâmetros pré-estabelecidos pelo projetista do circuito eletrônico. Esta variação é feita através da variação de corrente num dos terminais chamados base, o que, consequentemente, ocasiona o processo de amplificação de sinal.

Entende-se por “amplificar” o procedimento de tornar um sinal elétrico mais fraco num mais forte. Um sinal elétrico de baixa intensidade, como os sinais gerados por um microfone, é injetado num circuito eletrônico (transistorizado por exemplo), cuja função principal é transformar este sinal fraco gerado pelo microfone em sinais elétricos com as mesmas características, mas com potência suficiente para excitar os alto-falantes. A este processo todo dá-se o nome de ganho de sinal.


Conheça mais sobre eletrônica deste curso básico em PDF

Agora que apendemos um pouco sobre ponte H e transistores vamos conhecer o projeto na pratica. tome nota do material utilizado:

1 Arduino UNO
4 Transistor  bipolar NPN - TIP 122 (data sheet)
4 Resistor 560 Ohms
1 Modulo Bluetooth
1 Prototype Universal Printed Circuit Board Breadboards
3 Jumpers Macho
2 Jumpers Femeas duas saidas


O modelo de ponte H retirei do forum do clube do hardware link adptando para uso com o Arduino. o esquema abaixo foi criado para ser utilizado em conjunto com arduino.

Esquema de ligação :

Ja foi testado na pratica e funciona muito bem, transferindo potencia suficinte para o motor.

Vejo o esquema de montagem abaixo:


Repare no esquema abaixo as imagens estão sobrepostas para entender melhor a ligação.
Veja na sequencia as duas fotos sem sobreposição.
Repare que a base dos transistor 1 e 3 estão ligadas, assim como a base dos transitor 2 e 4 como mostra a figura acima no esquema.




Se preferir monte em uma protobord o esquema, veja a foto abaixo :

O esquema acima não esta muito detalhado, mas tomando como refencia o esquema acima com um pouco de calma e perceverença, a montagem sai.

Vamos passar agora para a programação no Arduino.

Software de controle no Arduino

Para alterar a velociade do motor e fazer sua inversão será utilizado duas funções.

// funcao para mudar a velocidade para frente
void andaFrente(char AndroidFrente, int frenteVel) {

  if (android == AndroidFrente)
  {
    analogWrite(pinSentidoTraz,0);
    delay(300);
    analogWrite(pinSentindoFrente,frenteVel);
    delay(300);
  }

// funcao para mudar a velocidade para traz
void andaTraz(char AndroidTraz, int trazVel) {
  
  if (android == AndroidTraz)
  {
  analogWrite(pinSentidoFrente,0);
  delay(300);
  analogWrite(pinSentidoTraz,trazVel);
  delay(300);
  }

}
Como podemos ver nas funções acima quando ela recebe o parametro da porta serial (no nosso caso vem do Bluetooth) a rotação contraria é parada para iniciar a rotação atual. Istó é necessario pois se a ponte é acionada nos quatro transitor ao mesmo tempo o circuito entrará em curto, danificando-o. TOME CUIDADO !!! Acione apenas um sentido de cada vez.

Veja o  código completo abaixo:

// controle do sentido e velocidade do carrinho

int pinSentidoFrente = 6; // atribui o pino 6 pra andar para frente

int pinSentidoTraz = 5; // atribui o pino 5 para andar para traz
void andaFrente(char AndroidFrente, int frenteVel); // função para contolar a velocidade no sentido para frente
void andaTraz(char AndroidTraz, int trazVel); // função para contolar a velocidade no sentido para traz
void parar (char AndroidParar); //  função para parar o carrinho
char android; // Recebe o parametro enviando pelo celular

/* a,b,c,d,e,f,g Velocidades para frente

 h,i,j,k,l,m,n Velocidades para traz */

void setup() {

  Serial.begin(9600);
  pinMode(pinSentidoFrente,OUTPUT);
  pinMode(pinSentidoTraz,OUTPUT);
}

void loop() {


  android = Serial.read();// faz a leitura do SmartFone por Bluetooth

  delay(100);
  
  // parar o carrinho
  parar('z');
  
  // altera a velocidade do motor para frente
  andaFrente('a',100);// utiliza o pino 6 até a letra g
  andaFrente('b',125);
  andaFrente('c',150);
  andaFrente('d',175);
  andaFrente('e',200);
  andaFrente('f',225);
  andaFrente('g',250);// 255 equivale ao MAX = 5 Volts
  
  // altera a velocidade do motor para Traz
  andaTraz('h',100);// utiliza o pino 5 até a letra n
  andaTraz('i',125);
  andaTraz('j',150);
  andaTraz('k',175);
  andaTraz('l',200);
  andaTraz('m',225);
  andaTraz('n',250);// 255 equivale ao MAX = 5 Volts
}

// funcao para mudar a velocidade para frente

void andaFrente(char AndroidFrente, int frenteVel) {
  if (android == AndroidFrente)
  {
    analogWrite(pinSentidoTraz,0);
    delay(300);
    analogWrite(pinSentidoFrente,frenteVel);
    delay(300);
  }
}

// funcao para mudar a velocidade para traz
void andaTraz(char AndroidTraz, int trazVel) {
  if (android == AndroidTraz)
  {
  analogWrite(pinSentidoFrente,0);
  delay(300);
  analogWrite(pinSentidoTraz,trazVel);
  delay(300);
  }
}

// função para parar o carrinho

void parar (char AndroidParar) {
  if (android == AndroidParar)
  {
  analogWrite(pinSentidoFrente,0);
  analogWrite(pinSentidoTraz,0);
  delay(300);
  }
}

O código acima foi testado e funciona adquadamente, fica faltando agora a programação do Android. Que em  breve colocarei aqui para finalizar o projeto.

Veja o video abaixo com o funcionamento do motor invertendo a rotação.
Qualquer duvida ou sujestão entre em contato terei o maio prazer, de tirar duvidas aceitar sujestoes ou criticas.