Apresentação e motivação do curso

Olá. Como combinado, hoje é o grande dia, início de tudo.

Apresento hoje um projeto simples, onde um programa em C controla um circuito eletrônico através da porta USB. O video criado basicamente demonstrará a interação direta entre uma porta USB (através do FT232BL) e um carrinho de controle remoto. O que fiz foi uma interface que permite enviar comandos ao carrinho pelo computador. Isso possibilitará controlar todos os motores do carrinho de forma simples e programada.

O objetivo é fazer com que o carrinho estacionado saia do local, e volte, porém de forma oposta. Por exemplo, ele estará estacionado com a traseira para a parede, e ao executar o comando, ele então sairá e voltará a estacionar no mesmo local, porém desta vez de frente para a parede.

Isso tudo para demonstrar o básico de interação entre a máquina e um hardware externo. Sempre achei fantástica a ideia de poder controlar dispositivos externos, como lâmpada, portas, motores, través de um computador, e em breve demonstrarei aqui como podemos fazer isso.

Acredito que o video servirá para dar uma inspiração maior, afinal não é tão simples programar em C. Exige muita vontade e paciência acima de tudo.

Imagens do projeto:

DSC05787.JPG

Aqui o controle original do carrinho (à esquerda) e somente a placa de controle com os fios soldados (à direita).

DSC05780.JPG Usei a bateria do meu notebook para alimentar o carrinho. Dentro de algumas semanas farei um post mostrando como fazer isso. Precisei usar um redutor de tensão (7806) para ligar o circuito principal que trabalha entre 6 e 12V. Porém com 12 volts o carrinho patinava ao arrancar, por isso reduzi a tensão de entrada do circuito para 6 volts.
DSC05781.JPG O circuito eletrônico que faz a interface entre o computador e o controle do carrinho. Basicamente contém um driver ULN 2803 que garante uma entrada em nível TTL e uma saída de até 500 mA, e o módulo de comunicação via USB com o computador,  FT232BL.
circuito elétrico usb ft232blDetalhe do módulo de interface USB FT232BL (semelhante ao FT232BM). Aqui a referência de uso, sem dúvidas o site do rogercom é o melhor site brasileiro para estudar circuitos entre o computador e o “mundo externo”.
DSC05797.JPG Detalhe do driver ULN 2803.
DSC05814.JPG Carrinho em modo de testes.

Aqui o código fonte do programa:

#include <stdio.h>
#ifdef __WIN32__
#define sleep(x) Sleep(x)
#endif
#include "ftdi.h"

#define FRONT 2
#define REAR 4
#define RIGHT 8
#define LEFT 16
#define FRONT_RIGHT 10
#define FRONT_LEFT 18
#define REAR_RIGHT 12
#define REAR_LEFT 20

struct ftdi_context ftdic;

void stopCommand()
{
    fflush(stdout);
    ftdi_write_data(&ftdic, 0, 1);
}

void msleep(int ms) {
    struct timespec time;
    time.tv_sec = ms / 1000;
    time.tv_nsec = (ms % 1000) * (1000 * 1000);
    nanosleep(&time,NULL);
}

void goCar(int type, int msTime)
{
    int f;
    char buf[1];

    if (ftdi_init(&ftdic) < 0)
    {
        fprintf(stderr, "falha ao iniciar ftdi_init\n");
        exit(-1);
    }

    f = ftdi_usb_open(&ftdic, 0x0403, 0x6001);

    if (f < 0 && f != -5)
    {
        fprintf(stderr, "Dispositivo ftdi não encontrado: %d (%s)\n", f, ftdi_get_error_string(&ftdic));
        exit(-1);
    }

    printf("ftdi aberto com sucesso: %d\n",f);
    buf[0] = type;

    printf("enabling bitbang mode\n");
    ftdi_set_bitmode(&ftdic, 0xFF, BITMODE_BITBANG);

    fflush(stdout);

    ftdi_write_data(&ftdic, buf, 1);
    msleep(msTime);
    stopCommand();

    printf("disabling bitbang mode\n");
    ftdi_disable_bitbang(&ftdic);

    ftdi_usb_close(&ftdic);
    ftdi_deinit(&ftdic);
}

int main(int argc, char **argv)
{
    goCar(FRONT_RIGHT, 700);
    goCar(RIGHT, 250);
    goCar(REAR, 150);

    msleep(800);
    goCar(REAR, 500);
    goCar(REAR_LEFT, 300);
    goCar(LEFT, 100);
    goCar(FRONT, 100);

    msleep(800);
    goCar(FRONT, 200);
    goCar(FRONT_RIGHT, 150);
    goCar(RIGHT, 100);
    goCar(FRONT, 130);
}

Confira aqui o projeto funcionando:

Como dito anteriormente, estou usando o livro “C completo e total” como base para este curso. O livro promete muito, está numa linguagem simples de entender e é muito inspirador. Ele tem 30 capítulos incluindo apêndices. Se um capítulo for passado por aula, então em cerca de 8 meses o curso estará terminado.

Tentarei sempre trazer exemplos práticos de uso da linguagem, o post acima é um bom exemplo disto. Tenho muito a aprender ainda e tenho certeza de que este será um curso de muita utilidade para mim e todos aqueles que de uma forma ou outra desejam aprender essa incrível linguagem que é o C.

11 Comments

  1. Gostei de sua iniciativa, já fiz alguns programas em C para pic e outros microcontrolador

    Era meu passa tempo eletrônica e programação C, ainda lido com C mas em outra area

    1. Olá Constantino, fico feliz que estejas também com interesse em aprender essa maravilhosa linguagem de programação.
      Pausei um pouco o curso de programação em C, porém irei retornar semana que vem, nas férias. Ficarei aguardando novos comentários e eventuais dúvidas.

      Abraços

  2. Não me lembro como descobri seu blog, acho que foi pelo site Linha de Código.

    Gostei da iniciativa de ensinar C sempre quis aprender essa linguagem, alias sempre quis ser programador. Fiz curso tecnico em informatica pelo SENAC e la "aprendi" a programar em VB.Net.

    Sou iniciante em programar, mas sempre corro atraz de tutoriais e sites sobre o assunto.

    Espero que voce mantenha seu blog e sempre o atualiaze, ja varios blogs sobre o assunto começar e depois o "dono" nunva mais atualizar. Prometo ser seguidor mas voce vai ter que manter o blog. :)

    Abraços.

  3. admiro trabalhos assim, esta de parabens, eu que nunca programei ate me animei, entendo pouco de eletronica, vou acompanhar a evolução e estudar a linguagem C, estarei aqui. Em tempo, o que o Marco Aurelio comentou em manter o blog, reforço o que ele comentou

    Abraços

    1. Olá Constantino,

      fico feliz que tenha se motivado ao estudo de programação, é uma área fascinante!
      Tenho um material mais atualizado sobre programação que é voltado para iniciantes, e trabalhamos com o famoso Arduino, que facilita muito o aprendizado, confira aqui: http://www.paulotrentin.com.br/aulas/robotica-com-arduino/

      Sobre manter o blog, é um projeto que a muito desejei, então vou mantê-lo para sempre, porém ainda não consigo me dedicar o quanto gostaria. Mas asseguro-lhe que vou continuar e melhorar conforme o tempo e a experiência me permitir.

      Obrigado pelo retorno.

Leave a Reply

%d