Mostrando postagens com marcador Arduino. Mostrar todas as postagens
Mostrando postagens com marcador Arduino. Mostrar todas as postagens

Ardu5 - Robô Educacional de Programação com Arduino (Integração com Scratch)


Robô com LEDs e Sensor LDR 



🤖 Aprendendo a Programar com Arduino: 

* Inspirado no Projeto do Professor García! 🚀

 

Olá, pessoal! Hoje trago para vocês um emocionante projeto de robô inspirado no trabalho do Professor García: o Robô Ardu5! 

Este robô é uma ótima maneira de aprender a programar com Arduino, e vou explicar todos os detalhes para vocês.

 

🔧 O Projeto:

O Robô com LEDs e Sensor LDR é uma criação incrível que apresenta um design simples e atrativo, perfeito para entusiastas da robótica e programação que desejam dar os primeiros passos no universo do Arduino. O robô possui cinco LEDs: três na barriga de 3mm, (verde, amarelo e vermelho), e dois nos olhos, que adicionam um charme especial ao projeto. Além disso, o robô conta com um sensor LDR (Light Dependent Resistor) posicionado acima da cabeça, que pode ser programado para detectar mudanças de luminosidade no ambiente.

 

🎯 Vantagens do Robô com LEDs e Sensor LDR e Programação com Arduino:

 

Versatilidade: Com cinco LEDs e o sensor LDR, o projeto do Robô proporciona uma experiência de aprendizado diversificada. Os LEDs da barriga por exemplo, permitem simular as luzes de um semáforo, e o sensor LDR possibilita interações com o ambiente, tornando o projeto mais envolvente.

Facilidade de Construção: Embora o projeto tenha algumas alterações referente ao projeto original mencionado, a montagem continua sendo simples e acessível para iniciantes. O uso do Arduino Uno facilita ainda mais o processo.

Aprendizado de Programação: Programar o Robô com LEDs e Sensor LDR é uma experiência educativa e divertida. Os iniciantes podem começar com códigos simples para controlar os LEDs e ler dados do sensor LDR. Conforme ganham confiança, podem explorar conceitos mais avançados.

Integração com Scratch e IDE do Arduino: A flexibilidade de programar o robô tanto na interface Scratch quanto na IDE do Arduino é uma vantagem significativa. Isso permite que jovens aprendizes se envolvam no projeto e aprendam conceitos de programação de forma lúdica.


Materiais necessários

(1) Arduino Uno
(1) PCI Placa de Circuito Impresso perfurado (6cm x 8cm ou 7cm x 9cm)
(1) Impressão da imagem do Ardu5 em papel A4 (couché 120g ou 150g)
(1) LDR 5mm
(2) LEDs vermelhos 5mm ou 10mm (usei 10mm) - Olhos
(3) LED azul, amarelo e verde de 3 mm ou 5mm (usei 5mm)
(1) Resistor de 1K ohm
(5) Resistores de 330 ohm
(1) Cabo de Rede par trançado (10cm)
(7) Pinos macho de 90 graus
(1) Pino fêmea.
* Cola de silicone (usada em artesanatos)

Cálculo da resistência para os leds


R = Va - Vled
    I
R = Resistência
Va = Tensão de alimentação (do Arduino)
Vled = Tensão do led
I = Corrente do Led em ampère

Calculando pela menor tensão do led, podemos ver o valor mínimo de resistência para cada led, que é de 160r:

R = 5V - 1.8V =  3.2V = 160Ω (NO MÍNIMO)


Polaridade dos LED´s












Pinos do Arduino

        Pin D8 =  LDR
        Pin D9 = led verde (5mm)
        Pin D10 = led amarelo (5mm)
        Pin D11 = led vermelho (5mm)
        Pin D12 = led olho direito (10mm)
        Pin D13 = led olho esquerdo (10mm)
        Pin Gnd = Terra 

OBSERVAÇÕES:


•A ligação dos 5 LEDs deve respeitar a polaridade, sempre a perna negativa ou mais curta voltada para a parte superior do Robô Ardu5.
• Os 6 resistores e o LDR não têm polaridade
•O LDR deve ser soldado na cabeça do robô.
•Os 7 pinos machos devem ser soldados à esquerda dos 8 orifícios dos pés do Ardu5.
•O único pino fêmea é soldado no orifício à direita dos pés Ardu5.


ARQUIVOS PARA DOWNLOAD


