Assignment items

Group assignment


Individual assignment

Fab Academy Rubric — Have you?
The criteria evaluators look for this week.





Tools

The process

Group assignment


Musaed AlKout is the one who had the full process documented in detail; I will cover some highlights on my page.


01: input device's analog levels



02: Probe an input device's digital signals


New file in Photoshop

01 |

Tools used for drawing

02|

raster image zoom in

03|

!
  • Feedback:
  • Challenge:

Individual assignment:


01: Add a sensor to a microcontroller board that you have designed and read it


New file in Photoshop

01 | I used an MPU6050 GY-521, which is also part of my final project. I learned all the information I needed from Wokwi and started a virtual simulation, as I was away from the lab and wanted to utilize my time to start this assignment.

Tools used for drawing

02| I built the circuit connecting the MPU to the ESP32 C3

raster image zoom in

03| From Gemini AI I got some guidelines on how to continue the process

raster image zoom in

04| I added these libraries

raster image zoom in

05| and I included


#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

void setup(void) {
  Serial.begin(115200);

  // Define I2C pins for ESP32-C3 (SDA=8, SCL=9)
  Wire.setPins(8, 9); 

  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) { delay(10); }
  }

  Serial.println("MPU6050 Found!");
  
  // Set sensor ranges (optional)
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);

  delay(100);
}

void loop() {
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  /* Print out the values */
  Serial.print("Accel X: "); Serial.print(a.acceleration.x);
  Serial.print(", Y: "); Serial.print(a.acceleration.y);
  Serial.print(", Z: "); Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");

  delay(500);
}
					

raster image zoom in

06| I started teh simulation and started to see the readings and changed the value

raster image zoom in

07| Then I opened my KiCad file in the schematic editor and added the GY-521 as a sensor and made the connections, following this workflow: Look for part → not available → search on SnapEDA → download symbol & footprint → open KiCad → import the library → add the new part → connected pins → mark other pins as "no connect" → run ERC

raster image zoom in

08| Then I updated the PCB Editor and placed the new input sensor

raster image zoom in

09| I tried to place it next to the microcontroller so that my full design fits on a 30mm copper tape, which I have access to cut for the circuit.

raster image zoom in

10| For better cutting results, I made the routes 2mm wide and made sure there was enough space between them to avoid short circuits

raster image zoom in

11| From KiCad, I plotted the PCB as SVG → imported it to Adobe Illustrator → transformed it to shape → selected all shapes → created a union → exported as SVG → imported to Cutting Studio → cut the circuit on copper tape.

raster image zoom in

12| This is how the circuit looks after cutting

raster image zoom in

13| Here, I connected the MPU to the ESP32 using a breadboard

raster image zoom in

14| I use Arduino IDE to program the ESP32 C3, and I made sure I had the library selected

raster image zoom in

13| I added , which was used in the simulation in step 5


#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

void setup(void) {
  Serial.begin(115200);

  // Define I2C pins for ESP32-C3 (SDA=8, SCL=9)
  Wire.setPins(8, 9); 

  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) { delay(10); }
  }

  Serial.println("MPU6050 Found!");
  
  // Set sensor ranges (optional)
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);

  delay(100);
}

void loop() {
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  /* Print out the values */
  Serial.print("Accel X: "); Serial.print(a.acceleration.x);
  Serial.print(", Y: "); Serial.print(a.acceleration.y);
  Serial.print(", Z: "); Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");

  delay(500);
}
					

raster image zoom in

16| I connected the USB to the ESP to start downloading the program

raster image zoom in

17| I had to reset the microcontroller by pressing the button

raster image zoom in

18| This is the button I pressed, and after a few minutes I got the following reading in the IDE

raster image zoom in

19| The readings of x, y, z axes as well as the acceleration of change. To make a better visual, I needed to plot these values on a chart

raster image zoom in

20| For that, I had to add a plotting command to my code, and I used Gemini to redefine the code to


// --- SERIAL PLOTTER FORMAT ---
// Format: "Label:Value,Label:Value,Label:Value"
  
  Serial.print("AccelX:"); Serial.print(a.acceleration.x);
  Serial.print(",");
  Serial.print("AccelY:"); Serial.print(a.acceleration.y);
  Serial.print(",");
  Serial.print("AccelZ:"); Serial.print(a.acceleration.z);
					

raster image zoom in

21| After re-downloading the new program to the microcontroller, I went to Tools → Serial Plotter

raster image zoom in

22| And I started to get the readings from the sensor in the graph

raster image zoom in

20|

Now I know what Reco meant by having super powers ^_^
  • Feedback: I'm very comfortable with the workflow I'm following. There might be easier steps, but I guess this is more of a spiral development with lower risk of errors: simulation → schematic design → PCB design → breadboard unit build → testing → cutting PCB → soldering → final testing → completing.
  • Challenge: I cannot be in the lab all the time, so the virtual simulation and finalizing the work on the laptop until I reach the lab is both helpful and uncertain — it all depends on my research and hypothesis, and might lead me to repeat all the work again.

Reflection

What worked
  • Starting in Wokwi let me build and test the MPU6050 wiring and code before I could get to the lab.
  • The full workflow — simulate, design schematic, design PCB, breadboard, cut, solder, test — kept each step low-risk.
  • Adding a plotting command turned raw serial numbers into a readable graph of the X/Y/Z axes.
What didn't
  • Working away from the lab meant some decisions were based on guesswork and had to be redone.
  • Fitting the sensor and microcontroller onto a 30mm copper-tape strip was tight.
  • The group analog/digital probing section is still incomplete.
What I'd do differently
  • Confirm sensor footprint and board size before routing, to avoid a tight redo.
  • Batch lab work so I'm not blocked waiting for lab access mid-task.
  • Add the serial plotter code from the start instead of after the first reading.
Key learnings
  • The MPU6050 over I2C is the core input for my final project — getting it reading reliably was a milestone.
  • Simulation first is a real time-saver when lab access is limited.
  • Visualizing sensor data (not just printing it) makes it far easier to tell if the sensor is behaving.