segunda-feira, 3 de março de 2014

Controle de Motor DC com Arduino através da porta Serial

Bem esse esquema de montagem eu peguei no canal do Youtube do Renato Aloi ( http://www.youtube.com/watch?v=UrON9m4Zekk&list=PL05085BAC19CB5DF1&index=8 ), então eu incrementei o código para conseguir o acionamento do motor pela porta Serial.




Esquema Elétrico:






Código:

int motor = 8;
String content = "";
char caracter;

void setup(){
  pinMode(motor, OUTPUT);
  Serial.begin(9600);
  Serial.flush();
}

void ligarMotor(){
    Serial.println("O Motor esta ligado");
    digitalWrite(motor, HIGH);
}

void desligMotor(){
    Serial.println("O Motor esta Desligado");
    digitalWrite(motor, LOW);
}

void loop(){
  Serial.flush();
  while(Serial.available()) {
      caracter = Serial.read();
      content.concat(caracter);
  }
  if (content == "ligar") {
    ligarMotor();
  }
  else if (content == "desligar") {
    desligMotor();
  }
  content = "";
}


Parte do código sobre String tirei deste site:
http://stackoverflow.com/questions/5697047/convert-serial-read-into-a-useable-string-using-arduino

Efeito com Leds e Arduino

Olá pessoal,

A partir de hoje estarei postando minhas experiências com Eletrônica e Arduino aqui neste Blog. A primeira postagem será sobre este efeito com Leds que eu fiz para me divertir.

Segue link do vídeo:


Código:

/*
By Jeorgy Ramalho
01/02/2014
*/

byte ledPin[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // Cria um array para os pinos dos LEDs
int direction = 1;
int currentLED = 0;
int i;

void setup() {
 
  for (int x=0; x<12; x++) { // define todos os pinos como saída
  pinMode(ledPin[x], OUTPUT); }

}

void loop(){
  for(int i=0; i<5; i++){
   pisca();
  }
  for(int i=0; i<5; i++){
   barra();
  }
  for(int i=0; i<5; i++){
   barraInv();
  }
  for(int i=0; i<5; i++){
   colunas();
  }
  for(int i=0; i<5; i++){
   colunasInv();
  }
  for(int i=0; i<5; i++){
   changeLED();
 }
 for(int i=0; i<20; i++){
   ledRandom(ledPin);
  }
}

void pisca(){
  for(int i=0; i<12; i++){
    digitalWrite(ledPin[i], HIGH);
  }
  delay(150);
  for(int i=0; i<12; i++){
    digitalWrite(ledPin[i], LOW);
  }
  delay(150);
}

void ledRandom(byte leds[]){
  for (int x=0; x<12; x++) { // apaga todos os LEDs
    digitalWrite(ledPin[x], LOW);
  }
  int x = random(11);
  digitalWrite(ledPin[x], HIGH);
  delay(100);
  digitalWrite(ledPin[x], LOW);
  delay(100);
}

void changeLED() {
for (int i=0; i<12; i++) { // apaga todos os LEDs
digitalWrite(ledPin[i], LOW);
}
  for(int i=0; i<12; i++){
    digitalWrite(ledPin[currentLED], HIGH); // acende o LED atual
    currentLED += direction; // incrementa de acordo com o valor de direction
    delay(50);
    digitalWrite(ledPin[currentLED], LOW);
    delay(50);
    // altera a direção se tivermos atingido o fim
    if (currentLED == 11) {direction = -1;}
    if (currentLED == 0) {direction = 1;}
   
  }
}

void barra(){
  int lado1 = 5;
  int lado2 = 6;
  for(int i=6; i>0; i--){
      digitalWrite(ledPin[lado1], HIGH);
      digitalWrite(ledPin[lado2], HIGH);
      delay(50);
      lado1--;
      lado2++;
  }
  lado1 = 0;
  lado2 = 11;
  for(int i=6; i>0; i--){
      digitalWrite(ledPin[lado1], LOW);
      digitalWrite(ledPin[lado2], LOW);
      delay(50);
      lado1++;
      lado2--;
  }
}

void barraInv(){
  int lado1 = 0;
  int lado2 = 11;
  for(int i=6; i>0; i--){
      digitalWrite(ledPin[lado1], HIGH);
      digitalWrite(ledPin[lado2], HIGH);
      delay(50);
      lado1++;
      lado2--;
  }
  lado1 = 5;
  lado2 = 6;
  for(int i=6; i>0; i--){
      digitalWrite(ledPin[lado1], LOW);
      digitalWrite(ledPin[lado2], LOW);
      delay(50);
      lado1--;
      lado2++;
  }
}

void colunas(){
  int lado1 = 0;
  int lado2 = 6;
  for(int i=6; i>0; i--){
      digitalWrite(ledPin[lado1], HIGH);
      digitalWrite(ledPin[lado2], HIGH);
      delay(50);
      lado1++;
      lado2++;
  }
  lado1 = 5;
  lado2 = 11;
  for(int i=6; i>0; i--){
      digitalWrite(ledPin[lado1], LOW);
      digitalWrite(ledPin[lado2], LOW);
      delay(50);
      lado1--;
      lado2--;
  }
}

void colunasInv(){
  int lado1 = 5;
  int lado2 = 11;
  for(int i=6; i>0; i--){
      digitalWrite(ledPin[lado1], HIGH);
      digitalWrite(ledPin[lado2], HIGH);
      delay(50);
      lado1--;
      lado2--;
  }
  lado1 = 0;
  lado2 = 6;
  for(int i=6; i>0; i--){
      digitalWrite(ledPin[lado1], LOW);
      digitalWrite(ledPin[lado2], LOW);
      delay(50);
      lado1++;
      lado2++;
  }
}