# Week 01 **09/06: introduction, computer-aided design** > No group assignment this week. --- # Week 02 **09/13: project management, computer-controlled cutting** > Characterize your lasercutter's focus, power, speed, rate, kerf, joint clearance and types. Group Members: Alan, Vincy, Rachele, Lucy ## Benchmark setup We created designs for our rastering test, kerf test, and different joint types. We used Fusion360, Onshape, and CQ editor with CadQuery to create the tests. We used 4.25mm cardboard provided for this week. We used GCC lasercutter and adjusted the laser settings, such as power, speed, and frequency. Our settings were 2.5 speed, 100 power, and 200 ppi. ## Measurement and Evaluation: After cutting, carefully measure the results of each test. ### Rastering Test with Different Gray Tones: This involves experimenting with different shades of gray in your design and using raster engraving to see how the laser responds to different tones. By adjusting the gray tone scale, you can control the depth or intensity of the engraving. ### Kerf Test: The kerf is the width of material removed by the laser during cutting. To test the kerf, we created a parametric comb-like structure with slots and tabs, and then measure how well they fit together after laser cutting. If the kerf is accurately set to 0.15, the slots and tabs should fit together perfectly. With this in mind, we modified the test file to check the negative kerf starting from 0.15 to 0.35 incremented by 0.05. Depending on how tight the connection shuold be a kerf between 0.25 and 0.30 is the best. ### Different Joint Types: To find out strong and precise connections in laser-cut designs we used chamfered and non-chamfered joints. Chamfered joints involve beveling at an angle, typically to ensure a snug fit when pieces are joined together. Non-chamfered joints would have a straight cut. By modifying the kerf comb to incorporate these joint types, we confirmed that the chamfered joints provide a better structural integrity. ## Mistakes - We forgot to set Hairline. - We forgot to save the cutting configurations. - We forgot to set the dimensions of the material. --- # Week 03 **09/20: embedded programming** > Compare the performance and development workflows for other architectures. ## Xiao RP2040 Arduino (C/C++) workflow Credit to [Adrian Torres' writeup](https://fabacademy.org/2020/labs/leon/students/adrian-torres/fabxiao.html#programmingRP) for a quick and easy summary; this tutorial re-summarizes it here. ### 1. Download and Install Arduino IDE: - Go to [Arduino website](https://www.arduino.cc/en/software) and download the latest version of Arduino IDE. - Install the Arduino IDE by following the setup instructions. ### 2. Install Board Support: - Open Arduino IDE. - Go to File > Preferences. - In the "Additional Boards Manager URLs" field, add the following URL: `https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json`. Home of the package lives in [this repo by earlephilhower](https://github.com/earlephilhower/arduino-pico/). - Click OK. - Go to Tools > Board > Boards Manager. - In the search bar, type "pico". - Click on "Raspberry Pi Pico/RP2040" by Earle F. Philhower, III and then click Install. ### 3. Select Your Board and Port: - With your board plugged into the USB port... - Go to Tools > Board and select "Seeed XIAO RP2040" from the list. - Go to Tools > Port and select the COM port that your XIAO is connected to. ### 4. Load Blink Sketch: - Go to File > Examples > 01.Basics > Blink. ### 5. Modify Blink Sketch: - In the sketch, you may need to change the LED pin number to match the onboard LED of the Arduino XIAO RP2040. - Replace `LED_BUILTIN` with `6`. ### 6. Upload Sketch: - Click the right arrow button ("Upload") on the top-left corner of the Arduino IDE. - Wait for the sketch to compile and upload to your board. - Once done, you should see the onboard LED blinking. - Fin! <pre class="mermaid"> flowchart LR A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[fa:fa-car Car] </pre> **Group: Cayden and Sam [Hope that you're ok if we added this here!]** ## Microprocessor vs Microcontroller ### microprocessors run a full operating system - the code is usually started on the micro-processing unit (MPU) and often written on the MPU - more powerful - more complex, more pins - higher clock speed - higher level languages supported - higher cost ### microcontroller has no real OS, or at most a real-time operating system (RTOS). The code is written on a more powerful machine (with an MPU/applications processor) and then uploaded to the microcontroller unit (MCU) - less powerful - ussually less complex - lower clock speed ussually - lower cost ## FPGA FPGAs actually run logic in hardware - they don't really run a program. Designers will write a hardware description language, and that is compiled into hardware, which is loaded into the FPGA. This can allow for logic to run very fast and at very low power, but is limiting in terms of complexity and scalability. ## Different MCU Families ### Main differences to consider - RTOS - Arduino, FreeRTOS, etc. - wireless capabilities - WiFi, Bluetooth, Zigbee, etc. - programming protocol type - UART, SWD, USB, etc. - peripheral support - SPI, I2C, I2S, etc. - built in hardware IO - e.g. RP2040 has PIO which is very extensable - built in timers and interrupts differ - number of cores can differ - MCUs with multiple cores and an RTOS can run seperate processes on different cores, making them more extensable - number of GPIOs and the type of interfacing supported (ADC, DAC, etc.) - logic level - some use 1.8V, some 3.3V, some 5V, and others might even use different logic levels. One might select a specific controller based on the logic level of the peripherals --- # Week 04 **09/27: 3D scanning and printing** > Test the design rules for your 3D printer(s). --- # Week 05 **10/04: electronics design** > Use the test equipment in your lab to observe the operation of a microcontroller circuit board. --- # Week 06 **10/11: computer-controlled machining** > *Do your lab's safety training.* > Test runout, alignment, fixturing, speeds, feeds, materials, and toolpaths for your machine. --- # Week 07 **10/18: electronics production** > Characterize the design rules for your in-house PCB production process. > *Extra credit: Send a PCB out to a board house.* --- # Week 08 **10/25: molding and casting** > Review the safety data sheets for each of your molding and casting materials, then make and compare test casts with each of them. > *extra credit: Try other molding and casting processes.* --- # Week 09 **11/01: input devices** > Probe an input device's analog levels and digital signals. --- # Week 10 **11/08: output devices** > Measure the power consumption of an output device. --- # Week 11 **11/15: networking and communications, midterm review** > Send a message between two projects. --- # Week 12 **11/22: interface and application programming** > Compare as many tool options as possible. --- # Week 13 **11/29: mechanical, machine design** > design a machine that includes mechanism+actuation+automation+application > build the mechanical parts and operate it manually > document the group project and your individual contribution > actuate and automate your machine > document the group project and your individual contribution --- # Week 14 **12/06: wildcard week** > No group assignment this week. --- # Week 15 **12/08: final assignments/orders** > No group assignment this week. --- # Week 16 **12/13: project development** > No group assignment this week. --- # Week 17 **12/19: project presentation** > No group assignment this week. ___ <small>&copy; 2023 [HTM(A)A'23](http://fab.cba.mit.edu/classes/863.23/index.html) [CBA Section](http://fab.cba.mit.edu/classes/863.23/CBA/index.html). Template adapted by [A. Han](http://fab.cba.mit.edu/classes/863.23/CBA/people/Alan), credit to [EECS'22](http://fab.cba.mit.edu/classes/863.22/EECS/) for adapting it first. Powered by [`strapdown.js`](https://ndossougbe.github.io/strapdown/), [Markdown](https://ndossougbe.github.io/strapdown/demos/markdown_syntax.html), [ChatGPT](https://chat.openai.com/) for some summarizing, and [MathJax 3](https://www.mathjax.org/) for \\(\LaTeX\\) rendering.</small>