Imprimir em tamanho A4 (papel couché)
Desenho do Ardu5 está em escala real para ser recortado 
(8cm x 5,5cm) e colado na placa de circuito impresso.







Aulas usando o Scratch (S4A) do Professor Garcia


CONTINUA ABAIXO, (CLIQUE EM "Mais informações")

Usando uma matriz de LEDs 8 x 8 (1088AS) com Arduino Uno COM MAX7219

 

    Como criar 'Evil Eyes' (olhos malignos) animados usando um Arduino Uno e duas matrizes de LED vermelho 8x8 com chip driver MAX7219.
    O design é tal que uma animação pode ser criada de forma rápida e simples usando o Microsoft Excel para desenvolver graficamente cada quadro animado, gerar automaticamente o código 'C', 'soltá-lo' em um esboço de estrutura (EvilEyes2.ino) e fazer a compilação para visualizar os resultados da animação ao vivo em segundos. 

Uma vez que a animação está correta, muitas animações podem ser combinadas para execução assíncrona em um esboço de estrutura separado (EvilEyesN.ino) para usar mais leds.




Nesse projeto usei os seguintes componentes:

Baixe a biblioteca para o Arduino LedControl no GitHub:




Conexões:




As partes são conectadas como mostrado acima, 'encadeadas' da esquerda para a direita em grupos de dois. No software, a posição 1 está à esquerda, movendo-se para a direita de forma incremental.

Nota 1: Lembre-se de que o Arduino alimenta a parte inferior da matriz de LED (IN) e o topo da matriz de LED (OUT) alimenta a parte inferior da próxima matriz de LED (IN) e assim por diante etc.

Referência:

Instructables Steve Quinn


Vídeo Tutorial do Excel (Youtube)

O vídeo acima fornece uma visão geral 'muito' breve de como criar a animação.






OBS: No código no final dessa postagem, já tem uma animação pronta, caso queira mudar, siga os passos abaixo:

1. Abra a planilha 

2. Clique na aba 'Source'. Para cada par de cores de 'Olhos', tem o pixel VERMELHO correspondente na matriz de LED 8x8 para que seja iluminado para este quadro de animação. 

3. Uma vez concluído, vá para a aba 'Detais' e preencha quantas animações você gostaria de codificar. Em seguida, pressione o botão 'Generate Code'.

4. Após a conclusão da geração, a planilha muda para a aba 'Code'. Basta pressionar Ctrl-A para selecionar tudo e, em seguida, Ctrl-C para copiar todo o código para a área de transferência.

5. Abra a IDE do Arduino. Em seguida, cole por cima do código existente. Ctrl-V. 

6. Crie sua animação juntando vários quadros em um 'filme' (você só precisa usar o olho esquerdo como referência, o quadro escolhe automaticamente a próxima entrada na matriz para o olho direito), escolhendo quanto tempo deseja exibir o quadro e o brilho que você deseja que ele seja exibido na matriz 8x8.

7. Compile.

8. Repita os passos 6 e 7 até estar satisfeito com o seu 'filme'.

As instruções completas estão na planilha na aba marcada como 'Details'.

Observação: Para que a geração automática de código funcione, a planilha precisará ter as macros ativadas. Se você está preocupado com o VBA, mantenha as macros desativadas, abra a planilha e pressione Alt-F11. O editor VBA será aberto e você pode se certificar de que não há nada de errado no código.

SOBRE O CÓDIGO

Tem dois códigos:
O código EvilEyes2 é para usar com 2 matrizes de leds e o código EvilEyesN é para 3 ou mais.

Importante observar que no código original desses links, talvez seja necessário alterar uma parte do código, onde está escrito:

'prog_uchar' troque por 'const unsigned char'.

No arquivo EvilEyes2.ino, está na linha 69

e no arquivo EvilEyesN.ino está na linha 103.

Isto é devido a atualização do Arduino IDE


Montando o Filme

Um filme é apenas uma sequência de quadros animados;

A sequência de quadros é mantida em uma matriz de 'frames' 

('frameType' no esboço) ou 'movie' ('frameType movie[ ]' no esboço).

Cada 'frameType' tem três parâmetros:

int frameCount; // Um ​​ponteiro para o array contendo as animações que você acabou de projetar.

int frameDelay; // Um ​​valor de atraso em milissegundos indicando quanto tempo exibir este determinado quadro.

