sexta-feira, 20 de outubro de 2017

Sexta-Feira 13 Parte V - Um Novo Começo

Então, aparentemente a tarefa da Sexta 13 não era sobre sexta-feiras 13...
Mas temos uma nova atividade pra produzir um negócio que pode dar em algo muito legal!

"SMD Fashion" (Ih, f#@&u) fazer uma roupa com detalhes feitos de outros materiais e com algum propósito... Bom, admito logo que tenho alguma vantagem por morar literalmente numa escola de moda (Inclusive digito isso de onde já foi uma das salas de aula à luz da sala de aula/costura atual) mas aí é só pela disponibilidade de material e de alguém que sabe bem dos macetes. Mas ainda assim, tenho eu que criar o que vou fazer, portanto tive que pensar logo no que poderia ser.
Procuro na internet por alguma inspiração, mas a maioria das coisas é para fazer peças femininas mesmo que a partir de peças masculinas e não era bem o que eu queria. Então penso num material que eu tenho sobrando e gostaria de usar, então eu lembrei de um fio de cobre que tenho pra fazer em algum futuro utópico uma "Tesla Coil". Mas o que eu faria com fios de cobre na roupa? Pensei em algum circuito, mas descartei logo, porém a presença de metal na roupa me lembrou da composição de um ceto estilo que eu gosto, então why not?

PS.: Pena que era customização de roupas e não de carros pra mim fazer algo assim:




sexta-feira, 6 de outubro de 2017

Animatrônico - Galeria de imagens


Animatronic Código

#include

int greenLed = 13;
int redLed = 12;
int buzzer = 11;
Servo servo;
int helloLdr = A0;
int foodLdr = A1;
int callibrationPot = A2;

int ZERO = 0;
int HALF = 45;
int FULL = 80;
int EXTR = 120;

int HAPPY = 880;
int ANGRY = 311;

int countH = 0;
int countA = 0;

int deltaT = 2;

void setup() {
  // put your setup code here, to run once:
  pinMode(greenLed, OUTPUT);
  pinMode(redLed, OUTPUT);
  pinMode(buzzer, OUTPUT);
  servo.attach(9);
  pinMode(helloLdr, INPUT);
  pinMode(foodLdr, INPUT);
  pinMode(callibrationPot, INPUT);

  servo.write(ZERO);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (analogRead(helloLdr) < analogRead(callibrationPot)) {
    switch (countH) {
      case 0:
        hello0();
        countH++;
        break;
      case 1:
        hello1();
        countH++;
        break;
      case 2:
        hello2();
        countH = 0;
        break;
    }
    //    digitalWrite(greenLed, HIGH);
    //    digitalWrite(redLed, LOW);
  }
  else if (analogRead(foodLdr) < analogRead(callibrationPot)) {
    switch (countA) {
      case 0:
        food0();
        countA++;
        break;
      case 1:
        food1();
        countA++;
        break;
      case 2:
        food2();
        countA = 0;
        break;
    }
    //    digitalWrite(greenLed, LOW);
    //    digitalWrite(redLed, HIGH);
  }
  else {
    digitalWrite(greenLed, LOW);
    digitalWrite(redLed, LOW);
    noTone(buzzer);
  }
}

void hello0() {
  digitalWrite(greenLed, HIGH);
  servo.write(HALF);
  delay(500 * deltaT);
  tone(buzzer, HAPPY);
  delay(100 * deltaT);
  noTone(buzzer);
  servo.write(ZERO);
  delay(400 * deltaT);
}
void hello1() {
  digitalWrite(greenLed, HIGH);
  servo.write(HALF);
  delay(200 * deltaT);
  servo.write(FULL);
  delay(300 * deltaT);
  tone(buzzer, HAPPY);
  delay(200 * deltaT);
  noTone(buzzer);
  servo.write(ZERO);
  delay(400 * deltaT);
}
void hello2() {
  digitalWrite(greenLed, HIGH);
  servo.write(HALF);
  delay(200 * deltaT);
  servo.write(FULL);
  delay(300 * deltaT);
  tone(buzzer, HAPPY);
  delay(200 * deltaT);
  noTone(buzzer);
  delay(100 * deltaT);
  digitalWrite(greenLed, LOW);
  delay(50 * deltaT);
  digitalWrite(greenLed, HIGH);
  delay(50 * deltaT);
  digitalWrite(greenLed, LOW);
  delay(50 * deltaT);
  digitalWrite(greenLed, HIGH);
  delay(200 * deltaT);
  servo.write(ZERO);
  delay(400);
}

void food0() {
  digitalWrite(greenLed, HIGH);
  servo.write(HALF);
  delay(500 * deltaT);
  tone(buzzer, HAPPY);
  delay(100 * deltaT);
  noTone(buzzer);
  servo.write(EXTR);
  delay(200 * deltaT);
  digitalWrite(greenLed, LOW);
  digitalWrite(redLed, HIGH);
  tone(buzzer, ANGRY);
  servo.write(ZERO);
  delay(500 * deltaT);
}

void food1() {
  digitalWrite(greenLed, HIGH);
  servo.write(HALF);
  delay(500 * deltaT);
  noTone(buzzer);
  servo.write(EXTR);
  delay(200 * deltaT);
  digitalWrite(greenLed, LOW);
  digitalWrite(redLed, HIGH);
  tone(buzzer, ANGRY);
  servo.write(HALF);
  delay(500 * deltaT);
  servo.write(ZERO);
  delay(500 * deltaT);
}

void food2() {
  digitalWrite(redLed, HIGH);
  servo.write(FULL);
  delay(500 * deltaT);
  tone(buzzer, ANGRY);
  servo.write(EXTR);
  delay(200 * deltaT);
  servo.write(FULL);
  delay(500 * deltaT);
  servo.write(EXTR);
  delay(200 * deltaT);
  servo.write(FULL);
  delay(500 * deltaT);
  servo.write(EXTR);
  delay(200 * deltaT);
  servo.write(FULL);
  delay(500 * deltaT);
  servo.write(ZERO);
  delay(500 * deltaT);
}

sexta-feira, 29 de setembro de 2017

Servo + Som

Aqui simplesmente peguei um código que prometia fazer o servo tocara a marcha imperial (e consegue, mas bem baixo) e como percebi que era basicamente um código normal de música troquei o servo por um buzzer e depois coloquei o servo pra ficar indo e voltando de um ângulo arbitrário no mesmo passo da música


#include 

//Note Definitions
const int NOTE_AS3 = 233;
const int NOTE_C4 = 262;
const int NOTE_D4 = 294;
const int NOTE_E4 = 330;
const int NOTE_F4 = 349;
const int NOTE_G4 = 392;
const int NOTE_GS4 = 415;
const int NOTE_A4 = 440;
const int NOTE_AS4 = 466;
const int NOTE_B4 = 494;
const int NOTE_C5 = 523;
const int NOTE_CS5 = 554;
const int NOTE_D5 = 587;
const int NOTE_DS5 = 622;
const int NOTE_E5 = 659;
const int NOTE_F5 = 699;
const int NOTE_FS5 = 740;
const int NOTE_G5 = 784;
const int NOTE_GS5 = 831;
const int NOTE_A5 = 880;

const int rhythmBuzzerPin = 8;
const int rhythmServoPin = 9;
const int rhythmLength = 115;

int rhythmNotes[] = {NOTE_A4, 0, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_C5, NOTE_C5, NOTE_C5, //Intro 1 (21 Notes)
                     NOTE_A4, 0, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_C5, NOTE_C5, NOTE_C5, //Intro 2 (21 Notes)
                     NOTE_A4, NOTE_A4, NOTE_A4, NOTE_F4, NOTE_C5, NOTE_A4, NOTE_F4, NOTE_C5, NOTE_A4,                                                                         //Part 1  (9 Notes)
                     0, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_F5, NOTE_C5, NOTE_GS4, NOTE_F4, NOTE_C5, NOTE_A4,                                                                     //Part 2  (10 Notes)
                     0, NOTE_A5, NOTE_A4, NOTE_A4, NOTE_A5, NOTE_GS5, NOTE_G5, NOTE_FS5, NOTE_F5, NOTE_FS5,                                                                   //Part 3  (10 Notes)
                     0, NOTE_AS4, NOTE_DS5, NOTE_D5, NOTE_CS5, NOTE_C5, NOTE_B4, NOTE_C5,                                                                                     //Part 4  (8 Notes)
                     0, NOTE_F4, NOTE_GS4, NOTE_F4, NOTE_A4, NOTE_C5, NOTE_A4, NOTE_C5, NOTE_E5,                                                                              //Part 5  (9 Notes)
                     0, NOTE_A5, NOTE_A4, NOTE_A4, NOTE_A5, NOTE_GS5, NOTE_G5, NOTE_FS5, NOTE_F5, NOTE_FS5,                                                                   //Part 6  (10 Notes)
                     0, NOTE_AS4, NOTE_DS5, NOTE_D5, NOTE_CS5, NOTE_C5, NOTE_B4, NOTE_C5,                                                                                     //Part 7  (8 Notes)
                     0, NOTE_F4, NOTE_GS4, NOTE_F4, NOTE_C5, NOTE_A4, NOTE_F4, NOTE_C5, NOTE_A4
                    };                                                                                     //Part 8  (9 Notes)

int rhythmBeats[] = {1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, //Intro 1
                     1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, //Intro 2
                     4, 4, 4, 3, 1, 4, 3, 1, 4,                    //Part 1
                     4, 4, 4, 4, 3, 1, 4, 3, 1, 4,                 //Part 2
                     4, 4, 3, 1, 4, 3, 1, 1, 1, 1,                 //Part 3
                     3, 2, 4, 3, 1, 1, 1, 1,                       //Part 4
                     3, 2, 4, 3, 1, 4, 3, 1, 4,                    //Part 5
                     3, 4, 3, 1, 4, 3, 1, 1, 1, 1,                 //Part 6
                     3, 2, 4, 3, 1, 1, 1, 1,                       //Part 7
                     3, 2, 4, 3, 1, 4, 3, 1, 4
                    };                           //Part 8

int tempo = 150;
boolean serv = true;
Servo myservo;

void setup()
{
  pinMode(rhythmBuzzerPin, OUTPUT);
  myservo.attach(9);
}

void loop()
{
  int i, rhythmDuration;

  for (i = 0; i < rhythmLength; i++) // step through the song arrays
  {
    rhythmDuration = rhythmBeats[i] * tempo;  // length of note/rest in ms

    if (rhythmNotes[i] == '0')          // is this a rest?
    {
      if (serv) {myservo.write(0); serv = !serv;} else {myservo.write(90); serv = !serv;}
      delay(rhythmDuration);            // then pause for a moment
    }

    else                          // otherwise, play the note
    {
      tone(rhythmBuzzerPin, rhythmNotes[i], rhythmDuration);
      if (serv) {myservo.write(0); serv = !serv;} else {myservo.write(90); serv = !serv;}
      delay(rhythmDuration);            // wait for tone to finish
    }
    delay(tempo / 10);            // brief pause between notes
  }

  while (true) {}
}