iPad Pro 1st Gen Teardown

by Josh Kotel

Overview

To kick off my teardown of the A1673, I needed to remove the screen. I used a heat gun to loosen the glue, while gradually prying off the LCD Assembly using a palette knife. Removing the thin aluminum shield in the top left allows access to four very tiny screws. Once unscrewed, the screen can be detached and set aside. Diving deeper involves more tiny screws, flex cables (careful, they’re paper thin!) and adhesive-backed static dissipative foam.

Every iPad is made by Foxcomm, by both factory workers and machines. The plastic housings are made through precision injection molding.

Tools Needed

Heat gun

Pry tool

Small phillips screwdriver

Components

Screen Assembly and Housing

The iPad Pro’s screen assembly is comprised of the front panel/glass, touch screen digitizer, and LCD display. The glass–believed to be aluminosilicate–is polished with cerium oxide and glued to a plastic frame. The LCD is made from liquid crystals, and is housed between two polarizers.

The back case is CNC milled from a solid block of aluminum. In order to achieve its matte, scratch-resistant finish, the piece is anodized and sandblasted.

Note: Although highly recyclable (and Apple reuses aluminum from disused products when creating new housings) the difficulty in extracting aluminum from the earth means that it uses a large amount of fossil fuel.

Battery and MotherBoard

The lithium-ion polymer battery takes up more space than any other component, and is pressed into the housing of the iPad by machine. The process of creating these batteries involves combining lithium with a metallic oxide catalyst, a dry solid polymer electrolyte and a metallic current collector. First, a lithium ingot is pressed and laminated until it is formed into a length of thin metallic sheet. The sheet is then spool-wound and baked in a vacuum oven to self adhere. Finally, the battery is sent off to a fabricator to be electrolyzed.

Close-up of the A9X Chip

Apple’s A9X Chips, manufactured exclusively by Taiwan Semiconductors, used a 16nm FinFET lithography process.

Speakers, Cameras, Power Button Assembly, 3mm Headphone Jack, and Home Button Assembly

Full disclosure–the flex cables broke and when removing the power button assembly, and is only partly pictured here. It shares a flex cable with the microphone, power button switch, flash, and ambient light sensor. The home button features a touch-sensor and is sealed with a soft rubber gasket.

Both rear (top) and front (bottom)-facing and cameras use scratch-resistant glass, and are sealed to the frame with either rubber and foam gaskets.

Upper and lower speakers

The A1673 features 4 speakers–two are located in either side of a long plastic bar housed below the top frame. All four speakers are housed in plastic, and sit below the same ESD foam-covered aluminum plating used to protect other components.

Apple is notoriously secretive about their manufacturing process, and so it was hard to understand as much as I would have liked about some of the components. I’ve worked on some of the earlier gen iPhones, so had a fair idea that I’d run into plenty of flex cables and lots of glue.

Notable Design Elements

  • Ever since Apple introduced flash drives into their products, the interiors only get more minimal and more sleek–it’s almost artistic. No zip-tied cable nests, no loose logic board held in place by a wish. Hardly any component infringes on another’s real estate. The placement of the batteries are reminiscent of an aerial view of midwest crops, and the logic board like that of a city at night. This could be for two reasons. Firstly, because it’s Apple, they over engineer the inside, so that the outside can be simple. And secondly, they know consumers pay attention to the inside of their products, so it’d better be beautiful.
  • I always notice the flex cables. Being paper thin makes them ideal for iPads and iPhones, and it also makes them stackable. You can have multiple overlapping cables take up just a few millimeters, and their wide surface makes them ripe for being glued down when needed.

Thanks for reading! Feel free to watch the teardown below 🙂

Lightbulb Teardown

