Skip to content

FINAL PROJECT

Here is my final project slide:

Answering the questions:

What will it do?

The Impromtu Speech Selector will take in inputs from the webserver hosted using Xiao esp32c3 which will be stored in google sheets. Upon pressing the emoji button(the randomiser button), a random topic will be displayed on the i2c lcd and a random grade and a roll number will be displayed (from the code which will be programmed through arduino ide). After a student is picked and done with the speech, the teachers will either approve or disapprove the speech. If approved, the thumbs up button will be pressed and the roll number will be removed from the loop. However if disapproved, the thumbs down button will be pressed and the roll number will be inserted back in the loop (meaning nothing will change).

Who’s done what beforehand?

No one in particular has done the same thing as I did. However, Ms.Lorena Delgado PiƱa did do something similar to my project during her week 14’s assigniment where she generated random numbers using the random function.

What will you design?

I will be designing my enclosure using fusion 360 which will contain a top and base which will be laser printed, the middle layer which will be milled using the shopbot and the button covers which will be 3d printed.

What materials and components will be used?

I will be using:

  • 20x4 i2c lcd -1x
  • xiao esp 32c3 - 1x
  • Tactile push button - 3x
  • Piezo buzzer - 1x
  • Resistor 1k - 1x
  • Resistor 220 ohms - 3x

How much will they cost?

Here is the list of the component’s cost:

What parts and systems will be made?

  • Top, middle and bottom layers
  • Button covers
  • Electronics

What processes will be used?

Foe designing, I am using fusion 360 and for cutting and milling the enclosure, I will be using the 3d printer, laser cutter, vinyl cutter and CNC. For my pcb boards, I am using KiCad for designing and MODS to create the rml file. For milling my pcb board, I will be using the Roland SRM-20.

What tasks have been completed, and what tasks remain?

For now, I am done with my enclosure and I am currently moving on to the programming part. I used laser cutter, 3d printer, shopbot and vinyl cutter for my enclosure. I am also done with my final project board and it’s system integration.

So programming, final project video and presentaion/ slide are some tasks that remain undone.

What’s working? what’s not?

I started off with the idea of using google sheets for storing my data, however, I wa not able to make it work so I switched to arrays. So the google sheets did not work but then, the arrays is working.

What questions need to be resolved?

“Whether my project will work or not?” This is the BIGGEST question that needs to be resolved for me.

What will happen when?

The presentation and the video will be done by 5th of june and I want my final system integration to be done by at least 4th of June.

What have you learned?

I’ve learned a lot about digital fabrication. I gained knowledge on how to create amazing projects using cool equipment like 3D printers, laser cutters, and CNC machines. I also gained practical experience in the design and construction of electronic circuits. I gained insight into project planning and management from the training, and I realized how crucial it is to meticulously record my efforts. My ability to collaborate with people and solve problems has improved as a result of this course. In general, Fab Academy has equipped me with the knowledge and self-assurance I need to realize my artistic visions.

Drafting

I started off by making a workflow for the next few days. I was able to make a basic layout of my project with my Fab GURU Rico-san. Following are some images showing the work we did:

Here is my workplan for the last few days:

Designing

Then I immediately moved on to designing my enclosure which was a pear! With the lack of time, I decided to use all the machines intead of depending on the 3d printer.

Laser Cutter

After saving my design as dxf, I was able to print my top and base of my enclosure using the laser cutter. Here is a picture of me setting up the laser cutter(Check out my week 3’s documentation to view the safety measures about the laser cutter):

Here is how it turned out:

CNC Shopbot

For the Middle layer for my enclosure, I decided to use the shopbot to cut it as it was faster and more convient. Check out my week 7’s documentation to view the safety measures of the shopbot!

Here is how it turned out:

3d printer

I used the Prusa MK3 printer for printing my buttons, screws and the board holders. Check out my week 5’s documentaion to know more about the printer and its as safety measures!!

After that I started designing. As usual, I started by creating a sketch and then imported a pear image and drew an outline over it.

I then excruded the pear and make slots for my lcd and buttons. And here is how it turned out:

After designing the enclosure, I started desiging my buttons and they turned out pretty cute:

Then, I made slots for the screws, the pcb holders and here is the final visual:

And here is how the buttons turned out:

I used prusa slicer to slice my design

After a bit of painting, her is how the buttons look:

Vinyl Cutter

I used the vinyl cutter to cut the sticker I designed during week 2 of Fab Academy. Check out my week 3’s documentation to know more about the vinyl cutter.

Here is the output:

Roland SRM 20

For the pcb, I am using kicad for designing and Roland SRM-20 for milling the pcb board.

