Curso ESP32 primeiros passos

Primeiros passos com ESP32 - Curso ESP32 básico

Primeiros passos com ESP32 - Curso ESP32 básico

Olá, entusiastas da tecnologia! Estamos entusiasmados em anunciar o lançamento de um conteúdo educacional inovador aqui no Vida de Silício - um curso abrangente dedicado à ESP32, especialmente projetado para aqueles que estão começando sua jornada no fascinante universo da eletrônica e programação.

https://youtu.be/5arcdEzRDA8

kit robotica educacional com Arduino ESP ou Microbit

Conhecendo a ESP32

A ESP32 não é apenas uma simples placa de desenvolvimento. É uma poderosa estação de trabalho que une Wi-Fi e Bluetooth, perfeita para projetos que vão desde a automação residencial simples até complexas implementações de IoT (Internet das Coisas) e robótica.

Muitos iniciantes começam com o Arduino, conhecido por sua abordagem amigável e fácil de entender. No entanto, à medida que evoluem, necessitam de uma plataforma mais robusta, capaz de atender demandas mais sofisticadas. Aqui entra a ESP32, uma solução perfeita para aqueles que desejam ir além, sem perder a simplicidade que tanto apreciam.

Explorando o Kit ESP32

Neste curso, você será guiado através de uma série de projetos práticos, cada um destinado a explorar os diversos componentes e funcionalidades da ESP32. E para tornar essa jornada o mais suave possível, oferecemos um kit completo que inclui tudo o que você precisa para começar. De LEDs e sensores a módulos de relé, preparamos um pacote que transformará teoria complexa em prática divertida e educativa.

Por Que ESP32?

Você deve estar se perguntando: "Por que devo escolher o ESP32 em vez de continuar com o Arduino?" Enquanto o Arduino é uma ferramenta fantástica e tem seu lugar no coração do mundo maker, a ESP32 oferece certas vantagens que a tornam uma opção superior para projetos mais ambiciosos. Além de ser mais acessível, ela suporta conectividade Wi-Fi e Bluetooth, uma variedade mais ampla de periféricos e requer menos energia.

Mergulhando na Prática

Preparado para colocar as mãos na massa? Vamos começar instalando o ambiente necessário para programar sua ESP32. O processo é simples: você precisará da Arduino IDE e do suporte adicional para a ESP32. Nós guiaremos você em cada passo, garantindo que sua configuração esteja pronta sem problemas.

Configurando Seu Ambiente de Desenvolvimento

Antes de podermos mergulhar na criação com a ESP32, precisamos preparar nosso ambiente de desenvolvimento. Isso envolve baixar o software necessário e configurar a IDE do Arduino para trabalhar com a ESP32. Não se preocupe; guiaremos você por todo o processo!

Após a configuração, entraremos imediatamente em ação com alguns projetos básicos, ajudando você a se familiarizar com a programação da placa. Desde o tradicional "Hello World" até fazer um LED piscar, você ganhará confiança enquanto aprende os princípios fundamentais.

Passo 1: Baixe a Arduino IDE

Se você ainda não tem a Arduino IDE instalada em seu computador, é hora de obtê-la. Visite o site oficial do Arduino e faça o download da versão mais recente do software. A instalação é bastante simples, e você encontrará instruções claras no site.

Passo 2: Instale o Suporte ao ESP32

Com a Arduino IDE instalada, o próximo passo é adicionar suporte para a placa ESP32. Siga estas instruções detalhadas para configurar corretamente:

  1. Inicie a Arduino IDE.
  2. Clique em Arquivo > Preferências (no Windows) ou Arduino > Preferências (no macOS).
  3. Você verá um campo chamado "URLs Adicionais de Gerenciamento de Placas". Aqui, insira o seguinte link: https://dl.espressif.com/dl/package_esp32_index.json
  4. Clique em "OK" para fechar a janela de preferências.
  5. Agora, vá para Ferramentas > Placa > Gerenciador de Placas.
  6. Na barra de pesquisa, digite "ESP32" e deverá aparecer a opção para instalar o pacote de suporte para a placa ESP32. Clique em "Instalar".
  7.  Em seguida na mesma aba de Ferramentas > Placa agora irá aparecer uma nova chamada "esp32". Selecione a opção "ESP32 Dev Module".
  8.  E por fim basta definir a porta em que seu ESP32 está conectado.

Com esses passos concluídos, sua Arduino IDE agora está pronta para programar a ESP32!

Seus Primeiros Projetos: Hello World & Blink

Hello World

Com tudo configurado, vamos começar com o clássico "Hello World". Neste projeto, faremos algo simples para garantir que tudo está funcionando corretamente. No contexto da ESP32, isso pode significar enviar uma mensagem simples para a saída serial.

// VIDA DE SILICIO
// KIT ESP32
// AULA 1 
// PROGRAMA 1 : HELLO WORLD

void setup() // SETUP: Define as funções que o ESP32 realizará apenas uma vez após sua inicialização.
{
Serial.begin(115200); // Define a velocidade de comunicação serial entre o microcontrolador e o dispositivo externo conectado a ele.
// Certifique-se de que o valor de 115200 baund descrito no programa seja a mesma taxa no seu monitor serial.

}

void loop() // LOOP: Define as funções que o ESP32 realizará repetidas vezes enquanto o programa solitar ou estiver ligado. 
{
Serial.println("Hello World!"); // Imprime no monitor serial a frase escrita entre as aspas.
delay(1000); // Atraso de 1000 milisegundos ou 1 segundo.
}

Blink

Em seguida, movemos para o projeto "Blink". Aqui, você aprenderá a manipular as saídas digitais da ESP32. Vamos fazer um LED piscar - este é o equivalente eletrônico de um "Hello World", e é uma maneira fantástica de confirmar que você pode controlar a placa.

// VIDA DE SILICIO
// KIT ESP32
// AULA 1 
// PROGRAMA 2 : BLINK
void setup() { 
pinMode(2, OUTPUT); //Configura o pino GPIO2 ou D2 como saída, permitindo que ele forneça um sinal elétrico com nível lógico alto ou baixo para controlar dispositivos externos.
} 


void loop() { 
digitalWrite(2, HIGH); // a função HIGH define a porta digital seu nível lógico como ALTO, assim ligando o led.
delay(5000); // Espera 5 segundos.
digitalWrite(2, LOW); // a função LOW define a porta digital seu nível lógico como BAIXO, assim desligando o led.
delay(1000); // Espera 1 segundo.
}

Conclusão

Estamos apenas no começo desta emocionante jornada. Ao longo deste curso, desvendaremos juntos o potencial completo da ESP32. Fique atento aos nossos próximos vídeos, onde exploraremos ainda mais projetos e dicas.

Convidamos você a participar ativamente desta comunidade. Deixe seu like, inscreva-se no canal e compartilhe suas dúvidas, conquistas e ideias nos comentários. Sua interação é o que dá vida a este canal. Estamos aqui para aprender juntos e moldar o futuro da tecnologia DIY e IoT. Até a próxima aula!


Programando o Microbit com Makecode - Codando pela primeira vez!

Neste tutorial, focaremos em usar o Microsoft MakeCode, um ambiente de programação visual intuitivo e completamente gratuito, perfeito para quem está começando. Com o MakeCode, programar se torna uma atividade divertida, quase como montar um quebra-cabeça! Você não precisa se preocupar com a complexidade da sintaxe de programação tradicional; aqui, tudo o que você precisa é arrastar, soltar e ver a mágica acontecer.

Introdução- Micro:bit Descomplicado

O Micro:bit é um dispositivo eletrônico que está conquistando corações e mentes, tanto de jovens quanto de adultos. No entanto, para aqueles que estão iniciando nesse mundo tecnologico, pode parecer um pouco intimidante no início. Mas não se preocupe, estamos aqui para desmembrar Micro:bit de forma simples e te ajudar a rodar seu primeiro código.

Pense no Micro:bit como um controle remoto universal. Assim como um controle pode operar diversos dispositivos eletrônicos, o Micro:bit também pode ser programado para realizar uma ampla variedade de tarefas. Você pode usá-lo para acender LEDs, medir a temperatura, detectar movimentos e até mesmo criar jogos.Ele possui um visor LED de 5x5 pixels que pode exibir gráficos simples. Além disso, tem sensores de movimento, luz e temperatura embutidos. Isso significa que o Micro:bit pode perceber o ambiente ao seu redor e reagir de acordo.

O que torna o Micro:bit único é sua versatilidade e facilidade de programação. Você não precisa ser um gênio da informática para começar. Por isso estamos aqui pra ajudar a dar vida às suas ideias, mesmo que seja um novato na programação. A verdadeira magia  acontece quando você une sua criatividade pessoal com essa pequena maravilha tecnológica. Ele permite que você explore sua imaginação e transforme conceitos em realidade. O único limite é a sua criatividade.

kit robotica educacional com Arduino ESP ou Microbit

O Conceito de Programação de Blocos

No MakeCode, você encontrará uma ampla variedade de blocos lógicos que desempenham um papel fundamental na criação de programas. Esses blocos são usados para controlar o fluxo do programa, tomar decisões com base em condições e otimizar a execução do código. A principal característica da programação de blocos é a sua abordagem visual. Em vez de digitar código em uma linguagem de programação, os programadores usam uma interface gráfica que fornece blocos de construção, cada um representando uma função ou ação específica. Esses blocos podem ser arrastados, soltos e conectados para criar programas funcionais. Isso elimina a necessidade de aprender a sintaxe complicada das linguagens de programação e torna a programação mais simples, principalmente para iniciantes. Dentro desse sistema de programação, você encontra uma variedade de blocos lógicos e estruturas de decisão. Alguns dos conceitos-chave que esses blocos abrangem incluem:

Condicionais: "Tomando Decisões"

Os blocos de condicionais permitem que você crie instruções condicionais, o que significa que o programa toma decisões com base em condições específicas. Os blocos mais comuns incluem:

Se... Então...: Este é um bloco mais simples que permite que você execute código somente se uma condição for verdadeira. Por exemplo, você pode usar esse bloco para fazer com que seu programa exiba "Bom dia" se for de manhã.

Se... Então... Senão...: Este bloco permite que você especifique uma condição. Se essa condição for verdadeira, o código dentro do bloco "então" será executado; caso contrário, o código dentro do bloco "senão" será executado. Por exemplo, você pode criar um programa que exibe "Dia ensolarado" se a temperatura estiver acima de 25 graus Celsius e "Dia nublado" se estiver abaixo desse valor.

Esperar até...: Este bloco permite que o programa aguarde até que uma determinada condição seja atendida. Isso é útil para situações em que você deseja que o programa fique em espera até que um botão seja pressionado ou um sensor detecte uma mudança.

Loops: "Economizando Tempo"

Os loops, ou estruturas de repetição, são fundamentais para executar um conjunto de ações várias vezes. Eles economizam tempo e ajudam a evitar a repetição de código. Alguns dos blocos de loop mais utilizados incluem:

Repita: Use esse bloco para repetir um conjunto de ações um número específico de vezes. É útil quando você deseja executar uma tarefa conhecida, como piscar um LED cinco vezes.

Repita até: Este bloco permite que você execute um conjunto de ações repetidamente até que uma condição seja atendida. Por exemplo, você pode fazer um jogo onde o programa pede ao jogador para adivinhar um número até que a suposição esteja correta.

Para cada: Este bloco é ideal para percorrer uma lista de itens, como elementos de um array, e executar uma ação para cada item. Por exemplo, você pode usar isso para calcular a média de uma lista de números.

O que é necessário para começar?

A primeira etapa é garantir que você tenha tudo o que precisa para começar a trabalhar com o Micro:bit. Aqui está um checklist prático para ajudar você:

  • Micro:bit: Certifique-se de ter o dispositivo Micro:bit em mãos. Este é o coração do seu projeto e a ferramenta que você irá programar.
  • Cabo USB: Você precisará de um cabo USB para conectar o Micro:bit ao seu computador e transferir programas.
  • Computador: É essencial ter um computador para programar e carregar código no Micro:bit.
  • Acesso à Internet: Muitos recursos, tutoriais e ferramentas úteis estão disponíveis online. Portanto, certifique-se de ter uma conexão à internet estável.
  • Site de Programação Makecode: Acesse o servidor online do Makecode  e crie sua conta! A grande vantagem é não precisa de instalação, então se você quer iniciar seu projeto mas o seu PC não aguenta coisas pesadas o Makecode é ideal.

Agora que você tem o básico, é hora de configurar seu ambiente de aprendizado para obter o máximo proveito da sua jornada com o Micro:bit.

Explorando a Plataforma MakeCode

O MakeCode é uma plataforma de programação visual que simplifica o processo de criação de programas e projetos. Desenvolvido com o intuito de tornar a programação acessível a todos, revolucionando o aprendizado ao permitir que pessoas de todas as idades e níveis de habilidade se envolvam na criação de softwares e projetos eletrônicos. Sua abordagem visual e intuitiva torna a programação menos intimidadora e mais divertida.

Benefícios do MakeCode:

Uma das maiores vantagens do MakeCode é a sua inclusividade. Ele abre as portas para o aprendizado da programação, permitindo que estudantes, entusiastas, educadores e até mesmo pessoas com diferentes habilidades e origens se envolvam com a tecnologia. Alguns dos benefícios incluem:

  • Simplicidade: O MakeCode simplifica a programação com blocos de arrastar e soltar, tornando o processo intuitivo e fácil de entender.
  • Diversidade: O MakeCode atende a uma ampla variedade de idades e níveis de habilidade, de crianças a adultos, de iniciantes a avançados.
  • Acessibilidade no MakeCode: Promovendo a Igualdade de Aprendizado, pois valoriza a acessibilidade, tornando o aprendizado da programação igualmente acessível a todos. A plataforma oferece suporte a diferentes dispositivos e necessidades, incluindo recursos para pessoas com deficiências visuais ou auditivas.

Criando sua primeira conta e acessando a interface do MakeCode:

Agora que você entende os princípios do MakeCode, é hora de dar os primeiros passos na plataforma. Criar uma conta e acessar a interface é um processo simples:

  • Acesse o site oficial do MakeCode (https://makecode.microbit.org/).
  • Clique na opção "Entrar" ou "Sign In" para criar uma conta.
  • Siga as instruções para criar sua conta, fornecendo as informações necessárias.
  • Após criar sua conta, faça login na plataforma.

Seu Primeiro Projeto no MakeCode

Antes de começarmos, é importante entender o conceito por trás do seu primeiro projeto no MakeCode. Vamos criar um programa que fará um LED piscar, isso  envolve controle digital, pois estará alternando o estado do LED entre ligado (aceso) e desligado (apagado) em intervalos regulares. você usará blocos de programação para definir esse comportamento, construindo o programa como um quebra-cabeça, escolhendo os blocos certos e conectando-os de maneira lógica.

 

Vamos codar?

Clique em "Novo Projeto" para começar um  projeto em branco.

 

Programação do LED:

  • Em procurar, clique no bloco denominado "Básicos" e arraste o ícone "Sempre" para sua área de trabalho.

 

  • Localize o bloco relacionado ao LED. Você encontrará "Plotar x(0) y(0)", arraste e solte dentro de "Sempre".

  • Configure o LED para piscar ligando-o e desligando-o com intervalos de tempo. Para isso, clique no bloco "Básico" e arraste o ícone "Pausa (ms) (100)"  para "Plotar x(0) y(0)" e ajuste seu valor, para 500 ms.

  • Localize  novamente o bloco relacionado ao LED. Você encontrará "apagar x(0) y(0)", arraste e solte abaixo de "Pausa (ms) (500)".

  • Clique no ícone "seta verde" para ver seu código em ação no simulador. O LED do micro:bit deve começar a piscar.

 

Colocando pra rodar:

  • Quando estiver satisfeito com seu código, clique em "Download" para baixar o código no formato HEX.
  • Conecte o micro:bit ao computador e copie o arquivo HEX para o micro:bit (ele funciona como um dispositivo USB).
  • O LED no micro:bit começará a piscar de acordo com seu programa.

Se você seguiu esses passos, você criou com sucesso um projeto simples no MakeCode para fazer um LED piscar no . Este é apenas o começo, e você pode explorar mais recursos do MakeCode para criar projetos mais complexos à medida que se tornar mais familiarizado com a plataforma. Divirta-se explorando e programando!

Conclusão

Até agora você explorou as bases da programação com micro:bit e MakeCode, desde o entendimento dos conceitos iniciais até a criação do seu primeiro  projetos, o LED piscante. Você se familiarizou com a interface do MakeCode e entendeu como a programação de blocos é simples e intuitiva. Além disso, você aprendeu a programar usando blocos lógicos, a entender condicionais e loops, e a criar funcionalidades com base em blocos. Isso é um grande feito! Agora é o momento perfeito para fazer uma revisão pessoal. Avalie seu progresso e considere o que deseja alcançar a seguir. Talvez você queira criar projetos mais complexos, como jogos ou dispositivos interativos, ou aprender a utilizar sensores para coletar e analisar dados. Estabeleça novas metas e continue a explorar o mundo da programação e eletrônica.
Lembre-se de que a jornada de aprendizado na programação é contínua. Continue explorando, experimentando e, acima de tudo, divirta-se enquanto desenvolve suas habilidades de programação. O mundo da tecnologia está cheio de possibilidades, e você está no caminho certo para se tornar um criador digital. Boa sorte!

 


criancas segurando microbit

O que é micro:bit?

Direto ao ponto: O que é Micro:Bit?

O micro:bit é um dispositivo educacional de computação física, projetado para introduzir estudantes e entusiastas de tecnologia ao mundo da programação e eletrônica de maneira acessível.

microbit bbc
Placa microbit BBC

kit robotica educacional com Arduino ESP ou Microbit

História do micro:bit

O micro:bit foi criado com o propósito de abordar a crescente preocupação em relação à falta de habilidades em programação e tecnologia entre os jovens britânicos. Evidentemente que, em um mundo cada vez mais digital, capacitar sua população mais jovem com conhecimentos em tecnologia fosse fundamental. Daí surgiu como uma solução para esse desafio, o "micro:bit". O dispositivo foi desenvolvido em parceria com a BBC (British Broadcasting Corporation), ARM Holdings, Microsoft e várias outras instituições, com o objetivo de criar um dispositivo acessível e fácil de usar que ajudaria os alunos a desenvolverem habilidades de programação, eletrônica e pensamento computacional.

A introdução do micro:bit nas escolas do Reino Unido foi um marco importante no projeto, pois promoveu o interesse não só dos estudantes, como de seus respectivos responsáveis e do corpo docente escolar. Em 2016, a BBC, em colaboração com parceiros educacionais, distribuiu um milhão de micro:bits gratuitamente para estudantes de 11 a 12 anos em todo o país.

Os micro:bits foram integrados ao currículo escolar e utilizados em aulas de ciência da computação e design tecnológico. Eles possibilitaram que os estudantes criassem projetos criativos, desde jogos simples até dispositivos interativos. Essa abordagem prática permitiu que os alunos aplicassem os conceitos que estavam aprendendo em um contexto real, incentivando o desenvolvimento de habilidades em resolução de problemas, logica computacional, dentre outras .

O sucesso desse projeto levou à sua expansão para outras partes do mundo, tornando o micro:bit uma ferramenta global de ensino de programação e eletrônica para jovens e adultos.

criancas segurando microbit
Placa micro:bit foi desenvolvida pensando na aplicação educacional

Características Técnicas do micro:bit

O micro:bit possui dimensões muito compactas, aproximadamente 5 cm de largura, 4 cm de comprimento e menos de 1 cm de espessura, com uma forma retangular, tornando-o portátil e fácil de manusear, ideal para iniciantes. Sua parte frontal possui uma matriz de 25 LEDs em um formato 5x5, que pode ser programada para exibir padrões, gráficos e mensagens. Além disso, conta com dois botões programáveis, "A" e "B", para interações simples, e sensores, como acelerômetro e bússola eletrônica, que permitem a criação de projetos interativos baseados em movimento. É importante destacar que o micro:bit pode ser alimentado tanto por meio de um conector de bateria quanto por USB, o que o torna versátil e adequado para diversos cenários de uso.

Como é uma placa Micro:bit

 

Como o micro:bit funciona?

Uma das características distintivas do micro:bit é sua flexibilidade quando se trata de linguagens de programação. Os usuários podem escolher dependendo de seu nível de habilidade e preferências. Sendo elas:

-Microsoft MakeCode: É um sistema gráfico baseado em blocos que é especialmente adequado para iniciantes e estudantes mais jovens. Com o MakeCode, os usuários podem arrastar e soltar blocos para criar programas para o micro:bit, tornando a programação mais acessível e amigável.

Makecode
Makecode é a plataforma onde programamos o Microbit desenvolvida pensando no uso educacional

-CodeKingdoms (JavaScript): Esta é outra interface gráfica que utiliza JavaScript para programar o micro:bit. Oferece uma transição suave para aqueles que desejam progredir para programação em texto a partir de uma abordagem baseada em blocos.

-MicroPython: O MicroPython é um editor baseado em texto que é mais adequado para desenvolvedores e estudantes que desejam aprofundar seus conhecimentos de programação. Permite escrever código Python diretamente para o micro:bit, proporcionando maior flexibilidade e controle.

Aplicações e Projetos com micro:bit

Sendo uma plataforma versátil que pode ser usada em uma ampla variedade de projetos, o micro:bit é um excelente dispositivo para iniciantes que desejam se envolver em projetos maker’s que envolvam eletrônica e programação. Como:

- Relógio LED: Iniciantes podem criar um relógio de LED programável que exibe a hora em uma matriz de LEDs no micro:bit.

Relógio LED microbit
Relógio LED microbit

- Jogo de Adivinhação: Um jogo de adivinhação simples, onde o micro:bit gera um número aleatório e desafia o jogador a adivinhá-lo.

- Termômetro Eletrônico: Use o sensor de temperatura embutido no micro:bit para criar um termômetro eletrônico que exibe a temperatura atual.

- Cronômetro e Contador: Desenvolva um cronômetro e contador digital que pode ser usado para medir o tempo ou contar eventos.

A plataforma é projetada para ser simples e intuitiva, sendo que esses exemplos representam apenas a ponta do iceberg das possibilidades.

Benefícios do micro:bit na Educação

Mas, o que o  micro:bit proporciona? essa resposta é bem simples! As vantagens são  significativas na educação ao fomentar e estimular o  pensamento lógico e  a busca por novas alternativas nas resolução de problemas. Além disso, ele introduz conceitos STEM, abrangendo ciência, tecnologia, engenharia e matemática de uma simples e pratica, tornando o aprendizado mais atraente.

Outro benefício chave é a acessibilidade e versatilidade, tornando-o acessível a orçamentos limitados e flexível nas aplicabilidades em diversas disciplinas. Sua capacidade de motivar os alunos por meio de desafios práticos, o torna uma ferramenta fundamental na educação.

Comparação: micro:bit vs. Outras Plataformas Educacionais

O micro:bit, Arduino e Raspberry Pi são três das plataformas  mais populares usadas em educação e projetos DIY (Faça Você Mesmo). Cada uma delas possui características únicas e atende a diferentes necessidades.

Micro:bit

O micro:bit se destaca por seu tamanho compacto e design simplificado, tornando-o ideal para iniciantes e crianças. Ele vem com sensores incorporados, como acelerômetro e bússola, além de uma matriz de LEDs. A programação geralmente é realizada em linguagens de blocos com uma interface simples e amigável, ideal para aqueles que não tem nenhuma afinidade com programação, tornando-o adequado para projetos simples, jogos interativos e uma introdução facilitada à programação. É acessível, embora seja limitado em termos de capacidade de processamento e recursos em comparação com o Arduino e o Raspberry Pi.

Arduino

O Arduino é uma plataforma de hardware aberta com várias placas disponíveis, cada uma com recursos diferentes. É programado em C/C++ usando a IDE do Arduino, o que oferece controle direto sobre eletrônica, tornando-o adequado para projetos envolvendo sensores, motores e robótica. Possui flexibilidade, documentação extensa e ampla base de usuários, sendo uma escolha robusta para entusiastas e educadores. No entanto, a programação em C/C++ pode ser desafiadora para iniciantes, e a maioria dos projetos requer componentes externos.

Raspberry Pi

O Raspberry Pi é um computador de placa única completo com processador, memória e portas USB, adequado para uma ampla variedade de aplicações, como servidores, emulação de jogos e automação residencial. Essa plataforma é  versátil, excelente para projetos mais complexos, mas pode ser excessiva para projetos simples. Ela tem um custo um pouco mais alto em comparação com o micro:bit e o Arduino e requer um monitor, teclado e mouse para configuração inicial.

Em resumo:

essas três plataformas oferecem opções diversas para atender a diferentes necessidades e níveis de experiência, permitindo que os usuários escolham a que melhor se adapta aos seus projetos e objetivos.

Como Começar com micro:bit?

Iniciar com o micro:bit é um processo relativamente fácil. Primeiramente, adquira um dispositivo micro:bit, que está disponível online, muitas vezes em kits iniciais que incluem componentes adicionais para projetos. Em seguida, instale o software que atenderá melhor as suas necessidades. Duas opções populares são o Microsoft MakeCode, que oferece uma interface de programação baseada em blocos amigável para iniciantes, e o MicroPython, uma versão simplificada da linguagem Python.

A partir daí, você pode explorar uma variedade de tutoriais e recursos disponíveis online, desde o site oficial do micro:bit até vídeos educativos pela internet. É fundamental participar de comunidades e fóruns relacionados para obter suporte, compartilhar seus projetos e aprender com outros entusiastas.

Com o micro:bit em mãos, comece com projetos simples, como exibir mensagens na matriz de LEDs ou criar um jogo de adivinhação. À medida que sua confiança e habilidades crescem, você pode progredir para projetos mais complexos que envolvem sensores e componentes adicionais.

Conclusão

Se você está começando sua jornada com o micro:bit agora, lembre-se de que a prática e a experimentação são essenciais, e cometer erros faz parte do processo. O micro:bit, como uma ferramenta educacional, desempenha um papel importantissímo na democratização do acesso à programação e eletrônica. Sua história de sucesso no Reino Unido e sua expansão global destacam sua eficácia na educação e no estímulo ao pensamento lógico e criativo. Lembre-se de documentar seu progresso, participar de comunidades online, explorar tutoriais, se desafiar e, acima de tudo, aproveitar ao máximo sua jornada de exploração no mundo da programação.

 


O que é Cultura Maker? A Evolução do Faça Você Mesmo!

A Jornada de Transformação da Criatividade em Inovações Tangíveis

A cultura maker é conhecida por muitos como a famosa cultura do “faça você mesmo”. Na minha infância, existia um termo chamado “gambiarra”, que na verdade era uma forma primitiva do que hoje entendemos como cultura maker. Vamos explorar suas origens, destacando as transformações desde as gambiarras da infância até o movimento global de criatividade e inovação que observamos hoje

https://youtu.be/Q1UjyDZrlb4

kit robotica educacional com Arduino ESP ou Microbit

O Nascimento da Cultura Maker

Na infância, muitos de nós já éramos makers sem saber, imersos na criação de carrinhos de rolimã e inúmeras “gambiarras”. Se você, como eu, está na faixa dos 35 a 40 anos, provavelmente compartilha dessas lembranças vivas de inventividade precoce. Porém, a cultura maker, que pode ser considerada um movimento moderno, que ganhou força nas últimas décadas.

Isso se deve a pessoas como Dale Dougherty. Dale popularizou o termo "maker" depois de fundar a primeira revista especializada no assunto, a revista Make. Dougherty via o movimento maker como uma grande evolução da criatividade.

Criador do termo maker Dale Dougherty atribuido à cultura maker
Criador do termo maker Dale Dougherty atribuido à cultura maker

Desde sua fundação em 2005, a revista Make tem atraído entusiastas da tecnologia, educadores, cientistas, e pessoas de todas as idades que abraçam a ideia de criar com as próprias mãos, sejam eles amadores ou profissionais.

Revista Make
Revista Make

Maker Faire

A Make também organizou centenas de feiras de inventores em várias partes do mundo.

Maker FairFoto de uma Maker Fair

A primeira “Maker Faire” ocorreu em 2006, com a participação de 20.000 pessoas. Desde então, muitas outras feiras ocorreram.

Dale Dougherty e a Popularização da Cultura Maker

Dale Dougherty é uma figura central nessa história, contribuindo significativamente para a popularização do termo "Maker". Fundador da primeira revista sobre o tema, a Make, Dale vislumbrou o movimento maker como uma potente evolução da criatividade. Desde 2005, a revista tem sido um farol para entusiastas, educadores, cientistas e inventores de todas as idades.

Ferramentas e Comunidade Maker

Agora, você pode estar se perguntando, quais são as ferramentas da cultura maker?

Geralmente, as ferramentas fundamentais incluem uma combinação de equipamentos de alta e baixa tecnologia. Isso vai desde impressoras 3D e máquinas de corte a laser até ferramentas mais comuns, como alicates, chaves de fenda, martelos, ferros de solda, pregos, entre outros.

Essas são as ferramentas que você normalmente encontraria em um laboratório ou espaço maker.

 


O que é Algoritmo

O que é Algoritmo?

Algoritmo: A Magia Invisível que Comanda Nosso Mundo

Todos os dias, realizamos inúmeras tarefas e, muitas vezes, seguimos rotinas pré-estabelecidas sem nem perceber. Seja ao escovar os dentes, fazer um misto quente ou mesmo ao decidir a melhor hora de atravessar a rua, usamos uma sequência lógica de ações. Adivinha? Isso é exatamente o que um algoritmo é!

O Conceito de Algoritmo

O termo "algoritmo" pode parecer complexo ou algo que pertence exclusivamente ao mundo da programação, mas sua essência é bastante simples. Um algoritmo é uma série de passos ou instruções definidas que seguimos para resolver um problema ou alcançar um objetivo específico. E assim como usamos algoritmos em nossa vida cotidiana, a tecnologia que nos cerca também o faz, desde o funcionamento de um aplicativo até a maneira como o YouTube decide quais vídeos nos recomendar.

https://www.youtube.com/watch?v=QEMJoYLRKcs

kit robotica educacional com Arduino ESP ou Microbit

Atrás de cada ação em nossos dispositivos, como mover o cursor ou dar um "like" em um vídeo, há uma série de instruções predefinidas que foram programadas para que o dispositivo saiba exatamente o que fazer. Esse conjunto de instruções, ou seja, algoritmos, são escritos em linguagens de programação como Python, C++, Java, entre outras. Ao programar, os desenvolvedores "traduzem" nossas necessidades para a linguagem que o computador entende.

Algoritmos e Arduino: A Prática da Programação

Se você está se aventurando no mundo da tecnologia, é provável que já tenha ouvido falar do que é Arduino. Mas como isso se conecta ao universo dos algoritmos que acabamos de explorar?

Arduino é uma plataforma de prototipagem eletrônica open-source que permite aos usuários criar dispositivos interativos. Desde simples acender de LEDs até robôs complexos, as possibilidades são vastas. E por trás de cada projeto Arduino? Estão os algoritmos!

Quando programamos um Arduino, estamos essencialmente escrevendo um conjunto de instruções para que o microcontrolador execute. Por exemplo, se quisermos que um LED pisque a cada segundo, nosso algoritmo pode parecer com:

1. Ligue o LED.
2. Aguarde 1 segundo.
3. Desligue o LED.
4. Aguarde 1 segundo.
5. Repita.

Esse algoritmo é então traduzido para a linguagem de programação (como C++ para Arduino) na IDE Arduino que compilará em uma sequencia de comandos que o microcontrolador possa entender e executar.

O código ficaria assim:

// Definição do pino onde o LED está conectado
const int ledPin = 13;

void setup() {
// Inicializa o pino do LED como saída
pinMode(ledPin, OUTPUT);
}

void loop() {
// Ligue o LED
digitalWrite(ledPin, HIGH);

// Aguarde 1 segundo
delay(1000);

// Desligue o LED
digitalWrite(ledPin, LOW);

// Aguarde 1 segundo
delay(1000);
}

O mais fascinante é que, ao trabalhar com Arduino, a abstração dos algoritmos se torna concreta. Você pode realmente ver e tocar os resultados do seu algoritmo. O LED pisca, um motor gira, um sensor responde - tudo baseado nas instruções programadas.

Portanto, se você já achou que algoritmos eram conceitos abstratos demais, o Arduino é uma maneira excelente de vê-los em ação e, melhor ainda, de criar os seus próprios! Isso nos mostra o quão poderosos são os algoritmos, transformando ideias em movimentos reais, luzes e sons, e conectando o mundo digital ao físico de maneira incrível.

Conclusão

Então, da próxima vez que você acordar e iniciar sua rotina matinal, lembre-se de que, assim como você, os dispositivos ao seu redor também estão seguindo seus próprios algoritmos. E enquanto nossos algoritmos diários podem não ser escritos em linguagem de programação, eles são igualmente vitais para a ordem e funcionalidade de nosso mundo.


Montando um Circuito com LED no Arduino

Montando um Circuito com LED

Você já imaginou que com pequenos passos pudesse montar um circuito em uma protoboard e fazer com que um led piscasse da forma que você quisesse? Pois bem, agora você pode. Nesse tutorial você vai aprender a montar um circuito com LED.

Afinal, o que é Circuito elétrico?

Circuito é a trajetória percorrida entre um ponto a outro, normalmente tendo como objetivo final o ponto de partida, como um circuito de corrida.

circuito automobilístico
circuito automobilístico

kit robotica educacional com Arduino ESP ou Microbit

O circuito elétrico não é diferente, é uma ligação de dispositivos, feita por meio de um fio condutor, formando um caminho fechado que produz uma corrente elétrica. Sendo que essa passa pelo circuito graças à aplicação de uma diferença de potencial elétrico, produzida por uma fonte de tensão.

 

Exemplo de um circuito elétrico.
Exemplo de um circuito elétrico.

 

Corrente elétrica

Para descobrir o que é corrente elétrica, deve-se saber que esse fluxo ordenado de cargas elétricas é motivado pela existência de uma diferença de potencial elétrico.

 

Exemplo de corrente elétrica
Exemplo de corrente elétrica

 

A capacidade de condução elétrica dos materiais depende diretamente da intensidade do potencial elétrico que lhes é aplicado, bem como da sua natureza: enquanto os materiais condutores são facilmente percorridos por correntes elétricas, materiais isolantes oferecem grande resistência a elas.

 

Tensão

Você sabe o que é a tensão elétrica? A tensão elétrica, também chamada de diferença de potencial elétrico (ddp), é a quantidade de energia gerada a fim de que cargas elétricas se movam em um circuito elétrico, produzindo uma corrente elétrica. Por exemplo:

 

Exemplo de tensão em um circuito com uma lâmpada
Exemplo de tensão em um circuito com uma lâmpada

 

Quando queremos ligar lâmpadas, eletrodomésticos ou eletrônicos, os inserimos na tomada ou colocamos uma bateria neles. Da mesma forma, se quisermos ligar um controle remoto, é necessário inserir nele uma pilha que causará uma diferença de potencial no circuito interno do aparelho e fará com que as cargas elétricas se movam.

 

E para que servem os fios?

Permitem a passagem de cargas elétricas pelos elementos do circuito, que, ao serem percorridos, admitem que a energia elétrica seja convertida em outras modalidades úteis ao homem. Qualquer caminho por onde as partículas portadoras de cargas elétricas possa fluir é chamado de circuito elétrico.

 

CONHECENDO OS COMPONENTES

LED

O LED é um componente eletrônico semicondutor, ou seja, um diodo emissor de luz ( L.E.D = Light emitter diode ), mesma tecnologia utilizada nos chips dos computadores, que tem a propriedade de transformar energia elétrica em luz. Tal transformação é diferente da encontrada nas lâmpadas convencionais que utilizam filamentos metálicos, radiação ultravioleta e descarga de gases, dentre outras. Nos LEDs, a transformação de energia elétrica em luz é feita na matéria, sendo, por isso, chamada de Estado sólido ( Solid State ).

 

LED: Light emitter diode
LED: Light emitter diode

O LED é um componente do tipo bipolar, ou seja, tem um terminal chamado anodo e outro, chamado catodo. Dependendo de como for polarizado, permite ou não a passagem de corrente elétrica e, consequentemente, a geração ou não de luz.

Exemplo circuito com LED
Exemplo circuito com LED

 

Protoboard

Protoboard, é uma placa que permite a montagem e teste de circuitos sem a necessidade de soldar, apenas “espetando” os componentes na placa. Com isso, é possível montar um circuito que não conhecemos muito bem seu comportamento e efetuar diversos testes, tendo a liberdade de substituir os componentes da forma que desejar e só soldar o circuito em uma placa definitiva quando tudo estiver testado e funcionando perfeitamente.

 

Protoboard
Protoboard

 

A estrutura da ferramenta é simples: ela é composta por faixas de barramentos e faixas de terminais.

As faixas terminais são dois conjuntos de faixas verticais separados por uma parte central vazada. Cada coluna apresenta cinco pontos conectados por um condutor metálico, a que se tem acesso por meio dos furos da estrutura plástica do dispositivo. Assim, todo condutor presente em uma dessas faixas estará também conectado aos demais.

Já as faixas de barramentos são os conjuntos de duas faixas que estão localizadas nas extremidades do protoboard, utilizados, normalmente, na distribuição de sinais de alimentação dos circuitos montados. Geralmente, possuem uma faixa na cor azul, que serve como um sinal de alimentação negativa do circuito, e uma de cor vermelha, como sinal de alimentação positiva.

Estrutura de uma protoboard
Estrutura de uma protoboard

MÃO NA MASSA

- Materiais:

  • 1 LED 5mm
  • 1 Resistor de 300 a 470 Ω
  • Fios Jumper’s
  • 1 Protoboard
  • Arduino Uno ou outro

 

Montagem

No caso do nosso projeto, a fonte de energia vem da porta 11 do Arduino. Com a programação correta, é possível ligar e desligar a energia do pino 11, fazendo o LED acender e apagar. No esquema da montagem do circuito, as linhas coloridas são a representação gráfica dos jumpers. Utilize-os para ligar os componentes entre si conforme a ilustração abaixo. Note que o pino 11 está conectado ao lado positivo do LED, enquanto o GND vai no pino negativo, passando antes pelo resistor.

 

A representação de um circuito da montagem acima seria a seguinte:
A representação de um circuito da montagem acima seria a seguinte:

 

 

Código

Copie o código abaixo e cole o mesmo na IDE Arduino.

// Preparação do Arduino, este código irá rodar uma única vez
void setup()
{
  // Colocamos o pino 12 do Arduino como OUTPUT (saída)
  pinMode(12, OUTPUT);
}

  
// Este código é chamado automáticamente pelo Arduino, ficará em
// loop até que seu Arduino seja desligado
void loop()
{
  // Ativamos o pino 12 (colocando 5v nele)
  digitalWrite(12, HIGH);
  // Aguardamos 1 segundo
  delay(1000);
  // Desligamos o pino 12
  digitalWrite(12, LOW);
  // Aguardamos mais um segundo
  delay(1000);
  // Este código irá se repetir eternamente
}

 

 

Depois, verifique e carregue o código para a placa utilizando o cabo USB.

Para selecionar a porta do Arduino, basta ir em "Ferramentas", em seguida "Porta" e selecionar a porta onde seu Arduino aparecer conectado.

 

Clique em carregar e aguarde. Caso todas as suas ligações estejam corretas, o seu Arduino deverá ascender e apagar o LED em um intervalo de 1 segundo, repetindo-se infinitamente até que seja desligado.

 

ENTENDENDO A FUNDO

Software

Neste projeto usamos duas funções do Arduino: digitalWrite() e delay()

O termo "digital" significa que a saída só pode ter um de dois estados: ligado ou desligado. Também podemos nos referir a esses dois estados como HIGH/LOW ou 1/0. No circuito que vamos usar, quando a saída está em nível alto (HIGH ou 1), o LED acende; e quando a saída está em nível baixo, (LOW ou 0), o LED apaga.

O termo "write" significa escrita, e quer dizer que iremos "escrever" um estado digital (HIGH/LOW) em um dos pinos do Arduino. Esse é um comando utilizado quando o pino tem uma função de saída (iremos ver mais sobre entradas e saídas nos próximos projetos).

O termo "delay" significa atraso ou espera. Ele usado para manter o processador parado por um tempo.

Nessa parte, apresentamos as duas funções necessárias para ligar e desligar o LED, digitalWrite() e delay().

Saída Digital:

digitalWrite([pin], [HIGH/LOW])

A função digitalWrite()) é usada para definir o estado de um pino para alto ou baixo.

O primeiro parâmetro pin serve para identificar o pino que está sendo acionado, e nos próximos experimentos vamos explorá-lo mais. Por hora, vamos nos concentrar apenas no segundo parâmetro.

Quando um pino está em HIGH, ele produz na saída uma tensão de cerca de 5V, essa tensão faz passar uma corrente através do LED e o mesmo se ilumina. Quando o pino está em LOW, a tensão e saída é de 0V, fazendo com que a corrente pare de circular e o LED fique desligado.

Antes de usar odigitalWrite(), é muito importante se certificar que o pino a ser utilizado foi previamente configurado como saída, pois do contrário, ele não vai funcionar corretamente. Para configurar o pino, nós utilizamos o comando pinMode(), que é inserido usualmente dentro do setup(). Dessa forma temos que inserir a linha de código pinMode(11, OUTPUT); por exemplo, se quisermos usar o pino D11 como saída (veremos mais sobre os pinos do Arduino nos próximos projetos).

Delay de Milissegundos:

delay([ms])

O Arduino executa o código tão rápido que às vezes precisamos retardá-lo com um atraso, chamado aqui de delay. Esta função irá interromper o funcionamento do programa por um determinado número de milissegundos. Um segundo é composto por 1000 milissegundos (ms), então, se o parâmetro for de 1000 (ms) o atraso será de um segundo.


7 Formas de Queimar um Arduino

 7 FORMAS DE NÃO USAR UM ARDUINO

Títulos como o deste tutorial podem não ser muito comuns. Porém, em se tratando de Arduino e de eletrônica, acredite, mais importante do que saber manusear essa placa, é ter em mente o que não fazer com ela. Do contrário, você poderá ter impasses nada agradáveis, incluindo a perda de funcionalidade do seu produto. Dito isso, ao longo deste tutorial, você vai entender como e por que certas práticas podem arruinar suas experiência com o Arduino, de modo que possa evitá-las. Mas antes disso, se esse universo ainda é uma novidade, não se esqueça de consultar o tutorial "O que é e como funciona o Arduino", disponível em nosso portal.

kit robotica educacional com Arduino ESP ou Microbit

Sobrecarga de Corrente

Para começar, o erro mais comum, em termos de eletrônica, que você pode cometer em relação ao Arduino é submetê-lo a uma sobrecarga de corrente. Isso pode ser feito de 2 formas:

Erro 1: Conexão de pinos I/O ao GND

Em primeiro lugar, vamos relembrar o que são pinos I/O. Trata-se dos pinos input/output ou entrada e saída (E/S) da placa, aqueles que nós usamos para conectar os LEDs e os demais componentes eletrônicos ao Arduino. Eles correspondem aos pinos digitais de 0 a 13, localizados na parte superior da placa, e aos pinos analógicos de 0 a 5, na parte inferior.

Sobre esses pinos, uma situação de sobrecarga de corrente pode acontecer quando um deles, definido como output, em estado HIGH, é conectado ao GND.

int pino=12;
void setup() {
  pinMode(pino,OUTPUT);
}
void loop() {
  digitalWrite(pino,HIGH);
}

 

Para entender como isso ocorre, lembre-se de que, quando o estado de um pino é definido como HIGH, a tensão a que ele é submetido é de 5V em média. Utilizando a Lei de OHM e tendo em mãos algumas informações técnicas disponíveis no datasheet do Arduino, podemos verificar que essa prática é danosa ao equipamento.

A Lei de OHM afirma que os valores de tensão, corrente e resistência se relacionam da seguinte forma:

Perceba, na folha de dados, que a resistência interna dos pinos I/O é de 25 OHM, e a corrente máxima suportada por eles é de 40mA.

Ao fazer as contas, chegamos à conclusão de que essa conexão possibilita que uma corrente aproximadamente 5 vezes maior que o limite passe pelo pino. Dessa forma, você provocará um curto e danificará o pino.

 

Erro 2: conexão entre pinos I/O em diferentes estados lógicos

Outra forma de provocar uma sobrecarga de corrente consiste na conexão entre 2 pinos I/O configurados como output, estando um em estado lógico HIGH e o outro em LOW.

int pino1= 12;
int pino2= 13;

void setup() {
  pinMode(pino1,OUTPUT);
  pinMode(pino2,OUTPUT);

}

void loop() {
  digitalWrite(pino1,HIGH);
  digitalWrite(pino2,LOW);
}

 

Dessa forma, um deles estará submetido a 5V (HIGH) e o outro 0V (LOW), fazendo com que a diferença de potencial do circuito seja de 5V. Assim como no caso anterior, esse tipo de conexão provocará um curto, só que, dessa vez, você terá dois pinos deteriorados.

Sobrecarga de Tensão

Além dos danos que uma corrente acima do valor limite pode causar, é importante ficar atento à tensão aplicada aos pinos. Nesse sentido, vamos analisar os erros que podem provocar essa situação.

Erro 3: sobrecarga de tensão nos pinos I/O

No datasheet, temos a seguinte informação a respeito da tensão máxima suportada pelos pinos I/O:

Para o nosso propósito, isso quer dizer que sempre que a tensão aplicada aos pinos I/O for superior a 5,5V, eles poderão ser queimados.

Ao longo de suas experiências com Arduino, é bem provável que você precise fazer uso de uma fonte externa, como baterias de 9V. Isso se faz necessário, por exemplo, para o controle de componentes que exigem maior potência, como alguns servo motores.

Nesse sentido, fique atento, pois você poderá aplicar acidentalmente uma sobrecarga de tensão a um pino I/O, se conectá-lo diretamente ao polo positivo da bateria. Danificar o pino, no entanto, seria o menor dos problemas, uma vez que é possível que o estrago se estenda para outras partes da placa, como o chip de interface USB.

 

Erro 4: conectar um fonte externa ao VIN de maneira invertida

Usualmente, quando é preciso utilizar uma fonte externa, você pode conectar seus terminais ao Arduino da seguinte forma:

 

Caso você não se lembre, o pino VIN é utilizado como entrada de energia elétrica para o Arduino quando o circuito exige o uso de uma fonte externa. Esse tipo de alimentação da placa pode ser feita pelo conector DC jack ou diretamente pelos pinos VIN e GND.

