Competição de Robótica – FEMA

Projeto realizado na Fundação Educacional Machado de Assis – FEMA, através do curso técnico em informática  do qual sou coordenador e também do curso de Arduino. no qual sou professor.

Participaram do torneio 8 grupos de 4 integrantes cada, totalizando cerca de 32 pessoas. O evento ocorreu entre os dias 7 a 9 de outubro de 2014.

Para a criação dos robôs utilizamos o seguinte material:

> Kit chassi robótica. (Patrocínio da loja filipeflop)

> Ponte H.

> Sensor ultrassônico.

> Arduino Leonardo.

Todos os componentes foram adquiridos na loja filipeflop . Optamos por essa loja por ser reconhecida pelo ótimos produtos, rapidez no atendimento e preço baixo.

 

1796557_361631797346146_1034169424283920948_n

 

10172631_361631904012802_1406073033953303089_n

 

10347175_361634910679168_4086829156076568988_n

 

10675775_361631804012812_7748492682213989021_n

 

10704097_361634914012501_3350089444633079394_n

 

 

 

 

 

por ferpinheiro Postado em Arduino

Arduino, resistores variáveis e função map

Para esse tutorial vamos precisar de:

  • lápis 2B, 6B, ou outro qualquer que seja de cor forte.

  • fita crepe ou outra fita qualquer.

  • Arduino.

  • 3 Fios de conexão

  • Um pouco de escova de aço (Bombril)

  • Papel em branco

  • Régua

O objetivo desse projeto é criarmos um resistor variável parecido com um potenciômetro para entendermos o funcionamento do mesmo e o uso da função map do Arduino.

Um resistor variável tem a mesma funcionalidade de um resistor comum, ou seja, aplicar uma resistência a corrente elétrica. O que muda de um para o outro é que com o resistor variável podemos alterar a resistência em tempo real, ou seja, no circuito em funcionamento.

Já a função map serve para mapear uma faixa de valores dentro de outra. Imagine por exemplo, a seguinte situação:

Você utiliza o Arduino para ler dados de um sensor o qual retorna valores entre 568 a 1789 mas você precisa que essa faixa seja convertida entre 0 e 100. Como saber o valor exato para a faixa 0 e 100 quando o valor apresentado é igual a 915?

Através da função map podemos fazer de forma fácil isso.

Desenhe na folha de papel um retângulo com as seguintes dimensões: 8 cm x 2 cm

Agora pinte todo retângulo com o lápis. Pinte o mais forte que puder.

Utilizando a régua messe a partir das duas extremidades do retângulo o valor de 1 cm e trace um risco na vertical. Seu desenho deverá ficar dessa forma:

sdfsd17

Coloque um pouco da escova de aço (bombril) em uma das extremidades de dois fios.

Posicione os fios com a escova de aço dessa forma. Ligando um dos fios em 5v outro no GND. O terceiro fio conecte ao pino analógico A0.

asdas

Escreve, compile e execute esse código no Arduino.

void setup()
{
   Serial.begin(9600);
}
void loop()
{
   int valorSensor = analogRead(A0);
   Serial.print("Sinal analogico");
   Serial.println("valorSensor");
   delay(100);
}

Posicione o fio conectado ao pino analógico 0 em uma das extremidades do retângulo de forma que o fio fique posicionado em cima do risco feito anteriormente. Através da serial monitor do Arduino verifique o valor lido e anote esse valor.

Posicione o fio conectado ao pino analógico 0 na outra extremidade do retângulo de forma que o fio fique em cima do risco traçado anteriormente. Verifique o valor e anote.

No exemplo acima os valores que foram obtidos foram 700 e 180. Agora vamos mapear esses valores dentro da faixa de 0 e 100 utilizando a função map.

Digite o código abaixo e faça os testes necessários deslizando o fio de um lado para o outro e verifique o resultado:

void setup()
{
Serial.begin(9600);
}
void loop()
{
     int valorSensor = analogRead(A0);
     int valorModificado = map(valorSensor, 180, 700, 0, 100);
     Serial.print("Valor alterado pela funcao map: ");
     Serial.println(valorModificado);
     delay(500);
}

Faça outro teste posicionando a extremidade do jumper conectado ao pino analogico A0 sobre o retangulo de grafite e movimente de um lado para o outro e verifique o novo valor. Lembrando de que isso é um exemplo mais básico do funcionamento de um potenciomentro(resistor variável).

 

 

Então é isso. Até a proxima.

por ferpinheiro Postado em Arduino

Arduino e módulo bluetooth HC-05

Tutorial rápido de como criar aplicações utilizando o módulo bluetooh modelo HC-05. Esse é um excelente módulo para fazer uma comunicação sem fio com seu arduino de modo rápido e fácil. Tudo que você vai precisar para esse tutorial é:

> Arduino Leonardo.
> Módulo bluetooth HC-05.
> Alguns jumpers.

Antes precisamos saber algumas especificações sobre o módulo que vamos utilizar.

Especificações:

  • Chipset: HC-05 (versão com 6 pinos)

  • Versão protocolo Bluetooth: v2.0+EDR

  • Frequência: 2.4GHz

  • Velocidade de transferência máxima: 2.1Mbps.

  • Modo de operação: Master ou Slave.

  • Profile Bluetooth: Porta Serial

  • Alimentação: +3.3VDC 50mA

  • Temperatura: -20 ~ +75

  • Tamanho: 26.9mm x 13mm x 2.2 mm

  • Senha padrão (para pareamento): 1234

Antes de usarmos o módulo Bluetooth devemos aplicar algumas configurações iniciais, como por exemplo, a troca do nome, baud rate, senha padrão entre outras informações que irão ser de extrema importância para o projeto. Essas configurações devem ser feitas através dos comantos AT o circuito inicial para elas deverá ser como o esquema abaixo:

Captura de tela de 2014-10-31 13:42:38

Captura de tela de 2014-10-31 13:44:32Código para o esquema acima:

void setup()
{
    Serial.begin(9600);
    Serial1.begin(38400);
    pinMode(4, OUTPUT);
    digitalWrite(4, HIGH);
    Serial.println("Digite os comandos AT");
}

void loop()
{
    if(Serial.available())
    {
       Serial1.write(Serial.read());
    }
    if(Serial1.available())
    {
        Serial.write(Serial1.read());
    }
    delay(500);
}

Compile o código e envie para o Arduino, após feita a gravação vamos iniciar a configuração. Abra o monitor serial do Arduino deixe setado o baudrate como 9600 e Both NL & CR e teste com os seguintes comandos:

  • AT ( Testa o modo AT no modulo a resposta deverá ser OK)

  • AT+VERSION? (Devolve a versão do Firmware)

  • AT+NAME? (Devolve o nome do modulo)

  • AT+ PSWD? (Devolve a Password do modulo)

 

Para trocarmos as informações como, nome do módulo, baud rate e senha, usamos os comandos abaixo:

AT+NAME=cursodearduino (Seta o nome do módulo para ‘cursodearduino’).
AT+UART=57600,0,0 (Seta o baud rate para 57600).
AT+PSWD=4321 (Seta a senha para 4321).

Para que as alterações tenham efeito no hardware você deve remover a fonte de energia do arduino e liga-lo novamente.

A partir desse momento podemos desligar o pino WAKEUP/KEY do módulo e deixar como na configuração abaixo.

Captura de tela de 2014-10-31 14:04:52

O código abaixo recebe e envia comandos através do módulo e serve para acender e apagar um led conectado ao pino 13 enviando os caracteres:

“d” = desligar .

“l” = ligar.

/*
# Autor: Fernando Krein Pinheiro
# Data: 31/11/2014
# Linguagem: C
# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.
*/
char caracter;
void setup()
{
  Serial.begin(19200);
  Serial1.begin(9600);
  pinMode(13,OUTPUT);
}

void loop()
{

    if(Serial1.available())
    {
          caracter = Serial1.read();
          Serial.print("Recebi;");
          Serial.println(caracter);
          if(caracter == 'l')
          {
            digitalWrite(13,HIGH);
          }

          if(caracter == 'd')
          {
            digitalWrite(13,LOW);
         }

    }
}

Faça um teste vocễ mesmo. Baixe o aplicativo para seu celular android para fazer a comunicação com o módulo bluetooth. Para os testes desse tutorial eu utilizei o app Bluetooth Terminal disponível no google play.

Caso queira fazer um projeto parecido mas que use uma lampada você poderá unir esse tutorial com outro no qual utilizo o módulo relé em uma breve explicação.

Até a proxima!

por ferpinheiro Postado em Arduino

Medindo Oxigenação do sangue e Batimentos Cardíacos com Arduino

Mais uma dica do que podemos fazer com o arduino e todo seu poder. O objetivo do tutorial é demonstrar como é possível medir a oxigenação sanguínea e os batimentos cardíacos.

Um exemplo desse tipo poderia ser aplicado a qualquer tipo de estudo na área médica com finalidade de coletar dados para auxiliar em um diagnóstico médico, por exemplo.

 

Para isso vamos usar alguns produtos comprados na loja filipeflop e um shield comprado na loja coocking hacks.

1 Arduino
1 Shield eHealth

 

/*
 *  eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
 *
 *  Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi
 *  users to perform biometric and medical applications by using 9 different
 *  sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 *  Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 *  Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and
 *  Patient Position (Accelerometer)."
 *
 *  In this example we read the values of the pulsioximeter sensor
 *  and we show this values in the serial monitor
 *
 *  Copyright (C) 2012 Libelium Comunicaciones Distribuidas S.L.
 *  http://www.libelium.com
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 *  Version 2.0
 *  Author: Ahmad Saad & Luis Martin
 */