Parts Overview

  1. Outer Shade
    Material: Polycarbonate plastic
    Function: Acts as a diffuser for the LEDs (3.)
    Manufacturing Technique: Injection molding
  2. Central Housing
    Material: Polybutylene terephthalate
    Function: Holds all internal components (3., 5., 6., 7., 8., 9.) and provides insulation and structural support between the hot electronics and the metal base (4.)
    Manufacturing Technique: Injection molding
  3. Flat LED Panel
    Material:
    Substrate: Aluminum metal-core printed circuit board
    LEDs: Semiconductor chips (gallium nitride, GaN) mounted in epoxy or silicone encapsulants
    Function:
    Substrate: Spreads heat away from the LEDs to maintain efficiency and lifespan
    LEDs: Generate light
    Manufacturing Technique: Metal-core PCB fabrication, surface-mount technology (SMT), reflow soldering
  4. Metal Screw Base
    Material: Aluminum
    Function: The threaded part connects mechanically to the socket’s neutral line, and the bottom tip contact connects electrically to the live line.
    Manufacturing Technique: Cold heading, thread rolling, stamping, nickel plating
  5. Circuit Board (Labeled E64353)
    Material: FR-4 fiberglass PCB with copper traces
    Function: Holds all the electronic components (6., 7., 8.) in place and provides electrical pathways through the copper traces that connect components together
    Manufacturing Technique: Laminating, copper cladding, photolithography and etching, solder mask application, silkscreen printing
  6. Inductor
    Material: Copper wire, ferrite core, plastic insulation
    Function: Filters electrical noise, smooths current, and improves efficiency
    Manufacturing Technique: Wire drawing, encapsulation
  7. Bridge Rectifier
    Material: Silicon semiconductor encased in epoxy resin
    Function: Converts high-voltage AC (120/230 V) into low-voltage DC current suitable for the LEDs
    Manufacturing Technique: Die fabrication
  8. Electrolytic Capacitor
    Material: Aluminum can, electrolyte inside, plastic sleeve
    Function: Stores and releases energy, stabilizes DC voltage, and reduces flicker in the LED output
    Manufacturing Technique: Foil etching and forming, winding, can sealing
  9. Two Screws
    Material: Steel
    Function: Secure the LED board to the central housing
    Manufacturing Technique: Cold heading, thread rolling, electroplating

Dissassemble Process

  1. Shade Removal
    • The outer diffuser shade was detached from the housing by carefully bending and pulling it by hand.
    • Since the parts were friction-fit and bonded with a rubber-like adhesive, removal caused minor cracking and shattering of the plastic.
  1. Unscrewing the Fasteners
    • A screwdriver was used to remove the two screws securing the LED panel to the housing.
  1. LED Panel Removal
    • Pliers were inserted into the screw holes on the LED panel to grip, peel, and pull the panel away.
    • The panel was also partially glued to the housing, requiring additional force to separate it.
  1. Metal Base Removal
    • A utility knife was tapped along the edge of the steel screw base to gradually break the seal.
    • Once loosened, the steel shell was peeled back and separated from the plastic housing.
  1. Circuit Board Removal
    • Pliers were used to extract the driver PCB, which was loosely friction-fit inside the central housing.
  1. Electronic Component Removal
    • Pliers were also employed to detach the remaining electronic components from the PCB.

Interesting Takeaways

  1. Slotted Plastic Housing for Circuit Board Alignment
    The central plastic housing features tapered slots that transition from larger openings to narrower channels. This geometry guides the circuit board into position during assembly while ensuring that the board is securely held in place by friction fit. This approach reduces the need for additional fasteners, simplifying assembly and lowering manufacturing costs, also ensuring adequate retention during the lightbulb’s operational lifespan.
  1. Use of a Metal Screw Base with Crimped Attachment
    Another notable design choice is the crimped interface between the metal screw base and the plastic housing. Instead of adhesives or screws, the base is mechanically deformed around the housing to create a strong, permanent connection. This ensures mechanical durability and also streamlines high-volume manufacturing, minimizing part count and assembly time.

Samsung Remote Control Teardown

Samsung BN59-01391A Smart TV Remote Control teardown knolling

Plastic Shell (Front)

Material: Plastic

Manufacturing: Injection molded using a custom mold for shape and precision.

(Remove the screws with a small Phillips screwdriver. )

Mounting Screws ×2

Material: Metal