In Mods right click -> Programs -> Open Program -> Roland (SRM-20 mill 2D PCB)-> Select png/svg

Here is my schematic and pcb design of my board:

System Integration

After soldering the required components to my board, I used heat syringe to keep the wires together. After giving my best to arrange the boards and wires, here is how it turned out:

After integrationg my enclosure together, this is how it looks:

Programming

Since I was short in time, I used arrays to store data intead of the webserver and the google sheets. I firstly started by writing the code for generating the random grade and topic. After that I added a topic array and then wrote the code such that I was able to display the topic in a scrolling manner. AFter wokring on the code for almost 2 days (Since I was stuck with google sheets), I was able to get the code below:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define BUTTON_PIN 3
#define BUZZER_PIN 4

#define SCROLL_DELAY 300 // Adjust the delay as needed
#define DISPLAY_WIDTH 20 // Width of the LCD display
#define BUZZER_FREQUENCY 2000 // Frequency in Hz
#define BUZZER_DURATION 100 // Duration in milliseconds

// Initialize the LCD with the I2C address (usually 0x27 or 0x3F for 20x4 LCDs), 20 columns, 4 rows
LiquidCrystal_I2C lcd(0x27, 20, 4);

// Topics array
char topics[5][50] = {
  "What is the meaning of mindfulness?",
  "Why does Bhutan have 2 leaders?",
  "What is the purpose of Reflection time?",
  "Is technology good or bad?",
  "Why does GNH have 4 pillars?"
};

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

  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(BUZZER_PIN, OUTPUT);
  noTone(BUZZER_PIN); // Ensure the buzzer is off initially

  lcd.begin(); // Initialize the LCD
  lcd.backlight(); // Turn on the backlight

  lcd.clear(); // Clear the display
  lcd.setCursor(0, 0); // Set cursor to the first line
  lcd.print("Press the button"); // Print a message
  lcd.setCursor(0, 1); // Set cursor to the second line
  lcd.print("to proceed");
}

void loop() {
  // Wait for button press
  if (digitalRead(BUTTON_PIN) == HIGH) {
    tone(BUZZER_PIN, BUZZER_FREQUENCY, BUZZER_DURATION); // Turn on the buzzer
    delay(50); // Debounce delay
    if (digitalRead(BUTTON_PIN) == LOW) { // Check if button is still pressed
      // Clear display before displaying new topic
      lcd.clear();

      // Generate random grade between 7 and 12
      int grade = random(7, 13);

      // Generate random roll number between 1 and 60
      int rollNumber = random(1, 61);

      // Select a random topic
      String topic = topics[random(0, 5)];

      // Display grade and roll number
      lcd.setCursor(0, 0); // Set cursor to top-left corner
      lcd.print("Grade: ");
      lcd.print(grade);
      lcd.setCursor(0, 1); // Set cursor to the beginning of the second row
      lcd.print("Roll: ");
      lcd.print(rollNumber);

      // Display and scroll the topic if needed
      int scrollPosition = 0;
      int topicLength = topic.length();
      if (topicLength > DISPLAY_WIDTH) {
        while (digitalRead(BUTTON_PIN) == LOW) { // Continue scrolling while button is pressed
          lcd.setCursor(0, 2);
          lcd.print("Topic:");
          lcd.setCursor(0, 3); // Set cursor to the beginning of the fourth row
          lcd.print(topic.substring(scrollPosition, scrollPosition + DISPLAY_WIDTH));
          scrollPosition++;
          if (scrollPosition > topicLength - DISPLAY_WIDTH) {
            scrollPosition = 0;
          }
          delay(SCROLL_DELAY);
        }
      } else {
        lcd.setCursor(0, 2);
        lcd.print("Topic:");
        lcd.setCursor(0, 3); // Set cursor to the beginning of the fourth row
        lcd.print(topic);
      }

      // Wait for button release
      while (digitalRead(BUTTON_PIN) == LOW) {
        delay(100); // Pause before repeating the loop
      }

      noTone(BUZZER_PIN); // Turn off the buzzer

      // Clear the display and show the initial message after button release
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Press the button");
      lcd.setCursor(0, 1);
      lcd.print("to proceed");
    }
  }
}

After running the code, this is how the output turned out:

I also added a buzzer and this is the output:

Here are some test video:

Demo / Test

After that, I did a demo in the dining hall of my school and it turned out pretty well. View my final project video linked at the begining of the documentation to see the demo. Here are some pictures of the demo:

I then worked on my slide and video. This is the end of my documentation about my final project!!! HOPE YOU ENJOYED!

Files

This website templete was used from Mr. Anith Galley with his permission.

Have A Good Day!


Last update: June 27, 2024