Home › Category Archives › Produtos

Sensor seguidor de linha (line hunter / line hunting)

sensor_line_hunting_IMG_1787_640 _automalabs.com.br

sensor_line_hunting_IMG_1788 _automalabs.com.br

É equipado com um sensor óptico TCRT5000 ou equivalente e um comparador de voltagem LM393.  Usado em robôs para a detecção da linha pintada no chão. Você ajusta no trimpot até que a saída OUT indique se o sensor está sobre a linha ou não. Esse método é usado quando você precisa que o robô siga por um caminho pré-estabelecido, porque sem isso é difícil fazer até mesmo o robô andar em linha reta. Uma pequena diferença na rotação dos motores ou no diâmetro das rodas já provoca uma tendência de desvio de rota que essa técnica ajuda a corrigir.

Projetos mais elaborados podem precisar de mais de um sensor desses, porque uma vez que o sensor deixe de ver a linha você não tem certeza, apenas usando um, se o desvio foi para a esquerda ou para a direita. A correção é possível, mas envolve “chutar” uma direção e caso não encontre a linha em x milisegundos, ir para a outra direção. O movimento do robô fica tremido.

Usando pelo menos dois você já pode saber em que direção foi o desvio e corrigir de forma mais precisa.

Chaves ópticas (optical switches)

optical_switches_IMG_1790_automalabs.com.brDe um lado um LED e do outro um foto-transistor. O objetivo é detectar a presença de um objeto no intervalo entre os dois. Também é usada, juntamente com discos encoder, para detecção de movimento e medição de velocidade.

Módulo GPS Skylab SKM53

GPS_Skylab_SKM53_IMG_1166_640_automalabs.com.br

Este módulo opera com 5V e assim que é energizado começa a transmitir coordenadas no pino TXD (mas só serão válidas após o tempo de fix) , repetindo a cada 1s. A baudrate é 9600bps. O pino RXD só tem utilidade se você quiser reconfigurar o módulo, por isso você pode deixá-lo desconectado.

Teste básico

(não requer que o GPS esteja vendo satélites)

No Arduino Mega

Atenção: qualquer exemplo que você pegar na internet que use a biblioteca Newsoftserial poderá não funcionar no Mega. Nesse modelo de arduino, use as portas seriais reais.

Ligue o TXD do GPS no pino RX1 do Mega

Rode o sketch (não é preciso mudar nada) Examples -> Communication -> MultiserialMega

Algo assim deve aparecer no Serial Monitor (repete-se a cada 1s):

No Arduino UNO

Instale a biblioteca NewSoftSerial

Ligue o TXD do GPS no pino 2 do Arduino.

Rode o seguinte sketch, ligeiramente adaptado do exemplo TwoPortReceive

#include <SoftwareSerial.h>
SoftwareSerial portOne(2,3);

void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// Start each software serial port
portOne.begin(9600);
}

void loop()
{
// By default, the last intialized port is listening.
// when you want to listen on a port, explicitly select it:
portOne.listen();
Serial.println("Recebido do GPS:");
// while there is data coming in, read it
// and send to the hardware serial port:
while (portOne.available() &gt; 0) {
char inByte = portOne.read();
Serial.write(inByte);
}

delay(1000);
Serial.println("");
Serial.println("");
}

Algo assim deve aparecer no Serial Monitor (repete-se a cada 1s):


Teste completo

Não faça este teste se sua instalação não tiver passado ainda no teste básico.

Neste teste o GPS precisa ver os satélites. Para isso você precisa estar num local que tenha visão direta para o céu e o lado da antena do GPS precisa estar voltado para cima.

Em um Arduino UNO

Instale a biblioteca TinyGPS (documentação e download da v13). Requer NewsoftSerial.

Conecte o TXD do GPS ao pino 4 do UNO.

Carregue o exemplo Examples -> TinyGPS -> test_with_gps_device

Mude a linha

ss.begin(4800);

para

ss.begin(9600);

Faça o upload do sketch.

Em um Arduino Mega

Instale a biblioteca TinyGPS (documentação e download da v13).

Conecte o TXD do GPS a RX1 do Mega.

Atenção: Os exemplos do TinyGPS usam a biblioteca Newsoftserial, que tem certos problemas para funcionar no Mega. Por isso eu fiz ligeiras modificações no exemplo para usar uma porta serial real do Mega.

