Como começar com Arduíno

Muitas vezes sou bolinado com a mesma pergunta, “queria comprar um Arduíno qual você me indica?”, ou então, “Qual o melhor Arduíno para um iniciante?”, outra muito boa também, ” O Arduíno é bom?”. Nesse post vou tentar esclarecer ao máximo para quem quer embarcar nas aventuras da computação física, robótica, DIY e afins.

Existem diversos tipos de Arduínos, com diversas configurações, se sua pergunta for qual o melhor Arduíno eu diria, basta ir na home, e procurar qual tem mais recursos. Mas na realidade o buraco é um pouco mais embaixo, antes mesmo de comprar um, você deveria se perguntar para quê eu preciso, ou o que eu vou fazer com o meu Arduíno. Muita gente compra kits para aprender a programar como o da figura abaixo.

 

Kit Para Arduíno

Nada contra, mas vejamos, temos um motor o que raios se faz com um motor, talvez um ventilador ou um barquinho, tsc… Um sensor ultrassônico, e um relé, já da pra fazer uma luz que acenda automaticamente… Enfim, o que eu gostaria de dizer a maioria dos kits que já vi, não tem uma finalidade. OK, dá pra aprendera a programar mas enfim, você não irá ficar entretido muito tempo com isso. Então lá vai a minha primeira dica:

Dica 1 – Defina um projeto, um objetivo.

Com um objetivo definido você irá conseguir escolher melhor a placa que você precisa, além disso vai poder comprar componentes relevantes para o seu projeto e aprender do mesmo jeito que se comprasse um kit. Agora vamos supor que o seu projeto seja a automação residencial de sua casa, e o de outra pessoa seja montar um VANT, com certeza eu não deveria indicar a mesma placa concorda?

A segunda dica que eu dou, é depois de definido o objetivo, faça um esboço de tudo que será feito antes de comprar qualquer coisa.

Dica 2 – Rascunhe e pesquise e detalhe.

Agora vem a dica que evita que você gaste dinheiro a toa, e define o tamanho do projeto, veja bem, você enfermeiro, leu que o Arduíno é uma plataforma de prototipagem simples e fácil, e agora quer fazer a automação de sua casa. EXCELENTE, essa é a ideia do Arduíno, agora chegou a etapa então de você visualizar o tamanho do seu projeto, por exemplo quantas lâmpadas você quer controlar, tem o portão da garagem também? Ótimo, como ele é acionado, via corrente alternada ou contínua, qual a tensão e a potência dele. As lampadas vão ser acionadas por proximidade, por toque, por voz por reconhecimento de imagem?

Um amigo meu outro dia me disse, preciso controlar 3 motores de passo com o Arduíno o que me recomenda? Eu disse nada, primeiro preciso saber, qual a tensão dos motores, corrente, modelo. Nessa etapa é legal baixar os datasheets de todos os componentes também e le-los

Dica 3 – Procure ajuda nos fóruns

Bom agora que você detalhou e pesquisou, provavelmente já sabe que precisa de relés para acionar uma lampada que sua corrente alternada usando o Arduíno, mas antes de ir na loja comprar, ou no eBay, procure conselhos com alguém mais experiente, veja um tipo de pergunta legal:

Estou pensando em utilizar o Arduíno para automatizar minha casa, pensei em utilizar o NANO, ou o UNO para ele caber na caixa de distribuição, e também em utilizar um shield de relés, o que vocês acham?

Prepare-se agora para uma chuva de opiniões, contra a favor, algumas respostas inúteis mas em 90% dos casos você receberá informações relevantes, por exemplo na pergunta acima, alguém poderia te questionar se o NANO ou o UNO, seriam capazes de controlar todas as lampadas pois possuem poucas portas, outra pessoa poderia te perguntar quantas lampadas para te recomendar um shield que tivesse um numero de reles suficiente, ou então lhe falar que você teria de desenvolver uma placa externa.

Dica 4 – Comprando por amostragem

Alguns amigos meus possuem o museu do Arduíno em casa, compram não dá certo, compram outra coisa e não dá certo, e amigo, se você for casado, um dia a Dona Onça vai reclamar (experiência própria). Então a dica agora é se você for automatizar 20 lampadas, compre material para 2, faça os testes, provavelmente você nessa etapa ( considerando que é um iniciante), vai ter esquecido detalhes como terminais, e acabamentos, vai suar um pouquinho com a solda, vai apanhar com o código, então e melhor comprar menos e ver se tudo vai funcionar do jeito que você deseja e então comprar o restante.

