Postagem em destaque

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Este post é o primeiro de uma série de seis que escrevi tratando de controle de potência e PID (controle proporcional, integral e derivativo...

domingo, 3 de agosto de 2014

Trinket, o menor Arduino-like II

Para testar a nossa plaquinha (depois de rodar o Blink, claro), resolvi acionar um servo.

A lib de servo que vem com o Arduino não rola, porque o ATtiny não tem timer de 16 bits. Para "tocar" um servo precisamos então de uma outra lib, compatível. O povo da Adafruit fez uma, que vc pode baixar daqui. Essa lib tem um pequeno inconveniente: vc tem que chamar a rotina de refresh dela a intervalos de no máximo 20 milissegundos. Vamos analisar cá um exemplo. É o que vem com a lib, simplificado:

#include <Adafruit_SoftServo.h> 
#define SERVO1PIN 0   

Adafruit_SoftServo myServo1;

void setup() {
// Seta a rotina de interrupção (ver depois do loop)
  OCR0A = 0xAF;   
  TIMSK |= _BV(OCIE0A);
  myServo1.attach(SERVO1PIN);
}

void loop()  {
  myServo1.write(0);
  delay(2000);       
  myServo1.write(90);
  delay(2000);       
  myServo1.write(180);
  delay(2000);       
}

// Essa rotina é chamada de 2 em 2ms, então ajustamos para chamá-la a cada 20ms.

SIGNAL(TIMER0_COMPA_vect) {
  counter += 2; 
  if (counter >= 20) {
    counter = 0;
    myServo1.refresh();
    digitalWrite(1,HIGH);
  }
}

Ao rodar o programa, o servo alterna entre as três posições: 0, 90 e 180 graus.

Mole,. não? Nem vou fazer filminho... :)

A ideia foi mostrar que a plaquinha não faz feio mesmo em tarefas de automação. Dá prá controlar pelo menos mais um servo, simultãneamente.