Drivers - LAICA-IFRN/Robotica GitHub Wiki
A ponte H é um driver usado em motores de corrente contínua. Basicamente ele permite que um motor funcione no sentido horário e no anti-horário. Seu nome faz jus ao esquema de ligação que lembra um H, já que a carga fica ligada entre quatro chaves, assim como mostrada na figura:
No driver em questão, possui 4 saídas para a ligação de 2 motores DC, sendo OUT1 e OUT2 para um motor e OUT3 e OUT4 para outro motor. Para permitir o funcionamento da placa, é necessário alimentá-la nas entradas VCC e GND. Por Conseguinte, são utilizadas as entradas IN1, IN2, IN3 E IN4 para controlar o sentido em que cada motor irá girar, sendo os terminais IN1 e IN2 para o motor conectado à saída dos pinos OUT1 e OUT2 e os terminais IN3 e IN3 controladores do motor da outra saída. Já a entrada ENA e ENB são responsáveis por receber o sinal PWM, que permite um controle da velocidade do motor.
// Definindo os pinos do motor A
const int motorA_IN1 = 2;
const int motorA_IN2 = 3;
const int motorA_ENA = 4;
// Definindo os pinos do motor B
const int motorB_IN1 = 5;
const int motorB_IN2 = 6;
const int motorB_ENB = 7;
void setup() {
// Inicializando os pinos como saída
pinMode(motorA_IN1, OUTPUT);
pinMode(motorA_IN2, OUTPUT);
pinMode(motorA_ENA, OUTPUT);
pinMode(motorB_IN1, OUTPUT);
pinMode(motorB_IN2, OUTPUT);
pinMode(motorB_ENB, OUTPUT);
}
void loop() {
// Mover motor A para frente
digitalWrite(motorA_IN1, HIGH);
digitalWrite(motorA_IN2, LOW);
analogWrite(motorA_ENA, 255); // Velocidade máxima
// Mover motor B para frente
digitalWrite(motorB_IN1, HIGH);
digitalWrite(motorB_IN2, LOW);
analogWrite(motorB_ENB, 255); // Velocidade máxima
delay(2000); // Tempo de execução
// Parar motores
pararMotores();
delay(1000); // Espera 1 segundo
// Mover motor A para trás
digitalWrite(motorA_IN1, LOW);
digitalWrite(motorA_IN2, HIGH);
analogWrite(motorA_ENA, 255); // Velocidade máxima
// Mover motor B para trás
digitalWrite(motorB_IN1, LOW);
digitalWrite(motorB_IN2, HIGH);
analogWrite(motorB_ENB, 255); // Velocidade máxima
delay(2000); // Tempo de execução
// Parar os motores utilizando uma função
pararMotores();
delay(1000); // Espera 1 segundo
}
void pararMotores() {
digitalWrite(motorA_IN1, LOW);
digitalWrite(motorA_IN2, LOW);
analogWrite(motorA_ENA, 0); // Parar motor A
digitalWrite(motorB_IN1, LOW);
digitalWrite(motorB_IN2, LOW);
analogWrite(motorB_ENB, 0); // Parar motor B
}
O módulo multiplexador é um driver usado com a finalidade de ampliar a quantidade de dispositivos de comunicação I2C em um único barramento, chegando até a 8 componentes por módulo ou 64, quando usado mais de um módulo em cascata. O multiplexador permite endereçar o barramento o qual deseja usar, o que possibilita expandir os canais I2C.
Para utilizá-lo, a alimentação nos pinos VIN e GND com tensões entre 1,65V a 5,5V. Em seguida, requer que seja feita a conexão do barramento I2C do módulo com o Arduino nos pinos SDA e SCL. Por ser possível usar até 8 placas em cascata, é necessário atribuir um endereço/numeração a partir dos pinos A0, A1 e A2 por uma sistema binário, o qual a porta tem valor 1 quando aterrada ao GND, dessa forma, a numeração obedece a tabela a seguir. Feitas as devidas conexões, estão a disposições do usuário 8 canais numerados de SC0 a SC7 e SD0 a SD7. Para a programação, é preciso fazer uso da biblioteca básica do "Wire.H", que tem como objetivo gerenciar os dispositivos I2C.
#include <Wire.h>
// Endereço I2C do TCA9548A
#define TCA9548A_ADDRESS 0x70
// Função para ativar um canal específico no TCA9548A
void tcaSelect(uint8_t channel) {
if (channel > 7) return; // Verifica se o canal está entre 0 e 7
Wire.beginTransmission(TCA9548A_ADDRESS); // Inicia a comunicação com o TCA9548A
Wire.write(1 << channel); // Envia o comando para ativar o canal escolhido
Wire.endTransmission(); // Finaliza a comunicação
}
void setup() {
Wire.begin(); // Inicia a comunicação I2C
Serial.begin(9600); // Inicia a comunicação serial para monitoramento
// Ativa cada canal do TCA9548A
for (uint8_t i = 0; i < 8; i++) {
tcaSelect(i); // Seleciona o canal i
Serial.print("Canal "); // Imprime o número do canal selecionado
Serial.print(i);
Serial.println(" selecionado."); // Mensagem de confirmação
// Aqui você pode adicionar o código para interagir com o dispositivo conectado ao canal
// Por exemplo, ler dados de um sensor ou fazer uma ação.
delay(1000); // Aguarda um segundo antes de mudar para o próximo canal
}
}
void loop() {
// O loop principal está vazio, pois só precisamos testar os canais uma vez no setup. De acordo com a necessidade do usuário, desenvolve-se o código
}
Placas Shields são placas que podem ser acopladas ao Arduino, de forma que fica a cima com o objetivo de melhorar e adicionais capacidades. Cada placa tem uma especialidade diferente, alguns serve para aumentar a quantidade de pinos, a exemplo, outras servem para colocar música, conectar a placa à internet e controlar motores.
Para utilizar, basta acoplar sobre a placa Arduino.