O polo positivo deve estar conectado ao pino VIN e o negativo ao GND. Se assim for feito, tudo bem, porém se houver uma inversão nessa conexão, o resultado será uma sobrecarga de tensão, e sua placa será danificada. Portanto tenha cuidado ao fazer esse tipo de conexão!

Erro 5: conectar GND ao VIN ao usar uma fonte externa

Conforme você notou nos 2 erros anteriores, o uso de fonte externa requer cuidado. Vamos então analisar mais uma prática dessa natureza.

Quando se alimenta o Arduino, seja com fonte externa ou pelo computador, a tensão de saída no VIN é praticamente a mesma que a de entrada. Desse modo, quando se usa uma bateria de 9V para alimentar placa, a diferença de potencial entre o VIN e o GND será de 9V.

Portanto, nessa situação, ao conectar o GND ao VIN, você aplicará uma tensão relativamente alta para uma resistência pequena. Como consequência, haverá uma sobrecarga, que provocará um curto na entrada de alimentação externa.

Erro 6: sobrecarga de tensão no pino RESET

O pino RESET tem como função reiniciar a placa e está conectado diretamente ao microcontrolador.

Como você já percebeu, o Arduino não é invencível; e o pino RESET, apesar de ser robusto, também tem seus limites. Nesse sentido, o erro 6 consiste em aplicar tensões superiores a 13V a esse pino, o que pode danificá-lo, conforme se pode consultar na folha d dados.

Erro 7: excesso de corrente total sobre o microcontrolador

Vamos ao último erro, que se refere ao valor máximo de corrente total que o microcontrolador suporta. Lembre-se de que, no erro 1, foi explicado que a corrente máxima suportada por um pino I/O individualmente é de 40mA. Caso ultrapasse esse valor, o pino será danificado.

Pois bem, analisando todos esses pinos em conjunto, a corrente total também deve ser limitada. Ela deve equivaler a, no máximo, 200mA; do contrário, você danificará o microcontrolador.

Um exemplo de prática em que isso ocorre é o seguinte:

Suponha que, para um projeto, haja 15 LEDs conectados, e cada um deles esteja consumindo 20mA. Dessa forma, a corrente total no circuito será de 300mA, o que é maior que o limite de 200mA recomendado pelo datasheet. Ou seja, você pode acabar queimando seu Arduino!

Ainda sobre o Erro 7: excesso de corrente total sobre o microcontrolador, vejo o erro mais comum entre iniciantes que merece um erro exclusivo para ele:

Erro 7.1: NÃO LIGUE MOTORES OU SERVOS DIRETO AO ARDUINO!

Esse erro ainda vejo acontecer demais, e sempre que falo que não pode alguém vira e fala "sempre liguei meu servo direto ao Arduino, e nunca deu problema!". O problema é que como diria o grade filosofo "Um dia isso vai dar merda!". Ou seja, isso funciona até um dia não funcionar mais!!

Motores, solenoides e outros equipamentos que demandam muita energia, precisam ser alimentado por fontes externas para que você não corra o risco de queimar o regulador de tensão da sua placa Arduino.

 

Por fim, espero que você não reproduza essas procedimentos e assim tenha ótimas experiências com Arduino. Além disso, em caso de dúvidas, lembre-se sempre de consultar o datasheet do microcontrolador, bom trabalho!


Braço Robótico com Arduino

Braço Robótico com Arduino

Você com certeza já viu, em vídeos ou livros, aqueles robôs com garras que “pegam” os objetos nas fábricas, não é mesmo? Nesse contexto, os braços robóticos ou garras robóticas são equipamentos fundamentais na execução de grandes processos produtivos, em especial nas linhas de produção, onde se deseja manusear uma série de objetos. Sob o mesmo ponto de vista, neste tutorial, você vai aprender a montar e programar um braço robótico semelhante de maneira simples, usando Arduino. do mesmo modo, você poderá utilizar o braço em conjunto com outros projetos, como um carrinho robô, e o que mais a sua criatividade permitir!

 

Braços robóticos industriais em linha de produção
Braços robóticos industriais em linha de produção

 

Braço robótico controlado por Arduino
Braço robótico controlado por Arduino

kit robotica educacional com Arduino ESP ou Microbit

 

Conforme apresentado na introdução, O braço robótico proposto nesse tutorial possui um mecanismo de funcionamento bastante simples. Isso porque ele é composto por quatro partes, cada uma acoplada por um servo motor diferente. Do mesmo modo, o usuário pode controlar esses motores, um a um, de maneira analógica, o que possibilita diversas combinações de movimentos.

Além disso, para montar a estrutura física do braço robótico, siga a sequência de passos disponível no link abaixo.

Manual de Montagem - Braço Robótico.

Partes de um braço robótico: cada uma controlada por um servo motor
Partes de um braço robótico: cada uma controlada por um servo motor

 

Controle e montagem

Com o objetivo de atuar em pequenos projetos de robótica, o braço robótico controlado por Arduino, antes de mais nada, é uma ferramenta de baixo custo e de fácil montagem. Seus movimentos são guiados por 4 servo motores, os quais, por sua vez, podem ser controlados por potenciômetros ou por módulos joystick, através da placa Arduino.

Componentes usados para controle do braço robótico
Componentes usados para controle do braço robótico

 

No nosso caso à primeira vista, usaremos dois módulos joystick do tipo KY-023. Bem como você pode observar, esses componentes são semelhantes àqueles utilizados igualmente em vídeo games, e seu princípio de funcionamento ocorre através da atuação de dois potenciômetros e de um botão interno. Em suma, o dispositivo conta com 5 entradas, sendo duas para alimentação, uma digital para acionamento do botão, e as duas últimas para controle analógico do movimento nos eixos x e y.

 

Entradas do módulo Joystick KY-023
Entradas do módulo Joystick KY-023

 

Mãos à Obra - Braço Robótico com Joystick

Componentes necessários

Montando o circuito de controle do braço robótico

Inicialmente, vamos montar o circuito elétrico (hardware) do projeto.  Porém, antes de tudo, desligue o cabo USB de seu Arduino e faça a montagem seguindo a ligação das figuras abaixo.

 

Parte 1: conexão dos joysticks ao Arduino
Parte 1: conexão dos joysticks ao Arduino

 

Além disso, fique atento à conexão dos pinos de ambos os módulos joysticks, conforme as imagens abaixo:

Joystick 1, para controle dos motores da base e da altura do braço.
Joystick 1, para controle dos motores da base e da altura do braço.

 

Joystick 2, para controle dos motores da garra e do ângulo do braço.
Joystick 2, para controle dos motores da garra e do ângulo do braço.

 

Além da conexão dos joysticks, você deve conectar os servo motores do braço robótico ao Arduino. Sendo assim, utilizando o mesmo Arduino da montagem anterior, faça a seguinte ligação entre os componentes.

Parte 2: esquema de conexão dos servo motores ao Arduino.
Parte 2: esquema de conexão dos servo motores ao Arduino.

Alimentação do projeto

Você deve ter observado, na parte 2 da montagem do circuito, o barramento o positivo dos servo motores está conectado ao "Vin" e não ao pino 5V, como fazemos usualmente. Isso ocorre porque, para alimentar esses motores, precisaremos de uma tensão superior a 5V. Para isso, utilizamos 4 pilhas, cada uma com 1,5V, e fazemos a seguinte conexão dessas pilhas ao Arduino:

Pilha e adaptador conectados ao Arduino.
Pilha e adaptador conectados ao Arduino.

 

Adaptador.
Adaptador.

Ademais, fique atento a essa conexão, verificando sempre se o positivo da pilha está conectado ao positivo do adaptador.

Programando o Arduino para controlar o Braço Robótico

Importação da biblioteca "VarSpeedServo"

Em paralelo à montagem do circuito, você deve implementar o código. Porém, antes disso, instale a biblioteca "VarSpeedServo" em seu computador, clicando no link abaixo:

VarSpeedServo-master

Além disso, para usar essa biblioteca no código, siga a sequência de passos abaixo:

1- Após a criação do sketch, selecione o ícone "sketch" e, em seguida, clique em "Adicionar biblioteca.ZIP".

2- Agora, escolha o local onde você salvou o arquivo .zip da biblioteca. Imediatamente, clique no arquivo e no botão Abrir.

Dessa forma, após seguir os passos acima, você vai receber a mensagem de que a biblioteca está instalada e pode conferir em Sketch/Incluir Biblioteca.

 

 

Com isso, após a instalação da instalação da biblioteca, salve o sketch, de preferência, com o nome de “programa_braco_joystick”. Logo depois de salvar, copie e cole o código abaixo.

#include <VarSpeedServo.h> //biblioteca para controle da velocidade e da posição dos servos

#define servoBase   3  // Porta Digital do Servo da Base
#define servoAltura 4  // Porta Digital do Servo da Altura do Braço
#define servoAngulo 5  // Porta Digital do Servo do Ângulo do Braço
#define servoGarra  6  // Porta Digital do Servo da Garra

#define potBase    A0  // Porta Analógica do Potenciometro para Controle da base
#define potAltura  A1  // Porta Analógica do Potenciometro para Controle da altura do braço
#define potAngulo  A2  // Porta Analógica do Potenciometro para Controle do ângulo do braço
#define potGarra   A3  // Porta Analógica do Potenciometro para Controle da garra

#define botao_trava     8  // Porta Digital do Botao trava
#define botao_destrava  9  // Porta Digital do Botao trava
 
//Instanciação dos Objetos de Controle dos Servos

VarSpeedServo base; 
VarSpeedServo altura;
VarSpeedServo angulo;
VarSpeedServo garra;

//Variaveis para cálculo dos angulos
int leitura_Base;
int valor_Base;
int leitura_altura;
int valor_altura;
int leitura_angulo;
int valor_angulo;
int leitura_garra;
int valor_garra;

//Variaveis para controle dos botões
int estado_trava, estado_destrava;
int anterior_trava = HIGH;
int anterior_destrava = HIGH;
boolean travado = false;

void setup(){
  pinMode(botao_trava, INPUT_PULLUP);
  pinMode(botao_destrava, INPUT_PULLUP);

  //Usa o LED do Arduino para informar estado de congelado
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
    
  //Configuração das Portas dos Servos
  base.attach(servoBase);
  altura.attach(servoAltura);
  angulo.attach(servoAngulo);
  garra.attach(servoGarra); 
}


void loop() {
 
  if (!travado) {
    leitura_Base = analogRead(potBase); //Leitura do Angulo do Potenciometro
    valor_Base = map(leitura_Base, 0, 1023, 0, 180); //Conversão do valor do potenciometro (de 0 até 1024) para o angulo (de 0 até 180)
    base.slowmove(valor_Base, 30); //envio do ângulo para o servo
                          
  
    leitura_altura = analogRead(potAltura);           //Leitura do Angulo do Potenciometro
    valor_altura = map(leitura_altura, 0, 1023, 180, 0); //Conversão do valor do potenciometro (de 0 até 1024) para o angulo (de 0 até 180) 
    altura.slowmove(valor_altura, 40); //envio do ângulo para o servo
    
    leitura_angulo = analogRead(potAngulo);           //Leitura do Angulo do Potenciometro
    valor_angulo = map(leitura_angulo, 0, 1023, 180, 0); //Conversão do valor do potenciometro (de 0 até 1024) para o angulo (de 0 até 180)
    angulo.slowmove(valor_angulo,40);                          //Envio do angulo para o Servo 
    
    leitura_garra = analogRead(potGarra);               //Leitura do Angulo do Potenciometro
    valor_garra = map(leitura_garra, 0, 1023, 0, 50); //Conversão do valor do potenciometro (de 0 até 1024) para o angulo (de 0 até 180)
    garra.slowmove(valor_garra, 40); //envio do ângulo para o servo                    
  }

  //Se o botao de congelar foi apertado
  estado_trava = digitalRead(botao_trava); 
  if (estado_trava != anterior_trava) {
     travado = true;
     digitalWrite(13, HIGH); //Informa o estado de congelado no LED interno do Arduino
  }
  anterior_trava = estado_trava;

  //Se o botao de descongelar foi apertado
  estado_destrava = digitalRead(botao_destrava); 
  if (estado_destrava != anterior_destrava) {
     travado = false;
     digitalWrite(13, LOW); //Informa o estado de congelado no LED interno do Arduino
  }
  estado_destrava = anterior_destrava;

}

Dessa forma, após testar tanto o código quanto a montagem, o resultado deve ser semelhante ao que aparece no gif:

Entendendo a fundo

Software

Vamos agora partir para a análise do código. Nele, podemos encontrar uma série de conceitos, como os de entradas analógicas e digitais, PWM e funções referentes ao controle de servo motores.

Biblioteca VarSpeedServo

Logo no início do programa, podemos observar a inclusão da biblioteca "VarSpeedServo.h".

#include <VarSpeedServo.h> //biblioteca para controle da velocidade e da posição dos servos

Basicamente, essa biblioteca conta com uma série de funções específicas para controlar tanto a posição (em graus) quanto a velocidade de um servo motor.

Configuração dos motores

Neste código, cada um dos quatro servo motores é dado como um objeto. Consequentemente, devemos nomear cada um deles e fazer sua instanciação.

VarSpeedServo base; //servo para controle do motor da base do braço
VarSpeedServo altura; //servo para controle do motor da altura do braço
VarSpeedServo angulo; //servo para controle do motor do ângulo do braço
VarSpeedServo garra; //serve para controle do motor da garra.

Além disso, a partir do método "attach", é feita a configuração das portas dos servos.

//Configuração das Portas dos Servos
  base.attach(servoBase); // servo base localizado no pino 3
  altura.attach(servoAltura); // servo altura localizado no pino 4
  angulo.attach(servoAngulo); //servo angulo localizado no pino 5
  garra.attach(servoGarra); //servo garra localizado no pino 6

Função analogRead()

A função "analogRead", como o nome já indica, tem como objetivo ler o valor de um pino analógico do Arduino. Sendo assim, essa função irá mapear tensões entre 0V e 5V, a partir do potenciômetro, para valores inteiros de 0 a 1023.

leitura_Base = analogRead(potBase); //Leitura do Angulo do Potenciometro

Já a variável "leitura_base", por sua vez,  serve para armazenar esse valor de 0 a 1023, o qual representa a leitura do potenciômetro.

Função map()

A função "map()" é uma função matemática de referência do Arduino. Nesse sentido, ela é tem como objetivo fazer a conversão de valores de um determinado intervalo numérico para o outro.

valor_Base = map(leitura_Base, 0, 1023, 0, 180); //Conversão do valor do potenciometro (de 0 até 1024) para o angulo (de 0 até 180)

Assim, no nosso código, tal função atua da seguinte maneira: o valor lido no potenciômetro, entre 0 e 1023, e armazenado na variável "leitura_base" é convertido para um valor em ângulo, de 0 a 180. Em seguida, esse valor angular obtido é armazenado na variável "valor_base".

Método slowmove

base.slowmove(valor_Base, 30); //envio do ângulo para o servo

Nessa parte do código, o método "slowmove" é aplicado a cada um dos objetos, ou melhor, a cada um dos motores: base, ângulo, altura e garra. Dessa forma, tal método tem como parâmetros a posição angular ("valor_base") e a velocidade (30) com que o motor deve operar.

Controle dos botões

Ambos os joysticks possuem botões: o botão 8, no joystick 2 realiza a tarefa de travar os movimentos dos motores; já o botão 9, no joystick 1, tem a função de destravar esses motores. Dessa forma, a lógica desse mecanismo é apresentada no seguinte trecho de código:

//Se o botao de travar foi apertado
  estado_trava = digitalRead(botao_trava); 
  if (estado_trava != anterior_trava) {
     travado = true;
     digitalWrite(13, HIGH); //Informa o estado de travado no LED interno do Arduino
  }
  anterior_trava = estado_trava;

  //Se o botao de destravar foi apertado
  estado_destrava = digitalRead(botao_destrava); 
  if (estado_destrava != anterior_destrava) {
     travado = false;
     digitalWrite(13, LOW); //Informa o estado de destravado no LED interno do Arduino
  }
  estado_destrava = anterior_destrava;

}

Inicialmente, se a o botão de travamento for pressionado, seu estado é alterado, e, devido a isso, a variável de controle "travado" receberá o valor lógico "true".

//Se o botao de travar foi apertado
  estado_trava = digitalRead(botao_trava); 
  if (estado_trava != anterior_trava) {
     travado = true;
     digitalWrite(13, HIGH); //Informa o estado de congelado no LED interno do Arduino
  }
  anterior_trava = estado_trava;

Do mesmo modo, quando o botão de destravamento estiver pressionado, seu estado também será alterado. No entanto, nesse caso, a variável de controle "travado" receberá o valor lógico "false".

//Se o botao de descongelar foi apertado
estado_destrava = digitalRead(botao_destrava); 
if (estado_destrava != anterior_destrava) {
travado = false;
digitalWrite(13, LOW); //Informa o estado de congelado no LED interno do Arduino
}
estado_destrava = anterior_destrava;

Em paralelo a isso, no início do algoritmo, a condição estabelecida é de que, para que os motores atuem, a variável "travado" deve receber o valor lógico "false". Dessa forma, consequentemente, a condição de acionamento dos motores será satisfeita somente se o botão de destravamento for pressionado.

Fechamento

Enfim, esperamos que tenham gostado, deixe seu comentário com duvidas, sugestões ou com a foto ou vídeo de seu projeto! Compartilhe à vontade.


Sensor Reflexivo de Obstáculo KY-032

Sensor Reflexivo de Obstáculo Infravermelho KY-032 com arduino:

Semelhantemente ao Módulo Sensor de linha TCRT5000 do tutorial “ROBÔ SEGUIDOR DE LINHA COM SENSOR TCRT5000: ” e o Sensor de obstáculo infravermelho do tutorial “ROBÔ SEGUIDOR DE LINHA” temos o Sensor Reflexivo de Obstáculo Infravermelho KY-032 com arduino. Porém, com a diferença de que ao invés de identificar as cores preto e branco iremos utilizá-lo para identificar objetos.

Como funciona o Sensor Reflexivo de Obstáculo Infravermelho KY-032 com arduino ?

Precipuamente, o funcionamento do nosso sensor é baseado no sistema de reflexão infravermelho, ou seja, possui um LED emissor de infravermelho e um LED fotodiodo receptor, quando algum obstáculo/objeto passa no ângulo de detecçãodo sensor na distância ajustada, o sensor indica tal situação colocando a saída em nível lógico BAIXO. Vemos isso na imagem abaixo:

Imagem dos LED’s emissor e receptor detectando objeto

kit robotica educacional com Arduino ESP ou Microbit

- Circuito Integrado

Os circuitos integrados tem a função de temporizador, controlar, oscilar e amplificar a presença ou não de obstáculos, sinalizando assim com o valor logico 1(alto) se não houver a presença de obstáculos e com valor logico 0(baixo) se houver a presença de obstáculos. O circuito integrado utilizado no sensor é um chip preto acoplado ao módulo é baseado em um temporizador NE555. Vejamos abaixo uma imagem de um circuito integrado:

Circuito Integrado

Para sua operação o modulo foi projetado para funcionar com frequência de 38KHz, há uma tensão de 3.3 a 6VDC. Além disso, o módulo possui dois potenciômetros ajustáveis, um para controle da frequência de operação e outro para controle da sensibilidade da distância de detecção que pode ficar entre 2cm e 40cm. Vejamos abaixo o Módulo Sensor Reflexivo de Obstáculo Infravermelho KY-032 e seus componentes:

Imagem do Sensor Infravermelho KY-032

Vemos que temos os dois potenciômetros P2 para ajuste do feixe de luz do emissor e P1 para ajuste da distância de detecção, uma entrada para jumper e ao lado temos o circuito integrado NE555. Logo depois, embaixo temos o sensor de energização do módulo (Power LED) que fica constantemente aceso quando o sensor está sendo energizado e logo ao lado temos o LED identifica se detectou ou não a presença de obstaculo. Em seguida temos os LEDs emissor e receptor.

- Óptica

O princípio físico do funcionamento do sensor tem a ver com a absorção da luz e emissão de calor pelas cores. A absorção da luz é o processo pelo qual a luz que incide sobre um corpo é convertida em energia e com isso os elétrons deste corpo se agitam, fazendo com que oscilem e emitem calor. Para isso acontecer, a luz que incide sobre um material em particular precisa ter uma frequência de oscilação próxima da frequência na qual os elétrons dos átomos desse material vibram. Veja a tabela de frequência de cores abaixo:

Tabela identificando as principais frequências da luz

Temos então que as cores que não produzem a própria luz depende da frequência que elas são capazes de absorver e da forma como elas interagem com a luz que as incide, ou seja, a cor não está no objeto. Temos que, na verdade, os objetos absorvem todas as cores que estão na luz branca e refletem apenas aquela que vemos. Essa luz é a que chega aos nossos olhos. Por exemplo, temos que se um objeto absorve todas as frequências de luz igualmente, então a cor que será expressa por ele que veremos será a cor preta. Porém, caso não consiga absorve algum intervalo de frequência de luz visível, como a azul, nós enxergaremos esse objeto com a cor azul, pois será está a cor que refletirá nos nossos olhos.

- Cores

Imagem de incidência da mesma luz branca em dois objetos

Em suma, acima iluminamos dois objetos com a mesma luz branca, e ambos os objetos absorvem todas as cores, exceto a luz azul para o da esquerda e a luz verde para o da direita. Como a luz azul e a luz verde não são absorvidas, elas são refletidas em todas as direções, tornando assim o objeto da esquerda azul e o da direita verde aos nossos olhos. No sensor temos que a luz infravermelho é emitida e quando temos a presença de um objeto essa luz é refletida para o LED receptor.

- Infravermelho

As luzes ditas não-visíveis são aquelas que a frequência está abaixo da frequência da luz vermelha e acima da frequência da luz violeta.

Imagem das luzes visíveis e não visíveis

Em inicio vemos que a luz vermelha tem a maior velocidade de propagação já que o comprimento de onda é o maior e possui a menor frequência das luzes visíveis. Logo depois, por ultimo temos que a violeta é a de menor velocidade de propagação e sua frequência é a maior das luzes visíveis. O infravermelho é um tipo de radiação eletromagnética que apresenta frequência menor que a da luz vermelha, por isso, não está no espectro eletromagnético visível. Ela é utilizada para detectar a temperatura de corpos e objetos, e para o nosso sensor não difere disso, pois o LED emissor envia uma onda de luz infravermelha e quando detecta um objeto está onda é refletida para o receptor. Além disso, temos também outras luzes que não estão no espectro da luz visível, como a ultravioleta.

- Os terminais deste sensor são: 

  • VCC(+) – Tensão de entrada, entre 3,3 a 5 volts 
  • GND(-) – O pino de O V do módulo, conectado ao GND do Arduino ou fonte Saida 
  • EN – Pino de controle do módulo
  • Saída Digital(OUT)– Pino de saída digital (retorna HIGH ou LOW) 

 

Mãos à obra — Configurando um Sensor Reflexivo de Obstáculo Infravermelho KY-032 com arduino

Componentes Necessários 

- Montando o projeto: 

Precipuamente, conectaremos o GND do Módulo no GND do arduino e o VCC do Módulo no 5V do arduino. Logo após, conectaremos o OUT do Módulo no Pino 8 do arduino. Veja o Diagrama de montagem abaixo:

Diagrama de montagem do Sensor de Obstáculo Infravermelho KY-032

- Programando o Arduino: 