Faça o upload do seguinte sketch:


#include <TinyGPS.h>

/* Exemplo test_with_gps_device modificado para usar a porta serial 1
do Arduino Mega.
Jefferson Ryan - Automalabs - 13/10/2013
*/

TinyGPS gps;

static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
{
Serial.begin(115200);
Serial1.begin(9600);

Serial.print("Testing TinyGPS library v. ");
Serial.println(TinyGPS::library_version());
Serial.println("by Mikal Hart");
Serial.println();
Serial.println("Sats HDOP Latitude  Longitude  Fix  Date       Time     Date Alt    Course Speed Card  Distance Course Card  Chars Sentences Checksum");
Serial.println("          (deg)     (deg)      Age                      Age  (m)    --- from GPS ----  ---- to London  ----  RX    RX        Fail");
Serial.println("-------------------------------------------------------------------------------------------------------------------------------------");

}

void loop()
{
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;

print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
gps.f_get_position(&flat, &flon, &age);
print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6);
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
print_date(gps);
print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2);
print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

gps.stats(&chars, &sentences, &failed);
print_int(chars, 0xFFFFFFFF, 6);
print_int(sentences, 0xFFFFFFFF, 10);
print_int(failed, 0xFFFFFFFF, 9);
Serial.println();

smartdelay(1000);
}

static void smartdelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (Serial1.available())
gps.encode(Serial1.read());
} while (millis() - start < ms);
}

static void print_float(float val, float invalid, int len, int prec)
{
if (val == invalid)
{
while (len-- > 1)
Serial.print('*');
Serial.print(' ');
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1); // . and -
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
Serial.print(' ');
}
smartdelay(0);
}

static void print_int(unsigned long val, unsigned long invalid, int len)
{
char sz[32];
if (val == invalid)
strcpy(sz, "*******");
else
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz[i] = ' ';
if (len > 0)
sz[len-1] = ' ';
Serial.print(sz);
smartdelay(0);
}

static void print_date(TinyGPS &gps)
{
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long age;
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
if (age == TinyGPS::GPS_INVALID_AGE)
Serial.print("********** ******** ");
else
{
char sz[32];
sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
month, day, year, hour, minute, second);
Serial.print(sz);
}
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
smartdelay(0);
}

static void print_str(const char *str, int len)
{
int slen = strlen(str);
for (int i=0; i<len; ++i)
Serial.print(i<slen ? str[i] : ' ');
smartdelay(0);
}

Se seu GPS estiver enxergando os satélites, a saída será parecida com isto (eu dividi em duas partes porque não cabia na tela e alterei as coordenadas por privacidade):

Se seu GPS não estiver enxergando os satélites, a saída de TinyGPS será parecida com isto (eu dividi em duas partes porque não cabia na tela):

Note que o valor de Chars RX está incrementando em passos fixos (no caso, 136). Isso siginifica que a biblioteca está recebendo dados do GPS, mas não há coordenadas válidas nesses dados. Se Chars RX não estiver incrementando verfique todas as conexões.

Se você realmente precisar reconfigurar esse GPS, o documento MTK NMEA Packet User Manual (link para download no fim do texto) pode ser o que você precisa. Eu não testei, não aconselho seu uso e não dou garantias. Se você mexer nas configurações considere minha garantia finalizada. Estou fornecendo o arquivo apenas para sua conveniência.

Datasheet do Módulo GPS Skylabs SKM53
Datasheet do Módulo GPS Skylabs SKM53
SkyNav_SKM53_Datasheet.pdf
392.3 KiB
955 Downloads
Detalhes...
MTK NMEA Packet User Manual
MTK NMEA Packet User Manual
PMTK_Protocol.pdf
77.4 KiB
612 Downloads
Detalhes...

Módulo Display LCD alfanumérico 2004 / 20×4 (20 caracteres, quatro linhas)

Para maiores detalhes, veja a página sobre o display 16×2. O funcionamento é o mesmo.

Módulo Display LCD alfanumérico 1602 / 16×2 (16 caracteres, duas linhas)

Modulo_LCD_1602_aceso_85

Na foto abaixo existe uma película plástica de proteção na frente do display.

Modulo_LCD_1602_IMG_0893_640_85 Modulo_LCD_1602_IMG_0895_640_85

