XRAD'S T600 (Terminator) Trinket MO FXMini

Adafruit's tiny microcontroller platform. Please tell us which board you are using.
For CircuitPython issues, ask in the Adafruit CircuitPython forum.

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
XRAD
 
Posts: 747
Joined: Sat Nov 19, 2016 3:28 pm

XRAD'S T600 (Terminator) Trinket MO FXMini

Post by XRAD »

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

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 533 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


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 533 times

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

Code: Select all

/*
===========================================================
===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("========================");
}

User avatar
XRAD
 
Posts: 747
Joined: Sat Nov 19, 2016 3:28 pm

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

Post by XRAD »

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

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

/*
===========================================================
===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.

User avatar
XRAD
 
Posts: 747
Joined: Sat Nov 19, 2016 3:28 pm

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

Post by XRAD »

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


// 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("========================");
}



User avatar
adafruit_support_mike
 
Posts: 67321
Joined: Thu Feb 11, 2010 2:51 pm

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

Post by adafruit_support_mike »

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

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.

User avatar
XRAD
 
Posts: 747
Joined: Sat Nov 19, 2016 3:28 pm

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

Post by XRAD »

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.

User avatar
adafruit_support_mike
 
Posts: 67321
Joined: Thu Feb 11, 2010 2:51 pm

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

Post by adafruit_support_mike »

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'.

User avatar
XRAD
 
Posts: 747
Joined: Sat Nov 19, 2016 3:28 pm

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

Post by XRAD »

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 456 times
Here is pic of PIN 13 reconfigured manually running some neopixels:
IMG_2846.JPG
IMG_2846.JPG (129.81 KiB) Viewed 456 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

/*
  ===========================================================
  ===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.

User avatar
adafruit_support_mike
 
Posts: 67321
Joined: Thu Feb 11, 2010 2:51 pm

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

Post by adafruit_support_mike »

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. ;-)

User avatar
XRAD
 
Posts: 747
Joined: Sat Nov 19, 2016 3:28 pm

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

Post by XRAD »

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 440 times
oblique:
oblique  fabric.jpg
oblique fabric.jpg (220.51 KiB) Viewed 440 times

User avatar
XRAD
 
Posts: 747
Joined: Sat Nov 19, 2016 3:28 pm

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

Post by XRAD »

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 428 times
5 Neopixels in the mouth:
T600 Neopixels.JPG
T600 Neopixels.JPG (121.18 KiB) Viewed 428 times
Random Neopixel flashy colors:
T600mouth.JPG
T600mouth.JPG (68.4 KiB) Viewed 428 times
Last edited by XRAD on Mon Dec 24, 2018 12:12 am, edited 1 time in total.

User avatar
XRAD
 
Posts: 747
Joined: Sat Nov 19, 2016 3:28 pm

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

Post by XRAD »

PIR mount:
PIR mount.JPG
PIR mount.JPG (121.84 KiB) Viewed 428 times
PIR inside mount:
T600 PIR mount.JPG
T600 PIR mount.JPG (111.99 KiB) Viewed 428 times
T600 Prop:
T600 full.JPG
T600 full.JPG (187.23 KiB) Viewed 428 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...

User avatar
adafruit_support_mike
 
Posts: 67321
Joined: Thu Feb 11, 2010 2:51 pm

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

Post by adafruit_support_mike »

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

User avatar
AnneBarela
Learn User Page
 
Posts: 754
Joined: Sat Mar 24, 2012 8:56 pm

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

Post by AnneBarela »

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

User avatar
XRAD
 
Posts: 747
Joined: Sat Nov 19, 2016 3:28 pm

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

Post by XRAD »

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

Locked
Please be positive and constructive with your questions and comments.

Return to “Trinket ATTiny, Trinket M0”