Neste instante vamos conectar o arduino no computador e abrir a IDE arduino. Desta forma iremos escrever o programa abaixo na IDE e compile o programa para o seu arduino.

Em contrapartida, antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#define pino_out 8 //Define o fino 8 como "pino_out"

void setup(){
  pinMode(pino_out, INPUT); //  Define o "pino_out" como entrada
  Serial.begin (9600); //Inicializa a comunicação serial com velocidade
}

void loop(){
  if(digitalRead(pino_out) == LOW){ // Se a leitura do "pino_out" for igual a LOW, Executa
    Serial.println ("Objeto detectado"); //Imprime o texto "Objeto detectado" no serial monitor
  }else{ //Senão, faz
    Serial.println ("Nenhum objeto detectado"); //Imprime o texto "Nenhum objeto detectado" no serial monitor
  }
}

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar

- Testando o funcionamento:

PS: o tamanho e cor do obstáculo influenciam na distância de detecção. Além disso, os trimpots do módulo devem ser ajustados para melhorar o raio de detecção. Se tudo estiver correto temos o resultado abaixo:

 

GIF do sensor funcionando

- Ajuste de sensibilidade do Sensor Reflexivo de Obstáculo Infravermelho KY-032 com arduino

O ajuste para a detecção de objetos é feita no trimpot. Quando o LED de leitura de detecção estiver aceso, significa que o sensor está recebendo o sinal infravermelho de volta, detectando assim o obstaculo/objeto.

Imagem dos trimpots

 

Entendendo a fundo: 

Software 

– Definições e variáveis utilizadas no projeto do Sensor Reflexivo de Obstáculo Infravermelho KY-032 com arduino

A instrução #define apenas associou a porta 8 dos pinos do arduino ao nome “pino_out”, pois é mais fácil para se lembrar durante o programa.

#define pino_out 8 //Define o fino 8 como "pino_out"

– Função Setup – Definindo pinos do Sensor Reflexivo de Obstáculo Infravermelho KY-032 com arduino

Sabemos que função setup é aquela que irá rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. Em início na função pinMode nos definimos se os pinos serão entradas ou saída, no caso do “pino_out” ele será uma entrada. Logo depois, por último inicializamos a comunicação serial para podemos visualizar o que esta acontecendo no serial monitor.

void setup(){
  pinMode(pino_out, INPUT); //  Define o "pino_out" como entrada
  Serial.begin (9600); //Inicializa a comunicação serial com velocidade
}

– Função Loop – Leitura do nosso Sensor Reflexivo de Obstáculo Infravermelho KY-032 com arduino de som e Estruturas de decisão 

Em analogia, a função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa.

Na estrutura de decisão if temos que se for verdadeira a condição entre parenteses o que está entre os colchetes do if será executado, caso contrario o que estiver entre os colchetes do else que será. A função digitalRead() faz a leitura do pino que está entre parenteses. Assim sendo, vemos que no caso do nosso programa o pino em questão é o “pino_out” e se a leitura feita for o valor “0”, nível logico baixo, a condição do if será verdadeira e será impresso no monitor serial o texto "Objeto detectado". Logo depois, caso a função digitalRead() leia “1”, nível logico alto, o else que será executado imprimindo assim o texto "Nenhum objeto detectado" no serial monitor.

void loop(){
  if(digitalRead(pino_out) == LOW){ // Se a leitura do "pino_out" for igual a LOW, Executa
    Serial.println ("Objeto detectado"); //Imprime o texto "Objeto detectado" no serial monitor
  }else{ //Senão, faz
    Serial.println ("Nenhum objeto detectado"); //Imprime o texto "Nenhum objeto detectado" no serial monitor
  }
}

 

Considerações finais: 

No tutorial mostramos como funciona e como utilizar o Sensor Reflexivo de Obstáculo Infravermelho KY-032 . Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

 


Robô Seguidor de Linha com Sensor TCRT5000:

Chassi 2WD como Seguidor de Linha:

O seguidor de linha é um dos primeiros projetos de robótica móvel que todos os entusiastas, hobistas ou profissionais constroem no intuito de nos ensinar o quão simples e ainda sim inigualável é a cultura maker e as tecnologias de interação entre nós e os objetos e entre os objetos. Precipuamente, antes de irmos para a montagem do Robô Seguidor de Linha com Sensor TCRT5000  vamos aprender sobre os principais componentes para o seu funcionamento, sendo o restante conectores, alimentação e a carcaça do carrinho. Para a construção do seguidor de linha utilizaremos o Módulo segue faixa(TCRT5000), Módulo Driver ponte H HG7881 L9110S, Protoboard, jumpers e Adaptador P4/KRE Macho para a conexão e, o Chassi 2WD que é a carcaça do Robô.

Imagem do seguidor de faixa

kit robotica educacional com Arduino ESP ou Microbit

Para melhor entendimento deste tutorial é necessário que você já tenha um conhecimento prévio sobre Arduino e ponte H. Entretando não se preocupe, pois nossa equipe já produziu outros tutoriais sobre esses assuntos e você pode conferir alguns destes nos seguintes links: Entradas e Saídas Analógicas e Módulo Ponte H L298n.

- Robô Seguidor de Linha com Sensor TCRT5000 nas escolas

Em início, como já sabemos, o seguidor de linha já é muito utilizado em indústrias, mas para que utilizar nas escolas? Bem, com um projeto deste, mesmo que simples, podemos integrá-lo em diversas áreas. O robô seguidor de linha, em suma, foi criado para competições interdisciplinares e ajudar jovens a trabalhar em equipe e desenvolver o cognitivo.

Então, na História, filosofia e sociologia podemos aprender como se desenvolveu a tecnologia até a criação do robô, bem como surgiu o arduino ou como a cultura maker, sendo está uma arte, é tão disseminada por todo o globo terrestre. Na geografia como robôs e equipamentos eletrônicos foram e são tão importantes para descobertas e no nosso dia a dia como, por exemplo, prever o clima. Já na matemática temos a rotação dos motores e na física a energia elétrica que passa pelo circuito e o funcionamento óptico do sensor de faixa e suas cores preta e branca.

- Como funciona um Robô Seguidor de Linha com Sensor TCRT5000 ?

Imaginemos uma pista de corrida preta e um carro sobre ela com sensores de detecção de infravermelho embaixo do carro, quando o carro sair da pista a cor do chão irá mudar e os sensores irão detectar está mudança fazendo o que o carro vire voltando assim de volta para pista. No caso da imagem abaixo somente quando ele receber o infravermelho que ele irá virar, pois será quando o carro saiu da pista preta.

Imagem de um carro em uma pista de corrida

Similarmente o seguidor de linha deve seguir andando por cima de uma linha de cor preta (fita isolante) ou branca. Os circuitos podem alternar entre as cores do campo e da faixa, no nosso caso iremos assumir que a pista é branca e a faixa é preta, ou seja, quando o carro detectar a cor preta, não recebendo o infravermelho de volta ele irá virar. Usaremos 2 sensores infravermelhos que detectam a presença ou não desta faixa. De acordo com a combinação dos sensores, o carrinho irá para frente ou virar para um dos lados.

Imagem do funcionamento do sensor de faixa

Na imagem acima temos um carrinho com dois sensores nas laterais onde quando detectar a presença do preto o carrinho vira. Enquanto o carrinho não está detectando a cor preta o motor das rodas fica girando em uma velocidade constante com 360°graus de rotação em linha reta.

- Funcionamento do sensor infravermelho

O módulo sensor TCRT5000 emite uma luz infravermelha por um LED negro e capta o reflexo com um LED receptor (LED claro). Como sabemos pela física, a luz reflete em superfícies claras, sendo a branca a que mais reflete, e é absorvida em superfícies escuras, sendo a preta a que mais absorve, como a fita isolante. Sendo assim o LED receptor irá detectar a luz infravermelha no branco e não detectar no preto. Entretanto, para uma melhor eficácia do sensor, a superfície em contraste com a faixa preta deve ser branca.

Funcionamento do sensor infravermelho

Muitas vezes haverá a necessidade de ajustarmos a sensibilidade do sensor por isso ele possui um potenciômetro de calibração.

- Diferença entre sensores infravermelhos obstaculo e o TCRT5000

Nos pode usar diferentes sensores infravermelhos para o projeto seguidor de linha, o que precisamos considerar é as especificações de cada um. Um sensor infravermelho amplamente utilizado é o TCRT5000, o qual utilizaremos neste tutorial, que tem como vantagem seu tamanho e preço. Porém, ele precisa está próximo ao chão para que seja capaz de identificar a faixa, uma vez que seu alcance é de até 8mm. Entretanto, ele possui a vantagem de sofrer menos interferências de luzes infravermelhas externas.

Módulo Sensor de linha TCRT5000

Em contrapartida, a vantagem de usar o sensor de obstaculo é o seu maior alcance possuir ajuste, porem ele é mais suscetível a interferências das luzes ambientes.

Sensor de obstáculo infravermelho

Nesse tutorial, usaremos o TCRT5000. Dessa forma, caso esteja usando o sensor de obstaculo infravermelho, fique atento com as interferências. O local precisa estar bem iluminado e sem reflexo de luzes que possam mudar a cor da superficie que o sensor incidir.

Controlando motores com Ponte H

Quando lidamos com controle de cargas que consomem grande quantidade de energia, é importante que essas cargas sejam controladas com circuitos que separem o circuito de controle do circuito de potência. Para controlar motores, é comum usarmos um circuito chamado ponte H, ele é capaz por controlar o sentido de giro do motor e a sua velocidade, usando o PWM.

- PWM

PWM (Pulse Width Modulation – Modulação por Largura de Pulso) é uma técnica para obter resultados analógicos por meios digitais (Leia mais sobre Grandezas digitais e analógicas e PWM). Essa técnica consiste na geração de uma onda quadrada em uma frequência muito alta em que pode ser controlada a porcentagem do tempo em que a onda permanece em nível lógico alto, alterando, assim, a tensão média.

Por exemplo, se a saída é de 5V, porém ela fica apenas 50% do tempo em 5V e outros 50% do tempo em nível lógico baixo, isso resulta em uma tensão média de 2,5V (50% x 5V). Dessa forma, esta variável de tempo é capaz de controlar de velocidade do nosso carrinho alterando a tensão média aplicada no motor. Os valores de PWM variam de 0 (parado) até 255 (velocidade máxima ou 5 V).

- Controlando a velocidade do motor através da Ponte H

Existem várias opções de Ponte H, nesse tutorial usaremos o Módulo Driver Ponte H HG7881 L9110S que dispões de duas pontes H, sendo capaz de controlar dois motores. Cada ponte H possui um pino que ativa ou não a ponte H. Caso tenha um sinal de 5V aplicado nele, a ponte estará ligada, caso seja 0V a ponte estará desligada.

Imagem da ponte H

O "Motor A" e "Motor B" da parte superior utilizaremos como conexões de saída para alimentação dos motores A e B. No entanto, já o "Motor A" e o "Motor B" da parte inferior utilizaremos  para receber e passar informação para os motores A e B, respectivamente. Através desses pinos conectados ao Arduino podemos controlar a velocidade e o sentido de rotação dos motores A e B, respectivamente. A parte de alimentação serve para alimentar o modulo com tensão entre 2.5 a 12V (Corrente Contínua).

Apesar de a ponte H ser controlada por um sinal de 5V, elá pode chavear uma tensão diferente. Podemos, por exemplo, controlar uma tensão de 6V, vindo de um conjunto de 4 pilhas AA. Nesse caso, apesar de o sinal PWM ser de 5V ele modulará os 6V nos motores. Vai depender da tensão necessária para o funcionamento dos motores.

Podemos calcular a tensão de alimentação com a fórmula: Vm = Va + 1,5V (Vm = tensão mínima necessária para alimentar o motor, Va = tensão nominal do motor DC). Como exemplo temos que caso o motor tenha uma tensão nominal de 3,5 V a tensão mínima da fonte externa deve ser de 5,0V.

-Datasheet

No datasheet do chip L9110S podemos obter diversas informações de como é o funcionamento e controle da ponte H por esse chip. Em suma, uma das observações que podemos fazer é na tabela de tensão e conrrente, onde está indicando que a tensão minima é 2.5V e a maxima é 12V. Já a corrente de operação, podemos observar que a minima é de 200 microampere e a maxima é de 500 microampere. Em contrapartida, temos outra tabela ao lado sobre os pinos de rotação horaria e anti-horaria do motor como na tabela abaixo:

Tabela de rotação dos motores

Ou seja, existem apenas dois tipos de rotação, a normal e a invertida. No nosso programa nos só queremos a rotação normal, sendo assim utilizaremos a primeira linha de High e Low.

 

Mãos a obra - Montando um Robô Seguidor de Linha com Sensor TCRT5000

Componentes Necessários

- Montando o projeto do Robô Seguidor de Linha com Sensor TCRT5000

Abaixo segue o esquema de ligações e montagem eletrônica do driver Ponte H HG7881:

Diagrama de montagem da Ponte H

A carcaça do robô deve ser montada conforme o manual. Agora segue o esquema de ligações e montagem eletrônica dos Módulos TCRT5000:

Diagrama de montagem dos Módulos TCRT5000 

Os módulos devem ser fixos na frente do chassi em direção ao chão na parte de baixo para poder detectar o caminho a ser seguido. Como resultado aos esquemas anteriores temos um esquema completo de montagem Ponte H + Módulos TCRT5000:

Diagrama de montagem Ponte H + Módulos TCRT5000

Este projeto possui um procedimento de montagem complexo devido ao fato da necessidade de termos que passar vários fios por um espaço limitado ao tamanho do chassi do carrinho. Como resultado da montagem do robô temos as imagens abaixo:

Imagens do carrinho pronto

 

PS: Devemos Lembrar que o suporte das baterias deve ficar instalado embaixo do carrinho.

- Calibração do Sensor infravermelho

Ao usar o sensor infravermelho, seja o TCRT5000 ou o sensor de obstaculo, você precisa calibrar o sensor para que seja capaz de detectar adequadamente a mudança de cor entre preto e branco. Esta calibração deve ser feita no próprio sensor com o auxílio de uma chave de fenda no potenciômetro acoplado a ele.

Potenciometro(Trimpot) de ajuste do sensor

- Programando o Robô Seguidor de Linha com Sensor TCRT5000

Neste instante vamos conectar o arduino no computador e abrir a IDE arduino. Desta forma iremos escrever o programa abaixo na IDE e compilar o programa para o seu arduino.

Em contrapartida, antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#define M1AA 10 //Definição do pino que controla o motor A
#define M1AB 11 //Definição do pino que controla o motor A
#define M2BA 5  //Definição do pino que controla o motor B
#define M2BB 6  //Definição do pino que controla o motor B

#define pinS1 7 //Definindo o pino 7 como pino do primeiro sensor
#define pinS2 8 //Definindo o pino 8 como pino do segundo sensor

bool Sensor1 = 0; //Declarando a variavel "Sensor1" e atribuindo a ela o valor "0"
bool Sensor2 = 0; //Declarando a variavel "Sensor2" e atribuindo a ela o valor "0"

int velocidade = 125; //Declarando a variavel "velocidade" e atribuindo a ela o valor "125"

void setup(){
  pinMode(M1AA, OUTPUT); // Define o pino de controle do motor A como saída
  pinMode(M1AB, OUTPUT); // Define o pino de controle do motor A como saída
  pinMode(M2BA, OUTPUT); // Define o pino de controle do motor B como saída
  pinMode(M2BB, OUTPUT); // Define o pino de controle do motor B como saída


  digitalWrite(M1AB, LOW);  // Setamos a direção inicial do motor 1 como 0, isto fará com que o motor gire para frente
  digitalWrite(M2BB, LOW);  // Setamos a direção inicial do motor 2 como 0, isto fará com que o motor gire para frente
  
  pinMode(pinS1, INPUT); // Define o pino do sensor 1 como entrada
  pinMode(pinS2, INPUT); // Define o pino do sensor 2 como entrada


}

void loop(){
  Sensor1 = digitalRead(pinS1); // A variavel "Sensor1" recebe o valor digital lido pelo sensor 1
  Sensor2 = digitalRead(pinS2); // A variavel "Sensor2" recebe o valor digital lido pelo sensor 2
  
  if((Sensor1 == 0) && (Sensor2 == 0)) // Os dois lados detectaram branco
  {
    analogWrite(M1AA, velocidade); //O motor A recebe velocidade 125
    analogWrite(M2BA, velocidade); //O motor B recebe velocidade 125
    delay(25);
  }
  if((Sensor1 == 1) && (Sensor2 == 0)) // O primeiro sensor detectou preto e o segundo branco
  {
    analogWrite(M1AA, 0); //O motor A recebe velocidade 0
    analogWrite(M2BA, 140); //O motor B recebe velocidade 140, girando assim o carrinho
    delay(25); //Espera de 25 milissegundos
  }
  if((Sensor1 == 0) && (Sensor2 == 1)) // O primeiro sensor detectou branco e o segundo preto
  {
    analogWrite(M1AA, 140); //O motor A recebe velocidade 140, ficando assim ligado
    analogWrite(M2BA, 0); //O motor B recebe velocidade 0, desligando-o e fazendo assim o carrinho virar no outro sentido
    delay(25); //Espera de 25 milissegundos
  }
}

 

– Testando o funcionamento do Robô Seguidor de Linha com Sensor TCRT5000:

Agora é só pôr o carrinho para rodar na pista!

Video do carrinho funcionando e seguindo a faixa

- Problemas recorrentes e como resolver

Bateria baixa – Os testes podem ter consumido a bateria e talvez seja necessário o uso de uma nova. Baterias abaixo de 6,5 Volts já começam a diminuir a eficiência do carrinho e já pode não ser mais suficiente para energizar os motores como vimos anteriormente.

Carrinho saindo da pista – Isso pode acontecer por ele estar rápido de mais ou por falha do infravermelho. Em caso de ele estar muito rápido basta trocar a velocidade dos motores em cada situação. Se o problema for com o contraste da pista (talvez parte dela esteja mais escura) use 2 LEDs de alto brilho na frente do carrinho para iluminar a pista próximo aos sensores. Os LEDs podem ir conectados direto no 5 V do arduino (lembrando de por um resistor de 300Ohms). Também pode ser que os sensores não estejam detectando o chão, pois foram colocados em uma posição que não facilita a leitura ou podem estar acima de 8mm do chão dificultando a leitura.

Carrinho não anda – Este é um problema complexo, pois podem ter infinitas possibilidades. Tente isolar os componentes e testar 1 por 1, principalmente os motores e a ponte H. Em alguns casos pode ser problemas de aterramento da bateria também, ou seja, a conexão dos jumpers.

 

PS: Vale ressaltar que o robô pode não fazer o percurso de primeira, o que significa que ajustes devem ser feitos no código ou até mesmo no hardware.

 

Entendendo a fundo

Software

– Definições e Declarando variáveis utilizadas no projeto do Robô Seguidor de Linha com Sensor TCRT5000

Inicialmente a instrução #define apenas associa os pinos do arduino nomes referente aos componentes conectados nestes pinos.  Semelhantemente, temos logo depois a declaração de variaveis e atribuições de valores a estas variaveis. Nas variaveis declaradas "Sensor1" e "Sensor2" do tipo bool atribuimos a elas o valor "0". Já na variavel declarada do tipo int atribuimos a ela o valor "125", pois é o valor de velocidade que queremos para os motores.

#define M1AA 10 //Definição do pino que controla o motor A
#define M1AB 11 //Definição do pino que controla o motor A
#define M2BA 5  //Definição do pino que controla o motor B
#define M2BB 6  //Definição do pino que controla o motor B

#define pinS1 7 //Definindo o pino 7 como pino do primeiro sensor
#define pinS2 8 //Definindo o pino 8 como pino do segundo sensor

bool Sensor1 = 0; //Declarando a variavel "Sensor1" e atribuindo a ela o valor "0"
bool Sensor2 = 0; //Declarando a variavel "Sensor2" e atribuindo a ela o valor "0"

int velocidade = 125; //Declarando a variavel "velocidade" e atribuindo a ela o valor "125"

Função Void Setup()

A função setup é aquela que irá rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. A função pinMode serve para definir quais serão os pinos de entrada e de saida. Repare que apenas os que declaramos com #define anteriormente, estão no pinMode, isto é porque as outras são variaveis que escolhemos para atribuir valores. Na função pinMode definimos que M1AB, M1AA, M2BA, M2BB (pinos dos motores) são saida e os pinos dos sensores pinS1 e pinS2 são entradas.

pinMode(M1AA, OUTPUT); // Define o pino de controle do motor A como saída
pinMode(M1AB, OUTPUT); // Define o pino de controle do motor A como saída
pinMode(M2BA, OUTPUT); // Define o pino de controle do motor B como saída
pinMode(M2BB, OUTPUT); // Define o pino de controle do motor B como saída

pinMode(pinS1, INPUT); // Define o pino do sensor 1 como entrada
pinMode(pinS2, INPUT); // Define o pino do sensor 2 como entrada

– Definindo sentido de giro dos motores no projeto do Robô Seguidor de Linha com Sensor TCRT5000

Proseguindo temos a função digitalWrite que escreve nas portas do M1AB e M2BB nivel logico baixo, ou seja, o motor não irá girar para trás, fazendo assim com que os motores girem somente para frente.

digitalWrite(M1AB, LOW);  // Setamos a direção inicial do motor 1 como 0, isto fará com que o motor gire para frente
digitalWrite(M2BB, LOW);  // Setamos a direção inicial do motor 2 como 0, isto fará com que o motor gire para frente

Função  Void Loop ()

Por analogia, a função loop ao contrário da setup rodará tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa.

– Leituras dos Sensores no projeto do Robô Seguidor de Linha com Sensor TCRT5000

De inicio temos as variaveis Sensor1 e Sensor2 recebendo o valor (0 ou 1, pois é digital) da leitura dos pinos dos sensores pinS1 e pinS2, sendo a função responsável por está leitura a digitalRead().

Sensor1 = digitalRead(pinS1); // A variavel "Sensor1" recebe o valor digital lido pelo sensor 1
Sensor2 = digitalRead(pinS2); // A variavel "Sensor2" recebe o valor digital lido pelo sensor 2

– Controlando a direção do robô

Logo após as variaveis receberem esses valores vamos para a estrutura de decisão if onde temos as condições que se os dois sensores receberem o valor "0", ou seja, detectaram a cor branca, será escrito nos pinos dos motores a velocidade 125 declarada anteriormente fazendo com que o carrinho continue andando reto.

if((Sensor1 == 0) && (Sensor2 == 0)) // Os dois lados detectaram branco
{
  analogWrite(M1AA, velocidade); //O motor A recebe velocidade 125
  analogWrite(M2BA, velocidade); //O motor B recebe velocidade 125
  delay(25);
}

Agora, caso a varivel Sensor1 receba o valor 1(o sensor detectou assim a cor preta)e  a variavel Sensor2 receba o valor 0(o sensor detectou a cor branca) a estrutura de decisão abaixo que será verdadeira e não a de cima, fazendo com que escreva no pino do motor 1 a velocidade 0 e no pino do motor 2 a velocidade 140, girando assim o carrinho como mostra na Imagem do funcionamento do sensor de faixa.

if((Sensor1 == 1) && (Sensor2 == 0)) // O primeiro sensor detectou preto e o segundo branco
 {
   analogWrite(M1AA, 0); //O motor A recebe velocidade 0
   analogWrite(M2BA, 140); //O motor B recebe velocidade 140, girando assim o carrinho
   delay(25); //Espera de 25 milissegundos
 }