Compatível com padrão Hitachi HD44780 (o padrão mais usado no mundo).

Os 16 pinos são distribuídos mais ou menos assim:

  • 2 para alimentação geral;
  • 2 para alimentação do backlight;
  • 1 para contraste;
  • 11 para comunicação (8 bits + 3 de controle).

Usando o display no modo de 4 bits, “apenas” 7 pinos são necessários. O arduino tem um microcontrolador suficientemente rápido para que você possa e deva usar o modo de 4 bits.

Mas fique atento: se estiver usando um Arduino UNO só o uso desse display já comprometerá boa parte do I/O do arduino. Se você precisar de algo que consuma menos i/O, confira meus itens i2C. Com eles você “gasta” no máximo dois pinos do arduino.

Este display precisa ser inicializado para funcionar. Se você só estiver vendo um monte de quadrados brancos na primeira linha e nada na segunda, o display está alimentado mas não foi corretamente incializado ainda. Verifique seu programa e as conexões.

O backlight do display precisa estar aceso. É ele que dá a cor branca dos caracteres. Você precisa ligar o Backlight a +5V através de um resistor. Pode ser um de 380R. Não ligue o backlight sem o resistor.

Este display requer a conexão de um potenciômetro ou trimpot externo para ajuste do contraste ou o controle através de PWM.

Potenciômetros, trimpots e resistores são itens vendidos separadamente.

Roteador wi-fi portátil com modo cliente.

roteador_wifi_cliente_IMG_1660_automalabs.com.br

Com este roteador você pode transformar qualquer dispositivo que tenha uma conexão de rede por cabo em um aparelho Wi-Fi. Seja o arduino, uma TV, um Media Player… qualquer coisa.

Shields Wi-Fi para o arduino sofrem, na minha opinião, dos seguintes problemas:

  • São caríssimos;
  • Exigem programação específica. Você não pode pegar o seu projeto que já opera em rede e simplesmente transformar em Wi-Fi
  • Você programa às cegas. Não existe uma GUI onde você possa localizar redes disponíveis e fazer diagnóstico;

Tendo isso em mente eu saí procurando alternativas e essa é a melhor que encontrei. Eu vendo o kit roteador + shield ethernet mais barato do que você normalmente encontra por aí o shield Wi-Fi e você ainda tem mais vantagens:

  • Você não precisa mexer em nada no seu projeto. Basta configurar o roteador usando um computador e um browser e depois plugar no conector de rede;
  • O diagnóstico fica mais simples. Deixou de funcionar? Você pode desplugar o roteador e testar o seu projeto com fio;
  • Se algo der defeito, é mais barata a reposição. Ou você trocará o shield ethernet ou o roteador;
  • O roteador (que é também a antena) pode ficar até 100m do seu projeto, via cabo de rede. Você pode posicioná-lo exatamente onde houver melhor sinal. Você até pode, usando un shield, esticar o cabo da antena. Mas isso gera perdas que muitas vezes não compensam o reposicionamento da antena. Como regra geral, quanto mais curto o cabo da antena, melhor;

 

roteador_wifi_cliente_IMG_1661_automalabs.com.br

roteador_wifi_cliente_IMG_1663_automalabs.com.br

roteador_wifi_cliente_IMG_1664_automalabs.com.br

roteador_wifi_cliente_IMG_1666_automalabs.com.br

roteador_wifi_cliente_IMG_1670_automalabs.com.br

Clip bateria 9V.

O plug é o mesmo usado no Arduino.

Clip_Bateria_9V_IMG_0994_automalabs.com.br

Kit Pan Tilt 9g.

Este kit usa dois micro servo motores 9g. É capaz de movimentar objetos leves, como pequenas câmeras.

Kit_Pan_Tilt_9g_IMG_0978_automalabs.com.br

Braço robótico

Este kit é composto de três servo motores, uma garra, duas peças de alumínio, parafusos e um micro rolamento.

Um dos motores abre e fecha a garra. Os outros dois fazem a movimentação.

Braco_Robotico_DSC00647_automalabs.com.br

Braco_Robotico_DSC00648B_automalabs.com.br

Displays de 7 segmentos

Tenho diversos modelos, incluindo este de 4 dígitos:

display_7segmentos_4digitos_DSC00132_automalabs.com.br

display_7segmentos_4digitos_DSC00131_automalabs.com.br