Automated ChatGPT Ouija Board
by jhollings626 in Circuits > Robots
3178 Views, 40 Favorites, 0 Comments
Automated ChatGPT Ouija Board
An Automated Ouija Board that Moves on its Own!
Hi, I'm Jack Hollingsworth, a senior currently enrolled at Charlotte Latin School in Charlotte North Carolina and an incoming freshman in the McKelvey School of Engineering at Washington University in St. Louis! I am interested in AI, automation, personal fabrication, and machining.
This project uses a 2-axis mostly 3D-printed Open-Sourced CoreXY CNC machine (from DIYMachines' Kinetic Sand Table) and a magnet mounted to the carriage to spell modified ChatGPT outputs on a Ouija board, allowing the board to truly move on its own as though it is actually being operated by spirits! The project uses an Arduino running GRBL and a simple Python script running on a laptop to submit spoken or written questions to ChatGPT and generate machine code from the responses that is then spelled on the Ouija board.
While the project is definitely useful for scaring your friends and is a neat conversation starter, I think its real technical value lies in the proof-of-concept that it offers for the integration of generative LLMs in future projects, as a tool like ChatGPT was not available when I originally decided to build this project in October of 2022, and the techniques that I experimented with to generate "Ouija-esque" outputs were less than impressive, almost making me shelve the project early in its development. However, with ChatGPT, by offering it a single pre-written prompt at the beginning of a conversation, it can output concise, and oftentimes hilariously cynical, responses to most questions.
Additionally, per section 5.1 of the rules for the Game Design contest, I have received permission from the original designer of the CNC machine, DIYMachines, to include his open-sourced designs in my project.
Supplies
Supplies
- 1.75mm - 1kg - Gray PLA - $24.99
- 2x - NEMA 17 Stepper Motors - $13.99
- 1x - GT2 Timing Belt Pulley w/ 5mm 20 Tooth Wheels - $14.99
- 4x - GT2 5mm Bore Toothless Timing Belt Pulley, 6mm Width - $7.99
- 1x - Elegoo Arduino Uno - $16.99
- 2x - UART Stepper Drivers - $19.99
- 3x - Limit Switches - $6.98
- 1x - 30mm 5V Fan - $9.99
- 1x - Arduino CNC Shield - $7.99
- 2x - 400mm Linear Rail - $22.99
- 1x - 600mm Linear Rail - $34.99
- 2x - 1.26" Neodynium Magnets - $8.99
- 1x - 22 Gauge Electrical Wire - $12.99
- 1x - 12v DC Power Supply w/ Female Barrel Connector - $8.89
- 2x - 2' x 4' x 0.5" Birch Plywood, Generic - ~$30
Hardware
- 6x - M5 x 20mm
- 18x - M3 x 8mm
- 19x - M3 x 12mm
- 6x - M3 Nuts
- 1/2" Modified Truss Wood Screws, or generic 1/2" wood screws
- Various fasteners for enclosure
Tools/Machines
- 3D Printer
- Table Saw
- Laser Cutter
- Electric Sander/Drum Sander
- 2.5mm Hex Key
- Multimeter
- Electric Screwdriver
~~~Total Cost: $295.74~~~
Fabricate the Enclosure
I began the design of the enclosure for the CNC machine knowing that the machine itself would measure 600mm x 400mm, so I decided to include a slight offset on each side to make the installation of the machine, electronics, and wiring easier and also add additional space for future carriage upgrades.
I decided to go with 760mm x 560mm for the complete footprint of the machine, allowing for an additional 80mm on the side that houses the electronics while the 80mm on the other end will be utilized for the lengthening of the carriage in future iterations of the machine.
Using Fusion360 for this phase of the design was fairly simple, as I simply created the rectangular base of my specified dimensions extruded to the thickness of my wood and then designed four rectangular walls that would be secured to each other and the base to complete the enclosure. I also added a passthrough for wiring on one side that will be covered by a 3D-printed I/O panel later on.
First, laser cut (or CNC mill) these enclosure pieces out using the .dxf or .f3d files provided below or use a table saw to produce the following pieces:
- 1x - 760mm x 560mm base
- 2x - 810.8mm x 182.7mm long axis walls
- 2x - 560mm x 182.7mm short axis walls
If you cut it with a table saw don't forget to also mill, laser, or otherwise cut a hole for a cable passthrough. This works best near the corner (but not in the corner) of one of the long axis walls to minimize total cable used in the project.
Please note that the 182.7mm is the height of the machine and can be decreased quite significantly to give the machine a smaller profile. I would not recommend going below 120mm as you would get close to the other machine parts, but this would make it less obvious what's inside and reduce material cost.
The .dxf file assumes the use of 4' x 2' plywood and is ready for toolpath generation if you're machining it.
You will be left with the pieces pictures in Image 2 above after machining or cutting the wood.
3D-Print Enclosure Supports
Before you can finish constructing the enclosure, you'll first need to 3D print four corner supports that will increase the structural integrity of the enclosure and serve as supports for the inlayed Ouija board top of the machine.
Download, slice, and print the .3mf file below until you have four of these supports. I printed these on a Prusa Mini on quality settings with 20% infill.
Build the Enclosure
Now it's time to build the enclosure that will house the CNC Machine! Begin by location about 20 fasteners and an electric screwdriver that will be used to secure the different pieces and supports to one another. I used 1/2" modified truss wood screws, but anything relatively small should do the trick here (except for when securing the printed supports, which must use 1/2" screws so as to not poke out of the enclosure).
Begin the assembly by aligning one of the long axis walls with the base and securing it with five or six roughly equidistant screws starting and ending at the corners of the base.
Once the first long axis wall is secured, repeat the above process for the second long axis wall, such that there are two 560mm long spaces created by the overhang of the two walls to allow you to slot in and secure your short axis walls.
Next, slot in and secure the short axis walls to the base with four or five roughly equidistant screws. You can also begin securing the different walls to each other on the outside of the machine now, so add two screws in each corner securing every piece to each corner.
At this point, your enclosure should look like that in Image 1 without the corner supports, which you're going to install now.
For this step, it is mandatory that you use screws less than 1/2" in length (or whatever the thickness of your wood is if you chose something else), so they don't poke out of the side. Each support must rest 1/2" into the enclosure so that the inlayed Ouija top sits flush with the rest of the machine once it is installed later on. With this in mind, secure each corner support 1/2" into the machine using 1/2" wood screws.
Once your supports are in, the enclosure is now complete and we can begin focusing on the CNC Machine!
3D-Print Machine Parts
Now you're going to start 3D-printing all of the machine parts. There's quite a lot of parts in this machine, so you'll probably need a couple days of print time if you only have one printer. All of the machine parts, with the exception of the magnet mount, are open-sourced, publicly available models.
For the design of the modified magnet mount pictured at the top of this step, I used Fusion360 to create a threaded hole for an M3x5 bolt to secure the mount to the machine's carriage, then used a extrusions and loft angles to create an optimal mount for a magnet, such that it would brush against the Ouija board top and move the planchette on the surface of the board.
For this step, I have included a list of the files as well as how many of each you'll need to print. After you have printed the required quantity of each model and have a finished enclosure, it's time to assemble the machine.
- 1x - BeltGrip.stl (Image 1)
- 1x - GRBLCase.stl (Image 2)
- 1x - GRBLCaseLid.stl (Image 3)
- 2x - IdleSupport.stl (Image 4)
- 1x - MotorBaseLeft.stl (Image 5)
- 1x - MotorBaseRight.stl (Image 6)
- 4x - WireLoop.stl (Image 7)
- 2x - X-CarriageMount.stl (Image 8)
- 1x - ModifiedSupport.stl (Image 9)
- 1x - MagnetMount.stl (Image 10)
Downloads
Build & Install Machine
It's now time to build the machine. As the CNC is open-sourced and incredibly well documented by its original creator, I'd highly recommend referencing DIYMachines' video on the original project as a supplement to the instructions for this step, especially the earlier steps where the alignment of the different components is crucial to the operation of the machine, so you'll want to guarantee that you get it right. With that said, let's begin the machine build.
First, begin the assembly by bolting your two NEMA 17 stepper motors to each of the motor housings, ensuring that the pins on the motor are coming out of the back of each housing, as pictured in Image 2 above.
After the motors are secure in the housings, you're going to attach the linear rails for the short axis to an idle support on one end and one of the motor housings on the other end (using an M3x12 bolt on each end), such that you will end up with two separate pieces containing an idle support and one of the two motor housings connected via one of the 400mm linear rails.
After this is complete, attach your X-CarriageMounts to the blocks on each rail using 4 M3x8 bolts. After this, your Y-axis pieces are complete and now you just need to attach the one 600mm linear rail to each of the X-CarriageMounts to finish the complete footprint of the machine as pictured in Image 1 above.
Once the X-CarriageMounts are installed, secure the long linear rail to each X-CarriageMount using 2 M3x12 bolts on each end, such that at the end of this step you should be able to manually move the X-axis up and down the two short axes using your hands.
At this point, you're now ready to install the completed footprint of the machine in the enclosure. There's still a bit more to do, but I think it's best to get the machine screwed down to the enclosure as soon as reasonably makes sense. To begin, place the machine in the enclosure and make sure the motor mounts and the idle supports are perfectly aligned. If they're not, you're going to encounter some wobbling of the X-axis later on that will require a lot of unscrewing and rescrewing to resolve, so please ensure you do it right the first time (I did not do it right and fixing it was not fun).
- This is a part of the project where I'd strongly recommend checking out the guide on the DIYMachines YouTube channel, as this part of the process is explained very well over there and obviously offers a video that you can follow along with as well!
Once the machine is aligned inside of the enclosure, ensure that you have ample space on the side with the cable passthrough to mount the case for the Arduino and CNC shield later on (placing the motor mounts 25mm off of the wall at their closest point will leave you with more than enough space for the carriage to pass by even at its closest point).
After the machine is in the correct location, secure it to the base by the motor mounts and the idle supports using 1/2" wood screws.
Now we're going to secure the magnet mount to the X-axis carriage. Take 4 M3x8 bolts and secure the magnet mount to the carriage. Go ahead and find the belt tensioner too because you'll need this in the next step.
At this point, the footprint of your machine is done and should look like that pictured in Image 1 at the top of this step.
Install Wheels & Belt
Now it's time to install the teeth and the belt on the machine that will allow your motors to actually move the carriage around. Let's begin with the installation of the following parts:
- 4x - Toothed GT2 Idler Wheels (5mm bore)
- 4x - Smooth GT2 Idler Wheels (5mm bore)
All of the wheels will be installed with M5 bolts.
First, attach two of the non-toothed idler wheels to each of the X-Carriage Mounts using M5 bolts. Next, attach one toothed wheel to each motor mount and each idle support, such that your machine will look like Image 1, just without the belt (which we're going to install now).
For the installation of the belt, make sure you have your belt tensioner ready to secure the belt to the magnet mount. You will also need to cut the belt (probably several times to get the length right), so go ahead and grab a pair of scissors before continuing with this step.
Once you're ready, go ahead and wrap the belt around the machine as pictured and cut it a bit longer than what you think is necessary. From here you can attach one end of the belt tensioner to one end of the belt using an M3x5 bolt, leaving you with enough slack on the other side to really refine the length of the belt.
At this point, play around with the length and cut it once it's at a point where you can spin the motors manually and see an instant response in the movement of the carriage. Once you're satisfied, all of the hardware for the machine is ready and we can move onto the installation of the electronics and get your machine moving under its own power!
Machine Wiring and Electronics Setup
With the machine completed, now it's time to install some final electronics and then wire everything together!
The machine uses 3 limit switches for homing, 2 are used for the homing of the Y-axis and one is used for the homing of the X-axis. There are no mounting points for the endstops as variations in the alignment of your machine may require uneven mounting of the different switches to ensure that the X-axis is straight when the machine is homed. You're going to want to use hot glue for the mounting of the limit switches too, so if you mess up it's very easy to melt the glue and move them rather than having to scrape super glue off of the sides of the machine.
Before we can install the limit switches, however, you'll need to solder wires of varying lengths to the pins of the endstops. Right now, go ahead and designate which switch is going to be for the X-axis, and which one will be the left and right switches for the Y-axis, as each switch requires a different length of wire. Reference Image 2 and the bullet points down below for each endstop and solder the necessary wire to the designated pin on the endstop.
- X-axis Endstop: Pin 2 = 40cm, Pin 3 = 40cm
- Left Y-axis Endstop: Pin 2 = 80cm, Pin 3 = 40cm
- Right Y-Axis Endstop Pin 2 = 80cm (the same wire as Pin 2 on the left endstop), Pin 3 = 50cm
Now that the wiring is completed, you can begin the installation of the limit switches!
Image 1 above shows the correct installation of the endstop for the X-axis. Place the switch on the left motor mount such that the angled part of the magnet mount is able to collide with it and press it down before it hits the wheels. Ideally, you'll have a couple millimeters of clearance between the maximum depression point of the switch and the wheels as pictured above. Once you're satisfied with the placement, go ahead and hot glue the endstop to the motor mount as shown in the image.
Image 3 shows the mounting solution for the Y-axis endstops (particularly the right motor mount). You'll want to position them such that the the X-Axis carriage mounts collide with the one on the right and the one on the left simultaneously, even if it means letting one of the switches hang off of the mount a little as shown above. Ideally, they will be even, but if you made any measurement errors in the installation of the machine this is a very great place to compensate for it that will have little to no effect on the final state of your machine.
You'll probably need to play with the Y-axis endstops a bit more since both of them need to acuate at the same time, but once you're satisfied with their installation it's time to move onto the installation of the Arduino and its onboard electronics.
At this point, if you haven't done so already, go ahead and attach the wires to each of your DC motors.
Next, you're going to install the Arduino inside of the GRBLCase that you printed earlier. Take the case and secure the Arduino inside of the case using M3x8 bolts. After you have secured the Arduino inside of the case, it's time to install the motor drivers atop the CNC shield.
Take two stepper motor drivers and attach heatsinks on top of them if you have them. As the machine only features two axes, you don't need to worry about the connector labeled "Z" on the CNC shield. Attach one stepper driver to the sections of the shield labeled "X" and "Y," ensuring that the pin on the driver labeled "Enable" (or EN) is aligned with the top left pin on the respective section of the shield. Reference Image 4 above for correct installation of the stepper drivers.
Before you install the shield, make sure to install 60cm long wires to each of the power connectors on the shield. Screws these down tight as they can be a pain if they come undone after installation of the shield.
Now you're going to need to set the voltage of each driver individually. Find a small phillips head screwdriver that is able to turn the screws on top of the driver and grab a multimeter. Probe the negative power connector of the CNC shield with the black wire on the multimeter and probe the screw on the driver with the red wire, turn the screw until the multimeter reads 0.6V.
Now that your CNC shield is prepped and the Arduino is already installed in the GRBLCase, you can go ahead and mount the shield to the Arduino by connecting the shield's male headers to the female headers on the Arduino. Take your CNC shield and attach it to the Arduino, ensuring that every pin on the shield is properly aligned before pushing it deeper into the female connectors on the Arduino, as it is very hard to get out when mounted inside of the case. Once the shield is snugly slotted into the Arduino, you're ready to finish up the wiring of the completed machine.
When looking at the machine from the side of the Arduino, attach the wires of the motor on the right side to the "X" section of the CNC shield. Attach the wires from the left side of the machine to the "Y" section of the CNC shield.
Next, screw the other ends of the two power connectors that you attached to the CNC shield to a female DC barrel connector. Go ahead and get your DC power supply reader and test the fitment to ensure that it fits into the barrel connector as you'll be needing to power your machine shortly. Once you're satisfied with the wiring, you're done! Don't screw the GRBLCase to the wall of the enclosure or screw down the lid just yet as you might need to go back in and reroute some wires or check connections as we begin testing the machine in the next few steps. With that said, it's now time to download the machine code from GitHub and begin testing the machine's basic functions.
Download Code From GitHub Repo
All of the code for the project is stored conveniently in a single GitHub repository, so you'll only need to perform one download to get all of the code that will be used throughout testing and in the final state of the machine (besides a couple Python libraries whose installation and configuration I will detail later on). The download process is relatively straightforward, simply follow this link to my GitHub profile and then choose to download the repository as a .zip file, as pictured in Image 1 above.
Once you have the zip downloaded, go ahead and extract all of the files inside of it (this isn't pictured as it varies by OS), as you'll need everything but the grbl file to be extracted later on so it's best to go ahead and do this right now.
Test GRBL
It's now time to test the machine for the first time. The documentation here will focus on the installation of the GRBL library in the original Arduino IDE, but know that all of these steps should be reasonably easy to replicate in the IDE 2.0 if you want to do it in there.
In your IDE, first open up a blank sketch. Navigate to the 'sketch' dropdown, and select 'Include Library' --> 'Add .ZIP Library' as pictured in Image 1.
Next, navigate through the .zip file that you downloaded in the previous step until you find the folder titled 'grbl' - Select this folder and open it, and it will be added as a library in your Arduino IDE.
When you successfully install the library you should be able to see a couple of example sketches that are associated with the grbl library. To see these files, navigate to 'File' --> 'Examples' in the IDE and select the file called 'grblUpload.' This file is the one we are going to have on the Arduino throughout the testing and the final implementation. This process is pictured in Image 2 and Image 3 above.
If you haven't already, connect your machine to your Arduino via a USB Type B cable if using the Elegoo Arduino Uno from the BOM and upload the 'grblUpload.ino' sketch. Once the sketch uploads, you're ready to begin typing commands to your machine.
Open a serial monitor window using 'Ctrl+Shift+M' in the Arduino IDE or navigate to 'Tools' --> 'Serial Monitor' in the IDE. Once you have the serial window open, you should see 'Grbl 1.1h [‘$’ for help]' on one line and then an 'ok' statement on the next line if everything is ready to go. There's a wide range of problems that could cause you to not have this 'ok' print such that I can't write about all of them here, but my best recommendation for troubleshooting if you don't get this to work immediately would be consulting the forums at Openbuilds.com as there's a vast array of issues that have been diagnosed and solved over there!
Now we can test the homing function of your machine, which will verify that the machine can receive commands, the motors are working, and the endstops are working as intended. Be ready to unplug the machine if something goes wrong. Begin by typing in "$H" and sending the command via serial, verify that the COM port is correct and the baud rate is 115200 (it won't work on any other baud rate!!). You should see your machine move until the long axis depresses the endstops attached to the motor mounts, meaning the Y-Axis is homed, and will then home the X-axis by moving the carriage towards the endstop attached to the left motor mount. Once your machine completes the homing (shown in the video above), you're ready to begin turning this CNC machine into an automated Ouija board by fabricating the top portion of the enclosure and connecting it to its ChatGPT brains.
Fabricate Ouija Board Top
Now that you've got the machine working, you can now fabricate the Ouija board top of the enclosure that the machine will use to spell the ChatGPT output. This step requires a laser cutter or other engraving attachment for a CNC machine and a table saw.
I began by designing the top of the board in Fusion360 by creating a rectangle of the desired dimensions (755mm x 555mm) and importing art on top of it, leaving me with the final design pictured in Image 1 above.
I first cut the perimeter of the top piece on a table saw. While I could have cut this on the laser too, I wanted to avoid charring and the <1 minute it takes to cut on the table saw is certainly optimal too. I decided to make my top piece 755mm x 555mm to leave about 5mm on each axis just to make it easier to remove the top, but if you want it to fit a bit more snugly you are certainly welcome to make it larger, just know that the .dxf file for the artwork included below is obviously designed around this decision. After table sawing all 4 sides of your wood you down to the desired dimensions you should be left something that looks like the wood in Image 2.
Next, as the FabLab that I work in has Epilog Laser laser cutters, I exported the design as a .dxf and opened it in Corel Draw to generate toolpaths. After only selecting the engraving geometries (it's best to use a table saw on the perimeter to avoid charring), I exported the file and engraved it. I have not detailed this process in the Instructable as laser cutter workflows vary dramatically by brand, and I trust that if you are going to be operating one to make this project then you are probably already familiar with the workflow for your respective machine.
- I used standard feeds with slightly higher speed for the engraving of the letters as I did not want the depth of the letters to affect the smoothness of the magnet moving across the surface later on, and I used deep engraving settings for the engraving of the outline to make it clearer.
Anyways, after engraving on a laser, you should be left with the piece pictured in Image 3. This piece can also now be inlayed on the supports that you installed while building the enclosure during Step 3, so the machine now looks complete as pictured in Image 4. And yes, the top piece is installed backwards in Image 4, you'll want to have it facing the other way in the end so the cables can sneak out of the back with the letters facing in the other direction.
Downloads
Software Configuration
With the machine ready, we can now move onto configuring the software for the machine. Note that I made this before OpenAI released the official ChatGPT API so my code still uses an implementation of a third party wrapper that can be downloaded via pip or from its GitHub repository.
To download via pip, copy the following command into your command line.
pip install git+https://github.com/mmabrouk/chatgpt-wrapper
You'll need to have git installed to do this - go here to install it.
Next, you're going to need to pick a browser to run the instance of ChatGPT in. It'll run in the background, so I'd recommend something lightweight like Chromium or Firefox. Go ahead and run the following command to install a browser in playwright.
playwright install firefox
Now it's time to actually setup the ChatGPT wrapper, which just requires you to login to OpenAI in the browser that you selected in the previous step. Run the following command to get started.
chatgpt install
After logging in, you should be ready to go. Run the following command to submit prompts directly via command line to see if everything is working. If you can get output from here, then you're ready to begin deploying the software for the Ouija board.
chatgpt
By this point, you should have already downloaded all of the code after downloading the project's git repository in Step 8. Now go ahead and add the project files to a text editor (instructions will use VSCode), so you can easily navigate between them. This is pictured in Image 1.
The code works by circumventing the typical ChatGPT restrictions by offering it a long custom prompt (a modified version of the popular DAN prompt) that essentially jailbreaks it, allowing it to pretend to be a spirit and output pithy and less than objective responses, which is what we want.
If you're just following along with this guide and simply want to test the prompt, you can just download the .txt file included below and copy it into ChatGPT online, or follow along with the installation process and run 'receiveViaText' in the Git repo to test the Python script that includes the ChatGPT elements but does not require a serial connection to the machine. Note that best results will be achieved by adding something along the lines of "Respond in a maximum of 3 words and prioritize humor over factual accuracy" to the end of each question that you ask it. I have also observed that the conditions of the original prompt seem to "stick" for longer when used in an OpenAI account with GPTPlus, but this is absolutely not required for the project to function. This does work on every model offered, but I tend to just use GPT3.5 for its superior speed.
After doing this, we can then take the output from human-generated questions and translate them into machine code letter by letter, which is sent to the Arduino inside of the enclosure (it's never actually stored on the Arduino, the GCODE just piles up in memory and is worked through) and spelled on the machine. The coordinates for each letter are hardcoded and stored in a dict in the Python script, so after removing all of the punctuation and spacing from the ChatGPT output, the words can be turned into GCODE and sent to the Arduino.
To configure the script for your own machine, you'll need to make sure you are initializing serial to the right COM port. The easiest way to do this is to open your Arduino IDE (with your Arduino plugged into your machine) like normally and navigate to 'Tools' --> 'Port' and see which serial port has an Arduino connected to it. This process is shown in Image 2.
Once you have changed the 'port' variable to the correct COM port in the Python script you're ready to begin testing in the next step. Note that you will have to repeat this process for each script you want to try later on.
Downloads
Test Final Python Script and Enjoy!
First, place a 1.26" neodymium magnet (from the BOM) in the modifiedSupport on the carriage if you haven't done so already. Now place the engraved Ouija board piece on top of the machine and place another magnet on top of the one in the support. You should feel the magnets snap to each other through the board. See Image 1 for the machine with the magnet placed on top of it. For now the machine only works with just the magnet on top of the magnet inside. I designed and printed a planchette with a single mounting point, but it spun too often to be viable in this version of the machine. I am currently working on a redesigned carriage with two mounting points that will allow for the larger planchette to be used to add another element of immersion to the project.
There are two scripts in the Git repo that will work in the final machine, one takes questions via a microphone and the other via text. This guide will focus on the text implementation, but if you want to use it with voice input everything you need is in the Git repo so it doesn't require any additional installations.
To begin, find the file called 'finalTextInput.py' and run it. You should see a series of checks performed and printed in the console, after which the CNC will begin homing. If this does not happen, restart the code (I still get this error on startup sometimes, most of the time it is due to poor wiring to an endstop) and it should work after a couple of tries maximum. If it does not work, explore other debugging methods and try to get an error code to print in serial in the Arduino IDE as the Python script does not read serial from the onboard Arduino.
While the machine is homing, you should see a print saying 'Ouija Mode Enabled. Ready for questions' meaning that the jailbreak prompt has been passed to ChatGPT and a response has been received. Wait until the machine is homed to submit questions. I generally try to not pass multiple questions at once either as the GCODE that is generated is never actually stored in the Arduino and is just piling up in the local stack, so sending too much could eventually present a problem (though this is unlikely as most responses are only about 30 characters at the most as the program will always try to keep responses under 3 words).
At this point, your machine should be spelling ChatGPT responses and working perfectly. If not, I am always here to help debug and answer questions about the project. Thanks for reading (and hopefully making) this project! I have included a few videos at the top of this step (one shows the console but screen recording failed for the second one) to show the machine in its final state answering questions input via text in real time (the voice input is admittedly still kind of buggy). Anyways, I really appreciate you reading this Instructable and again, I'd love to answer any questions about it or talk about future upgrades to it in the comments, as I definitely have a few things planned/in progress for a V2 already!