Em ultima alternativa temos o contrario da anterir. Caso não seja o primeiro sensor que detectou o preto, mas sim o segundo a estrutura de decisão abaixo que será verdadeira e não as anteores fazendo com que escreva no pino do motor 1 a velocidade 140 e no pino do motor 2 a velocidade 0, girando assim carrinho para o outro lado como mostra na Imagem do funcionamento do sensor de faixa.

 if((Sensor1 == 0) && (Sensor2 == 1)) // O primeiro sensor detectou branco e o segundo preto
  {
    analogWrite(M1AA, 140); //O motor A recebe velocidade 140, ficando assim ligado
    analogWrite(M2BA, 0); //O motor B recebe velocidade 0, desligando-o e fazendo assim o carrinho virar no outro sentido
    delay(25); //Espera de 25 milissegundos
  }
}

Hardware

O carrinho funciona com uma comunicação entre os sensores, o Arduino e a ponte H controlando os motores. Por meio das leituras que os sensores fazem do meio e enviam para o Arduino por meio das portas digitais, o controlador irá acionar um motor mais rápido ou mais devagar do que o outro. Os sensores emitem 5 V (faixa preta) ou 0 V(pista branca) para as portas digitais. O Arduino modula os valores de velocidade pelos valores PWM que variam de 0 volts (0) até 5 volts (255), fazendo isso ao longo de todo trajeto. A bateria que alimenta o Arduino energiza não somente o controlador como também a ponte H dos motores por meio do pino Vin do Arduino.

 

Considerações finais:

Neste tutorial mostramos como funciona e como montar o robô seguidor de faixa. Caso queria veja também o tutorial “ROBÔ SEGUIDOR DE LINHA”, nele utilizamos o sensor de obstáculos para construir o seguidor de faixa. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.


Entendendo o Shield JoyStick com arduino

Shield JoyStick:

Neste tutorial utilizaremos o Shield JoyStick com arduino. Este, no que lhe concerne, é muito utilizado para manusear jogos com arquitetura arduino. Vamos visualizar como este pequeno componente funciona e desenvolver uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o Shield JoyStick?

Este componente como todos os outros sensores trabalha com os conceitos físicos.

- Funcionamento do Shield JoyStick com arduino

Primeiramente, o Shield JoyStick é de fácil conexão e possui muitas saídas, igual ao microcontrolador arduino, já que conta com uma série de pinos para conexões especiais. Além disso, podemos utilizar para controlar braços robóticos ou navegar em menus, ou seja, é ideal para controlar braços robóticos, servos motores, ou ainda para realizar a navegação e seleção em menus.

- Alavanca Analógica

Esta alavanca analógica funciona como um controle de 2 eixos (X e Y), os quais é possível movimentá-la. Quando movimentamos a alavanca analógica do shield para qualquer direção dos eixos X e Y, ela irá identificar a direção a qual a movimentamos e realizará a função que designamos para o shield. Se conectarmos, por exemplo, no braço robótico iremos fazer com que o braço se movimente na mesma direção(X e Y) que a movimentação do controle do shield. Os eixos X e Y são respectivamente os eixos do plano cartesiano que aprendemos inicialmente na matemática.

Imagem do shield joystick sendo usado para controle de braço robótico

- Os componentes do Shield JoyStick com arduino são:

Na parte superior o JoyStick Shield Arduino conta com um 4 chaves push button instaladas no formato de cruz, um sistema de alavanca analógico com diversos movimentos(Conta com uma alavanca analógica de 2 eixos (X e Y)) e duas push buttons pequenas de seleção, existe também uma chave que possibilita escolher a tensão de alimentação do shield, podendo optar entre 5v ou 3,3v, possibilitando assim a utilização em outros microcontroladores. O Joystick no eixo Y a cada movimento produzirá uma tensão proporcional no pino analógico 0, enquanto, um movimento no eixo X produzirá um sinal analógico no pino analógico 1.

Módulo do Shield JoyStick

 

Mãos à obra — Configurando um Shield JoyStick

Componentes Necessários

- Montando o projeto:

Precipuamente conectemos o Shield no arduino conforme a imagem abaixo:

Imagem do Shield JoyStick + Aduino

- Programando o Arduino:

Agora vamos conectar o arduino no computador e abrir a IDE arduino.  Escreva o programa abaixo na IDE e compile o programa para o seu arduino. Em contrapartida antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

//Mapeamento do Hardware do Joystick
#define  X  A0  //analógico horizontal
#define  Y  A1  //analógico vertical
#define  K  8   //Botão K
#define  F  7   //Botão F
#define  E  6   //Botão E
#define  D  5   //Botão D
#define  C  4   //Botão C
#define  B  3   //Botão B
#define  A  2   //Botão A

void setup(){
  int i;
  for(i=0; i<9; i++) pinMode(i, INPUT_PULLUP); //Define as entradas de 0 á 8 como nível logico alto constante
  pinMode(X, INPUT); //Define o pino A0 como entrada
  pinMode(Y, INPUT); //Define o pino A1 como entrada

  Serial.begin(9600); //Inicializa a comunicação serial
}

void loop(){
  int x_read = analogRead(X); // A variavel x_read recebe a leitura do pino analogico A0
  int y_read = analogRead(Y); // A variavel y_read recebe a leitura do pino analogico A1
  Serial.print ("X val:    "); // imprime na tela o texto escrito
  Serial.println ("Y val:    "); // imprime na tela o texto escrito pulando uma linha
  Serial.print  (x_read); // imprime na tela a leitura do pino A0
  Serial.print  ("    "); // imprime na tela  a parte do pino A1
  Serial.println(y_read); // imprime na tela a leitura do pino A1

  if  (!digitalRead(K)) //Vão imprimir na tela quais os botões que estão sendo pressionados 
    Serial.println("K press");
  else if (!digitalRead(F))
    Serial.println("F press");
  else if (!digitalRead(E))
    Serial.println("E press");
  else if (!digitalRead(D))
    Serial.println("D press");
  else if (!digitalRead(B))
    Serial.println("B press");
  else if (!digitalRead(C))
    Serial.println("C press");
  else if (!digitalRead(A))
    Serial.println("A press");
  else
   Serial.println("Nothing press");

   delay(741);
   
}

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

 

- Testando o funcionamento:

Em suma, podemos visualizar o sensor funcionando através do monitor serial já que nos inicializamos ele com a função Serial.begin(9600) basta clicar na lupa no canto direito superior da IDE arduino como na imagem abaixo:

Monitor serial

Entendendo a fundo:

Software

– Definições e variáveis utilizadas no projeto do Shield JoyStick com arduino

De início temos a instrução #define que colocamos para associar as portas dos pinos do arduino a nomes referente aos componentes conectados nestes pinos. Temos definido na alavanca analógico o pino A0 como sensor do eixo X e o pino A1 como do eixo Y. Nos botões temos um pino para cada como podemos observar no trecho do código abaixo:

#define  X  A0  //analógico horizontal
#define  Y  A1  //analógico vertical
#define  K  8   //Botão K
#define  F  7   //Botão F
#define  E  6   //Botão E
#define  D  5   //Botão D
#define  C  4   //Botão C
#define  B  3   //Botão B
#define  A  2   //Botão A

– Função Setup – Definindo pinos do Shield JoyStick com arduino

A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. A função for irá inicializar a variável "i" com 0, logo depois colocamos uma condição na qual a função irá se repetir até que a variável "i" seja igual a 9. Logo depois, temos a função pinMode que configura as entradas de 0 á 8 como entradas de pull up, ou seja, fica em constante nível logico alto e quando um dos botões é pressionado ele irá para nível logico baixo, identificando-o. Já X e Y são entradas analógicas. Enfim temos "Serial.begin(9600)" que inicializa a comunicação seria, assim podemos visualizar o que está acontecendo no serial monitor.

void setup(){
  int i;
  for(i=0; i<9; i++) pinMode(i, INPUT_PULLUP); //Define as entradas de 0 á 8 como nível logico alto constante
  pinMode(X, INPUT); //Define o pino A0 como entrada
  pinMode(Y, INPUT); //Define o pino A1 como entrada

  Serial.begin(9600); //Inicializa a comunicação serial
}

– Função Loop – Leitura do nosso Shield JoyStick com arduino e Estruturas de decisão

A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Iniciamos a função loop com a declaração de duas variáveis "int x_read" e "int y_read". Atribuímos a elas a leitura analógica dos eixos X e Y respectivamente. Logo depois, temos o Serial.print que imprime no serial monitor o texto "X val: " e o texto "Y val: ". Além disso, também imprimir o valor da leitura do movimento dos eixos X  e Y já que como sabemos foram atribuídos as variáveis anteriores.

void loop(){
 int x_read = analogRead(X); // A variavel x_read recebe a leitura do pino analogico A0
 int y_read = analogRead(Y); // A variavel y_read recebe a leitura do pino analogico A1
 Serial.print ("X val: "); // imprime na tela o texto escrito
 Serial.println ("Y val: "); // imprime na tela o texto escrito pulando uma linha
 Serial.print (x_read); // imprime na tela a leitura do pino A0
 Serial.print (" "); // imprime na tela a parte do pino A1
 Serial.println(y_read); // imprime na tela a leitura do pino A1

Inicialmente a função if é uma estrutura de decisão. Sendo assim, colocamos condições nos "if's" e "else if's" onde vemos que se forem verdadeiras as linhas abaixo onde tem a função Serial.println serão executadas. Na primeira condição "!digitalRead(K)" se o botão K tiver sendo pressionado irá escrever no serial monitor "K press". Semelhantemente temos o mesmo para todas as outras condições com seus respectivos botões. Caso não apertemos nenhum botão o último else será executado e o texto "Nothing press" será impresso no monitor serial.

  if  (!digitalRead(K)) //Vão imprimir na tela quais os botões que estão sendo pressionados 
    Serial.println("K press");
  else if (!digitalRead(F))
    Serial.println("F press");
  else if (!digitalRead(E))
    Serial.println("E press");
  else if (!digitalRead(D))
    Serial.println("D press");
  else if (!digitalRead(B))
    Serial.println("B press");
  else if (!digitalRead(C))
    Serial.println("C press");
  else if (!digitalRead(A))
    Serial.println("A press");
  else
   Serial.println("Nothing press");

   delay(741);
   
}

 

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o Shield JoyStick . Veja também o tutorial "SENSOR DE MOVIMENTO DE CABEÇA – ITG3205 + ADXL345 + HMC5883L" e aprenda mais sobre como os eixos do plano cartesiano fazem parte da criação de sensores e shields. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.


Módulo Sensor de Tensão AC com arduino

Módulo Sensor de Tensão AC – ZMPT101B:

Neste tutorial utilizaremos o Módulo Sensor de Tensão AC com arduino. Este, no que lhe concerne, é muito utilizado para verificar a existência de energia alternada de até 250V em um determinado circuito onde esteja conectado. Vamos visualizar como este pequeno componente funciona e desenvolver uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o Módulo Sensor de Tensão AC?

Este componente como todos os outros sensores trabalha com os conceitos físicos. O Módulo Sensor de Tensão AC é um módulo eletrônico que apresenta resultados rápidos e precisos em projetos de automação residencial e robóticos, onde é necessário verificar a presença de tensão. Ele também pode ser utilizado para fazer a medição da tensão por uma função, voltímetro, permitindo ao usuário saber o valor exato que está passando nos fios em determinado momento. Em seu interior ele é capaz de medir o fluxo dos elétrons, comumente chamado de corrente, que passa por ele. Após isso, o sensor analisa a diferença de potencial, mais comumente chamada de tesão, vendo qual a quantidade de elétrons que está o atravessando, pois como sabemos quanto maior a diferença de potencial maior é o fluxo de elétrons

- Tensão de corrente alternada

Precipuamente, a tensão/corrente alternada, diferente da corrente/tensão contínua, não possui polaridade fixa. Em suma, este é o motivo de receberem estes nomes, exatamente porque o nível de corrente/tensão alterna entre o positivo e o negativo repetidamente e não possui um valor fixo. Como por exemplo na imagem abaixo, na corrente temos Inicialmente com nível zero e aumenta gradativamente até o máximo positivo e inicia seu retorno ao zero formando um semiciclo, observe que facilmente podemos considerar este semiciclo como sendo metade de uma circunferência e temos então 180°.

Imagem do comportamento da corrente/tensão alternada

Observando a imagem acima temos um círculo trigonométrico na esquerda que ao ser circulado por uma espera em seu entorno podemos representar graficamente essas variações em um gráfico a direita. Estas variações são o comportamento da corrente alternada indo do positivo ao negativo. Em um circuito, a corrente alternada realiza alternância do seu valor indo do positivo para negativo e logo depois do negativo para positivo.

- Os componentes deste sensor são:

O sensor possui Bornes a parafuso para a entrada de energia AC, Pinagem para alimentação do circuito com energia DC, Pinos para saída de sinal e Potenciômetro para calibração da forma de onda na saída. Também possui um Transformador ZMPT101B.

Módulo Sensor de Tensão AC

 

Mãos à obra — Configurando um Módulo Sensor de Tensão AC

Componentes Necessários

 

ATENÇÃO! Cuidado ao manusear o rabicho e o sensor de tensão, pois estamos tratando de corrente alternada.

 

- Montando o projeto:

Primeiramente, conecte o rabicho no sensor de tensão AC com o auxílio de uma chave de fenda (Caso não tenha acesse o vida de silício), tome cuidado ao conectá-lo, A fase da tomada deve ir à entrada L escrita embaixo do sensor e O neutro da tomada deve ir na entrada N também escrito embaixo do sensor. Logo depois, conecte o GND do sensor de tensão no GND do arduino e o VCC do sensor no 5V do arduino. Em seguida, conecte o OUT do sensor no A0 do arduino. Como mostra o Diagrama abaixo.

Diagrama do Módulo Sensor de Tensão AC

- Programando o Arduino:

Primeiro verifique se o sensor NÃO está conectado na tomada. Agora vamos conectar o arduino no computador e abrir a IDE arduino, escreva o programa abaixo na IDE e compile o programa para o seu arduino. Em contrapartida, antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino: “COM3 (Arduino/Genuino Uno)”.

int corrente_inst[300];
int zero = 0;
int diferenca = 0;
int leitura = 0;
int pino_sensor = A2;

float corrente_pico;
float corrente_eficaz;
float tensao_rms;
float tensao_pico;
float frequencia_sinal;

double maior_valor = 0;
double corrente_valor = 0;

unsigned long tempo_zero_inicio;  
unsigned long tempo_zero_final;  
unsigned long semi_periodo;  
unsigned long periodo_completo;  

void setup(){
  Serial.begin(9600);
  pinMode(pino_sensor, INPUT);
}

void loop(){
  maior_valor = 0;
  for(int i = 0; i <300; i++){
    corrente_inst[i] =  analogRead(pino_sensor);
  }
  for(int i = 0; i <300; i++){
    if(maior_valor < corrente_inst[i]){
      maior_valor = corrente_inst[i];
    }
  }
  Serial.print("Maior Valor");
  Serial.println(maior_valor);
  delay(5000);

  tensao_pico = map(maior_valor,500,661,0,313);
  tensao_rms = tensao_pico/1.4;
  
  Serial.print("Tensão de Rede Elétrica: ");
  Serial.println  (tensao_rms);
}

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

 

-Testando o funcionamento:

Enfim conecte o rabicho na tomada conforme as especificações anteriormente ditam (Fase no L e Neutro no N). Como resultado podemos visualizar o sensor funcionando através do monitor serial já que nos inicializamos ele com a função Serial.begin(9600) basta clicar na lupa no canto direito superior da IDE arduino como na imagem abaixo:

Monitor serial

Veja abaixo o circuito do sensor pronto:

Circuito do Módulo Sensor de Tensão AC

 

Entendendo a fundo:
Software

– Definições e variáveis utilizadas no projeto do Módulo Sensor de Tensão AC com arduino

Esta instrução define quais as variáveis que iremos utilizar durante nosso programas os tipos de variáveis e os valores ou pinos atribuídos a elas. Assim sendo, temos como primeira variável do tipo int a variável "corrente_inst" sendo esta um vetor devido ao "[300]". Em seguida temos como primeira variável do tipo float "corrente_pico" declarada sem atribuições a ela. Logo depois temos a declaração "maior_valor = 0" do tipo "double" a qual foi atribuído a ela o valor 0. Por fim, temos a declaração "tempo_zero_inicio" do tipo "unsigned long". Todas está variaveis de tipos diferentes foram declaradas assim, pois elas ocupam espaços diferentes na memoria. Algumas ocupam menos como do tipo "int" e outras mais como do tipo "unsigned long".

int corrente_inst[300];
int zero = 0;
int diferenca = 0;
int leitura = 0;
int pino_sensor = A2; //Define o pino A2 como pino do sensor

float corrente_pico;
float corrente_eficaz;
float tensao_rms;
float tensao_pico;
float frequencia_sinal;

double maior_valor = 0;
double corrente_valor = 0;

unsigned long tempo_zero_inicio;  
unsigned long tempo_zero_final;  
unsigned long semi_periodo;  
unsigned long periodo_completo;

– Função Setup – Definindo pinos do Módulo Sensor de Tensão AC com arduino

  A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. Com a função Serial.begin(9600) inicializamos a comunicação serial e definimos uma velocidade para podermos visualizar o que está acontecendo no serial monitor. Já com a pinMode definimos que o pino do sensor, declarado anteriormente, é uma entrada.Ou seja, é ele que irá receber a informação do meio e atuar atravez de saidas.

void setup(){
  Serial.begin(9600);
  pinMode(pino_sensor, INPUT);
}

– Função Loop – Leitura do nosso sensor Módulo Sensor de Tensão AC com arduino e Estruturas de decisão

A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Antes de tudo temos a variável "maior_valor = 0" que já foi declarada anteriormente recebendo o valor 0. Depois, ao longo do código temos a estrutura de repetição for a qual foi inicializada com a variável "i" recebendo o valor 0. Logo depois, temos que a função irá se repetir e tudo o que está dentro dela irá ser executado até que "i" seja maior ou igual a 300. Enfim temos que será adicionado +1 a variável "i" toda vez que a execução da estrutura terminar. Já na primeira linha depois do for temos que o vetor "corrente_inst[i]" recebera a leitura analógica do pino do sensor a cada ciclo e armazenará em seus devidos endereços.