frameLuminance; // um valor 0...15 indicando o brilho para exibir este quadro.

Portanto, um filme é uma coleção de quadros;



Veja também um tutorial Matriz de Leds 8x8 SEM MAX7219
https://laboratoriomaker.blogspot.com/2023/02/usando-uma-matriz-de-leds-8-x-8-1088as.html



Código para o par de olhos:


Proteus Software - Sensor Ultrassônico HC-SR04 com LCD 16X2 I2C

 


Baixe aqui:
Projeto no Proteus 8.3 SP2 (Arquivo pdsprj)

Biblioteca do Ultrassom para o Arduino (Arquivo HEX, LIB e IDX)
Copie para a pasta: C:\Documentos\Arduino\libraries\Ultrasonic

Biblioteca do LiquidCrystal_I2C (Arquivo ZIP)

Biblioteca Wire (Arquivo ZIP)

Simulino nesta página:
https://laboratoriomaker.blogspot.com/2020/09/proteus-software-library-simulino-e.html


Para instalar o arquivo compactado do I2C:
No programa do Arduino, clique em: Sketch\Incluir Biblioteca\Adicionar biblioteca .ZIP


Para instalar a biblioteca Wire.h, coloque a pasta "Wire" dentro da pasta:
C:\Program Files (x86)\Arduino\libraries




Library do Ultrassom para o Proteus (Arquivo LIB e IDX)
Após efetuar o download, copiar os arquivos UltrasonicTEMP.IDX e UltrasonicTEMP.LIB para uma dessas pastas (dependendo da sua instalação):

C:\Arquivos de Programas\Labcenter Electronics\Proteus 8 Professional\Data\LIBRARY
C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\LIBRARY
C:\Program Files\Labcenter Electronics\Proteus 8 Professional\LIBRARY
C:\ProgramData\Labcenter Electronics\Proteus 8 Professional\LIBRARY (Mostrar arquivos ocultos)



Código dos componentes no Proteus:
LCD 16x2: LM016L
i2C: PCF8574

Configuração do Sensor no Proteus
Dê um duplo clique em cima da figura do Sensor no Proteus:


Indique o local onde está o arquivo UltraSonicTEP.HEX da biblioteca do arduino:


Configuração do Arduino Mega no Proteus
Dê um duplo clique em cima da figura do Arduino Mega no Proteus:


Indique o local onde está o arquivo gerado pelo arduino em Program File:


O local pode ser encontrado aqui no programa do arduino:




Código para o programa do Arduino:


#include <Ultrasonic.h> //INCLUSÃO DA BIBLIOTECA ULTRASSOM
#include <LiquidCrystal_I2C.h> //INCLUSÃO DA BIBLIOTECA LCD I2C  
#include <Wire.h> //INCLUSÃO DE BIBLIOTECA WIRE PROTOCOLO I2C       
                            
LiquidCrystal_I2C lcd(0x20, 16, 2);  //Inicializa o display no endereco 0x20 para 16 caracteres e 2 linhas no display
const int trigPin = 30; //trig pino conexão 
const int echoPin = 31;  //echo pino conexão
//Inicializa o sensor nos pinos definidos acima
long duration;
int distanceCm;
float liquid;
                                                                                                            
void setup() {     
lcd.begin(16,2);                                                   
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lcd.setCursor(0,0);
lcd.print("   Medidor de   ");
lcd.setCursor(0,1);
lcd.print("   distancia   ");
delay(800);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("   Laboratorio   ");
lcd.setCursor(0,1);
lcd.print("      Maker      ");
delay(800);
lcd.clear();
}
void loop() {   //LOOP DO PROGRAMA
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm= duration*0.034/2;                                                                                 
lcd.setCursor(0,0);                                                 
lcd.print("    Medindo    ");
delay(10);
lcd.setCursor(0,1);
lcd.print("Distancia:");
lcd.print(distanceCm);
lcd.print(" Cm ");
delay(10);
}


Proteus Software - Sensor Ultrassônico HC-SR04

 

Baixe aqui:
Projeto no Proteus 8.3 SP2 (Arquivo pdsprj)

Biblioteca do Ultrassom para o Arduino (Arquivo HEX, LIB e IDX)
Copie para a pasta: C:\Documentos\Arduino\libraries\Ultrasonic

Após efetuar o download, copiar os arquivos UltrasonicTEMP.IDX e UltrasonicTEMP.LIB para uma dessas pastas (dependendo da sua instalação):