#include <eHealth.h>
#include <PinChangeInt.h>

int cont = 0;

void setup()
{
    Serial.begin(115200);
    eHealth.initPulsioximeter();
    PCintPort::attachInterrupt(6, readPulsioximeter, RISING);
}

void loop()
{
      Serial.print("PRbpm : ");
      Serial.print(eHealth.getBPM());

      Serial.print("    %SPo2 : ");
      Serial.print(eHealth.getOxygenSaturation());

      Serial.print("\n");
      Serial.println("=============================");
      delay(500);
}
void readPulsioximeter()
{
      cont ++;
      if (cont == 50)
      {
        eHealth.readPulsioximeter();
        cont = 0;
      }
}

Perceba que foi mantido todos os direitos autorais sobre o código. O mesmo foi retirado da própria página do projeto e pode ser encontrado nesse link

Esse shield já vem com 8 sensores para monitoramento de vários sinais de um paciente. Estou desenvolvendo um projeto para integra-lo com uma rede (wireless – zigbee) e bluetooth, assim que tiver maiores informações colocarei aqui no blog.

Segue um vídeo e algumas fotos:

 

DSC_0005

DSC_0008

DSC_0007

por ferpinheiro Postado em Arduino

Sensor de Umidade do Solo – Higrômetro

Olá pessoal, mais um tutorial rápido utilizando produtos da loja filipeflop, cujo objetivo é medir a umidade do solo e mostrar a porcentagem em um display lcd 16 x 2.

Para isso precisamos de:

1 – Arduino
1 – Sensor de Solo – Higrômetro
1 – Led
1 – Display lcd 16 x 2

Veja o esquema de montagem:

1

Você deve ligar o sensor de umidade da seguinte forma:
Pino A0 – Pino analógico 0 do arduino
Pino GND – Pino gnd do arduino
Pino VCC – Pino 5v do arduino

Note que temos ainda existe um pino chamado “D0” que será para conexões digitais, nesse caso para indicar a presença ou não de umidade, pois ele utiliza os valores 0 e 1 para isso. Como o objetivo é mostrar a porcentagem de umidade e não a presença dela, deixaremos essa ligação de lado.

Segue o código abaixo.

/*
# Autor: Fernando Krein Pinheiro
# Data: 17/09/2014
# Linguagem: C
# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int umidade;

void setup()
{
  lcd.begin(16, 2);
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, LOW);
  lcd.setCursor(0, 0);
  umidade = analogRead(A0);
  umidade = map(umidade, 1023, 0, 0, 200);
  lcd.print("Umidade em:");
  lcd.print(umidade);
  lcd.print(" %");
  if(umidade < 20)
  {
       digitalWrite(13, HIGH);
  }
  delay(500);
  lcd.clear();
}

DSC_0001[1]

DSC_0003[1]

por ferpinheiro Postado em Arduino

Módulo relé e controle remoto

Tutorial rápido, porem muito útil…

Acionando uma lâmpada com controle remoto e módulo relé.

Vamos aos materiais:

1  Arduino.
1 Módulo relé 2 canais 5v.
1 Controle remoto (Ir).
1 Lâmpada.

Montagem:

Untitled-2

Código:

/*
# Autor: Fernando Krein Pinheiro
# Data: 10/09/2014
# Linguagem: C
# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.
*/
#include <IRremote.h>;
int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(8, OUTPUT);
}
void loop()
{

  if (irrecv.decode(&results))
  {
    long int valor = results.value;
    Serial.println(valor);
    irrecv.resume();
    if(valor == 16738455)
    {
        digitalWrite(8, HIGH);
    }
    if(valor == 16750695)
    {
        digitalWrite(8, LOW);
    }
  }
}

Você precisará da biblioteca IRremote.h para controlar através do controle remoto. A biblioteca pode ser baixada nesse link: Biblioteca IRremote.h

por ferpinheiro Postado em Arduino

Robô explorador (PARTE I)

O objetivo desse e de outros dois tutoriais que ainda virão é fazer a construção de um robô explorador. Esse robô deverá explorar ambientes de forma remota controlado via rede wireless.

Para isso utilizarei alguns componentes básicos:

1 –  Uma placa Arduino.
2 – Um shield Xbee.
3 – Uma camera wireless.
4 – Um sensor Ultrasonico.
5 – Um sensor de temperatura LM35.
6 – Alguns Leds (De preferência brancos).
7 – Dois Motores DC de 9volts. (Podem ser retirados de impressoras).
8 – Um CI de ponte H (L293D).
9 – Chapa de MDF (Para construção da carcaça).
10 – Duas baterias de 9 volts

Um esquema básico do funcionamento:

Um usuário poderá controlar o robô através de uma interface de comunicação HTML/PHP a qual envia dados através de uma rede wireless para esse robô. Nele estará acoplada uma camera wireless que transmitira vídeo em tempo real para o controlador (usuário), dessa forma poderá ser visto o ambiente em que o robô circula. Existe ainda um sensor de temperatura que monitora a temperatura local e em um tempo programado envia esses dados para o controlador. O sensor de ultrasom indicará possíveis obstáculos os quais não poderão ser vistos pela camera.

Pois bem, qual será a utilidade desse robô?

1 – Em primeiro lugar o aprendizado e experiência obtida no desenvolvimento do mesmo.
2 – Esse projeto servirá como base para outros experimentos.
3 – O robô poderá ser usado em lugares  “inóspitos” para a exploração. (Objetivo principal)
4 – Servirá como inspiração para outros desenvolveres.

Chega de papo furado e vamos ao que interessa. Vamos ver sobre o CI de ponte H L293D. Baixe o DATASHEET AQUI.

O esquema de ligação é como segue abaixo:

Mais fácil que isso só eu montado para você, rsrsrsrsrsrs brincadeira!

Não vou falar como conectar os outros componentes no arduino pois já fiz outros tutoriais mostrando como fazê-los, portanto antes de me perguntar procura mais informações aqui no blog mesmo!

Estou com parte do projeto já montado na carcaça, veja como ficou:


E um breve código apenas para ver o funcionamento:

    void setup()
    {

      pinMode(11, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(5, OUTPUT);

    }

    void loop()
    {
          motorParado();
          delay(1000);

          motorRe();
          delay(1000);

          motorEsquerda();
          delay(1000);

          motorDireita();
          delay(1000);

          motorFrente();
          delya(2500);

    }

    void motorFrente()
    {
      digitalWrite(11, HIGH);
      digitalWrite(6, HIGH);
      digitalWrite(5, LOW);
      digitalWrite(10, LOW);
    }

    void motorDireita()
    {
      digitalWrite(11, HIGH);
      digitalWrite(10, LOW);
      digitalWrite(6, LOW);
      digitalWrite(5, HIGH);

    }

    void motorEsquerda()
   {
      digitalWrite(11, LOW);
      digitalWrite(10, HIGH);
      digitalWrite(6, HIGH);
      digitalWrite(5, LOW);

    }

    void motorRe()
    {
      digitalWrite(11, LOW);
      digitalWrite(6, LOW);
      digitalWrite(5, HIGH);
      digitalWrite(10, HIGH);
    }

    void motorParado()
    {
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);
      digitalWrite(6, LOW);
      digitalWrite(5, LOW);
    }

Com esse código é possível ver o funcionamento básico como andar para frente, vira para direita e esquerda e anda para trás. O próximo tutorial será para o desenvolvimento da interface HTML/ PHP e o restante do código Arduino para o Robô, portanto não deixe de conferir.

Até breve….

por ferpinheiro Postado em Arduino

Controlando o computador atráves de gestos

Na verdade o titulo do tutorial é um pouco “forçado”, mas a intenção aqui é demonstrar como é possível controlar algumas teclas do teclado através de gestos. Com isso você poderá por exemplo: fazer uma apresentação de slides (passar os slides) com apenas alguns gestos, ou ainda visualizar suas fotos de forma dinâmica sem precisar usar o teclado para isso, somente gestos.

Bem, para  fazer esse mesmo tutorial você precisa de um Arduino e um sensor ultrasonico. Também deverá estar em um ambiente Linux (hahahahaa usuário Windows) e ter instalado o emulador de teclado XDOTOOL e para completar a festa precisa de algum conhecimento na linguagem Python.

Não farei nenhuma explicação adicional e nem falarei sobre os componentes envolvidos, quem quiser saber mais sobre isso me contate via email.

Código Arduino:

/*
# Autor: Fernando Krein Pinheiro
# Data: 03/10/2012
# Linguagem: C
# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.
*/

#include "Ultrasonic.h"
#define echoPin 8
#define trigPin 5

Ultrasonic ultrasonic(5,8);

void setup()
{
  Serial.begin(9600);
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
}

void loop()
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  int distancia = (ultrasonic.Ranging(CM));
  Serial.print(distancia);
  delay(300);
}

Código Python

# Autor: Fernando Krein Pinheiro
# Data: 03/10/2012
# Linguagem: Python
# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.
#! /usr/bin/env python

import serial
import os
import time
arduino = serial.Serial('/dev/ttyUSB0',9600)
while True:
	valor = arduino.readline()
        acao = int (valor)
        print acao

	if acao <= 20:
		os.system('xdotool key Down')
	else:
		continue

E com essas poucas linhas de código você tem esse resultado:

por ferpinheiro Postado em Arduino