void loop(){
 maior_valor = 0;
 for(int i = 0; i <300; i++){
 corrente_inst[i] = analogRead(pino_sensor);
 }

Após a estrutura anterior, temos ela novamente e dentro dela uma estrutura if de decisão. Nesta ótica, temos que caso a condição entre os parenteses do if for verdadeira tudo o que está entre os colchetes será executado. Então, caso o valor da variável "maior_valor" for menor que o respectivo valor do vetor "corrente_inst[i]", sendo esta variavel a que armazena os valores que o sensor detectou do meio, a variável "maior_valor" vai receber o valor do vetor "corrente_inst[i]" até que o valor que esteja na variavel "maior_valor" seja o maior valor que o sensor detectou.

for(int i = 0; i <300; i++){
 if(maior_valor < corrente_inst[i]){
 maior_valor = corrente_inst[i];
  }
 }

Em seguida, como resultado as duas funções for anteriores temos a função Serial.print que irá imprimir no monitor serial o texto "Maior Valor" e depois o maior valor que o sensor conseguiu detectar e que está variável armazena. Logo em seguida temos o delay que interrompe o programa por 5000 milissegundos.

Serial.print("Maior Valor");
Serial.println(maior_valor);
delay(5000);

A variável "tensao_pico" vai receber o valor da função "map(maior_valor,500,661,0,313)". A função "map(maior_valor,500,661,0,313)" nos permite efetuar o mapeamento de um intervalo numérico em outro intervalo numérico desejado. Já a variável "tensao_rms" recebera o valor da razão entre a variável "tensao_pico" e o valor 1.4. Para finalizar o código irá imprimir no serial monitor o texto "Tensão de Rede Elétrica: " e depois o valor da variavel "tensao_rms" que é a tensão que queremos saber.

  tensao_pico = map(maior_valor,500,661,0,313);
  tensao_rms = tensao_pico/1.4;
  
  Serial.print("Tensão de Rede Elétrica: ");
  Serial.println  (tensao_rms);

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o Módulo Sensor de Tensão AC – ZMPT101B. Veja também o tutorial "MEDINDO TENSÃO AC COM TRANSFORMADOR" onde falamos mais a respeito da tensão de corrente alternada. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.


Sensor Touch Capacitivo TTP223B com arduino

Sensor Touch Capacitivo TTP223B:

No tutorial ensinaremos a usar o Sensor Touch Capacitivo com arduino. Este, por sua vez, é muito utilizado para mudar momentaneamente o estado(HIGH ou LOW) de um certo componente. Vamos visualizar como este pequeno componente funciona e desenvolver uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o Sensor Touch Capacitivo TTP223B?

Este componente como todos os outros sensores trabalha com os conceitos físicos.

- Funcionamento do Sensor Touch Capacitivo com arduino

Primeiramente, o Sensor Touch Capacitivo TTP223B funciona como um interruptor momentâneo, ou seja, consegue reconhecer toques e ao ser pressionado muda o estado logico do componente. Temos que este sensor pode ser utilizado em controle de lampadas, desktops e interruptores touch por meio de projetos com Raspberry, Arduino ou outros microcontroladores já que o formato dele com furos nas laterais permite uma fácil fixação e instalação.

- Campo Elétrico do Sensor Touch Capacitivo com arduino

O campo elétrico é um campo de força provocado pela ação de cargas elétricas. Em suma, sabemos que cargas elétricas colocadas num campo elétrico estão sujeitas à ação de forças elétricas, elas de atração e repulsão.

Imagem do campo elétrico de cargas elétricas

Sensores capacitivos são sensores que detectam qualquer tipo de massa. Seu funcionamento se dá por meio de incidência de um campo elétrico gerado por cargas elétricas em sua face, formando assim um capacitor. Ou seja, no sensor touch capacitivo contém cargas elétricas. Elas por sua vez geram um campo elétrico constante que permite que o sensor detecte qualquer presença de toque no local sinalizado resultando em, por exemplo, nível logico alto para a saída. Os pinos VCC(+) e GND(-) do serve justamente para que o sensor reconheça o toque, já o pino IO serve para informar ao microcontrolador que foi identificado toque ou não.

Os terminais deste sensor são:

  • VCC – Tensão de entrada, entre 3,3 a 5 volts
  • GND – O pino de O V do módulo
  • IO – Pino de saída digital

Módulo do Sensor Touch Capacitivo TTP223B

 

Mãos à obra — Configurando um Sensor Touch Capacitivo TTP223B

Componentes Necessários

- Montando o projeto:

Precipuamente, conectamos led na protoboard, na perna mais curta(-) conecte o resistor de 150 ohms e a perna mais longa(+) vai no pino digital 12. Logo depois, conectamos o resistor no negativo da protoboard. Em seguida, o GND do sensor será conectado também no GND da protoboard, e o VCC do sensor conectado no 5V do arduino. Logo após, conectemos o IO do sensor é conectado no pino digital 2, como mostra o diagrama abaixo:

Diagrama do Sensor Touch Capacitivo TTP223B

- Programando o Arduino:

Agora vamos conectar o arduino no computador e abrir a IDE arduino.  Escreva o programa abaixo na IDE e compile o programa para o seu arduino. Entretanto, antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino: “COM3 (Arduino/Genuino Uno)”.

#define pinSensor  2 // Conexão sensor no pino digital 2 do Arduino
#define pinLed 12  // Conexão led no pino digital 12 do Arduino
 
void setup() {
  pinMode(pinSensor, INPUT); // Define o pino do sensor como ENTRADA do Arduino
  pinMode(pinLed, OUTPUT); // Define o pino do led como SAÍDA do Arduino
}
 
void loop() {
  if (digitalRead(pinSensor) == HIGH){ // Se o sensor foi tocado, leitura é HIGH
    digitalWrite(pinLed, HIGH); // Acende o led enquanto mantemos o dedo tocando o sensor
  }
  else{
    digitalWrite(pinLed,LOW); // O led é desligado
  } 
}

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

 

- Testando o funcionamento:

Como resultado, caso tudo estiver correto vemos que o resultado será igual à imagem abaixo:

Imagem do circuito do Sensor Touch Capacitivo TTP223B

Entendendo a fundo:

Software

— Definições e variáveis utilizadas no projeto do Sensor Touch Capacitivo com arduino

A instrução #define apenas associa as portas dos pinos do arduino a nomes referente aos componentes conectados nestes pinos. Temos então que a porta 2 estamos associando ao nome pinSensor, pois é onde será conectado o pino do sensor. Logo depois, temos que na porta 12 estamos associando-a ao nome pinLed, pois é onde o LED será conectado

#define pinSensor  2 // Conexão sensor no pino digital 2 do Arduino
#define pinLed 12  // Conexão led no pino digital 12 do Arduino

— Função Setup – Definindo pinos do Sensor Touch Capacitivo com arduino

A função setup é aquela função que colocamos para rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. No pinMode definimos que o pino do sensor será uma entrada, ou seja, irá receber a informação do meio e atuará através das saídas e o pino do led uma saída assim irá expressar a informação recebida pelo sensor realizando alguma tarefa que configuramos com o código em questão.

pinMode(pinSensor, INPUT); // Define o pino do sensor como ENTRADA do Arduino
pinMode(pinLed, OUTPUT); // Define o pino do led como SAÍDA do Arduino

— Função Loop – Leitura do nosso Sensor Touch Capacitivo com arduino e Estruturas de decisão

A função loop ao contrário da setup colocamos para roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. A função if será executada caso a condição "digitalRead(pinSensor) == HIGH"(a leitura digital do pino do sensor seja nível logico alto) seja verdadeira, ou seja, o sensor detectou algum tipo de toc. Em contrapartida, caso a condição for falsa as operações dentro do else que serão compiladas, ou seja, o pino do LED receberá nível logico baixo e o LED apagará.

if (digitalRead(pinSensor) == HIGH){ // Se o sensor foi tocado, leitura é HIGH
   digitalWrite(pinLed, HIGH); // Acende o led enquanto mantemos o dedo tocando o sensor
 }
 else{
   digitalWrite(pinLed,LOW); // O led é desligado
 }

Hardware

- Circuitos integrados

São circuitos eletrônicos constituídos por um conjunto de componentes como: transístores, díodos, resistências e condensadores. Eles são todos fabricados num mesmo processo, sobre uma substância comum semicondutora de silício que se designa vulgarmente por chip. Em suma a sua função é realizar ações complexas que não tem como ser executadas por apenas um componente. Dessa forma, eles podem servir como temporizador, oscilador, amplificador, controlador e muito mais.

Imagem de exemplos de circuitos integrados

- Circuito integrado TTP223B

Este circuito integrado é utilizado para identificar a variação da capacitância na placa com grande precisão e sensibilidade.

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o Sensor Touch Capacitivo TTP223B. Veja também o tutorial "SENSOR CAPACITIVO COM ARDUINO", lá você irá entender de forma mais aprofundada o capacitor. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.


Medindo pressão/temperatura com Sensor barométrico BMP180

Sensor de Pressão e Temperatura BMP180: Analisando seu funcionamento

Neste tutorial utilizaremos o sensor barométrico com arduino. Este, no que lhe concerne, é muito utilizado para construção de estações meteorológicas e aperfeiçoamento de navegação GPS. Vamos visualizar como este pequeno componente funciona e desenvolver uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o módulo Sensor de Pressão e Temperatura BMP180?

o sensor barométrico com arduino como todos os outros sensores trabalha com os conceitos físicos.

- Funcionamento do sensor barométrico com arduino

O sensor  barométrico BMP180 tem como finalidade fazer a medição de pressão atmosférica e temperatura. Além disso, as aplicações com esse sensor são diversas como em projetos com Arduino ou outras plataformas microcontroladoras em que seja necessário fazer a medição de pressão atmosférica, temperatura e altitude.

— Temperatura, sensor barométrico com arduino

Primeiramente, a temperatura é a grandeza física que mede o grau de agitação térmica, ou energia cinética e vibracional dos átomos que constituem um corpo. Além disso, quanto mais agitadas as moléculas, maior será a sua temperatura. Então, o sensor barométrico justamente mede e identifica essas agitações e nos fornece a temperatura em que ele esta exposto. Uma das aplicações para o sensor é claramente na meteorologia, pois como observamos na imagem abaixo existem vários graus de agitações entre as moléculas de água.

Imagem dos vários estados atmosféricos

— Pressão, sensor barométrico com arduino

Pressão é a grandeza física a qual é podemos obtê-la pela razão entre a força aplicada e sua área de contato. Vale ressaltar que a unidade de pressão no sistema internacional de unidades é o pascal. Sendo assim, o sensor barométrico irá realizar o cálculo da razão entre força aplicada a ele por sua área de contato e nos informar o resultado de tal calculo

- Os terminais do sensor barométrico com arduino:

  • Vin(+) – Tensão de entrada, entre 3,3 a 5 volts
  • GND(-) – O pino de O V do módulo
  • SCL - I2C Serial Clock (SCL);
  • SDA - I2C Serial Data (SDA);

Módulo do sensor de Pressão e Temperatura BMP180

 

Mãos à obra — Configurando um sensor barométrico BMP180

Componentes Necessários

- Montando o projeto:

Precipuamente, conecte o sensor na protoboard. Logo depois, o pino Vin será conectado ao 5V do arduino, e o pino GND no GND do arduino. Logo após, conecte o pino SCL ao pino analógico A5 do Arduíno e o pino SCA  é conectado ao pino analógico A4, como mostra o diagrama abaixo:

Diagrama de montagem do sensor barométrico BMP180

- Biblioteca "Wire.h”:

Neste tutorial utilizaremos a biblioteca Wire.h a qual é responsável por conter as funções necessárias para gerenciar a comunicação entre os dispositivos através do protocolo I2C. Para baixar a biblioteca click no link e depois no quadrado verde escrito código.

- Biblioteca "Adafruit-BMP085”:

A outra biblioteca que utilizaremos será a Adafruit-BMP085. Logo Após o download do arquivo zip, abra a IDE e adicione a biblioteca em forma zip ao seu programa. Caso não entenda nada de biblioteca ou como prosseguir,veja o tutorial COMO INSTALAR UMA BIBLIOTECA NO ARDUINO IDE” no portal vida de silício.

- Programando o Arduino:

Neste instante vamos conectar o arduino no computador e abrir a IDE arduino. Desta forma iremos escrever o programa abaixo na IDE e compile o programa para o seu arduino.

Em contrapartida antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#include <Wire.h> //INCLUSÃO DE BIBLIOTECA
#include <Adafruit_BMP085.h> //INCLUSÃO DE BIBLIOTECA
 
Adafruit_BMP085 bmp; //OBJETO DO TIPO Adafruit_BMP085 (I2C)
   
void setup(){
  Serial.begin(9600); //INICIALIZA A SERIAL
  if (!bmp.begin()){ //SE O SENSOR NÃO FOR INICIALIZADO, FAZ
  Serial.println("Sensor BMP180 não foi identificado! Verifique as conexões."); //IMPRIME O TEXTO NO MONITOR SERIAL
  while(1){} //SEMPRE ENTRE NO LOOP
  }
}
   
void loop(){
    
    Serial.print("Temperatura: "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readTemperature()); //IMPRIME NO MONITOR SERIAL A TEMPERATURA
    Serial.println(" *C (Grau Celsius)"); //IMPRIME O TEXTO NO MONITOR SERIAL
        
    Serial.print("Pressão: "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readPressure()); //IMPRIME NO MONITOR SERIAL A PRESSÃO
    Serial.println(" Pa (Pascal)"); //IMPRIME O TEXTO NO MONITOR SERIAL
     
    Serial.print("Altitude: "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readAltitude()); //IMPRIME NO MONITOR SERIAL A ALTITUDE APROXIMADA
    Serial.println(" m (Metros)"); //IMPRIME O TEXTO NO MONITOR SERIAL
    
    Serial.print("Pressão a nível do mar (calculada): "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readSealevelPressure()); //IMPRIME NO MONITOR SERIAL A PRESSÃO A NÍVEL DO MAR
    Serial.println(" Pa (Pascal)"); //IMPRIME O TEXTO NO MONITOR SERIAL

    Serial.print("Altitude real: "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readAltitude(101500)); //IMPRIME NO MONITOR SERIAL A ALTITUDE REAL
    Serial.println(" m (Metros)"); //IMPRIME O TEXTO NO MONITOR SERIAL
     
    Serial.println("-----------------------------------"); //IMPRIME UMA LINHA NO MONITOR SERIAL
    delay(2000); //INTERVALO DE 2 SEGUNDOS
}

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

 

Imagem do circuito do sensor barométrico BMP180

- Testando o funcionamento:

Em seguida podemos visualizar o sensor funcionando através do monitor serial já que nos inicializamos ele com a função Serial.begin(9600). Basta clicar na lupa no canto direito superior da IDE arduino como na imagem abaixo:

Monitor serial

 

Entendendo a fundo:

Software

– Definições e variáveis utilizadas no projeto do sensor barométrico com arduino

Inicialmente a instrução #include <> serve para incluirmos bibliotecas ao nosso código, facilitando assim a escrita do mesmo, incluímos as bibliotecas Wire.h e Adafruit_BMP085.h. Logo depois, definimos um objeto do tipo Adafruit_BMP085 bmp.

#include <Wire.h> //INCLUSÃO DE BIBLIOTECA
#include <Adafruit_BMP085.h> //INCLUSÃO DE BIBLIOTECA 

Adafruit_BMP085 bmp; //OBJETO DO TIPO Adafruit_BMP085 (I2C)

– Função Setup – Definindo pinos do sensor barométrico com arduino

A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. Em princípio, inicializamos a comunicação serial. Logo depois, temos uma estrutura de decisão if na qual a condição de que se o sensor não for inicializado "!bmp.begin()" for verdadeira ele executara imprimindo no serial monitor o texto "Sensor BMP180 não foi identificado! Verifique as conexões.". Então, en seguida temos a estrutura de repetição "while(1)" formando um loop.

Serial.begin(9600); //INICIALIZA A SERIAL
if (!bmp.begin()){ //SE O SENSOR NÃO FOR INICIALIZADO, FAZ
Serial.println("Sensor BMP180 não foi identificado! Verifique as conexões."); //IMPRIME O TEXTO NO MONITOR SERIAL
while(1){} //SEMPRE ENTRE NO LOOP

– Função Loop – Leitura do nosso sensor barométrico com arduino e Estruturas de decisão

A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. A função serial.print imprime primeiro um texto em que esta entre coxetes e depois entre aspas e depois imprime a leitura feita no sensor. Neste instante, na função loop temos uma série de Serial.print a qual vai imprimir no monitor serial textos entre aspas, a temperatura, a altitude e pressão. A função "bmp.readTemperature()" serve justamente para ler a temperatura neste caso, no sensor e nos retornar o resultado, A função "bmp.readPressure()" serve para ler a pressão no sensor e nos retornar o resultado e A função "bmp.readAltitude()" serve para ler a altitude no sensor e nos retornar o resultado. Logo depois, irá imprimir no serial monitor o resultado. Temos no final uma espera de 2000 milissegundos de espera para depois executar toda a função loop novamente.

Serial.print("Temperatura: "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readTemperature()); //IMPRIME NO MONITOR SERIAL A TEMPERATURA
   Serial.println(" *C (Grau Celsius)"); //IMPRIME O TEXTO NO MONITOR SERIAL
       
   Serial.print("Pressão: "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readPressure()); //IMPRIME NO MONITOR SERIAL A PRESSÃO
   Serial.println(" Pa (Pascal)"); //IMPRIME O TEXTO NO MONITOR SERIAL
    
   Serial.print("Altitude: "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readAltitude()); //IMPRIME NO MONITOR SERIAL A ALTITUDE APROXIMADA
   Serial.println(" m (Metros)"); //IMPRIME O TEXTO NO MONITOR SERIAL
   
   Serial.print("Pressão a nível do mar (calculada): "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readSealevelPressure()); //IMPRIME NO MONITOR SERIAL A PRESSÃO A NÍVEL DO MAR
   Serial.println(" Pa (Pascal)"); //IMPRIME O TEXTO NO MONITOR SERIAL

   Serial.print("Altitude real: "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readAltitude(101500)); //IMPRIME NO MONITOR SERIAL A ALTITUDE REAL
   Serial.println(" m (Metros)"); //IMPRIME O TEXTO NO MONITOR SERIAL
    
   Serial.println("-----------------------------------"); //IMPRIME UMA LINHA NO MONITOR SERIAL
   delay(2000); //INTERVALO DE 2 SEGUNDOS

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o Sensor de Pressão e Temperatura BMP180. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.


Sensor de Fluxo de Água: Medindo a vazão com Arduino

Sensor de Fluxo de Água: Medindo a vazão com Arduino

O Sensor de Fluxo de Água 1/2″ – YF-S201 é um dispositivo usado para medir o volume ou a massa em fluxo de um gás, ou líquido que passa por uma turbina. Neste tutorial aprenderemos como usá-lo e visualizaremos como este pequeno componente funciona.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o Sensor de Fluxo de Água?

Este componente, como todos os outros sensores, trabalha com os conceitos físicos.

- Funcionamento

Portanto, o Sensor de Fluxo de Água possui como componentes o sensor hall, a vedação externa, a turbina, um imã e a carcaça para juntar todos esses componentes como na imagem abaixo:

Imagem interna do sensor de vazão de água

Como podemos observar quando a água flui através da entrada até a turbina, esta gira e a velocidade muda conforme o fluxo de água aumenta ou diminui e enquanto as turbinas estão exercendo seu trabalho, o imã e o sensor de efeito Hall realiza a leitura e emite um sinal de pulso, respectivamente. Mas como assim? Bom, a leitura da vazão funciona da seguinte forma. Quando a água passa pela turbina, ela gira e detecta a quantia de voltas dadas. A leitura desses dados se faz pelo ímã, o qual possui um polo norte e um polo sul, posicionado em uma das pás da turbina, e o sensor de efeito hall de forma paralela envia o sinal digital para o microcontrolador e por fim a água sai pelo outro lado.

Ps: Quanto maior a intensidade da água por minuto maior será a contagem de pulsos.

- Os terminais deste sensor de vazão são:

  • VCC(vermelho) – Tensão de entrada, entre 3,3 a 5 volts
  • GND(preto) – O pino de O V do módulo, conectado ao GND do Arduino ou fonte
  • Saída Digital(amarelo) – Pino de saída digital de contagem de pulsos por minuto
Módulo do sensor de vazão de água
Módulo do sensor de vazão de água

 

Mãos à obra — Configurando um Sensor de Fluxo de Água

Componentes Necessários

- Montando o projeto com Sensor de vazão de água

Primeiramente, conecte o terminal preto do sensor de fluxo no GND do Arduino e o terminal vermelho no 5V do Arduino e conecte o terminal amarelo será conectado no pino digital D2, como mostra o diagrama abaixo:

Diagrama do sensor de fluxo de água
Diagrama do sensor de fluxo de água

- Programando o Arduino para usar o Sensor de fluxo de água

Agora, que já montamos nosso projeto, vamos conectar o arduino no computador e abrir a IDE arduino.  Escreva o programa abaixo na IDE e compile o programa para o seu Arduino.

Para isso, antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Em seguida, clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

int contaPulso; //Variável para a quantidade de pulsos

void setup(){
  Serial.begin(9600);
  pinMode(2,INPUT);
  attachInterrupt(0,incpulso,RISING); //Configura o pino 2(Interrupção 0)interrupção
  
}


void loop(){
  
sei(); //Habilita interrupção
delay(1000);
cli(); //Desablilita interrupção
if(contaPulso>0){
  Serial.print("Contagem de Pulsos");
  Serial.println(contaPulso);
}
else{
  Serial.println("Sem pulsos");
}
contaPulso = 0;
}

void incpulso(){
  contaPulso++; //Incrementa a variável de pulsos
}

 

- Testando o funcionamento do Sensor de vazão de água

Enfim, caso tudo estiver correto o resultado será igual à imagem abaixo. 

Imagem do circuito do sensor de fluxo de água
Imagem do circuito do sensor de fluxo de água

 

Dessa forma, visualizamos o sensor funcionando através do monitor serial já que nos inicializamos ele com a função Serial.begin(9600) basta clicar na lupa no canto direito superior da IDE Arduino como na imagem abaixo:

Monitor serial coletando dados do sensor de vazão
Monitor serial coletando dados do sensor de vazão

 

Entendendo a fundo

Software

– Definições e variáveis utilizadas no projeto

Primeiramente, nesta instrução declaramos uma variável para podermos usá-la em nosso programa. Neste caso, a variável que declaramos é do tipo int, ou seja, possui dois bytes de memória disponível para ela.

int contaPulso; //Variável para a quantidade de pulsos

– Função Setup – Definindo pinos

Em seguida. a função setup é aquela que roda apenas uma vez no início do programa. Está função é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada.

Nesta função, Serial.begin inicializa a comunicação serial da placa arduino com o computador. Em seguida, o comando pinMode define o que será entrada e o que será saída na nossa programação. E por fim o comando attachInterrupt define o pino de leitura como interrupção do Arduino no programa. 

Serial.begin(9600);
pinMode(2,INPUT);
attachInterrupt(0,incpulso,RISING); //Configura o pino 2(Interrupção 0)interrupção

– Função Loop – Leitura do nosso Sensor de Fluxo de Água e Estruturas de decisão

Enfim, a função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. A função if define uma condição para que o Arduino execute as funções dentro dele, caso a condição for verdadeira, ou seja, a variável declarada anteriormente tiver o valor maior que 0, o Arduino executa tudo o que esta nos colchetes do if. Senso assim, irá imprimir no serial monitor o texto "Contagem de Pulsos" e depois o valor que está atribuído a variável contaPulso. Entretanto, caso a condição do if seja falsa o que esta nos colchetes do else que será executado, o seja, irá imprimir no serial monitor o texto "Sem pulsos". Logo depois, a variável contaPulso recebe o valor 0. Toda vez que houver interrupção, ou seja, houver a mudança de estado de 0V (0) para 5V(1) a função void incpulso será executada, já que na função attachInterrupt(0,incpulso,RISING) nos definimos isso. Assim será adicionado +1 a variável contaPulso.

sei(); //Habilita interrupção
delay(1000);
cli(); //Desablilita interrupção
if(contaPulso>0){
  Serial.print("Contagem de Pulsos");
  Serial.println(contaPulso);
}
else{
  Serial.println("Sem pulsos");
}
contaPulso = 0;
}

void incpulso(){
  contaPulso++; //Incrementa a variável de pulsos

Considerações finais:

Por fim, neste tutorial mostramos como funciona e como utilizar o sensor de fluxo de água. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.


Módulo Sensor de Gesto e RGB APDS9960 com Arduino

Módulo sensor de gesto e RGB APDS9960: Analisando seu funcionamento

Neste tutorial utilizaremos o sensor de gesto e RGB APDS9960 com arduino. Este, no que lhe concerne, é utilizado para fazer a medição de luz, cor ambiente, detecção de proximidade e detecção de gestos. Visualizaremos como este pequeno componente funciona e desenvolveremos uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o Módulo Sensor de Gesto e RGB APDS9960?

Este módulo possui o Sensor APDS-9960. Ele mede na parte de cor RGB a intensidade da luminosidade do ambiente, cor ambiente. Além disso, ele também na parte de sensor de gestos detecta nível de proximidade e sentido de gestos (direita, esquerda, alto e baixo) o que permite que um computador, robô ou plataforma microcontroladora possa ser controlado por ele.

- Funcionamento

Primeiramente, o sensor utiliza barramento I2C para utilização (pinos SDA e SCL), possui pino de interrupção (INT) para transferir os dados de proximidade de gesto e um pino adicional (VL) para LED infravermelho além de ser utilizado em projetos  com diversos tipos de Arduino como o NodeMCU ESP8266, pequenos computadores como o Raspberry ou qualquer outra plataforma microcontroladora. Ao mover o sensor, ele consegue identificar o movimento e direção por meio dos gestos que realizamos com ele e nos informar.

- Movimento

De início, os controladores por gestos são muito utilizados hoje em nossos smartphones. Temos então que antes de serem inseridos na sociedade havia a necessidade de ter botões nas telas dos smartphones, entretanto com a chegado desta tecnologia, agora apenas temos que arrastar para o lado quando queremos desbloquear ou mudar de aba no smartphone.

Imagem do sensor de gesto em Smartphones

Aliás, vemos que os sensores de gestos como mostra a imagem abaixo são capazes de imitar perfeitamente os movimentos que fazemos com nossas mãos, por exemplo, em outros objetos.

Imagem do sensor de gesto imitando movimentos

- Os terminais deste sensor são:

  • INT - pino de interrupção
  • VCC - Tensão de entrada 3.3V
  • GND - O pino de O V do módulo, conectado ao GND do Arduino ou fonte
  • SDA  - Pino utilizado pelo barramento I2C
  • SCL - Pino utilizado pelo barramento I2C
  • VL - Pino adicional para LED infravermelho.

Sensor de Gesto e RGB APDS9960

 

Mãos à obra — Configurando um sensor de gesto

Componentes Necessários

- Montando o projeto:

Primeiramente, o sensor da vida de silício vem sem os pinos Headers soldados, então antes de iniciar a montagem vamos soldá-los ao módulo, lembrando que soldamos ao módulo a parte de menor comprimento. Após a soldagem conectaremos o modulo sensor de gesto na protoboard e conectar o VCC do módulo no 3.3V do arduino (Cuidado para não conectar no 5V ou pode danificar o módulo). Logo depois, vamos conectar o GND do módulo ao GND do arduino, já o SDA do módulo conectaremos no pino analógico A4 do arduino e o SCL do módulo conectamos no pino analógico A5 do arduino. Observe o diagrama de montagem abaixo:

Diagrama de montagem do sensor de gesto e RGB APDS9960

 — Biblioteca <Adafruit_APDS9960.h>:

A biblioteca que utilizaremos será a Adafruit_APDS9960.h . Esta biblioteca nos permitirá configurar o sensor com função que já estão dentro dela e apenas precisaremos utilizá-las em nosso programa. Após o download do arquivo zip, abra a IDE e adicione a biblioteca em forma zip ao seu programa. Caso não entenda nada de biblioteca ou como prosseguir,veja o tutorial  COMO INSTALAR UMA BIBLIOTECA NO ARDUINO IDE” no portal vida de silício.

- Programando o Arduino:

Agora vamos conectar o arduino no computador e abrir a IDE arduino.  Escreva o programa abaixo na IDE e compile o programa para o seu arduino.

Entretando, antes de carregar o programa, precisamos selecionar qual porta desejamos usar para fazer o carregamento do nosso programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#include <Adafruit_APDS9960.h> //INCLUSÃO DE BIBLIOTECA
Adafruit_APDS9960 apds; //OBJETO DO TIPO Adafruit_APDS9960 (I2C)

void setup() {
  Serial.begin(9600); //INICIALIZA A SERIAL
  
  if(!apds.begin()){ //SE O SENSOR NÃO FOR INICIALIZADO, FAZ
    Serial.println("Falha ao inicializar o dispositivo. Verifique as conexões!"); //IMPRIME O TEXTO NO MONITOR SERIAL
  }//SENÃO, FAZ
  else Serial.println("Dispositivo inicializado!"); //IMPRIME O TEXTO NO MONITOR SERIAL

  //O MODO DETECÇÃO DE GESTO SERÁ HABILITADO QUANDO O SENSOR DETECTAR ALGO PRÓXIMO DO MÓDULO (APROXIME SEU DEDO E AFASTE)
  apds.enableProximity(true);
  apds.enableGesture(true);
}

void loop() {
    uint8_t gesture = apds.readGesture(); //FAZ A LEITURA DA DIREÇÃO DO GESTO
    if(gesture == APDS9960_DOWN) Serial.println("↓"); //SE DETECTAR GESTO (DE CIMA PARA BAIXO), IMPRIME O SÍMBOLO NO MONITOR SERIAL
    if(gesture == APDS9960_UP) Serial.println("↑"); //SE DETECTAR GESTO (DE BAIXO PARA CIMA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
    if(gesture == APDS9960_LEFT) Serial.println("←"); //SE DETECTAR GESTO (DA DIREITA PARA A ESQUERDA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
    if(gesture == APDS9960_RIGHT) Serial.println("→"); //SE DETECTAR GESTO (DA ESQUERDA PARA A DIREITA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
}

- Testando o funcionamento:

Em fim, caso tudo estiver correto o resultado será igual à imagem abaixo. Temos que o sensor de gestos ficará identificando os seus movimentos ao passar com a mão encima dele e mostrará no serial monitor a direção.

Imagem do serial monitor

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

Imagem do circuito do Sensor de Gestos

 

Entendendo a fundo:

Software

– Definições e variáveis utilizadas no projeto do sensor de gesto e RGB APDS9960 com arduino

Precipuamente, a instrução inclui <> permitirá que adicionemos a biblioteca Adafruit_APDS9960.h ao nosso programa. Assim podemos utilizar suas funcionalidades em nosso algoritmo.

#include <Adafruit_APDS9960.h> //INCLUSÃO DE BIBLIOTECA

– Função Setup – Definindo pinos do sensor de gesto e RGB APDS9960 com arduino

Vemos que a função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Além disso, ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. Em princípio, temos a função Serial.begin que irá inicializar a comunicação serial para podermos visualizar os resultados nela. Temos que na função if, antes de mais nada, possui uma condição entre parenteses "!apds.begin()" a qual se for verdadeira tudo o que tiver entre os colchetes do if será executado, ou seja, será impresso no monitor serial o texto "Falha ao inicializar o dispositivo. Verifique as conexões!". Em seguida, podemos observar que caso a condição seja falsa o comando else será executado e imprimirá "Dispositivo inicializado!" no serial monitor. As funções " apds.enableProximity(true)" e "apds.enableGesture(true)" da biblioteca serão executadas como parâmetro "true".

Serial.begin(9600); //INICIALIZA A SERIAL
 
 if(!apds.begin()){ //SE O SENSOR NÃO FOR INICIALIZADO, FAZ
   Serial.println("Falha ao inicializar o dispositivo. Verifique as conexões!"); //IMPRIME O TEXTO NO MONITOR SERIAL
 }//SENÃO, FAZ
 else Serial.println("Dispositivo inicializado!"); //IMPRIME O TEXTO NO MONITOR SERIAL

 //O MODO DETECÇÃO DE GESTO SERÁ HABILITADO QUANDO O SENSOR DETECTAR ALGO PRÓXIMO DO MÓDULO (APROXIME SEU DEDO E AFASTE)
 apds.enableProximity(true);
 apds.enableGesture(true);

– Função Loop – Leitura do nosso sensor de gesto e RGB APDS9960 com arduino e Estruturas de decisão

A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Primeiramente, temos a leitura das direções do sensor "uint8_t gesture = apds.readGesture()" com a função declarada no void setup. Logo depois, temos uma série de comando if's, que por sua vez, caso forem verdadeiras irão imprimir no serial monitor os textos em aspas. No entando, seguindo a lógica apenas uma pode ser verdadeira de cada vez. Similarmente, temos que a primeira condição "gesture == APDS9960_DOWN" que será verdadeira caso a direção for para baixo, a função "Serial.println("↓")" será executada. Na mesma perspectiva, caso a condição "gesture == APDS9960_UP" que, por assim dizer, detectou gesto para cima, for verdadeira a função "Serial.println("↑")" será executada e assim por diante.

uint8_t gesture = apds.readGesture(); //FAZ A LEITURA DA DIREÇÃO DO GESTO
   if(gesture == APDS9960_DOWN) Serial.println("↓"); //SE DETECTAR GESTO (DE CIMA PARA BAIXO), IMPRIME O SÍMBOLO NO MONITOR SERIAL
   if(gesture == APDS9960_UP) Serial.println("↑"); //SE DETECTAR GESTO (DE BAIXO PARA CIMA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
   if(gesture == APDS9960_LEFT) Serial.println("←"); //SE DETECTAR GESTO (DA DIREITA PARA A ESQUERDA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
   if(gesture == APDS9960_RIGHT) Serial.println("→"); //SE DETECTAR GESTO (DA ESQUERDA PARA A DIREITA), IMPRIME O SÍMBOLO NO MONITOR SERIAL

Hardware

- Cor RGB - APDS9960:

A Cor RGB digital APDS-9960 é a parte do sensor que permite identificar cores e intensidades de luz em um ambiente.

 

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o sensor de gesto e RGB APDS9960. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.


Como descobrir o endereço do módulo Bússola Digital / Magnetômetro Três Eixos – GY-273

Como descobrir o endereço do Módulo Bússola Digital / Magnetômetro Três Eixos – GY-273

Neste tutorial descobriremos como achar o endereço de do módulo bússola digital com arduino, mais especificamente do módulo Bússola Digital / Magnetômetro Três Eixos – GY-273.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o módulo Bússola Digital / Magnetômetro Três Eixos – GY-273?

O Módulo Bússola Eletrônica 3 Eixos Campo Magnético HMC5883L é um dispositivo de Bússola e Magnetômetro equipado com o chip HMC5883L.

- Funcionamento

Precipuamente o Magnetômetro consegue detectar onde fica o norte geográfico magnético da Terra através de um sensor magnético de 3 eixos, fornecendo na saída informações sobre os eixos X, Y e Z. Não obstante, utiliza o protocolo de comunicação I2C. Ademais, para mais informações sobre o chip HMC5883L e o sensor acesse o (datasheet) e visualize a sua composição.

- Circuito integrado

O chip HMC5883L é um circuito integrado é por isso é responsável por realizar tarefa complexas que não poderiam ser executadas por apenas um componente.

Circuitos Integrados

- Campo magnético

O sensor Magnetômetro utiliza do campo magnético da terra para o seu funcionamento com o fim de identificar a sua posição em relação aos eixos X, Y e Z e em relação ao norte da terra onde a bússola como já sabemos sempre aponta. Além disso, o campo magnético faz com que à terra funcione como um ímã gigante já que possui um norte e um sul e as linhas do campo vão de um para o outro. Aliás, o Polo norte é na verdade o sul magnético e o polo sul o norte magnético.

- Os terminais deste sensor são:

  • VCC(+) – Tensão de entrada, entre 3,3 a 5 volts
  • GND(-) – O pino de O V do módulo, conectado ao GND do Arduino ou fonte
  • Pino SCL - I2C Serial Clock
  • Pino SDA - I2C Serial Data

Módulo Bússola Digital / Magnetômetro

Mãos à obra — Configurando uma Bússola Digital

Componentes Necessários

- Montando o projeto:

Primeiramente conecte o VCC do módulo no 3.3V do arduino e logo após conecte o GND do módulo no GND do arduino. Depois disso conecte o SCL do módulo no pino A5 e o SDA no pino A4 do arduino desta forma temos como mostra o diagrama abaixo:

Diagrama de montagem do Módulo Bússola Digital / Magnetômetro

- Biblioteca  <wire.h>:

A biblioteca que utilizaremos será a Wire.h. Após o download do arquivo zip, abra a IDE e adicione a biblioteca em forma zip ao seu programa. Não obstante, caso não entenda nada de biblioteca ou como prosseguir, veja o tutorial  COMO INSTALAR UMA BIBLIOTECA NO ARDUINO IDE” no portal vida de silício.

- Programando o Arduino:

Antes de mais nada vamos conectar o arduino no computador e abrir a IDE arduino.  Escreva o programa abaixo na IDE e compile o programa para o seu arduino.

Antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#include <Wire.h>
 
void setup()
{
  Wire.begin();//Inicie a biblioteca Wire
  Serial.begin(9600);//Inicie a Comunicação Serial
  while (!Serial);             //Espera pelo serial monitor
  Serial.println("\nI2C Scanner");
}
 
void loop()
{
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

Se as conexões estiverem corretas, ao abrir o serial monitor você terá a seguinte tela, mostrando o endereço do dispositivo detectado.

Imagem do serial monitor

O I2C Scanner é um programa que serve não apenas para este módulo, mas também para qualquer outro dispositivo I2C conectado ao barramento. Tenha este programa sempre à mão para descobrir o endereço do dispositivo ou simplesmente para verificar se ele está se comunicando com o Arduino, podemos ver isto no tutorial do Sensor de Movimento de cabeça, onde é utilizamos o mesmo programa.

Imagem do circuito da Bússola Digital

Entendendo a fundo:

Software

– Definições e variáveis utilizadas no projeto do módulo bússola digital com arduino

A instrução #include<> serve para incluir bibliotecas no algoritmo.

#include <Wire.h>

– Função Setup – Definindo pinos do módulo bússola digital com arduino

A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. A função "Wire.begin()" Inicializa a biblioteca Wire. Semelhantemente a função Serial.begin inicia a comunicação serial e define uma velocidade para ela. A função "while (!Serial)" Espera pelo serial monitor e a função "Serial.println" imprime no serial monitor o texto "I2C Scanner".

void setup() { 
 Wire.begin();//Inicie a biblioteca Wire
 Serial.begin(9600);//Inicie a Comunicação Serial
 while (!Serial); //Espera pelo serial monitor
 Serial.println("\nI2C Scanner");
 }

– Função Loop – Leitura do nossa módulo bússola digital com arduino e Estruturas de decisão

Em primeira instância a função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Temos primeiro a declaração das variáveis do tipo byte "error" e "address" e a variável do tipo int "nDevices". Logo depois imprime no serial monitor o texto "Scanning..." e atribui a variável nDevices o valor 0.

void loop() { 
 byte error, address;
 int nDevices;
 Serial.println("Scanning...");
 nDevices = 0;

Posteriormente temos a estrutura de repetição for onde atribui a variável "address" o valor 1, depois coloca a condição"address < 127" de que enquanto a variável "address" for menor que 127 tudo que estiver entre os colchetes será executado e a seguir a cada ciclo irá ser adicionado +1 a variável "address" no comando "address++". Lodo depois, dentro do for temos de incio por assim dizer o comando" Wire.beginTransmission(address)" que inicia a comunicação com START e referência o dispositivo escravo address. Já o comando "error = Wire.endTransmission()" atribua a variável error um valor recebido pela função.

for(address = 1; address < 127; address++ ) {
 Wire.beginTransmission(address);
 error = Wire.endTransmission();

- IF's e Else's do nossa módulo bússola digital com arduino

Similarmente dentro do for temos a estrutura de decisão if que será executada caso a condição de a variável error for igual a 0 ser verdadeira. Assim sendo, temos a função Serial.print que executará dentro do if e imprimirá o texto "I2C device found at address 0x" no serial monitor. Logo após temos outra estrutura de decisão dentro da anterior, onde caso a condição da variável address ser menor que 16 for verdadeira será executada e em seguida imprimira no serial monitor o texto "0", depois o endereço hexadecimal da bússola e depois o texto " !" e adicionará a variável nDevice +1.

if (error == 0) {
 Serial.print("I2C device found at address 0x");
 if (address<16) Serial.print("0");
 Serial.print(address,HEX);
 Serial.println(" !");
 nDevices++;
 }

Se a variável error for igual a 4 a estrutura else if será executada e não a if anterior, assim sendo a variável nDevices não receberá +1 e será escrito no monitor serial o texto "Unknow error at address 0x". Em contrapartida, semelhantemente ao if anterior caso a variável address for menor que 16  será impresso no serial monitor o texto "0" e logo depois o endereço hexadecimal do módulo.

else if (error==4) {
 Serial.print("Unknow error at address 0x");
 if (address<16){
  Serial.print("0");
  Serial.println(address,HEX);
   }
 }

Na estrutura if abaixo se a variável nDevices for igual a 0 será impresso no monitor serial o texto "No I2C devices found". Entretando, caso o nDevices não for igual a 0 o else será executado, então será impresso no serial monitor o texto "done" e esperará 5000 milissegundos para executar a próxima linha.

 
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
  delay(5000);           // wait 5 seconds for next scan
}

Considerações finais:

Neste tutorial mostramos como funciona e como ver o endereço do Módulo Bússola Eletrônica 3 Eixos Campo Magnético HMC5883L. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.


Sensor de Vibração SW-420 com arduino

Sensor de Vibrações: Detectando Oscilações Sonoras

Neste tutorial utilizaremos o sensor de vibração com arduino. Este, no que lhe concerne, é muito utilizado para alarmes e detecção de vibrações do meio. Vamos visualizar como o pequeno componente funciona e desenvolver uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o módulo sensor de vibração?

O sensor como todos os outros trabalha com os conceitos físicos.

- Funcionamento

Precipuamente, o sensor possui uma esfera de metal solta dentro de um cilindro acoplado a ele, quando este sensor sente vibrações a esfera se movimenta(Vibra) desfazendo o contato com os dois terminais que vão para o sensor. Além disso, enquanto o sensor não está detectando vibrações, a saída fica em nível logico baixo, somente quando o sensor detecta um certo nível de vibração regulado manualmente no trimpot a saída fica em nível logico alto.  Uma das inúmeras aplicações para este sensor é no monitoramento de condições de um determinado equipamento, ou seja, mede as vibrações de um equipamento onde quando é detectado um nível de vibração anormal logo é informado o possível defeito.

— Vibração

As vibrações ou oscilações são movimentos que se repetem de forma contínua ou não dado um intervalo de tempo. As direções das ondas de vibração são com toda certeza longitudinais e transversais. Ela está em toda nossa volta já que tudo o que é material está em constante vibração

Onda transversal

Por analogia podemos observar as moléculas de água as quais entre seus 3 estados o mais agitado, que estão vibrando com mais intensidade é o gasoso.

Molécula vibrando 

- Frequência

A frequência está relacionada com a vibração. Ela é a quantidade de vezes que ocorre a vibração completa dado um intervalo de tempo de 1 segundo. Podemos usar as figuras de Chladni que dependendo da frequência da vibração sobre o composto em cima da tela preta temos formas diferentes.

Figuras de Chladni

No sensor de vibração a frequência é fundamental para seu funcionamento, pois sem ela não seria possível identificar as vibrações irregulares de um equipamento.

- Os terminais deste sensor são:

  • VCC(+) – Tensão de entrada, entre 3,3 a 5 volts
  • GND(-) – O pino de O V do módulo conectado ao GND do Arduino ou fonte
  • Saída Digital(D0)– Pino de saída digital (retorna HIGH ou LOW)

Módulo do sensor de vibrações

Mãos à obra — Configurando um Sensor de Vibrações

Componentes Necessários

 

- Montando o projeto:

Primeiramente conecte o LED e o resistor na protoboard.  Logo depois, a perna maior do LED será conectada no resistor e a menor no negativo da  protoboard. Já a outra extremidade do resistor será conectada ao pino 12 do arduino. Em seguida conecte o VCC do sensor de vibração no 5V do arduino e o GND do sensor no negativo da protoboard. A saida digital(D0) do sensor será conectada ao pino 5 do arduino. Depois de ter realizado os passos anteriores conectem o GND do arduino no negativo da protoboard. Veja abaixo o circuito do sensor com mais detalhes:

Diagrama de montagem do sensor de vibração

- Programando o Arduino:

Vamos agora conectar o arduino no computador e abrir a IDE arduino.  Escreva o programa abaixo na IDE e compile o programa para o seu arduino.

Antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#define pinoLed 12 //Pino digital utilizado pelo led
#define pinoSensor 5 //Pino digital utilizado pelo sensor

int ler = 0; // Declaração da Variavel "ler"
void setup(){
  Serial.begin(9600);
  pinMode(pinoSensor, INPUT); //Define o pino como entrada
  pinMode(pinoLed, OUTPUT); //Define o pino como saída
}

void loop(){
  ler = digitalRead(pinoSensor);// A varialvel "ler" recebe o nivel logico lido no pino do sensor de vibrações
  Serial.println(ler);// Printa no monitor serial o valor atribuido a variavel "ler"
  delay(150);// Espera 150 milisegundos
  if(ler == HIGH){ //Se a leitura do pino for igual a low, executa
      digitalWrite(pinoLed, HIGH); //ACENDE O LED
  }else//Senão, executa
  {
    digitalWrite(pinoLed, LOW); //APAGA O LED
  }
}

- Testando o funcionamento:

Caso tudo estiver correto o resultado será igual à imagem abaixo em que o sensor de vibração ficará constante em nível lógico baixo(LOW) enquanto ele não detectar vibração, por exemplo. E ao detectar vibração o nível lógico da saida vai para alto (HIGH).

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

 

Imagem do circuito do sensor de vibração funcionando

Como resultado, ao detectar uma quantidade de vibração pré-determinada ajustando a sensibilidade no potenciômetro(trimpot) o LED acenderá, tente utilizar uma chave de fenda ou algo do tipo e bata com ela em uma superfície rigida , certifique-se se o sensor esta perto para detectar as vibrações.

Potenciômetro do sensor para a regulação de sensibilidade

Podemos visualizar o sensor funcionando através do monitor serial já que inicializamos ele com a função Serial.begin(9600) basta clicar na lupa no canto direito superior da IDE arduino como na imagem abaixo:

Monitor serial

 

Entendendo a fundo:
Software

— Definições e variáveis utilizadas no projeto do sensor de vibração com arduino

A instrução #define apenas associa as portas dos pinos do arduino a nomes referente aos componentes conectados nestes pinos. O pino 12 está definido como pinoLed e o pino 5 está como pinoSensor. Logo depois as variáveis declaradas com o tipo int são atribuídas a elas valores escolhidos pelo programador. A variável ler do tipo int foi atribuído o valor 0.

#define pinoLed 12 //PINO DIGITAL UTILIZADO PELO LED
#define pinoSensor 5 //PINO DIGITAL UTILIZADO PELO SENSOR
int ler = 0; // Declaração da Variavel "ler"

— Função Setup – Definindo pinos do sensor de vibração com arduino

A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada e a função pinMode dentro da setup define o que será entrada e o que sera saída na nossa programação. A função serial.begin está inicializando a comunicação serial. Já a função pinMode esta definindo o pino 12 que está como "pinoSensor" como entrada, ou seja, é neste pino que o sensor atuará após receber vibrações do meio e converter em sinais elétricos e o pino 5 como saída que expressará o resultado que queremos com o código e o sensor.

void setup(){
  Serial.begin(9600);
  pinMode(pinoSensor, INPUT); //DEFINE O PINO COMO ENTRADA
  pinMode(pinoLed, OUTPUT); //DEFINE O PINO COMO SAÍDA
}

— Função Loop – Leitura do nosso sensor de vibração com arduino e Estruturas de decisão

A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Na variável "ler" será atribuído a leitura das vibrações do pino digital 5 onde esta o sensor. No monitor serial será impresso o valor atribuído a variável ler, assim saberemos se o sensor identificou uma vibração fora do comum. A função daley irá espera 150 milisegundos para  imprimir novamente o que o sensor está lendo.

void loop(){  
 ler = digitalRead(pinoSensor);// A varialvel "ler" recebe o nivel logico lido no pino do sensor de vibrações  
 Serial.println(ler);// Printa no monitor serial o valor atribuido a variavel "ler"  
 delay(150);// Espera 150 milisegundos

Já a função digitalWrite irá escrever no pino digital 12 onde está o LED (declarado anteriormente como saída), nível logico alto caso a condição no if seja verdadeira, ou seja, a variável ler ter recebido nive logico alto, assim o led irá acender indicando que o sensor identificou uma vibração incomum. Se a condição do if for falsa será executado o que estiver dentro dos colchetes do else, ou seja, o led irá apagar.

  if(ler == HIGH){ //SE A LEITURA DO PINO FOR IGUAL A LOW, FAZ    
   digitalWrite(pinoLed, HIGH); //ACENDE O LED  
 }else//SENÃO, FAZ 
  { digitalWrite(pinoLed, LOW); //APAGA O LED 
 } 
}

 

Hardware

Elemento de vibração do sensor:

É um cilindro com uma esfera metálica em seu interior e no momento em que o sensor detectar vibração, a esfera se movimentará desfazando o contato com os terminais do sensor, assim sabemos que detectou vibração fora do comum.

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o sensor de vibrações. Veja também o tutorial "SENSOR DE SOM COM ARDUINO: ACENDENDO UMA LÂMPADA" em nosso portal. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

 


Sensor de Movimento de Cabeça – ITG3205 + ADXL345 + HMC5883L

GY-85 – SENSOR IMU – ITG3205 + ADXL345 + HMC5883L

Neste tutorial aprenderemos sobre o Sensor de Movimento de Cabeça GY-85. Este, no que lhe concerne, é muito utilizado em controles em jogos de videogame. Visualizaremos como este pequeno componente funciona e desenvolveremos uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o Sensor IMU — GY-85?

O sensor IMU é utilizado como dito anteriormente para projetos vestíveis(wearables) para movimentação. Contudo, ele utiliza 3 sensores em uma mesma placa: acelerômetro, giroscópio e magnetômetro. 

- Funcionamento

Primeiramente, o sensor de movimento IMU(Inertial Measurement Unit) possui 9 eixos acoplados a ele, sendo estes: 3 eixos acelerômetros, 3 eixos giroscópio e 3 eixos campo magnético. Com estes eixos é possível detectar qualquer tipo de movimento que efetuar com o sensor. Os sensores utilizam da força da gravidade, de seus polos e das direções X, Y e Z para realizar as suas funcionalidades, cada um para determinar algo distinto. Com a gravidade da terra e com os eixos X, Y e Z destes sensores é possivel saber o posicionamento espacial, a aceleração, a direção e o sentido daquele que utiliza o sensor como por exemplo um smartphone.

- Campo Magnético 

Graças a um efeito de dínamo a terra possui um campo magnético e como consequencia nos podemos usar ele em nossas tecnologias. Como sabemos o núcleo líquido de ferro que se movimenta cria correntes elétricas no interior da terra, enquanto a rotação da Terra em seu próprio eixo faz com que essas correntes gerem um campo magnético gigante, o qual nos orientou por muito tempo com o auxilio da bussola e nos orienta até hoje em direção ao futuro, nos ajudando no desenvolvimento das tecnologias.

Imagem do campo magnético da terra

O fato dos campos magnéticos irem do polo sul até o polo norte faz com que a terra seje considerada um imã. O sensor IMU utiliza do campo magnético, da força gravitacional e dos circuitos integrados para identificar seu posicionamento espacial, aceleração, intensidade, distancia e sentido .

- Sensores acoplados:

As funções dessa placa são controladas por 3 Circuitos integrados, cada um com sua função específica:

  • ITG3205 (3-Axis Angular Rate Sensor) – Giroscópio 3 eixos
  • ADXL345 (3-Axis Digital Accelerometer) – Acelerômetro 3 eixos
  • HMC5883L (3-Axis Digital Compass) – Bússola digital / Magnetômetro 3 eixos

- Os terminais deste sensor que serão utilizados são:

  • VCC_IN(+) – Tensão de entrada, entre 3,3 a 5 volts
  • GND(-) – O pino de O V do módulo, que é conectado ao GND do Arduino ou fonte
  • SCL - I2C Serial Clock
  • SDA - I2C Serial Data

Módulo do sensor IMU

 

Mãos à obra — Configurando um sensor IMU

Componentes Necessários

- Montando o projeto:

Mostraremos como utilizar cada sensor ligando-o ao Arduino Uno. Sobretudo, como todos eles utilizam o mesmo barramento I2C, teremos apenas um circuito para todos os programas exemplos. A principio, para a montagem do circuito conectemos o sensor na protoboard. O VCC do sensor é conectado no 5v do arduino, logo após conectaremos o GND do sensor ao GND do arduino. Além disso, o pino SCL do sensor é conectado ao pino A5 do arduino e o pino SDA é conectado ao pino A4 do arduino como mostra o diagrama abaixo:

Diagrama de montagem do sensor IMU

- Biblioteca Wire.h:

Neste tutorial utilizaremos a biblioteca Wire.h responsável por conter as funções necessárias para gerenciar a comunicação entre os dispositivos através do protocolo I2C. Ademais, caso não entenda nada de biblioteca ou como prosseguir, veja o tutorial COMO INSTALAR UMA BIBLIOTECA NO ARDUINO IDE” no portal vida de silício.

- Programando o Arduino:

Agora vamos conectar o arduino no computador e abrir a IDE arduino.  Escreva o programa abaixo na IDE e compile o programa para o seu arduino.

Antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.
A primeira coisa que você notará é que ao alimentar o sensor não há nenhuma indicação de que ele está ligado. A placa não possui nenhum led , logo utilizaremos um programa chamado I2C Scanner (http://playground.arduino.cc/Main/I2cScanner) para efetuar um rastreamento no barramento I2C e garantir que o sensor esteja adequadamente ligado ao Arduino. Carregue o I2C Scanner:

#include <Wire.h>
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}
void loop()
{
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
  delay(5000);           // wait 5 seconds for next scan
}

Se as conexões estiverem corretas, ao abrir o serial monitor teremos a seguinte tela, mostrando os endereços dos dispositivos detectados:

O I2C Scanner é um programa que serve não apenas para este módulo, mas também para qualquer outro dispositivo I2C conectado ao barramento. Além disso, Tenha este programa sempre à mão para descobrir o endereço do dispositivo ou simplesmente para verificar se ele está se comunicando com o Arduino.

Imagem do circuito do sensor IMU

- Acelerômetro 3 eixos(ADXL345)

Já sabendo o endereço do circuito integrado ADXL345 podemos proseguir. Este circuito é um acelerômetro muito utilizado nos telefones celulares, pois é através do acelerômetro que o seu celular detecta a posição do aparelho e permite que você passe horas jogando sem apertar nenhum botão, apenas movimentando o aparelho. Utilize o programa abaixo para testar o ADXL345 (datasheet), cujo endereço I2C é 0x53:

#include <Wire.h>
#define Register_ID 0
#define Register_2D 0x2D
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
#define Register_Z0 0x36
#define Register_Z1 0x37
// Endereco I2C do sensor : 83 em decimal ou 0x53
int ADXAddress = 0x53;  // the default 7-bit slave address
int reading = 0;
int val=0;
int X0,X1,X_out;
int Y0,Y1,Y_out;
int Z1,Z0,Z_out;
double Xg,Yg,Zg;
void setup()
{
  Wire.begin();                
  Serial.begin(9600);    
  delay(100);
  // enable to measute g data
  Wire.beginTransmission(ADXAddress);
  Wire.write(Register_2D);
  Wire.write(8);                //measuring enable
  Wire.endTransmission();     // stop transmitting
}
void loop()
{
  //--------------X
  Wire.beginTransmission(ADXAddress); // transmit to device
  Wire.write(Register_X0);
  Wire.write(Register_X1);
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress,2); 
  if(Wire.available()<=2)   
  {
    X0 = Wire.read();
    X1 = Wire.read(); 
    X1=X1<<8;
    X_out=X0+X1;   
  }
  //------------------Y
  Wire.beginTransmission(ADXAddress); // transmit to device
  Wire.write(Register_Y0);
  Wire.write(Register_Y1);
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress,2); 
  if(Wire.available()<=2)   
  {
    Y0 = Wire.read();
    Y1 = Wire.read(); 
    Y1=Y1<<8;
    Y_out=Y0+Y1;
  }
  //------------------Z
  Wire.beginTransmission(ADXAddress); // transmit to device
  Wire.write(Register_Z0);
  Wire.write(Register_Z1);
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress,2); 
  if(Wire.available()<=2)   
  {
    Z0 = Wire.read();
    Z1 = Wire.read(); 
    Z1=Z1<<8;
    Z_out=Z0+Z1;
  }
  //
  Xg=X_out/256.0;
  Yg=Y_out/256.0;
  Zg=Z_out/256.0;
  Serial.print("X= ");
  Serial.print(Xg);
  Serial.print("       ");
  Serial.print("Y= ");
  Serial.print(Yg);
  Serial.print("       ");
  Serial.print("Z= ");
  Serial.print(Zg);
  Serial.println("  ");
  delay(200);
}

Movimente o sensor e observe a variação dos eixos X, Y e Z  de acordo com a força gravitacional que incide sobre o circuito integrado no serial monitor:

Imagem do serial monitor para o acelerômetro

- Bússola digital(HMC5883L)

O circuito integrado HMC5883L (datasheet) é um instrumento usado para medir a intensidade, direção e sentido de campos magnéticos e possui 3 eixos. É com ele que montamos uma bússola com o Arduino, utilizando como base o programa abaixo, que mostra os valores correspondentes aos eixos X, Y e Z. O endereço I2C do sensor é 0x1E, o qual já achamos anteriormente:

#include <Wire.h>
// Define o endereco do HMC5883L - 0x1E ou 30 em decimal
#define address 0x1E 
void setup()
{
  Serial.begin(9600);
  Wire.begin();
  
  // Inicializa o HMC5883L
  Wire.beginTransmission(address);
  // Seleciona o modo
  Wire.write(0x02); 
  // Modo de medicao continuo
  Wire.write(0x00); 
  Wire.endTransmission();
}
void loop()
{
  int x,y,z; //triple axis data
  
  // Indica ao HMC5883L para iniciar a leitura
  Wire.beginTransmission(address);
  Wire.write(0x03); //select register 3, X MSB register
  Wire.endTransmission();
 
  // Le os dados de cada eixo, 2 registradores por eixo
  Wire.requestFrom(address, 6);
  if(6<=Wire.available())
  {
    x = Wire.read()<<8; //X msb
    x |= Wire.read(); //X lsb
    z = Wire.read()<<8; //Z msb
    z |= Wire.read(); //Z lsb
    y = Wire.read()<<8; //Y msb
    y |= Wire.read(); //Y lsb
  }
  
  // Imprime os vaores no serial monitor
  Serial.print("x: ");
  Serial.print(x);
  Serial.print("  y: ");
  Serial.print(y);
  Serial.print("  z: ");
  Serial.println(z);
  
  delay(250);
}

Da mesma forma que no exemplo anteriores, os valores são mostrados no serial monitor de acordo com o campo magnetico que incide sobre o circuito integrado:

Imagem do serial monitor para a Bússola digital

Entendendo a fundo:

Software

– Definições e variáveis utilizadas no projeto do sensor de movimento de cabeça

A instrução #include<> serve para incluir bibliotecas no algoritmo.

#include <Wire.h>

– Função Setup – Definindo pinos do nosso sensor de movimento de cabeça

 A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. A função  Serial.begin inicia a comunicação serial e define uma velocidade para ela para que possamos visualizar o funcionamento do sensor no serial monitor da IDE arduino. A função Serial.println escreve no serial monitor o texto "I2C Scanner" .

Serial.begin(9600);
Serial.println("\nI2C Scanner");

– Função Loop – Leitura do nosso sensor de movimento de cabeça e Estruturas de decisão

A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Precipuamente, declaramos uma variavel do tipo int e logo depois do "Serial.println" atribuimos o valor 0 a ela. Também declaramos as veriaveis do tipo byte "error" e "address".

void loop(){ 
 byte error, address;  
 int nDevices;   
 Serial.println("Scanning...");   
 nDevices = 0;

Não obstante, a estrutura de repetição for será executada enquanto a variavel declarada anteriormente "address" for menor que 127. Ela inicializa com o valor 1 e a cada ciclo adiciona- se +1.

for(address = 1; address < 127; address++ ){

Similarmente, estrutura de de decisão if será executada caso a condição entre parenteses for verdadeida. No primeiro if caso a variave "error" fo igual a zero a linha de código "Serial.print("I2C device found at address 0x");" será executada.

if (error == 0){       
  Serial.print("I2C device found at address 0x");

Logo depois, caso a variavel "address" for menor que 16 as linhas de código dentro dos colchetes será executada. Irá imprimir o texto "0" e logo após o endereço dos circuitos integrados. Tambem irá imprimir no serial monitor o texto " !" e  vai adicionar +1 a variavel nDevices com o comando "nDevices++".

if (address<16) {        
  Serial.print("0");        
  Serial.print(address,HEX);        
  Serial.println("  !");        
  nDevices++;  
   }

Caso a estutura if com a condição "error == 0" não for verdadeira iremos direto para a estrutura else if. Se for verdadeira, ou seja, a variavel error for igual a quatro a linha "Serial.print("Unknow error at address 0x");" será executada e impressa no serial monitor.

 else if (error==4){    
   Serial.print("Unknow error at address 0x");

Igualmente a estura if, se a variavel "address" for menor que 16 será executado as linhas de código abaixo, imprimindo no serial monitor o texto zero e o endereço dos circuitos integrados.

if (address<16)  {        
  Serial.print("0");       
  Serial.println(address,HEX);    
 }

Agora, caso a variavel "address" for maior que 16, então as estruturas anteriores com a condição "address<16" não serão executadas e a variavel "nDevices" permanecerá com o valor 0. Sendo assim, a estrutura if a seguir será verdadeira e a estrutura "Serial.println("No I2C devices found\n");" será executada. Em contrapartida, se a variavel "address" for menor que 16 de fato, a estrutura else que será executada.

       
    
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
    delay(5000);           // wait 5 seconds for next scan
}

 

Hardware

- ITG3205

O sensor giroscópio de 3 eixos acoplado ao sensor IMU permite entender o posicionamento espacial através da força de gravidade. sendo assim, quando um objeto está em movimento, os sensores de eixo do giroscópio conseguem informar exatamente para qual direção o produto está se movendo. Uma de suas aplicações é em aparelhos smartphones onde detecta quando você gira o aparelho detectando a velocidade angular do aparelho e se está apontado para cima ou para baixo. O que podemos tirar disto é que ele é muito empregado em sistema que necessitam interpretar os movimentos do utilizador.

- ADXL345

O sensor acelerômetro de 3 eixos acoplado ao sensor IMU mede a aceleração através da força de gravidade a que o sensor está sujeito em cada um dos três eixos. Ele mede a inclinação e o movimento. Sendo assim, consegue detectar o movimento de rotação e gestos tais como balançar ou agitar um objeto do qual ele faz parte.

O gráfico (a) representa uma situação onde o acelerômetro se encontra em repouso, pousado numa superfície plana, os valores comunicados pelos sensores serão x= 0, y=0 e z=-1. Já o gráfico (b) representa a rotação do eixo X para baixo, os valores comunicados pelo sensor serão x=1, y=0 e z=0. O grafico (c) representa a rotação do eixo Y, os valores comunicados pelo sensor serão x=0, y=1 e z=0.

- HMC5883L

Sensor magnetômetro de 3 eixos é acoplado ao sensor IMU.  Sendo assim, ele funciona como uma bússola digital e identifica a intensidade, direção e sentido de campos magnéticos . Com o arduino é usado para literalmente nos dar um norte.

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o sensor de movimento IMU. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.


Sensor de Som KY-037: Acendendo LED com arduino

MÓDULO SENSOR DE SOM KY-037: ACENDENDO UM LED COM ARDUINO

 Este tutorial tem como objetivo ensinar a utilizar o sensor de som para acender um LED. Surpreendentemente, vamos automatizar e programar um LED para acender quando o sensor detectar som. Além disso, aprimoraremos os seus conhecimentos sobre programação para arduino utilizando as funções digitalWrite e delay.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o módulo sensor de som?

O sensor de som constitui uma placa de circuito impresso com uma função específica. O módulo faz com que emita pulsos de energia ao detectar som fazendo com que uma lâmpada acenda ou apague.

- Funcionamento

Presipuamente, o sensor realiza a transformação da intensidade das ondas sonoras para tensões de 0 a 5V. Em seguida, o pino de leitura digital manda um sinal de nível lógico alto se uma determinada intensidade do som for atingida. Este sensor em especial possui também um pino analógico para podermos ter diversos valores da intensidade do som.
O sensor de som utiliza o microfone para captar o som, identificando a vibração das ondas no meio e o Trimpot(Potenciômetro) para ajustar a sensibilidade do microfone a essas vibrações.
Este componente possui um potenciômetro com a função de ajustar a sensibilidade do som que queira detectar. Támbem, possui dois leds em sentidos opostos onde um serve para alertar que o módulo está energizado e o outro que a saída está ativa, pois ele detectou som.

 

ATENÇÃO: Entretanto, quando o circuito estiver montado, ao alimentar a placa o LED pode iniciar piscando. Isto indica que você deve ajustar a sensibilidade do sensor no trimpot.

- Os terminais deste sensor são:

  • VCC(+) – Tensão de entrada, entre 3,3 a 5 volts
  • GND(-) – O pino de O V do módulo, que é conectado ao GND do Arduino ou fonte
  • Saida Analogica(A0) – Pino de saída analogica (retorna o valor da intensidade do som captado)
  • Saída Digital(D0)– Pino de saída digital (retorna HIGH ou LOW)

Sensor de Som

Mãos à obra - Fazendo um pisca-pisca usando o Arduino

Componentes Necessários

 

- Montando o projeto:

Neste tutorial montaremos um circuito para acender um LED, porem ao contrário de muitos outros neste utilizaremos da programação para transformar um simples acender de LED em um pisca-pisca quando o sensor de som detectar vibrações. Monte conforme o projeto abaixo:

Diagrama de montagem do sensor de som

A perna maior dos LEDs esta ligada aos pinos das portas digitais(sendo estes, verde ligada a porta 7, amarelo ligada a porta 6 e vermelho ligada a porta 5) e a perna menor no resistor de 470 ohm. O resistor no que lhe concerne esta ligado ao GND da protoboard. Enfim, no circuito do sensor o VCC está ligado ao 5V do arduino, o GND esta também ligado no GND(-) da protoboard e a saída digital(D0) esta ligada ao pino 12 do arduino.

Imagem do circuito do sensor de som

- Programando o Arduino:

Com o circuito montado vamos conectar o arduino no computador e abrir a IDE arduino para configurar o programa. Escreva programa abaixo na IDE e compile o programa para o seu arduino. Vamos comentá-lo mais adiante.

Antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#define led1 7 // O led1 esta definido no pino 7
#define led2 6 // O led2 esta definido no pino 6
#define led3 5 // O led3 esta definido no pino 5
#define sensor 12 // O pino 12 contem o sensor de som
int  valor_A0 = 9; // Cria uma variável do tipo inteiro(int) chamada valor_A0 e atribui-lhe o valor 9
int aceso = 0; // Cria uma variável do tipo inteiro(int) chamada aceso e atribui-lhe o valor 0
void setup() {
  Serial.begin(9600); //Inicializa a comunicação serial e estabelece uma velocidade para ela
  pinMode(led1, OUTPUT); // Define o pino 7 onde esta o led1 como saída
  pinMode(led2, OUTPUT);  // Define o pino 6 onde esta o led2 como saída
  pinMode(led3, OUTPUT);  // Define o pino 5 onde esta o led3 como saída
  pinMode(sensor, INPUT); // Define o pino 12 como saída
}

void loop() {
  valor_A0 = digitalRead(sensor);// A variavel  valor_A0 recebe a leitura digital do pino 12 onde o sensor esta
  Serial.print("\nSaida A0: "); // Imprime no serial monitor "\nSaida A0: "
  Serial.print(valor_A0); // Imprime no serial monitor o valor que a variável valor_A0 recebeu
  delay(500); // O delay espera 500 milissegundos
   if(valor_A0 == HIGH){ // é detectada a presença de som
    switch(aceso){ // switch necessário para definir se o led vai acender ou apagar
      case 0: // caso o led esteja apagado...
        digitalWrite(led1, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led3, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led2, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led3, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led1, HIGH); // ...ele se apagará
        delay(1000);
        digitalWrite(led2, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led3, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led2, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led3, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led1, HIGH); // ...ele se apagará
        delay(1000);
        digitalWrite(led2, LOW); // ...ele se apagará
        delay(500);
        digitalWrite(led3, HIGH); // ...ele se acenderá
        delay(1000);
        digitalWrite(led2, HIGH); // ...ele se apagará
        delay(1000);
        aceso = 1; // atribuição para definir que o led está aceso
        break;
      case 1: // caso o led esteja aceso...
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led3, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led1, HIGH); // ...ele se acenderá
        delay(500);
        digitalWrite(led2, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led3, HIGH); // ...ele se apagará
        delay(500);
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led2, HIGH); // ...ele se apagará
        delay(500);
        digitalWrite(led1, HIGH); // ...ele se acenderá
        delay(500);
        digitalWrite(led1, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led3, LOW); // ...ele se apagará
        delay(1000);
        digitalWrite(led2, LOW); // ...ele se apagará
        delay(100);
        aceso = 0; // atribuição para definir que o led esta apagado
        break;
    }
  }
}

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

Imagem do circuito do sensor de som funcionando

Em seguida, regule o potenciômetro para detectar as vibrações desejadas:

Imagem do regulador de vibrações

Assim, abra o Monitor serial e visualize o funcionamento do sensor:

Monitor serial

 

Entendendo a Fundo:

Software

– Definições e variáveis utilizadas no projeto

A instrução #define apenas associa os numeros dos pinos do arduino a nomes referente aos componentes conectados nestes pinos.  Semelhantemente, nas variáveis declaradas com o tipo int são atribuídas a elas valores escolhidos pelo programador.

#define led1 7 // O led1 esta definido no pino 7
#define led2 6 // O led2 esta definido no pino 6
#define led3 5 // O led3 esta definido no pino 5
#define sensor 12 // O pino 12 contem o sensor de som
int  valor_A0 = 9; // Cria uma variável do tipo inteiro(int) chamada valor_A0 e atribui-lhe o valor 9
int aceso = 0; // Cria uma variável do tipo inteiro(int) chamada aceso e atribui-lhe o valor 0

– Função Setup – Inicialização da comunicação serial e definindo pinos

A função setup é aquela que irá rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. O serial.begin(9600) inicializa a comunicação serial, assim possibilitando que visualizemos as intensidades do som no Monitor serial da IDE arduino. A função pinMode define quais dos pinos serão entradas e quais serão as saídas.

void setup() {
  Serial.begin(9600); //Inicializa a comunicação serial e estabelece uma velocidade para ela
  pinMode(led1, OUTPUT); // Define o pino 7 onde esta o led1 como saída
  pinMode(led2, OUTPUT);  // Define o pino 6 onde esta o led2 como saída
  pinMode(led3, OUTPUT);  // Define o pino 5 onde esta o led3 como saída
  pinMode(sensor, INPUT); // Define o pino 12 como saída
}

– Função Loop – Usando o monitor serial, leitura do nosso sensor de som e Estruturas de decisão

Por analogia, a função loop ao contrário da setup rodará tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Então, na variável valor_A0 será atribuído a leitura digital(digitalRead) do pino do sensor. A função Serial.print imprime no monitor serial primeiro o texto entre aspas e depois o valor que esta na variável valor_A0. Logo após, a função delay(500) faz com que esta impressão do texto e valor seja mais lenta dando tempo para a visualização.

void loop() {
valor_A0 = digitalRead(sensor);// A variável  valor_A0 recebe a leitura digital do pino 12 onde o sensor esta
Serial.print("\nSaida A0: "); // Imprime no serial monitor "\nSaida A0: "
Serial.print(valor_A0); // Imprime no serial monitor o valor que a variável valor_A0 recebeu delay(500); // O delay espera 500 milissegundos

O if é uma estrutura de decisão onde entre parenteses esta a condição para ser verdadeiro, ou seja, se a variável valor_A0 for igual a HIGH significa que detectou som e ele executará a estrutura swich - case. A estrurura ”switch(aceso)” determina qual dos dois cases serão executados. Se na variável aceso estiver atribuído a ela o valor 0 será o primeiro case, em contrapartida se estiver atribuído a ela o valor 1 será o segundo.
O digitalWrite escreve no pino do led nível logico HIGH ou LOW. Já o delay espera 1000 milissegundos para executar a próxima linha do código.

if(valor_A0 == HIGH){ // é detectada a presença de som
   switch(aceso){ // switch necessário para definir se o led vai acender ou apagar
     case 0: // caso o led esteja apagado...
       digitalWrite(led1, HIGH); // ...ele se acenderá
       delay(1000);
       digitalWrite(led3, HIGH); // ...ele se acenderá
       delay(1000);
       digitalWrite(led1, LOW); // ...ele se apagará
       delay(500);

Hardware

– Microfone

Microfones são transdutores sonoro-elétricos, ou seja, são dispositivos que convertem energia sonora em energia elétrica através de uma membrana flexível chamada diafragma. Este diafragma entra em vibração ao receber ondas sonoras. Através de um processo específico esta vibração produz um sinal elétrico que é depois amplificado e filtrado em aparelhos eletrônicos.

– LM393D

É um circuito integrado com amplificadores operacionais, capaz de executar tarefas avançadas.

Diagrama do Circuito Integrado LM393D

Acima temos o diagrama do circuito integrado LM393D com pinos saída, pinos de entrada com dois negativos e dois positivos, um pino do vcc e outro do GND . Estes pinos devem ser utilizados conforme a aplicação que queira realizar com o circuito integrado. No projeto ele é responsável por amplificar os som do ambiente em 100 vezes.

Considerações finais:

Neste tutorial mostramos como utilizar o sensor de som, que por sua vez, tem uma aplicação bastante interessante na automação onde utilizamos para energizar e desenergizar uma lâmpada como vemos no tutorial "ACENDENDO UMA LÂMPADA COM VIBRAÇÕES SONORAS". Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.