C:\Arquivos de Programas\Labcenter Electronics\Proteus 8 Professional\Data\LIBRARY
C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\LIBRARY
C:\Program Files\Labcenter Electronics\Proteus 8 Professional\LIBRARY
C:\ProgramData\Labcenter Electronics\Proteus 8 Professional\LIBRARY (Mostrar arquivos ocultos)



Configuração do Terminal Virtual no Proteus:


Dê um duplo clique em cima da figura do Terminal Virtual:
Configure para: 9600 e clique em OK.




Configuração do Sensor no Proteus
Dê um duplo clique em cima da figura do Sensor:

Indique o local onde está o arquivo UltraSonicTEP.HEX da biblioteca do arduino:



Configuração do Arduino Mega no Proteus
Dê um duplo clique em cima da figura do Arduino Mega:

Indique o local onde está o arquivo gerado pelo arduino em Program File:

O local pode ser encontrado aqui:











Código Arduino:


#include <Ultrasonic.h>

 

//Define os pinos para o trigger e echo

#define pino_trigger 30

#define pino_echo 31

 

//Inicializa o sensor nos pinos definidos acima

Ultrasonic ultrasonic(pino_trigger, pino_echo);

 

void setup()

{

  Serial.begin(9600);

  Serial.println("Lendo dados do sensor...");

}

 

void loop()

{

  //Le as informacoes do sensor, em cm e pol

  float cmMsec, inMsec;

  long microsec = ultrasonic.timing();

  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);

  inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);

  //Exibe informacoes no serial monitor

  Serial.print("Distancia em cm: ");

  Serial.print(cmMsec);

  Serial.print(" - Distancia em polegadas: ");

  Serial.println(inMsec);

  delay(1000);

}

Proteus Software - Display de 7 Segmentos


Arquivo Proteus 8.3 SP2

Arquivo Proteus 8.3 SP2


 

Código Arduino:


// Primeiramente setamos os 7 pinos dos segmentos

const int A = 22;
const int B = 23;
const int C = 24;
const int D = 25;
const int E = 26;
const int F = 27;
const int G = 28;
const int PT = 29; // setamos o ponto do display

boolean ligaPonto = false;

// Variaveis liga e desliga p/ display 7 segmentos
//const int l = 1, d = 0; // Display 7 segmentos (catodo comum)
const int l = 0, d = 1; // Display 7 segmentos (anodo comum)


void setup(){

// seta todos as portas que estão os leds do display como saída

pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(PT, OUTPUT);

}


void loop(){

//acende os leds que representam o número 0

digitalWrite(A, l);
digitalWrite(B, l);
digitalWrite(C, l);
digitalWrite(D, l);
digitalWrite(E, l);
digitalWrite(F, l);
digitalWrite(G, d);
blinkDP(); // Função para piscar o ponto 2 vezes


//acende os leds que representam o número 1

digitalWrite(A, d);
digitalWrite(B, l);
digitalWrite(C, l);
digitalWrite(D, d);
digitalWrite(E, d);
digitalWrite(F, d);
digitalWrite(G, d);
blinkDP();


//acende os leds que representam o número 2

digitalWrite(A, l);
digitalWrite(B, l);
digitalWrite(C, d);
digitalWrite(D, l);
digitalWrite(E, l);
digitalWrite(F, d);
digitalWrite(G, l);
blinkDP();


//acende os leds que representam o número 3

digitalWrite(A, l);
digitalWrite(B, l);
digitalWrite(C, l);
digitalWrite(D, l);
digitalWrite(E, d);
digitalWrite(F, d);
digitalWrite(G, l);
blinkDP();


//acende os leds que representam o número 4

digitalWrite(A, d);
digitalWrite(B, l);
digitalWrite(C, l);
digitalWrite(D, d);
digitalWrite(E, d);
digitalWrite(F, l);
digitalWrite(G, l);
blinkDP();


//acende os leds que representam o número 5

digitalWrite(A, l);
digitalWrite(B, d);
digitalWrite(C, l);
digitalWrite(D, l);
digitalWrite(E, d);
digitalWrite(F, l);
digitalWrite(G, l);
blinkDP();


//acende os leds que representam o número 6

digitalWrite(A, d);
digitalWrite(B, d);
digitalWrite(C, l);
digitalWrite(D, l);
digitalWrite(E, l);
digitalWrite(F, l);
digitalWrite(G, l);
blinkDP();



//acende os leds que representam o número 7

digitalWrite(A, l);
digitalWrite(B, l);
digitalWrite(C, l);
digitalWrite(D, d);
digitalWrite(E, d);
digitalWrite(F, d);
digitalWrite(G, d);
blinkDP();


//acende os leds que representam o número 8digitalWrite(A, l);

digitalWrite(B, l);
digitalWrite(C, l);
digitalWrite(D, l);
digitalWrite(E, l);
digitalWrite(F, l);
digitalWrite(G, l);
blinkDP();


//acende os leds que representam o número 9

digitalWrite(A, l);
digitalWrite(B, l);
digitalWrite(C, l);
digitalWrite(D, d);
digitalWrite(E, d);
digitalWrite(F, l);
digitalWrite(G, l);
blinkDP();

}