Manufacturing: Metal wire is cold-forged to form the screw head, and threads are formed using a thread rolling machine for high speed and accuracy.
Surface is treated with black oxide coating or black nickel plating to create a rust-resistant and visually appealing black finish.

(Pry open the remote casing with a flathead screwdriver and a small knife.)

Plastic Shell (Back)

Material: Plastic

Manufacturing: Injection molded using a custom mold for shape and precision.

Plastic Button

Material: Plastic

Manufacturing: Molded via injection molding for shape and function.

Silicone Buttons

Material: Silicone

Manufacturing: Molded using compression molding, then printed color on the surface.

Solar Panel

Materials: Silicon, glass (low-iron tempered glass with Anti-Reflective Coating coating), plastic, metals, wires with rubber tubing

Manufacturing: Layers of silicon cells are sandwiched between tempered glass and protective plastic sheets. Electrical wires and rubber tubing are added for connectivity and sealing.

Printed Circuit Board

Materials: Core of non-conductive material: Fiberglass-epoxy composite (FR4), copper traces, solder mask

ManufacturingThe fabrication involves imaging and etching copper layers, drilling holes, plating with copper, and laminating layers to form the base circuit. The board is etched with copper circuits, and components are soldered on via wave soldering or reflow techniques.

Chip:
Atmosic ATM2231U — an extreme low-power Bluetooth 5.0 system-on-a-chip (SoC) designed for Internet of Things (IoT) applications. Specifically engineered to extend battery life in wireless devices.
Winbond 25Q40EWNIG — 4-megabit high-performance serial NOR flash memory chips.
PJ2086MB210 — no data found
BQ505 — no data found

Tools and techniques used to take it apart: Phillips screwdriver, flathead screwdriver, craft knife.

two design elements that interest me:

One interesting design element is the silicone button, which appears to be made from two differently colored silicone parts: a translucent base and an opaque white key cap. I imagine the white silicone is placed into the mold first, followed by the injection of transparent silicone to encapsulate it. I’m not sure why the designer chose this approach, it may be for cost-efficiency—by limiting the amount of white silicone pigment used—while still maintaining the desired appearance on the surface.

Another interesting design is how the two VPC batteries are connected to the PCB. They are directly soldered onto the board with four solder joints, which makes the setup straightforward and easy to identify. However, this also leads to a potential weakness—these connection points are more prone to damage or disconnection, especially with frequent handling or over long-term use. It reminds me of my Apple Magic Keyboard can’t charge, so I couldn’t use the Bluetooth connection. I suspect that one of its solder joints may have come loose. I think the designer may have chosen this method for its speed and simplicity in assembly. It also makes repair or inspection relatively easy, as the joints are clearly exposed and accessible.

Class Introduction – Jimmy



Hi everyone! I’m Junming Pu — but feel free to call me Jimmy. I’m from China and recently graduated from Pratt Institute with a degree in Industrial Design. Before coming to PoD, I was working on projects that ranged from sustainable furniture to educational toys and interactive installations, often blending digital tools with physical making.

I love making things that are both thoughtful and playful — whether it’s transforming waste materials into objects, building speculative toys about climate change, or designing systems that guide user behavior in smarter ways. I enjoy prototyping with 3D printing, laser cutting, and cardboard (a lot of cardboard). Outside of design, you’ll find me sketching in museums, tweaking my photography setup, or trying strange ice cream flavors.

In this course, I’m most excited to explore physical computing as a way to create more responsive, interactive design experiences — especially learning how sensors and microcontrollers can help bring abstract ideas to life. I’m a bit nervous about the programming side, but I’m ready to tinker and learn.

If you’d like to connect, you can find me on Instagram @jimmy17pu or check out my work at junmingpu.com

Looking forward to building cool things with all of you!

— Jimmy

Sige’s There’s Always Sunshine Light

“There’s Always Sunshine” is a LED light made with a UV Light Sensor. It’s for people who’s experiencing seasonal depression to remind themselves that there can always be sunshine and stay positive. The light will work as when the sun goes down / when it’s cloudy or rainy, it lights up. You can toggle a button for the light to fade, otherwise the light stays on.