Dica 5 – Termine o que começou

Não tem nada mais gratificante que concluir um projeto, mas é muito difícil também, você encontra barreiras a cada passo, mas não desanime se deu errado conserte, pense o seguinte, o dia que a automação da sua casa der problema, ou no dia que seu braço robótico der pau, você não terá assistência técnica para reparar pra você. E depois que o projeto é concluído torna-se muito mais fácil executar outro.

Bom talvez não seja a resposta que você tenha procurado no meu blog, mas espero que isso lhe ajude. Comprar um Microcontrolador, ou outra coisa qualquer para começar um Hobbie, e como ir ao médico, tem de ser examinado, não há um diagnostico padrão, tipo tome duas aspirinas que resolve, tudo é relativo. e=mc²

Até a próxima.

 

 

 

19 ideias sobre “Como começar com Arduíno”

  1. A partir da segunda dica eu já estou ligando para o meu amigo mais entendido no assunto, rzs.

    Eu sinceramente não enveredo nessa área por dois motivos: falta de tempo e necessidade. O que está mais próximo de mim é automação da casa, mas aonde moro é tão pequeno que nem vale a pena 😛

    Abraço e belo layout!

  2. Ola. Anthony preciso fazer a automação de uma maquina de lavar . Fiz utilizando comando elétrico mas não ficou muito bom, utilizei muitos componentes, contatoras etc….da para programar um microcontrolador utilizando o arduíno ou teria que instalar a placa do arduíno na maquina ou então,seria melhor, neste caso, utilizar um PIC?

  3. Com certeza não era o que eu esperava ler, quando visitei essa página.
    Principiantes, como eu, nem sabem eletrônica direito; não entendem nada sobre Arduíno e microcontroladores; nem sabem o que querem fazer, pois não sabem o que se pode ser feito e como ser feito.
    Dúvidas já temos excessivamente. Precisamos de um texto que nos norteie. Algo concreto.

    1. Ítalo,

      Esse é o problema com principiantes, querem que haja uma receita de bolo, no caso se for um tutorial, eu mesmo disponibilizei a um tempo atrás nesse mesmo site, basta dar uma olhada.

      O que acontece, e que se você resolver ir pelo caminho que mostrei, você irá gastar menos dinheiro, irá aprender mais e ter um resultado útil, na forma de um projeto que te atenda.

      Espero ter ajudado

      1. Caro Anthony,
        postei um codigo que estou desenvolvendo para controle de acesso biometrico,mas toda vez que vou compilar da erro voce poderia me ajudar achar onde esta o erro.
        grato…

  4. Rapaz preciso fazer um projeto de Um relógio digital que possa ter integrado a ele uma função de cronometro (com 3 botões nele, o botão de iniciar, parar e o de resetar) e que para entrar no relógio e sair do cronometro seja uma mudação de um apertar de botão colocado no protoboad, e ao voltar para o relógio volte com a hora que estava anteriormente.

  5. tenho necessidade de automatizar uma embarcação. energia solar, dois motores elétricos, acionar dois lemes, criar reversão dos motores com velocidade variável a frente e re. Controlar rota por GPS, gerenciar informações de um sonar multi feixe, luzes de sinalização, imagem por câmera IP, comunicacao GPRS/Satelite, sensores de aproximação, de presenca com alarme…..qual seria uma opiniao sobre Rduino Duemilanove DIP 328?

  6. Estou montando um home cockpit para simulador de voo, sou como muitos que entram aqui, não entendo nada de eletrônica e programação mas estou empenhado e tenho aprendido muito, uma dica que dou é usar o Simulino para proteus, consigo simular tudo oque vou precisar e só depois dos testes é que vou as compras com certeza do que vou precisar e sabendo que a chance de dar certo é grande. Seu site está de parabéns!

  7. Bom, esses dias dias um amigo estava as voltas com o tal do arduino, eu perguntei sobre o que se tratava e va veio uma chiva de informaçoes tecnicas e bla bla bla, eu pedi a versao curta da coisa e uma palavra se destacou na minha mente ROBOS! fiquei interessado e fui dar uma derpada na NET e me encantei com o projeto do MorpHex (http://nossosrobos.blogspot.com.br/2013/03/morphex-um-hexapod-estilo-transformers.html) é algo perfeito mas tenho a plena consciencia que não é pro meu bico fazer um desses (pelo menos por enquanto.), então eu encontrei um projeto mais discreto, simples e bem legal, um quad pod (http://labdegaragem.com/forum/topics/projeto-quadrupede-iniciante?id=6223006%3ATopic%3A118828&page=1#comments), entendi bem a mecanica do bicho ja achei aonde comprar as pçs nescessarias, e tds mais.
    agora que vem a complicação, a placa que controla o bicho(SSC-32 lynxmotion) nao sei se ela eh arduino ou nao, do jeito q o cara do projeto estava usando o robo era controlado diretamente pelo computador e meus planos sao que ele seja controlado via RC, wi-fi ou bluetooth, sera que voce poderia me dar uma orientação a respeito pelo menos me mostrar uma direçao?

  8. Ola amigos alguem pode me ajudar nao consigo compilar da erro?

    #include “FPS_GT511C3.h”
    #include

    // definições do Modo
    #define MODE_IDLE 0
    #define MODE_WELCOME 1
    #define MODE_ENROLL 2
    #define MODE_DEROLL 3

    // Definição Botões
    #define BTN_MODE A0
    #define BTN_SELECT A1
    #define BTN_NEXT A2

    // Outras coisas ..
    #define BACKLIGHT A3
    #define MOTION_SENSOR A4

    #define IDLE_TIME 300
    #define MAX_ID 200

    // Emoticons
    #define CH_LOCK 1
    #define CH_OPEN 2
    #define CH_PERSON 3
    #define CH_SELECT 4
    #define CH_NEXT 5

    // Emoticons
    byte bloqueado [ 8 ] = {
    0 b01110 ,
    0 b01110 ,
    0 b10001 ,
    0 b10001 ,
    0 b11111 ,
    0 b11111 ,
    0 b11111 ,
    0 b00000
    };

    byte aberto [ 8 ] = {
    0 b01110 ,
    0 b10001 ,
    0 b10001 ,
    0 b00001 ,
    0 b11111 ,
    0 b11111 ,
    0 b11111 ,
    0 b00000
    };

    byte pessoa [ 8 ] = {
    0 b01110 ,
    0 b11111 ,
    0 b01110 ,
    0 b00100 ,
    0 b01110 ,
    0 b11111 ,
    0 b11111 ,
    0 b11111
    };

    byte sel [ 8 ] = {
    0 b00000 ,
    0 b00001 ,
    0 b00010 ,
    0 b10010 ,
    0 b01100 ,
    0 b01100 ,
    0 b00000 ,
    0 b00000
    };

    byte seguinte [ 8 ] = {
    0 b00000 ,
    0 b00000 ,
    0 b00100 ,
    0 b00110 ,
    0 b11111 ,
    0 b00110 ,
    0 b00100 ,
    0 b00000
    };

    // Variáveis
    LiquidCrystal lcd ( 8 , 9 , 4 , 5 , 6 , 7 );
    int curMode = MODE_WELCOME ;
    int idleTimer = 0 ;
    FPS_GT511C3 fps ( 2 , 3 );

    // Funções de utilidade

    // Abre a porta com emoticon
    vazio opendoor () {
    lcd . setCursor ( 0 , 0 );
    lcd . escrever ( CH_OPEN );
    lcd . print ( “Open ..” );
    Serial . println ( “Abra a porta” );
    digitalWrite ( PORTA , LOW );
    retardo ( 250 );
    digitalWrite ( PORTA , ALTA );
    lcd . setCursor ( 0 , 0 );
    lcd . escrever ( CH_LOCK );
    lcdprint ( 1 , “Porta aberta!” );
    delay ( 1000 );
    }

    // Obter id inscrito
    int getNextId ( int CUR ) {
    int I = 0 ;
    para ( I = CUR + 1 ; I < MAX_ID ; I ++ ) {
    IF ( fps . CheckEnrolled ( I ) ) return I ;
    }
    para ( I = 0 ; I < CUR ; I ++ ) {
    IF ( fps . CheckEnrolled ( I ) ) return I ;
    }
    voltar – 1 ;
    }

    int getAvailableId ( int CUR ) {
    int I = 0 ;
    para ( I = CUR + 1 ; I < MAX_ID ; I ++ ) {
    IF ( ! fps . CheckEnrolled ( I ) ) return I ;
    }
    para ( I = 0 ; I < CUR ; I ++ ) {
    IF ( ! fps . CheckEnrolled ( I ) ) return I ;
    }
    voltar – 1 ;
    }

    vazio checkMotion () {
    IF ( digitalRead ( MOTION_SENSOR ) == ALTA ) {
    idleTimer = IDLE_TIME ;
    }
    }

    vazio turnBacklight ( bool um ) {
    IF ( a ) {
    digitalWrite ( BACKLIGHT , ALTA );
    } mais {
    digitalWrite ( BACKLIGHT , LOW );
    }
    }

    vazio lcdprint ( int linha , de char * msg ) {
    lcd . setCursor ( 0 , linha );
    int len = strlen ( msg );
    int I = 0 ;

    lcd . print ( msg );

    para ( I = len – 1 ; I < 16 ; I ++ ) {
    lcd . print ( "" );
    }
    lcd . setCursor ( len , linha );
    }

    // Principais rotinas
    vazio Setup () {

    Serial . println ( "Faça Emoticons" );
    lcd . createChar ( 1 , bloqueado );
    lcd . createChar ( 2 , aberto );
    lcd . createChar ( 3 , pessoa );
    lcd . createChar ( 4 , sel );
    lcd . createChar ( 5 , Seguinte );

    Serial . println ( "LCD inicializar" );

    Serial . println ( "Pin modo Definição" );
    pinMode ( BTN_MODE , INPUT_PULLUP );
    pinMode ( BTN_SELECT , INPUT_PULLUP );
    pinMode ( BTN_NEXT , INPUT_PULLUP );

    pinMode ( MOTION_SENSOR , ENTRADA );

    pinMode ( BACKLIGHT , OUTPUT );
    pinMode ( PORTA , OUTPUT );

    retardo ( 100 );

    Serial . println ( "Finger Scanner initialize print" );
    //fps.UseSerialDebug = true;
    fps . Abrir ();

    Serial . println ( "Ready" );
    digitalWrite ( PORTA , ALTA );

    }

    vazio Matricular () {
    int enrollCount = 0 ;
    enrollCount = fps . GetEnrollCount ();

    lcd . setCursor ( 11 , 0 );
    lcd . print ( "(" );
    lcd . print ( enrollCount );

    lcd . setCursor ( 0 , 1 );
    lcd . escrever ( CH_SELECT );
    lcd . print ( "para iniciar" );
    enquanto ( verdadeiro ) {
    idleTimer – ;
    IF ( idleTimer <= 0 ) {
    changeMode ( MODE_IDLE );
    voltar ;
    }
    IF ( digitalRead ( BTN_MODE ) == LOW ) {
    changeMode ( MODE_DEROLL );
    retardo ( 100 );
    voltar ;
    }
    IF ( digitalRead ( BTN_SELECT ) == LOW ) {
    quebrar ;
    }
    checkMotion ();
    atraso ( 10 );
    }

    // Inscrever
    int enrollId = – 1 ;
    int I ;
    bool USADO = verdadeiro ;
    bool Bret = false ;
    // Encontra inscrever id
    lcdprint ( 1 , "Olhando slot" );
    para ( I = 0 ; I < 200 ; I ++ ) {
    USADOS = fps . CheckEnrolled ( I );
    IF ( ! USADA ) {
    enrollId = I ;
    quebrar ;
    }

    }

    IF ( enrollId == – 1 ) {
    lcdprint ( 1 , "Slots completo" );
    delay ( 1000 );
    changeMode ( MODE_WELCOME );
    voltar ;
    }

    fps . EnrollStart ( enrollId );
    lcdprint ( 1 , "Coloque o dedo (1/3)" );
    enquanto ( fps . IsPressFinger () == false ) {
    IF ( digitalRead ( BTN_MODE ) == LOW ) {
    fps . Fechar ();
    fps . Abrir ();
    changeMode ( MODE_DEROLL );
    }
    }

    Bret = fps . CaptureFinger ( verdadeiro );
    IF ( Bret == false ) {
    lcdprint ( 1 , "Captura de falhar!" );
    delay ( 1000 );
    changeMode ( MODE_WELCOME );
    voltar ;
    }
    lcdprint ( 1 , "Remover dedo" );
    fps . Enroll1 ();
    enquanto ( fps . IsPressFinger () == verdadeiro ) atraso ( 100 );
    lcdprint ( 1 , "Coloque o dedo (2/3)" );
    enquanto ( fps . IsPressFinger () == false ) {
    IF ( digitalRead ( BTN_MODE ) == LOW ) {
    changeMode ( MODE_DEROLL );
    }
    }

    Bret = fps . CaptureFinger ( verdadeiro );
    IF ( Bret == false ) {
    lcdprint ( 1 , "Captura de falhar!" );
    delay ( 1000 );
    changeMode ( MODE_WELCOME );
    voltar ;
    }
    lcdprint ( 1 , "Remover dedo" );
    fps . Enroll2 ();
    enquanto ( fps . IsPressFinger () == verdadeiro ) atraso ( 100 );
    lcdprint ( 1 , "Coloque o dedo (3/3)" );
    enquanto ( fps . IsPressFinger () == false ) {
    IF ( digitalRead ( BTN_MODE ) == LOW ) {
    changeMode ( MODE_DEROLL );
    }
    }
    Bret = fps . CaptureFinger ( verdadeiro );
    IF ( Bret == false ) {
    lcdprint ( 1 , "Captura de falhar!" );
    delay ( 1000 );
    changeMode ( MODE_WELCOME );
    voltar ;
    }
    lcdprint ( 1 , "Remover dedo" );
    int IRET ;
    IRET = fps . Enroll3 ();
    IF ( IRET == 0 ) {
    lcdprint ( 1 , "Matricular OK:" );
    lcd . escrever ( CH_PERSON );
    lcd . print ( enrollId );
    } mais {
    lcdprint ( 1 , "falhou matrícula." );
    }
    delay ( 1000 );
    changeMode ( MODE_WELCOME );
    }

    vazio changeMode ( int modo ) {
    lcd . Limpar ();
    IF ( modo ! = MODE_IDLE ) {
    idleTimer = IDLE_TIME ;
    turnBacklight ( verdadeiro );
    fps . setled ( verdadeiro );

    Serial . println ( "modo de espera" );
    } mais {
    idleTimer = 0 ;
    turnBacklight ( false );
    fps . setled ( false );
    lcd . nodisplay ();
    Serial . print ( "Change Mode para" );
    Serial . println ( modo );
    }
    Interruptor ( modo ) {
    Caso MODE_WELCOME :
    lcd . setCursor ( 0 , 0 );
    lcd . escrever ( CH_LOCK );
    lcd . print ( "Bem-vindo!" );
    lcd . setCursor ( 0 , 1 );
    lcd . print ( "Põe o teu dedo" );
    quebrar ;
    Caso MODE_ENROLL :
    lcd . setCursor ( 0 , 0 );
    lcd . escrever ( CH_PERSON );
    lcd . print ( "ADD MODE" );
    quebrar ;
    Caso MODE_DEROLL :
    lcd . setCursor ( 0 , 0 );
    lcd . escrever ( CH_PERSON );
    lcd . print ( "modo de remoção" );
    quebrar ;
    }
    curMode = modo ;
    retardo ( 100 );
    }

    // Processo modo de Espera
    vazio idle () {
    IF ( digitalRead ( BTN_MODE ) == LOW || digitalRead ( MOTION_SENSOR ) == ALTA ) {
    changeMode ( MODE_WELCOME );
    voltar ;
    }
    IF ( digitalRead ( BTN_SELECT ) == LOW ) {
    idleTimer = IDLE_TIME ;
    opendoor ();
    changeMode ( MODE_IDLE );
    voltar ;
    }
    retardo ( 100 );
    }

    // Processo de modo bem-vindo
    vazio bem-vindo () {
    // Altere o modo para a marcha lenta sem nenhuma ação enquanto IDLE_TIME
    idleTimer – ;
    IF ( idleTimer <= 0 ) {
    changeMode ( MODE_IDLE );
    voltar ;
    }

    // Se o botão de modo pressionado
    IF ( digitalRead ( BTN_MODE ) == LOW ) {
    changeMode ( MODE_ENROLL );
    voltar ;
    }

    // Se o botão de seleção pressionado
    IF ( digitalRead ( BTN_SELECT ) == LOW ) {
    idleTimer = IDLE_TIME ;
    opendoor ();
    changeMode ( MODE_WELCOME );
    voltar ;
    }

    // Se dedo pressionado
    IF ( fps . IsPressFinger () ) {
    fps . CaptureFinger ( false );
    int id = fps . Identify1_N ();
    IF ( id < 200 ) {
    lcd . setCursor ( 0 , 1 );
    lcd . escrever ( CH_PERSON );
    lcd . print ( id );
    lcd . print ( "Verified!" );
    opendoor ();
    changeMode ( MODE_WELCOME );
    voltar ;
    } mais {
    idleTimer = IDLE_TIME ;
    lcdprint ( 1 , "Quem é você?" );
    }
    }

    checkMotion ();

    atraso ( 10 );
    }

    vazio deroll () {
    // Prima o botão Seleccionar para começar
    lcdprint ( 1 , "" );
    lcd . setCursor ( 0 , 1 );
    lcd . escrever ( CH_SELECT );
    lcd . print ( "para iniciar" );
    enquanto ( verdadeiro ) {
    idleTimer – ;
    IF ( idleTimer <= 0 ) {
    changeMode ( MODE_IDLE );
    voltar ;
    }

    IF ( digitalRead ( BTN_MODE ) == LOW ) {
    changeMode ( MODE_WELCOME );
    voltar ;
    }

    IF ( digitalRead ( BTN_SELECT ) == LOW ) {
    quebrar ;
    }
    checkMotion ();
    atraso ( 10 );
    }

    // Se o usuário pressionar o botão
    // Primeiro de tudo, obter a contagem de usuários inscritos
    int enrollCount = 0 ;
    enrollCount = fps . GetEnrollCount ();

    // Este modo necessita de um ou mais ids
    IF ( enrollCount <= 0 ) {
    lcdprint ( 1 , "Nenhum usuário" );
    delay ( 1000 );
    changeMode ( MODE_WELCOME );
    voltar ;
    }

    int CUR = – 1 ;
    CUR = getNextId ( CUR );

    IF ( CUR == – 1 ) {
    lcdprint ( 1 , "Nenhum usuário" );
    delay ( 1000 );
    changeMode ( MODE_WELCOME );
    voltar ;
    }

    lcdprint ( 0 , "" );
    lcd . setCursor ( 0 , 0 );
    lcd . escrever ( CH_NEXT );
    lcd . print ( "Next to" );
    lcdprint ( 1 , "" );
    lcd . setCursor ( 0 , 1 );
    lcd . escrever ( CH_SELECT );
    lcd . print ( "Remover" );
    lcd . escrever ( CH_PERSON );
    lcd . print ( CUR );
    enquanto ( verdadeiro ) {
    IF ( digitalRead ( BTN_NEXT ) == LOW ) {
    CUR = getNextId ( CUR );
    lcdprint ( 1 , "" );
    lcd . setCursor ( 0 , 1 );
    lcd . escrever ( CH_SELECT );
    lcd . print ( "Remover" );
    lcd . escrever ( CH_PERSON );
    lcd . print ( CUR );
    } outra IF ( digitalRead ( BTN_SELECT ) == LOW ) {
    bool Bret = false ;
    Bret = fps . DeleteID ( CUR );
    IF ( Bret ) {
    lcdprint ( 1 , "" );
    lcd . setCursor ( 0 , 1 );
    lcd . escrever ( CH_PERSON );
    lcd . print ( CUR );
    lcd . print ( "Eliminado!" );
    delay ( 1000 );
    changeMode ( MODE_WELCOME );
    } mais {
    lcdprint ( 1 , "erro .." );
    delay ( 1000 );
    changeMode ( MODE_WELCOME );
    }
    } outra IF ( digitalRead ( BTN_MODE ) == LOW ) {
    changeMode ( MODE_WELCOME );
    voltar ;
    }
    checkMotion ();
    atraso ( 10 );
    }
    changeMode ( MODE_WELCOME );
    }

    Interruptor ( curMode ) {
    Caso MODE_IDLE :
    idle ();
    quebrar ;
    Caso MODE_WELCOME :
    boas-vindas ();
    quebrar ;
    Caso MODE_ENROLL :
    Inscreva-se ();
    quebrar ;
    Caso MODE_DEROLL :
    deroll ();
    quebrar ;

    }
    }

  9. Olá Anthony!
    Estou com um novo projeto para fazer. Trata-se de uma torneira automática.
    Tenho o Arduino Uno, comprei um sensor ultrasom que está chegando, tenho o relé e válvula solenóide para abrir e fechar a saída de água.
    Tem alguma dica pro meu projeto? Agradeço desde já. Rene Aviles.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Please type the characters of this captcha image in the input box

Por favor, digite os caracteres desta imagem na caixa de entrada