void blinkDP() { // Faz o DP piscar 2 vezes.

for (int i=0; i<=3; i++) {
if (ligaPonto) {
digitalWrite(PT, l);
} else {
digitalWrite(PT, d);

}

ligaPonto = !ligaPonto;

delay(300);

}



}

Proteus Software - LCD 16x2 com i2C

 




Projeto do Proteus AQUI
versão do Proteus 8.3 SP2


Código dos componentes no Proteus:
LCD 16x2: LM016L
i2C: PCF8574







LCD 16x2: LM016L


ARES

ISIS



i2C: PCF8574

ARES

ISIS
    






Detalhe do i2C:

imagem: https://www.arduinoecia.com.br/modulo-i2c-display-16x2-arduino/


imagem: https://www.arduinoecia.com.br/modulo-i2c-display-16x2-arduino/


O código padrão do I2C é 0x27, mas pode ser alterado.




Configurando o programa do Arduino:
clique em Arquivo\Preferências



Baixe a biblioteca do I2C:
Sketch\Incluir Biblioteca\Gerenciar Bibliotecas...



Digite na busca: LiquidCrystal_I2C e clique em "instalar"





ou baixe as bibliotecas AQUI
Simulino nesta página:
https://laboratoriomaker.blogspot.com/2020/09/proteus-software-library-simulino-e.html


Para instalar o arquivo compactado do I2C:
No programa do Arduino, clique em: Sketch\Incluir Biblioteca\Adicionar biblioteca .ZIP


Para instalar a biblioteca Wire.h, coloque a pasta "Wire" dentro da pasta:
C:\Program Files (x86)\Arduino\libraries




Código do Arduino:

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

LiquidCrystal_I2C lcd(0x20, 16, 2); //Inicializa o display no endereco 0x20 para 16 caracteres e 2 linhas no display

void setup() {
  lcd.begin (16, 2); //SETA A QUANTIDADE DE COLUNAS(16) E O NÚMERO DE LINHAS(2) DO DISPLAY
  lcd.setBacklight(HIGH); //LIGA O BACKLIGHT (LUZ DE FUNDO)
}

void loop() {
  lcd.setCursor(0, 0); //SETA A POSIÇÃO DO CURSOR
  lcd.print("Arduino LCD 16X2"); //IMPRIME O TEXTO NO DISPLAY LCD
  lcd.setCursor(0, 1); //SETA A POSIÇÃO DO CURSOR
  lcd.print("    COM I2C     "); //IMPRIME O TEXTO NO DISPLAY LCD
  delay(2000); //INTERVALO DE 2 SEGUNDOS
  lcd.setCursor(0, 0); //SETA A POSIÇÃO DO CURSOR
  lcd.print("  Laboratorio   "); //IMPRIME O TEXTO NO DISPLAY LCD
  lcd.setCursor(0, 1); //SETA A POSIÇÃO DO CURSOR
  lcd.print("     Maker      "); //IMPRIME O TEXTO NO DISPLAY LCD
  delay(2000); //INTERVALO DE 2 SEGUNDOS
}




Após VERIFICAR o código no programa do arduino, peque o endereço com final "hex", como mostra na figura abaixo:




OBS: Se o nome do usuário tem acento, como é o meu caso, você terá que ir
na pasta pra pegar o endereço:
C:\Users\Patrícia\AppData\Local\Temp\arduino_build_67624\HelloWorld.pde.hex
esse endereço é só um exemplo


Cole na configuração do Arduino (de um duplo clique na figura do Arduino) no Proteus e clique em OK:





Postagens mais visitadas