0

XRAD'S T600 (Terminator) Trinket MO FXMini
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

XRAD'S T600 (Terminator) Trinket MO FXMini

by XRAD on Sat Dec 15, 2018 10:04 pm

Hello All,

Got bored today so blended some code to make this cool beast! Using Trinket M0, FXMini in UART, PAM8402 amp, TA6FD00-04ohm speaker. Although the FXMini direction were pretty good, I don't remember seeing this anywhere:
Code: Select all | TOGGLE FULL SIZE
sfx.playTrack(i); // i = my random track number 001-009

I figured out it was this, and is similar to Music Maker, and it works. It plays anything named 000 through 999 in my code, but I only have 9 tracks. they are labeled 001-009 (see image below). They are not labeled track001.wav. This is not necessary. Once saved as a wav off Audacity or similar, the .wav carries over. Simple is best for me. You do have to ground the UG pin on the FXMini to get into UART mode. Instead of using my keyboard and software serial, with the Trinket M0, I have a serial1 Tx/Rx!! Nice. So with Tx, RX and RST hooked up, I have two pins left. Perfect for PIR input and PWM led output. PIR in to 1 and PWM led out to good old regular LED (no pixies or neopixels here). Just made it with the 5 pins on the Trinket. I really did not want to go to a multiplexer.

T600 serial FXMini.jpg
T600 serial FXMini.jpg (74.54 KiB) Viewed 409 times


My FXMini code is very simple and has been altered to run off the loop instead of inputting P or # , etc into the console. Really easy to use for your projects without hooking up a bunch of buttons! I modified the PIR code to run slightly differently. This is really by using a state change altered by the sensor. This allows my playMe function to operate, and the modified fade/blink led code to run without issue.

