Uma solução simples e ecomímica, para controle de dois motores de corrente continua é o modulo relé de 4 canais. Com ele é possível controlar o sentido de rotação de dois motores o suficiente para construir um robô com três rodas, duas de tração e um rodizio, por exemplo, com controle de direção. O "porém" do modulo relé é que não é possível controle de velocidade sem o uso de um transistor de potencia ou um mosfet adicional.
Um exemplo de modulo rele 4 canais (4 relés). Ele possi 4 relé de 1 polo x 2 posições:
Na ponte H essa caracteristica é aproveitada para controlar do sentido de rotação desses motores
Para facilitar a compreensão considere que montaremos um carrinho com parte de tração como a figura abaixo:
Usaremos o arduino como elemento principal de controle:
O primeiro passo é fazer as ligações necessárias no modulo relé 4 canais para que ele seja utilizado como duas pontes H:
Em seguida ligar os motores. Nesse primeiro momento sem se preocupar com a polarização:
O próximo passo é ligar parcialmente ao arduino para ajustar o sentido de rotação. Nessa etapa não é necessário programa rodando no Arduino:
Após os testes, completar as ligações com o arduino:
O código para teste é bastante simples. Segue abaixo comentado. As funções "frete", "re", "direita", "esquerda" e "parar" podem ser aproveitadas para qualquer projeto dessa natureza. Um detalhe importante sobre o módulo que esta sendo usado é que ele deve receber sinal de nível baixo (0V) em um dos pinos IN1, IN2, IN3 ou IN4 para acionar o relé correspondente.
/* funçao teste carrinho: vai para frete por 2 segundos vai para tras pro 2 segundos vai para esquerda por 2 segundos vai para a direita por 2 segundos para por 2 segundos pra repetir é necessario pressionar o botão reset do arduino */ int IN1= 5; int IN2= 4; int IN3= 3; int IN4= 2; void setup() { //declara pinos como saida pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); // chama a funçao frete passando parametro em milesegundos // anda para frete por 2 segundos frete(2000); // anda para traz por 2 segundos re(2000); // vira para direita por 2 segundos direita(2000); // anda para esquerda por 2 segundos esquerda(2000); // Para por 2 segundos parar(2000); } void loop() { // como deve execultar uma apenas uma vez para teste a funçao loop esta vazia // o programa foi colocado na funçao setup } // função frente void frete(int tmp) { // MOTOR ESQUERDO FRETE digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); // MOTOR DIREITO FRETE digitalWrite(IN3,HIGH ); digitalWrite(IN4,LOW); delay(tmp); } // função re void re(int tmp) { // MOTOR ESQUERDO RE digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); // MOTOR DIREITO RE digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delay(tmp); } // função esquerda void esquerda(int tmp) { // MOTOR ESQUERDO RE digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); // MOTOR DIREITO FRETE digitalWrite(IN3,HIGH ); digitalWrite(IN4,LOW); delay(tmp); } // função direita void direita(int tmp) { // MOTOR ESQUERDO FRENTE digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); // MOTOR DIREITO RE digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delay(tmp); } // função parar void parar(int tmp) { // MOTOR ESQUERDO PARADO digitalWrite(IN1,HIGH); digitalWrite(IN2,HIGH); // MOTOR DIREITO PARADO digitalWrite(IN3,HIGH); digitalWrite(IN4,HIGH); delay(tmp); }