Instructables

https://www.instructables.com/Theres-Always-Sunshine-Light/

Video – It Works!

Process Photos

Tinkercad

https://www.tinkercad.com/things/0QbKHpFH4T0-copy-of-sige-dec-7/editel?returnTo=%2Fdashboard%2Fdesigns%2Fcircuits&sharecode=3N66N1BoYZz9DblljA5nXa3k6t6JgzLsXnkD5EWszY4

Code

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define BUTTON_PIN   2
#define WHITELIGHT_PIN   5
#define PIXEL_PIN    6
#define UV_PIN    A5
#define PIXEL_COUNT 7
Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

int buttonState = 0;
int lastButtonState = 0;
int buttonPushCounter = 0;
int sensorValue = 0;
//int brightnessWL = 0;
int fadeamount = 5;
bool isFading;

//SETUP
void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  //pinMode(UV_PIN, INPUT);
  pinMode(WHITELIGHT_PIN, OUTPUT);
  //pinMode(PIXEL_PIN,OUTPUT);
  strip.begin();
  strip.show();
  Serial.begin(9600);
}



void loop() {
  //check sensor value
  sensorValue = analogRead(UV_PIN);
  Serial.print("sensorValue= ");
  Serial.print(sensorValue);
 
  buttonState = digitalRead(BUTTON_PIN);
  Serial.print("\t buttonState= ");
  Serial.println(buttonState); 


    if (buttonState == LOW) {
         isFading = true;
        Serial.println("isFading is true");
    }else {
      isFading = false;
      Serial.println("isFading is false");
    }
    

  if (sensorValue <= 2) {
    Serial.println("sensor smaller than or equal to 2, lights on");
    
    colorWipe(strip.Color(255, 70, 10), 5);
    
    if(isFading == true){
      // fade in from min to max in increments of 5 points:
       for (int brightnessWL = 255; brightnessWL >= 50; brightnessWL -= 5) {
        Serial.print("brightness= ");
        Serial.println(brightnessWL);
        analogWrite(WHITELIGHT_PIN, brightnessWL);
        // wait for 30 milliseconds to see the dimming effect
        delay(50);
      }
      
      for (int brightnessWL = 50; brightnessWL <= 255; brightnessWL += 5) {
        Serial.print("brightness= ");
        Serial.println(brightnessWL);
    	  analogWrite(WHITELIGHT_PIN, brightnessWL);
  		  delay(50);
      }
      // fade out from max to min in increments of 5 points:
      
    } else {
      digitalWrite(WHITELIGHT_PIN, 255);
    }


    }
  else if (sensorValue > 2) {
    Serial.println("sensor greater than 2, lights out");
    digitalWrite(WHITELIGHT_PIN, LOW);
    colorWipe(strip.Color(0, 0, 0), 5);
    }
	  // save the current state as the last state, for
  // the next time through the loop
  lastButtonState = buttonState;
}

//SET PIXEL FUCTION
void colorWipe(uint32_t color, int wait) {
  for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
    strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
  }
}

Rida’s Final Project Caeruleo

Bring the serenity of nature into your home with Caeruleo. Designed as both a calming decor piece and an interactive art installation, this project features a single light source that glides gracefully along the inner perimeter, creating mesmerizing glimmers and dynamic patterns. Its sound-responsive LEDs adjust to their surroundings—brightening and accelerating in noisy environments, and dimming and slowing down in quiet spaces—bringing a sense of harmony to your living area.

Meaning of name: (made) for Azure

Link to Instructable: https://www.instructables.com/Nature-inspired-Sound-Sensor-LED-Wall-Light/

Link to Video: https://youtu.be/RoVGKDPhzqM

Link to Tinkercad: https://www.tinkercad.com/things/4aAViGX2SXa-copy-of-sound-responsive-led-circuit?sharecode=_vmrKaLEndobK0IHVTipv6XW1PmaxttfKLk8f5jpOXs

Process Photos

Code

Final Result