I did spend some time trying to get my truly random rotating array to function(yes. True random). I got it to show the correct tracks and to rotate randomly. BUT, I could not get the FXMini to accept the string even though it showed as 001-009 on Serial.print using: (and manually entering sfx.playTrack(001); // plays without issue! I am not sure what the difference is between the array output and my key stroke or random(9); is yet...)
Code: Select all | TOGGLE FULL SIZE

long trackNumber;
String trackString;
//char song[4] = { '0', '0', '0', 0};
char song[4] = { '0', '0', '0',  0};

void loop(){
playMe ()
sfx.playTrack(song);
Serial.print("Playing Track  ");
Serial.println(song);
}

void playMe () {
    trackNumber = random(1); //  because I have 10 tracks (so random 0 for the tens spot)
    char c = char(trackNumber + 48); // ASCII 48 is '0'; need to shift value to get right character
    song[1] = c; // replace the tens value in the char array

    trackNumber = random(10);  // random 0-9's
    c = char(trackNumber + 48);
    song[2] = c;// replace the ones value in char array
    Serial.println(song);
  }



This is a truly random way of generating a track number because the user is the random step. The array is always randomly rotating the numbers , in this case 001-009. Yes, this part may be repeating but it happens so fast that chances of you repeat playing track order is nearly non existent because the human sets off the PIR at a random interval ( at a much slower rate than the random rotation of the tracks). Worked great for the Eye of Agamotto. I tried randomSeed, all the way to randomSeed(random(random(9999))). Of course, these generate different patterns, but repeat on each start-up, so not really random. Unfortunately, I did not have a spare pin and could not use randomSeed(analogRead (pinx)). However, I left the code using boring random(9); which is simple and easy. If you leave it on for an hour, you don't really remember the order anyway.....

vid:
https://www.youtube.com/watch?v=xkxsqLp ... e=youtu.be

T600 jpg.JPG
T600 jpg.JPG (24.01 KiB) Viewed 409 times



Here is the T600 sound Led effect code. Try it out, works great:

Code: Select all | TOGGLE FULL SIZE
/*
===========================================================
===XRAD'S frankencode T600 with sound and light effects====
===========================================================

Code is modified to work for my needs using Adafruit
Trinket Mo, Adafruit FXMini, and PIR sensor. PAM8403
amplifier w/manual volume pot more than enough power
for TA6FD00-04 (04 ohm) speaker.

Code base found here:
PIR sensor
https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/using-a-pir-w-arduino

FXMini
https://www.adafruit.com/product/2341

============================================================
*/



#include "Adafruit_Soundboard.h"


#define ledEyes 0      // PWM out to red led eyes
#define inputPin 1      // input pin (for PIR sensor)
#define SFX_RST 2
#define SFX_RX 3
#define SFX_TX 4

Adafruit_Soundboard sfx = Adafruit_Soundboard(&Serial1, NULL, SFX_RST);

int pirState = 0;      // initial state is presumed as no motion detected
int val = 0;               // PIR pin status
int eyeRun = 150;    // runs through led display loop 'x' times (this is about 6 seconds)
int brightness = 0;    // initial brightness of led (0-255)
int fadeAmount = 3;    // by how many fade segments

void setup() {
  Serial1.begin(9600);
  //Serial.begin(115200);
  Serial.println("Adafruit Sound Board!");

  if (!sfx.reset()) {
    Serial.println("Not found");
    while (1);
  }
  Serial.println("SFX board found");
  delay (100);
  fileListFXMini();

  pinMode(ledEyes, OUTPUT);     // the led eyes!
  pinMode(inputPin, INPUT);     // IR sensor
}

void loop() {
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {
    pirState = 1;
    Serial.print("PIR TRIGGERED = ");
    Serial.println(pirState);
  }
  if (pirState == 1) {
    int i = random(9);
    Serial.print("Playing Track  ");
    Serial.println(i);
    sfx.playTrack(i);
    fadeEyes();
  }
}


// cool flickering and fading dying robot eye effect
void fadeEyes() {
  for (int i = 0; i < eyeRun; i++) {
    brightness = brightness + fadeAmount;
    analogWrite(ledEyes, random(brightness));   
    if (brightness <= 0 || brightness >= 150) {
      fadeAmount = -fadeAmount;
    }
    delay(50);
  }
  pirState = 0;
  analogWrite(ledEyes, LOW);
  Serial.print("PIR READY = ");
  Serial.println(pirState);
}


void fileListFXMini() {
  uint8_t files = sfx.listFiles();
  Serial.println("File Listing");
  Serial.println("========================");
  Serial.println();
  Serial.print("Found "); Serial.print(files); Serial.println(" Files");
  for (uint8_t f = 0; f < files; f++) {
    Serial.print(f);
    Serial.print("\tname: "); Serial.print(sfx.fileName(f));
    Serial.print("\tsize: "); Serial.println(sfx.fileSize(f));
  }
  Serial.println("========================");
}

XRAD
 
Posts: 640
Joined: Sat Nov 19, 2016 3:28 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by XRAD on Sat Dec 15, 2018 11:52 pm

Sometimes I answer my own questions!! So easy to get a real random out of the arduino random! What you need for real random action is a random event to trigger something(the human and the sensor). Obviously, random, randomSeed, and anything similar is not really random (unless there is a random variable in its calculations....but I have no spare pin w/floating voltage to get randomSeed(analogRead()) ) ( EDIT: there are MANY spare pins on the M0! see below). But my rotating void playMe() which changes the ends of the array (track digits) is random. Why, because it is always running in the background and triggered by a human. Get it?

Soooo, why use the array when I can use simple random() to do the same thing? I just put the arduino random() into a void and run it in the background. Only calling it when needed provides a truly random track to be selected (as long as there is a human or other random external trigger to the code)

Here are four track plays (following power-up boot) using this new method:
2,1,1,2
7,2,5,0
7,2,6,0
5,8,6,1

!!!!!!!!!!!!!!!!!!!NICE!!!!!!!!!!!!!!!!!!!!!!!

I could have saved so much time on the Eye of Agamotto! Now I am going to use this for everything like LED show, sound effects, anything that needs a random effect! Sweet!! Simples is best!

just call this in the beginning of loop and reference the variable for the track!
Code: Select all | TOGGLE FULL SIZE
void playMe(){
t = random(9);//number of tracks(0-8) , includes 0, excludes 9
}


Updated to reflect the new random() track play
Code: Select all | TOGGLE FULL SIZE
/*
===========================================================
===XRAD'S frankencode T600 with sound and light effects====
===========================================================

Code is modified to work for my needs using Adafruit
Trinket Mo, Adafruit FXMini, and PIR sensor. PAM8403
amplifier w/manual volume pot more than enough power
for TA6FD00-04 (04 ohm) speaker.

Code base found here:
PIR sensor
https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/using-a-pir-w-arduino

FXMini
https://www.adafruit.com/product/2341

============================================================
*/
#include "Adafruit_Soundboard.h"

#define ledEyes 0      // PWM out to led eyes
#define inputPin 1     //  input pin (for PIR sensor)
#define SFX_RST 2
#define SFX_RX 3
#define SFX_TX 4

Adafruit_Soundboard sfx = Adafruit_Soundboard(&Serial1, NULL, SFX_RST);

int pirState = 0;      // start at no motion detected
int val = 0;           // variable for pin status
int eyeRun = 150;      // runs through led display loop 'x' times
int brightness = 0;    // initial brightness of led (0-255)
int fadeAmount = 3;    // by how many fade segments
int t;

void setup() {
  Serial1.begin(9600);
  //Serial.begin(115200);
  Serial.println("Adafruit Sound Board!");

  if (!sfx.reset()) {
    Serial.println("Not found");
    while (1);
  }
  Serial.println("SFX board found");
  delay (100);
  fileListFXMini();

  pinMode(ledEyes, OUTPUT);     // the led eyes!
  pinMode(inputPin, INPUT);     // IR sensor
}

void loop() {
 
  playMe();
 
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {
    pirState = 1;
    Serial.print("PIR TRIGGERED = ");
    Serial.println(pirState);
  }
  if (pirState == 1) {
   // int i = random(9);
    Serial.print("Playing Track  ");
    Serial.println(t);
    sfx.playTrack(t);
    fadeEyes();
  }
}

// cool flickering and fading dying robot eye effect
void fadeEyes() {
  for (int i = 0; i < eyeRun; i++) {
    brightness = brightness + fadeAmount;
    analogWrite(ledEyes, random(brightness));
    if (brightness <= 0 || brightness >= 150) {
      fadeAmount = -fadeAmount;
    }
    delay(50);
  }
  pirState = 0;
  analogWrite(ledEyes, LOW);
  Serial.print("PIR READY = ");
  Serial.println(pirState);
}

void playMe(){
t = random(9);
}

// list my files please....
void fileListFXMini() {
  uint8_t files = sfx.listFiles();
  Serial.println("File Listing");
  Serial.println("========================");
  Serial.println();
  Serial.print("Found "); Serial.print(files); Serial.println(" Files");
  for (uint8_t f = 0; f < files; f++) {
    Serial.print(f);
    Serial.print("\tname: "); Serial.print(sfx.fileName(f));
    Serial.print("\tsize: "); Serial.println(sfx.fileSize(f));
  }
  Serial.println("========================");
}
Last edited by XRAD on Sun Dec 16, 2018 6:38 pm, edited 3 times in total.

XRAD
 
Posts: 640
Joined: Sat Nov 19, 2016 3:28 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by XRAD on Sun Dec 16, 2018 11:26 am

Well, I thought I was out of pins (wrong). The MO has many unused pins, so this code works too. A few more lines from the Arduino randomSeed tutorial. But I like my simple code so I'm sticking with it for this project (it seems to run a bit faster). You could tap into these unused pins and give your Trinket more GPIO's......

using:
randomSeed(analogRead(7)); // this is one of many floating unused pins on the M0

and a few additional lines.....

Code: Select all | TOGGLE FULL SIZE

// XRAD'S frankencode T600 motion sensor


#include "Adafruit_Soundboard.h"

#define SFX_RST 2
#define SFX_RX 3
#define SFX_TX 4


Adafruit_Soundboard sfx = Adafruit_Soundboard(&Serial1, NULL, SFX_RST);

#define ledEyes 0      // PWM out to led eye led
#define inputPin 1     // choose the input pin (for PIR sensor)


int pirState = 0;      // start with no motion detected
int val = 0;           //  pin status
int eyeRun = 150;      // runs through led display loop 'x' times

int brightness = 0;    // initial brightness of led (0-255)
int fadeAmount = 3;    // by how many fade segments

long randomNumber;

void setup() {
  Serial1.begin(9600);
  //Serial.begin(115200);
  Serial.println("Adafruit Sound Board!");

  if (!sfx.reset()) {
    Serial.println("Not found");
    while (1);
  }
  Serial.println("SFX board found");
  delay (100);
  fileListFXMini();

  pinMode(ledEyes, OUTPUT);     // the led eyes!
  pinMode(inputPin, INPUT);     // IR sensor

  randomSeed(analogRead(7)); // this is a floating unused pin on the M0
}

void loop() {
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {
    pirState = 1;
    Serial.print("PIR TRIGGERED = ");
    Serial.println(pirState);
  }
  if (pirState == 1) {
    randomNumber = random(9);
    int i = randomNumber;
    Serial.print("Playing Track  ");
    Serial.println(i);
    sfx.playTrack(i);
    fadeEyes();

  }
}


// cool flickering and fading dying robot effect
void fadeEyes() {
  for (int i = 0; i < eyeRun; i++) {
    brightness = brightness + fadeAmount;
    analogWrite(ledEyes, random(brightness));
    if (brightness <= 0 || brightness >= 150) {
      fadeAmount = -fadeAmount;
    }
    delay(50);
  }
  pirState = 0;
  analogWrite(ledEyes, LOW);
  Serial.print("PIR READY = ");
  Serial.println(pirState);
}



void fileListFXMini() {
  uint8_t files = sfx.listFiles();
  Serial.println("File Listing");
  Serial.println("========================");
  Serial.println();
  Serial.print("Found "); Serial.print(files); Serial.println(" Files");
  for (uint8_t f = 0; f < files; f++) {
    Serial.print(f);
    Serial.print("\tname: "); Serial.print(sfx.fileName(f));
    Serial.print("\tsize: "); Serial.println(sfx.fileSize(f));
  }
  Serial.println("========================");
}



XRAD
 
Posts: 640
Joined: Sat Nov 19, 2016 3:28 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by adafruit_support_mike on Mon Dec 17, 2018 4:29 am

Analog readings from floating pins only tend to have a couple of bits worth of actual randomness. Here's a function I use to amplify the random input:

Code: Select all | TOGGLE FULL SIZE
uint32_t seed() {
    uint32_t result = 0x5EF348B6;  // any 32-bit value
    uint32_t b;

    for ( uint8_t i=56 ; i ; i-- ) {
        b = (( result >> 13 ) & 1 ) ^ (( result >> 8 ) & 1 ) ^ ( analogRead( A3 ) & 1 );
        result = ( b << 31 ) | ( result >> 1 );
    }
    return( result );
}
It's a pseudorandom sequence generator (a linear feedback shift register) modulated by the least significant bit from analogRead(). The LFSR makes each new bit depend on the previous sequence, and analogRead() adds 1 bit of true randomness per iteration of the for() loop. Iterating 56 times guarantees every bit in the output is generated from at least three bits of the truly random sequence.

You can start an LFSR from zero, but it takes a few cycles for the output to start looking random. Using a value calculated by a previous run of the function gives it a pre-shuffled bit pattern to chew on.

adafruit_support_mike
 
Posts: 62768
Joined: Thu Feb 11, 2010 2:51 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by XRAD on Mon Dec 17, 2018 8:52 am

That is cool! But do you think it is any more variable than using the scrolling and polling bingo method in my void playMe()? Both still rely on outside noise to make a change to the sequence.

XRAD
 
Posts: 640
Joined: Sat Nov 19, 2016 3:28 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by adafruit_support_mike on Tue Dec 18, 2018 6:44 am

Over the medium-long term, probably enough to be noticeable.

randomSeed() selects the sequence of numbers random() will produce. Even assuming user input unpredictable by the code, analogRead() has a maximum of 4096 possible output values, so the set of 2^32 possible sequences gets cut to 4096 possible sequences right from the start.

The chance of getting the same value twice is equivalent to the Birthday Problem in statistics:

https://en.wikipedia.org/wiki/Birthday_problem

So a moderately large set of possible values produces less variation than it might seem at first glance.

If we select randomly from 4096 possible values, there's a 10% chance the any value will repeat within the next 30 picks, a 50% chance of repetition in the next 75, and a 90% chance of repetition in the next 137. And of those 137, you can expect 90% of them to be repeats of other values already seen.

If we use a 10-bit ADC reading (1024 possible values), there's a 10% chance of repetition after 15 picks, a 50% chance of repetition after 40, and a 90% chance after 69.

Those are best-case values, assuming all choices are equally likely. That's debatable for human input, which has a good chance of staying in a smaller part of the range most of the time.

If we assume the 2048 values in the center of a 12-bit ADC reading are most popular, there's a 10% chance of repetition after 21 picks, a 50% chance after 55, and a 90% chance after 97. With 512 preferred values, there's a 10% chance of repetition after 11 picks, a 50% chance after 27, and a 90% chance after 49.

That's enough to make it feel like the system prefers certain sequences.

The perturbed-LFSR uses the whole 32-bit seed space, and doesn't prefer any subset of values. There's a 10% chance of repetition after 30k picks, a 50% chance after 77k, and a 90% chance after 140k.

For a single device, that's a reasonable approximation of 'never'.

adafruit_support_mike
 
Posts: 62768
Joined: Thu Feb 11, 2010 2:51 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by XRAD on Fri Dec 21, 2018 9:41 pm

Ada Mike, great read THX! I just reviewed some hash functions for a NRF chip application. Finished the mini code for the T600. I freely admit that I do not know enough to track down all the code changes to get a few extra pins out out of the SAMD. Since I only need one and since Adafruit already configured pin 13, I stole that one! It is a digital pin and works fine for the Neopixel display. If anyone else needs an extra pin (at your own Trinket's risk) just de-solder carefully pin 13 resistor and use the correct pad for your new pin. you will have to find a way to secure the new header) Would be nice if Adafruit just added one or two more small header holes replacing 2 mounting holes, or a few tiny pads. Yes, I can get the next size up Ada board, but the size of the Trinket is great for most projects, and since the SAMD21 is such a tiny powerhouse, might as well use it!

Build note: the PIR sensor is great. easy to use and works well. BUT, looks ugly and big white plastic piece is not so hot. So I searched for some IR transparent fabric. Did not want to spend 100$ for a shirt and cut it up...sooo.. next best thing?? It's speaker fabric. I used this: https://www.amazon.com/gp/product/B01HM ... UTF8&psc=1 I now have enough for probably 200 PIR sensor projects! No issues for my needs(probably not the best for an alarm system), and I even had to lower the sensitivity pot a bit. I still have a good 4-5 foot range covering most angles , and this will not get tripped unless you are near enough to enjoy it.

PIR fabric:
IMG_2848.JPG
IMG_2848.JPG (126.07 KiB) Viewed 332 times


Here is pic of PIN 13 reconfigured manually running some neopixels:
IMG_2846.JPG
IMG_2846.JPG (129.81 KiB) Viewed 332 times


Will get this project together and post final video soon. Updated code is a good learning project for anyone wanting to build an interactive prop using PIR, FX sound board, regular LED's and Neopixels. Has some easy to see functions and how a loop calls a function which calls another function. Brings all the hardware together in this final code:

Code: Select all | TOGGLE FULL SIZE
/*
  ===========================================================
  ===XRAD'S frankencode T600 with sound and light effects====
  ===========================================================

  Code is modified to work for my needs using Adafruit
  Trinket Mo, Adafruit FXMini, and PIR sensor. PAM8403
  amplifier w/manual volume pot , more than enough power
  for TA6FD00-04 (04 ohm) speaker.

  Code base found here:
  PIR sensor
  https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/using-a-pir-w-arduino

  FXMini
  https://www.adafruit.com/product/2341

  ============================================================
*/

#include "Adafruit_Soundboard.h"
#include <Adafruit_NeoPixel.h>

#define ledEyes 0      // PWM out to led eyes(could be all caps, but then I have to fix all instances)
#define inputPin 1     //  input pin (for PIR sensor)
#define SFX_RST 2
#define SFX_RX 3
#define SFX_TX 4
#define NEOPIX 13    //(at your Trinket's risk)remove pin 13 resistor and get an extra pin!

#define NUMPIXELS 15   //or how ever many neopixels you want

int pirState = 0;     // start at no motion detected
int val = 0;         // variable for pin status
int eyeRun = 150;     // runs through led display loop 'x' times
int brightness = 0;    // initial brightness of led (0-255)
int fadeAmount = 3;   // by how many fade segments
int t;              // random track storage place
 
//  Define some objects
Adafruit_Soundboard sfx = Adafruit_Soundboard(&Serial1, NULL, SFX_RST);

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, NEOPIX, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();
  Serial1.begin(9600);
  Serial.println("Adafruit Sound Board!");

  if (!sfx.reset()) {
    Serial.println("Not found");
    while (1);
  }
  Serial.println("SFX board found");
  delay (100);
  fileListFXMini();
  pinMode(ledEyes, OUTPUT);     // the led eyes!
  pinMode(inputPin, INPUT);     // IR sensor
  delay(1000);
  sfx.playTrack(12);//boot track 12, excluded from random list
  flashy();
}

void loop() {
  playMe(); // the random track generator needs to be running in background
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {
    pirState = 1;
    Serial.print("PIR TRIGGERED = ");
    Serial.println(pirState);
  }
  if (pirState == 1) {
    Serial.print("Playing Track  ");
    Serial.println(t);
    flashy();
    fadeEyes();
  }
}

// cool flickering and fading dying robot eye effect
void fadeEyes() {
  sfx.playTrack(t);// random human motion has now triggered this to play
  pixels.show();
  for (int i = 0; i < eyeRun; i++) {
    brightness = brightness + fadeAmount;
    analogWrite(ledEyes, random(brightness));
    if (brightness <= 0 || brightness >= 150) {
      fadeAmount = -fadeAmount;
    }
    delay(50);
  }
  pirState = 0;
  analogWrite(ledEyes, LOW);
  Serial.print("PIR READY = ");
  Serial.println(pirState);
}

//Random track number generator
void playMe() {
  t = random(12);  // (12) == (exclusive of track 12) I have 13 total wav tracks 0-12, only 0-11 are part of the random list!
}

//Neopixel random flashy function
void flashy() {
  uint32_t color  = 0xFF0000; // Start red
  pixels.setBrightness(200); //   brightness
  uint8_t  i;
  pixels.begin();
  for (int z = 0; z < 150; z++) {
    i = random(32);
    pixels.setPixelColor(i, random(color));
    pixels.show();
    delay(5);
    pixels.setPixelColor(i, 0);
    delay(5);
  }
}

// Lists FXMini files
void fileListFXMini() {
  uint8_t files = sfx.listFiles();
  Serial.println("File Listing");
  Serial.println("========================");
  Serial.println();
  Serial.print("Found "); Serial.print(files); Serial.println(" Files");
  for (uint8_t f = 0; f < files; f++) {
    Serial.print(f);
    Serial.print("\tname: "); Serial.print(sfx.fileName(f));
    Serial.print("\tsize: "); Serial.println(sfx.fileSize(f));
  }
  Serial.println("========================");
}
Last edited by XRAD on Mon Dec 24, 2018 12:25 am, edited 5 times in total.

XRAD
 
Posts: 640
Joined: Sat Nov 19, 2016 3:28 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by adafruit_support_mike on Sat Dec 22, 2018 3:27 am

Nice hack on pin 13!

I wouldn't have thought to use speaker mesh for a PIR.. the plastic lens's job is to diffuse and focus incoming IR, but there's no arguing with hardware that works. ;-)

adafruit_support_mike
 
Posts: 62768
Joined: Thu Feb 11, 2010 2:51 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by XRAD on Sat Dec 22, 2018 11:08 am

THX Mike. exactly, Fresnel physics for the plastic lighthouse dome. Since I need 1mm and smaller holes, the speaker fabric is just right. It has enough holes in the right places to allow the can sensor to work correctly when placed against the dome, but also hides it for a good look. The cloth holes are actually little tunnels and when following the arc of the dome, by chance enough of them align with the focal zones, and everything works. This is with an LED flat surface light so that you can see the hole structure.
head on:
head on fabric.jpg
head on fabric.jpg (180.55 KiB) Viewed 316 times

oblique:
oblique  fabric.jpg
oblique fabric.jpg (220.51 KiB) Viewed 316 times

XRAD
 
Posts: 640
Joined: Sat Nov 19, 2016 3:28 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by XRAD on Sun Dec 23, 2018 11:36 pm

Finally got the build finished. The had some issue w/my boot track. Somehow got corrupted. Had to take apart to get to USB on the FXMini, and then cut the RST line so that I could upload a new track. Took a bit but got it done. I dropped the PIR and it seems to take a bit to warm up now...might have to get another . Easy to swap out using my T600 PIR mount. Really was a cool prop to mod. Final vid here:
https://www.youtube.com/watch?v=ixACGeYzHIg

10 Neopixels behind the chest plate:
T600 Neopixel 1.JPG
T600 Neopixel 1.JPG (125.47 KiB) Viewed 304 times


5 Neopixels in the mouth:
T600 Neopixels.JPG
T600 Neopixels.JPG (121.18 KiB) Viewed 304 times


Random Neopixel flashy colors:
T600mouth.JPG
T600mouth.JPG (68.4 KiB) Viewed 304 times
Last edited by XRAD on Mon Dec 24, 2018 12:12 am, edited 1 time in total.

XRAD
 
Posts: 640
Joined: Sat Nov 19, 2016 3:28 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by XRAD on Sun Dec 23, 2018 11:48 pm

PIR mount:
PIR mount.JPG
PIR mount.JPG (121.84 KiB) Viewed 304 times


PIR inside mount:
T600 PIR mount.JPG
T600 PIR mount.JPG (111.99 KiB) Viewed 304 times


T600 Prop:
T600 full.JPG
T600 full.JPG (187.23 KiB) Viewed 304 times


Great Adaproduce makes for great builds......Hope some of you can use this info.

have a levitating dithering device in the works.......might be a few months on that one...

XRAD
 
Posts: 640
Joined: Sat Nov 19, 2016 3:28 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by adafruit_support_mike on Tue Dec 25, 2018 5:17 am

That's a fantastic build.. thanks for posting the photos!

adafruit_support_mike
 
Posts: 62768
Joined: Thu Feb 11, 2010 2:51 pm

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by AnneBarela on Wed Dec 26, 2018 2:14 pm

Will be in an Adafruit blog post in 5 minutes, great work!
https://blog.adafruit.com/2018/12/26/fr ... neopixels/

AnneBarela
 
Posts: 748
Joined: Sat Mar 24, 2012 8:56 pm
Location: Mid-Atlantic

Re: XRAD'S T600 (Terminator) Trinket MO FXMini

by XRAD on Thu Dec 27, 2018 5:49 pm

Wow! Thank you! Appreciate the comments and the blog addition very much. Happy New year!

XRAD
 
Posts: 640
Joined: Sat Nov 19, 2016 3:28 pm

Please be positive and constructive with your questions and comments.