What I learned

  • Building the code and circuit for our project from scratch was definitely a steep learning curve, but it was rewarding to see the project come to life
  • Process management is key for a project with so many steps: always planning ahead to avoid material delay/ burnouts, and keep things moving
  • Iterative thinking: prepare to tackle unexpected changes (eg: the frame) 

What to Improve

  • I’d like to refine the frame’s finish with a mixed medium of air-dry clay and sand to experiment material mixes and achieve a more texturized, organic look
  • With fewer commitments from other classes, I’d love to create a more polished video to show the product in use + reaccentuate the design concept

Carmel – Garbage Light

For my final project I made a companion light for my online show Dumpster Fire.

Instructables link: https://www.instructables.com/Garbage-Light/

video link: https://youtu.be/8EvMQiX6GAA

Dumpster Fire?
Dumpster Fire is an online show that airs on transmissionpit.com. Each episode is made of ‘found footage’ that is less found and more directly sourced from other media artists.

Each episode airs only once, and never again.

https://carmeldeberg.myportfolio.com/dumpster-fire-online-show

Since the show online runs once, I wanted to create a very easily DIY-able light that would act as a countdown timer for when the show will start, and then be a companion light show during the episode.

Viewers can follow the instructables and send me their board info. I add all the participating boards into my Arduino cloud, and five minutes before the show starts, I trigger the code to be transmitted to the Arduinos.

My cat was very concerned with what was going on:

Working on my circuit:

My code:

// Include the NeoPixel library

#include <Adafruit_NeoPixel.h>

// Define the pin where the NeoPixel data line is connected

#define LED_PIN 6

// Define the number of LEDs on your NeoPixel strip

#define NUM_LEDS 8

// Create an instance of the NeoPixel strip

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

// Array of colors to cycle through

uint32_t colors[] = {

strip.Color(255, 0, 0), // Red

strip.Color(0, 255, 0), // Green

strip.Color(0, 0, 255), // Blue

strip.Color(255, 255, 0), // Yellow

strip.Color(0, 255, 255), // Cyan

strip.Color(255, 0, 255), // Magenta

strip.Color(255, 255, 255) // White

};

int numColors = sizeof(colors) / sizeof(colors[0]);

void setup() {

strip.begin();

strip.show(); // Initialize all pixels to ‘off’

}

void loop() {

for (int i = 0; i < numColors; i++) {

pulseColor(colors[i], 1000); // Pulse the current color over 1 second

}

}

// Function to create a pulsing effect

void pulseColor(uint32_t color, int duration) {

int steps = 256; // Number of brightness steps

int stepDelay = duration / (steps * 2); // Time per step

// Fade in

for (int brightness = 0; brightness < steps; brightness++) {

setStripColor(color, brightness);

delay(stepDelay);

}

// Fade out

for (int brightness = steps – 1; brightness >= 0; brightness–) {

setStripColor(color, brightness);

delay(stepDelay);

}

}

// Function to set all LEDs on the strip to a specific color and brightness

void setStripColor(uint32_t color, int brightness) {

for (int i = 0; i < strip.numPixels(); i++) {

strip.setPixelColor(i, dimColor(color, brightness));

}

strip.show();

}

// Function to adjust the brightness of a color

uint32_t dimColor(uint32_t color, int brightness) {

uint8_t r = (uint8_t)((color >> 16) & 0xFF);

uint8_t g = (uint8_t)((color >> 8) & 0xFF);

uint8_t b = (uint8_t)( color & 0xFF);

r = (r * brightness) / 255;

g = (g * brightness) / 255;

b = (b * brightness) / 255;

return strip.Color(r, g, b);

}

Reflections/next steps:

Instead of having the aluminum foil be the shell, the shell should be cardboard that is lined with aluminum foil. 

I would like to try with a different web-enabled board and led strip. The led strip needs to be one that has a casing as trying to adjust the sculpture Is too much for the delicate solder/wires on the pixel strip. 

I also recently taught my students an additive color theory class. As I was writing up these reflections, it has occurred to me that there is an opportunity to design the instructions for the light in a more detailed way that could also passively teach viewers some color theory as well.

https://youtu.be/2V_RTZIHois

Ana’s Long Distance Hug Plush

Everyone has someone they miss. Maybe it’s distance, maybe it’s conflicting schedules, but seeing loved ones in adulthood is hard. If you miss someone and want to get love and spread some love, here’s how! Instructables Link

SHOPPING LIST

To make this project, you will need 2x of each:

Electronics:

  1. Adafruit MPRLS Ported Pressure Sensor Breakout – 0 to 25 PSI
  2. Adafruit ESP32-S3 Reverse TFT Feather – 4MB Flash, 2MB PSRAM, STEMMA QT
  3. Lithium Ion Polymer Battery – 3.7v 2500mAh
  4. Silicone Tubing for Peristaltic Liquid Pump – 1 Meter

Fabric:

  1. Line Texture Fabric
  2. FUZZY Fluffy sweater

Plus these tools:

  • Soldering tools and supplies
  • Silicone adhesive
  • Hot glue gun with glue sticks

Circuit Diagram

The Adafruit MPRLS Ported Pressure Sensor Breakout and Li-ion battery are attached to the Adafruit ESP32-S3 Reverse TFT Feather.

Attach Tubing to Sensor

Make sure to use a silicone adhesive when attaching the tube to your sensor, because the only thing that makes silicone stick is silicone. 

I personally had a lot of trouble with this one. The first one attached like bread to butter, perfection! The second tube on the other hand….. Messy.

Connect to Arduino IoT Cloud

In order to connect my board, I created a boolean variable for my Thing through the Arduino IoT Cloud. By inputting my network and device information within the code, I was able to connect.

Patterns & Sewing

For the patterns, I was originally going to make a stingray and an octopus, but due to time constraints, I am going with my mom’s favorite shape, a triangle!

Genuinely making the pattern to sew for this was pretty intuitive. I just cut out two large triangle pieces then cut out the strips that go in between the two triangles to create volume.

Hug Code

// Long Distance Hug by Ana Jay, code from Parihug IoT Hug project by Xyla Foxlin, adapted 2023 & 2024 by Becky Stern

// Watch the video: https://youtu.be/u6gj8VzrHBo

// Tutorial: https://beckystern.com/2023/11/27/hug-sensing-iot-parihug-toy-w-xyla-foxlin/

// This code is in the Public Domain

#define SECRET_SSID "Internet of Things Class"

#define SECRET_OPTIONAL_PASS "iheartarduino"

#define SECRET_DEVICE_KEY "gg0N8MV!wlYjIqlA8m#Db@yW@"

#include <ArduinoIoTCloud.h>

#include <Arduino_ConnectionHandler.h>

#include <Adafruit_GFX.h>    // Core graphics library

#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789

#include <SPI.h>

// Use dedicated hardware SPI pins

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

const char DEVICE_LOGIN_NAME[]  = "15f3eccb-0c6f-46a8-8ef1-183a610a3a3c";

const char SSID[]               = SECRET_SSID;    // Network SSID (name)

const char PASS[]               = SECRET_OPTIONAL_PASS;    // Network password (use for WPA, or use as key for WEP)

const char DEVICE_KEY[]  = SECRET_DEVICE_KEY;    // Secret device password

void onHugChange();

bool hug;

void initProperties(){

 ArduinoCloud.setBoardId(DEVICE_LOGIN_NAME);

 ArduinoCloud.setSecretDeviceKey(DEVICE_KEY);

 ArduinoCloud.addProperty(hug, READWRITE, ON_CHANGE, onHugChange);

}

WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);

#include <Wire.h>

#include "Adafruit_MPRLS.h"

// You dont *need* a reset and EOC pin for most uses, so we set to -1 and don't connect

#define RESET_PIN  -1  // set to any GPIO pin # to hard-reset on begin()

#define EOC_PIN    -1  // set to any GPIO pin to read end-of-conversion by pin

Adafruit_MPRLS mpr = Adafruit_MPRLS(RESET_PIN, EOC_PIN);

void setup() {

 // Initialize serial and wait for port to open:

 Serial.begin(9600);

 //pinMode(12, OUTPUT);

 // This delay gives the chance to wait for a Serial Monitor without blocking if none is found

 delay(1500);

 // Defined in thingProperties.h

 initProperties();

 // Connect to Arduino IoT Cloud

 ArduinoCloud.begin(ArduinoIoTPreferredConnection);

 /*

    The following function allows you to obtain more information

    related to the state of network and IoT Cloud connection and errors

    the higher number the more granular information you’ll get.

    The default is 0 (only errors).

    Maximum is 4

 */

 setDebugMessageLevel(2);

 ArduinoCloud.printDebugInfo();

  Serial.println("Testing MPRLS sensor...");

 if (! mpr.begin()) {

   Serial.println("Failed to communicate with MPRLS sensor, check wiring?");

   while (1) {

     delay(10);

   }

 }

 Serial.println("Found MPRLS sensor");

 // turn on backlite

 pinMode(TFT_BACKLITE, OUTPUT);

 digitalWrite(TFT_BACKLITE, HIGH);

 // turn on the TFT / I2C power supply

 pinMode(TFT_I2C_POWER, OUTPUT);

 digitalWrite(TFT_I2C_POWER, HIGH);

 delay(10);

 // initialize TFT

 tft.init(135, 240); // Init ST7789 240x135

 tft.setRotation(3);

 tft.fillScreen(ST77XX_BLACK);

// large block of text

 tft.fillScreen(ST77XX_BLACK);

 testdrawtext(

     "Booting hugs... ",

     ST77XX_WHITE);

 delay(1000);

tft.fillScreen(ST77XX_BLACK);

 Serial.println(F("Initialized"));

}

void loop() {

 ArduinoCloud.update();

  float pressure_hPa = mpr.readPressure();

 Serial.print("Pressure (hPa): "); Serial.println(pressure_hPa);

 Serial.print("Pressure (PSI): "); Serial.println(pressure_hPa / 68.947572932);

   if (pressure_hPa > 1100){

   hug=true;

   Serial.println("Hug = true");

 //    Serial.println("buzz buzz loop");

 //  digitalWrite(12, HIGH);

 //  delay(1000);

 //  digitalWrite(12, LOW);

 // large block of text

 tft.fillScreen(ST77XX_BLACK);

 testdrawtext(

     "Hugs! I love you. ",

     ST77XX_WHITE);

 delay(5000);

 tft.fillScreen(ST77XX_BLACK);

 }else{

   hug=false;

   Serial.println("Hug = false");

 }

 delay(1000);

}

/*

 Since Hug is READ_WRITE variable, onHugChange() is

 executed every time a new value is received from IoT Cloud.

*/

void onHugChange()  {

 if(hug==true){

  Serial.println("onHugChange has been called");

 //  digitalWrite(12, HIGH);

 //  delay(1000);

 //  digitalWrite(12, LOW);

   tft.fillScreen(ST77XX_BLACK);

 testdrawtext(

     "Hugs! I love you. ",

     ST77XX_WHITE);

 delay(5000);

 tft.fillScreen(ST77XX_BLACK);

 }

 }

void testdrawtext(char *text, uint16_t color) {

 tft.setCursor(0, 0);

 tft.setTextColor(color);

 tft.setTextWrap(true);

 tft.print(text);

}

FINAL VIDEO

Sofia’s Final Synth

Ready to build your very own synth but don’t know where to start? No worries – you’re in the right place!

 Welcome to the Fish Synth Docs, your step-by-step guide to creating the Fish Synth! This unique synth comes with a convenient strap, making it easy to take your sound on the go for all your events. 

It features 3 adjustable dials, sound-controlling buttons, and a headphone jack for personal listening. Plus, it has a pedal plug for connecting other effects and creating a daisy-chain setup. Let’s dive in and get started!

WHAT YOU’LL NEED

HOW TO BUILD

Step 1: Order the DaisySeed and Wait for Delivery
The first step in building your Fish Synth is to order the DaisySeed online. This component, which acts as the “brain” of your synth, is where all the code will be loaded. Be patient as it will take some time to arrive from California.

Step 2: Choose Your Effects
While waiting for the DaisySeed to arrive, start planning what effects you want your synth to have. Explore the DaisySeed coding library to find the effects that suit your needs. Once you’ve selected the desired effects, you’ll need to wire them to the appropriate switches.

Dial 1 – Switch Sound Effect

Dial 2 – Volume

Dial 3 – Miscellaneous / Tone

Button 1 – On/Off

Button 2 – Chord C major 7

Button 3 – Chord G major 7

Button 4 – E major 7

Step 2.5: Set Up Daisy Seed and Code

When using Arduino for coding, it is essential to follow the DaisyDuino Set-Up Guide. A variety of video tutorials are available on the ElectroSmith YouTube channel, as well as a comprehensive Start-Up guide on GitHub.

Start-Up Tips:

  1. Ensure the “Extra Step” STM32 package is downloaded, as it is crucial for the setup. If unable to obtain it, request it from another source.
  2. In Arduino, select “DFU” as the upload method.
  3. It may be necessary to press and hold the Boot button while pressing the Reset button a few times to allow Arduino to properly recognize the board.

To code the effects, start by reviewing the multiple Daisy Seed examples available in the Arduino environment. 

 The goal is to combine the relevant portions of each example into a single, cohesive file.


By doing this, you’ll be able to tailor the code to your specific needs and create the desired effects. The example code is available through the link provided below, offering a starting point to help guide the process.

Step 3: Solder Buttons, Dials, and Plugs
Begin by soldering the various buttons, dials, and plugs onto the board. Ensure you connect the correct wires to the outside dials so they correspond to the effects you wish to control. Take your time to ensure each connection is accurate.

Step 4: Create the Case
You have two options for the case:

  • 3D Print the Case: Use the provided file to 3D print your case. If you don’t have access to a 3D printer, check with your local public library to see if they offer printing services. This file was made with TinkerCAD.
  • Cardboard Case: Alternatively, you can fold a custom cardboard case. If you choose this route, follow the instructions for cardboard assembly provided below. Note that, regardless of the case type, only the placement of knobs and buttons matters.

Step 5: Wire the External Components
Solder the switches, dials, and other external components using wires. Ensure that all switches and dials are connected properly to the board and that they align with the designated holes in the case.

Step 6: Assemble the Synth Case
Once everything is wired correctly, screw the components into the case. Double-check that all connections are secure before moving on.

Step 7: Test the Synth
Before sealing the case by drilling or gluing it shut, test the synth to ensure everything is working properly. This is your last chance to make adjustments if needed.

Step 8: Add a Strap
For convenience, sew a bag strap using any fabric you have available. A jewelry chain was used in this example!

Step 9: Final Steps
Congratulations! The Fish Synth is now complete. You should have a better understanding of musical synthesizers and can start creating music! Enjoy the process and the sounds you create!

Retrospective:

Do not do audio. Do not do audio. DO not do audio. DO not do audio. Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.

  1. Find way to attach buttons to case
  2. Cut breadboard to fit in case
  3. Adjust code to actually sound good

Company Pitch:

The Fish Synth is a DIY, portable synthesizer designed for on-the-go music creation and exploration. This compact, user-friendly device allows enthusiasts to build their own unique synth by assembling the components, offering a hands-on experience for both beginners and experienced creators. With its battery-powered design, the Fish Synth is perfect for spontaneous jam sessions, street performances, or personal audio experimentation, providing a versatile range of sounds and effects. Its easy-to-customize features and portable nature make it an ideal tool for music lovers who want to enjoy creative synthesis anytime and anywhere.

https://www.instructables.com/Build-Your-Own-Synth

🎶✨ Introducing the Fish Synth! 🎹 A DIY, portable synthesizer that lets you build your own unique sound and take it on the go. Perfect for spontaneous jams, street performances, or just vibing wherever you are! 🚀🔊

Easy to assemble, fun to customize, and ready for any adventure. Get yours and start creating music on the move! 🎧💡

#FishSynth #DIYMusic #PortableSynth #MusicOnTheGo #CreateEverywhere