AUTODESK: Make it Home Student Design Contest

 

https://www.instructables.com/contest/makeithome2025/

(from the website:)

In this contest your challenge is to design an affordable housing solution that could also address another problem. We are giving away more than $50,000 in prizes to the best entries!

Designing and building permanent, supportive housing is a collective effort. How might we reimagine policy frameworks and think differently across a variety of industries and sectors to address this problem? What if affordable housing could solve other problems in a community?

We are excited to launch a new chapter of the annual Make It Real contest with NFL quarterback Joshua Dobbs, who studied aerospace engineering as an undergrad and interned at NASA. In the new “More Than a Destination” film series, Josh visits Factory_OS, a California-based affordable housing builder, located inside a repurposed shipyard hangar with a fascinating history. Watch the films to learn more about the problem behind this year’s challenge!

Individual Prize: Best use of CAD or BIM Tools

Individual Prize: Best Physical Prototype

Individual: First Prize Scholarship Award

Best Team Use of CAD or BIM Tools

Team: First Prize Scholarship Award

 

SBU students can contact jennifer.adams@stonybrook.edu if you would like assistance from the SBU Libraries in entering this contest.

Closes June 30th!

 

Bringing Two UP Mini 2 Printers Back to Life

This past week I’ve rolled up my sleeves and tackled checking whether two new-to-us UP Mini 2 3D printers from Tiertime were still functional. These compact machines had been tucked away for quite some time—unfortunately, in a room that suffered a significant flood. One unit had been stored in its original box (lucky break), while the other had been sitting exposed on the floor. Needless to say, I had some concerns about their condition.

The two 3d printers sitting on a table.

I started with the boxed unit, which appeared to be in better shape. When I loaded a fresh spool of filament, it threw an “Insufficient Material” error—even though I could clearly see the filament had been fed properly. The fix? Manually entering the filament weight (500g), which this printer model requires in order to track usage accurately. Once that was squared away, I ran a test print—not the traditional Benchy, but a Calibration Mouse. (Let’s just say the loaded green filament gave it some extra personality.)

The second printer needed more attention. The nozzle was gummed up and required a good cleaning, along with a bit of tinkering to get everything running smoothly. After some patience and perseverance, I managed to coax it back to life. The reward? A second successful test print—this time in red.

Why the UP Mini 2?

The UP Mini 2 might not be the flashiest printer on the market, but it’s a solid workhorse, especially for educational and makerspace environments. Its fully enclosed build area makes it safer and better for temperature-sensitive materials like ABS. It’s compact enough for a desktop yet capable of reliable, high-quality prints with minimal fuss. Features like HEPA filtration, auto-leveling, and built-in touchscreen controls make it accessible for beginners while still meeting the needs of more advanced users.

With both printers now tested and functional, our upcoming space has two more reliable machines ready to support student projects, prototyping, and creative exploration.

picture of the calibration mouse, that includes some angels and lengths.

 

 

Me holding a little green calibration cat.

 

Me holding both the red and green calibration cats.

 

Making Your 3D Prints Mouth-Safe and Food-Friendly: What You Need to Know

When I printed my first double-chambered flute on my 3D printer, I was thrilled to see it come to life. But as I prepared to play it, a question nagged at me: Is it actually safe to put this in my mouth? That one query opened a whole new world of research into the safety of 3D printed objects—especially those that come into contact with food or the human body.

Me with my new 3d printed double flute

(who am I kidding – this is made of PLA and I did blow into it before even considering all of this.)

3D printing offers incredible possibilities—from custom cookie cutters to personalized water bottle lids and musical instruments. But just because something can be printed doesn’t mean it should be used without considering safety, especially for anything that goes near your mouth or food.


Understanding Food Safety Terms

Before diving deeper, let’s get a handle on a few critical terms:

  • Food grade: A material is safe for human consumption or is allowed to come into contact with food.

  • Food safe: A food grade material that meets safety requirements for its intended use and won’t pose a health risk.

  • Food contact surfaces: These are surfaces that touch food or your mouth and must be nontoxic, durable, and easy to clean.

These terms aren’t just relevant for kitchen utensils—they’re also important for things like wind instrument mouthpieces that see prolonged contact with your lips. The underlying concern is migration—the transfer of small particles from the printed object into food or the body.


Why Basic 3D Prints Aren’t Safe (Even with “Food Safe” Filament)

Here’s the truth: even if your filament is labeled “food safe” or “food grade,” that doesn’t make your printed object safe by default.

  • Fused Filament Fabrication (FFF) creates objects with microscopic crevices between layers—perfect hiding spots for bacteria and mold.

  • These gaps are hard to clean, even with a dishwasher (if the material can tolerate high temperatures).

  • Studies show that untreated 3D prints can harbor significantly more bacteria than coated or properly treated ones.

This is especially problematic for items with repeated or long-term contact, like flutes or cup rims.


Material Considerations: Not All Filaments Are Created Equal

Some materials are potentially safer than others:

  • PLA, PETG, and PP (polypropylene) are commonly considered food-safe options—but only under certain conditions.

  • ABS and ASA? Not safe for food contact.

  • Filament colorants and additives matter too. Even if a base polymer is safe, pigments or other ingredients might not be. Always check with the manufacturer.

For commercial or high-stakes use, look for certified materials—like those compliant with FDA CFR 21 (U.S.) or EU 10/2011. Just be aware: “compliant with” is not the same as certified or approved.


The Printer Itself Can Be a Source of Contamination

Even if you’re using the right filament, your printer might not be clean enough for safe food contact.

  • Replace brass nozzles with stainless steel—brass can contain lead.

  • Avoid cross-contamination from previous filaments or lubricants.

  • Keep your printer—inside and out—as clean as possible.


Why Cleaning my Flute isn’t Good Enough

  1. Layer Lines = Micro-Crevices

    • FDM/FFF 3D prints, including PLA, have tiny ridges and gaps between layers.

    • These crevices trap saliva, moisture, and bacteria, which can’t be fully removed—even with scrubbing, soap, or alcohol.

  2. Biofilm Formation

    • Bacteria can form biofilms—slimy protective layers—that resist even harsh cleaners.

    • Over time, this can lead to odors, staining, or health hazards.

  3. Porosity Makes Sterilization Difficult

    • Unlike glass or stainless steel, PLA is porous.

    • That means typical cleaning doesn’t penetrate deep enough to sanitize completely.

  4. Heat-Based Cleaning = PLA Deformation

    • PLA softens at ~60°C (140°F), so it’s not dishwasher-safe or steam-sterilizable.

    • Autoclaves, boiling, or hot water will warp or weaken your print.


What About Specialty Cleaning Methods?

  • Isopropyl alcohol or diluted bleach may reduce surface bacteria, but again, they can’t reach deep into the layer gaps.

  • UV light (like toothbrush sanitizers) may help somewhat, but only on exposed surfaces, not inside layer lines.

  • Long-term, repeated cleaning degrades PLA, especially if it’s soft or has fine details.

The Essential Step: Surface Coating (Sealing)

Because of the porous nature of FFF prints, sealing the surface is key to making your item mouth-safe or food-friendly.

  • Use clear, food-grade epoxy resins or polyurethane coatings that are explicitly labeled food safe.

    • Popular choices: ArtResin (compliant with FDA CFR 175.300), MasterBond EP42HT-2FG.

  • Avoid coatings that are only labeled “non-toxic” (like Mod Podge or Krylon sprays) unless they specifically state food safety.

  • Be cautious—liquid resins are toxic before curing. Use gloves, a respirator, and follow all curing instructions carefully.

    • An improperly cured resin can leave your item dangerously unsafe.


Limitations of Coated Prints

Even the best coating isn’t magic. Your sealed object won’t be as durable as a ceramic plate or stainless steel fork.

  • Most coatings aren’t heat-resistant—don’t microwave or wash in hot water.

  • Scratches or wear can expose the porous print beneath, allowing bacteria to creep in.

  • Not ideal for cutting boards, utensils, or anything subject to frequent abrasion.


Considering Alternatives and Safer Workarounds

If sealing sounds too risky or complicated, consider other options:

  • Use food-safe sealants like water-based poly coats (with proper research and testing).

  • Make molds using your 3D print and cast with a food-safe silicone or material instead.

  • Be cautious with SLA (resin) printing. Even when coated, most resins remain inherently toxic and prone to wear.


Final Thoughts: Is It Worth It?

Yes—but only if you do it right.

Creating food- or mouth-contact 3D prints is totally possible. But it requires more than just buying “food-safe” filament. It’s about:

  • Choosing the right material (and checking additives)

  • Keeping your printer clean and lead-free

  • Applying a properly cured, food-grade coating to seal your print

And even then—understand the limitations. These prints won’t last forever and must be treated with care. For commercial products, certification and compliance are non-negotiable.

When in doubt, always check the documentation, contact manufacturers, and—above all—prioritize safety.

Reading sheet music in glasses.

Thanks to Victor Santiago for sending this video around.  It is very cool.

And I always have a weakness for adults who aren’t afraid to do things on toys!

photo of two guys, one playing the guitar and the other playing on a child's keyboard with a big blue puppy on the device.

Contest for Wearables

Make it Wearable – Engineering Students Contest

 

 

https://www.instructables.com/contest/makeitwearable2025/

prizes between $100 and $500.  Closes May 27th.

 

 

I have a new role! Director of Innovation!!

I’m still here at Stony Brook University, but after many, many years with the Department of Information Technology, I have made the move to Stony Brook University Libraries!  I started off my professional life, eons ago, between working at the library and working at bookstores, and my personal hobby is to collect signed first edition SF&F books, so this is a great fit for me.  Especially since I get to continue doing what I deeply love doing, which is pairing art and technology to bring the folks of the university the COOLEST STUFF.

With the support of the Dean of Libraries, I will be spearheading bringing multiple creative and innovative spaces to the campus, at locations that are both centralized and welcoming to all students, faculty and staff.

We will certainly have 3d printers, textile making equipment, VR/AR spaces, sensors and other electronic doo dads, vinyl cutting, button making, and so much more!

I personally welcome any faculty who have ideas about alternative assessments, field trips, or entire modules that they want to have taught in the space, to please come and have a consultation with me to discuss what we can do together to make some dream projects for your course a reality.  We are still in the design and renovation stages of the space – and the squeaky wheel could very well get the grease in what goes into the space first.

picture showing the vinyl signage, created on a cricut, that says Jennifer L. Adams, Director of Innovation.

Embedding Video into a webpage or brightspace… from Google Drive

So, as is normal, there are different ways to tackle embedding video using systems here at SBU. I’m just going to look at google drive embeds.  When you embed a video, it plays right there in the page, not something you have to click on which then opens up a new page or downloads the video to view it.  Like this:

(BTW – this video I am using in this demonstration was made via copilot as I outlined in the previous blog post.)

So how did I do that?  One usually won’t just drop a video into this blog site, as it will likely be too big.  So the first thing I did after making the video, is drop it into my google drive. Make sure you share it to anyone that has the link or anyone at SBU as appropriate.

The thing is, the embed code from google drive is a wee bit hidden.  You have to click on the three dots next to the file name, open it in a new tab, then click the three dots above the player area and then at the very bottom of the menu you can find the embed code.  You will need to highlight and copy the code out from there.

Now that you have the embed code, what next?  Well, here in the blog I switch from a Visual View to a Text view, and that shows me the html for the page and I just copy it in.  It might look a little scary, but right after you paste, you can switch right back to the Visual Mode and safety.

In Brightspace, you go to the area you want to have the video,  find this icon:

the "insert stuff" icon from the wysiwyg menu in brightspace.

This is the “insert stuff” button which can be found in just about any text entry window where you can format the text.

List of the stuff you can insert. Embed Code is at the bottom.

Enter Embed Code is at the bottom

this shows the interface where you paste the embed code.

Paste in your code and hit next.  It gives me a warning that you are getting media from another site.  Click Allow. Click Insert.  I got that warning again, and I told it to allow it again.  And now it looks like this:

screenshot showing the video embedded into a brightspace page.

Google Drive auto captions the videos that you put in the drive. (You should still check and edit them.)

You do not get all the same engagement tools and analytics that you get in echo360  embedding, but I felt that this was still worth sharing.

 

 

 

 

 

Video from the Copilot page

I went to https://copilot.microsoft.com/

And then I saw this option on the side.  It says Visual Creator

list of clickable options on the right side of the page [copilot, Agents, Visual Creator, Get Agents, Create an agent]

New sample prompts come up including “Create a video with stock media.”

My Prompt:

show a video about safety when using a drill

This was produced in short order:

and when I was on that page still and I clicked to open the video, it opens in this editor called ClipChamp.

This is a screenshot of the clipchamp GUI.

So – that’s cool.

 

 

Gemini Feature boost – Canvas

What is that Canvas thingy? (screenshot of the prompt entry box with a new button.If you have been using ChatGPT, you may have already seen this feature there, but Gemini has added a “canvas” to it’s potential workflow.  The canvas is a separate “frame” or space on the page that gets updated as you work on whatever is in it with Gemini, without it scrolling up and away as you progress.  I’ve mostly used it for things like code, but you can totally use it for working on a draft of a regular written object, like an essay, speech, screenplay, etc.

To activate it, you will want to open https://gemini.google.com/app.  

Once there tell it what you want to work on – I’ll think of something on the simple side.  Here is my prompt:

I would like to write a small app that lets me know that everything will be alright. I want it to suggest a nice quote and also ask me if I want to hear some soothing music. Can you help me write that?

Then, I want to use the new canvas feature.  This requires that you click the button in the chat/prompt window that says “canvas”  Now my screen looks like this:

a screenshot of gemini running a "canvas". It shows the chat area in thr left and a new coding window or frame on the right.

It even has a preview mode!

screenshot of the preview mode on the code it wrote.

I’m going to ask it to change how the music is selected. At this stage it is asking me to link it to the music from my own drive. I want it to find it on the internet for me.

Can you change it so that you find the music on the internet for me? Tell me what you selected and ask if I want to hear it?

It created some code that uses an API to retrieve the music, and because I don’t feel like fussing with that I have it rewrite the code one more time to play music without the need of a API.   It tells me I really should use the API, but gives me what I wanted anyway.  lol  This is the result:

shows a screenshot of the updated canvas window and chat with gemini.

preview:  (the preview is fully functional)

preview of the code as a functional app.

It doesn’t sound like Calming ocean waves” but it is fun music.  Eventually I got sick of the synthy fun and asked it to find more appropriate music.  Here is the code.  You can copy it into a text/notepad app and save it as a html file if you want to play it in the browser on your computer

https://drive.google.com/file/d/1HtllluclKKzucMunkwVQ6kpSAaxLBtYr/view?usp=sharing

There is another feature “audio overview”.  If you’ve used NotebookLM, I’m sure you’ve already seen it.  They are bringing it to regular Gemini, but I don’t personally see it yet, so I believe it isn’t fully rolled out yet.

 

Have fun!

 

<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>Everything Will Be Alright</title>
<link href=”https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap” rel=”stylesheet”>
<style>
body {
margin: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
background-color: #f0f0f0;
font-family: ‘Inter’, sans-serif;
overflow: hidden; /* Prevent scrollbars during animation */
}
#canvas {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.container {
background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white */
padding: 30px;
border-radius: 12px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
text-align: center;
max-width: 80%;
backdrop-filter: blur(10px);
border: 1px solid rgba(255,255,255,0.3);

}
h1 {
color: #333;
margin-bottom: 20px;
font-size: 2em;
}
p {
color: #555;
font-size: 1.1em;
line-height: 1.6;
margin-bottom: 25px;
}
button {
padding: 12px 25px;
border: none;
border-radius: 6px;
background-color: #4CAF50; /* Green */
color: white;
font-size: 1.1em;
cursor: pointer;
transition: background-color 0.3s ease;
margin-top: 10px;
font-family: ‘Inter’, sans-serif;
}
button:hover {
background-color: #367c39; /* Darker green */
}
#music-container {
display: flex;
align-items: center;
justify-content: center;
margin-top: 20px;
flex-direction: column; /* Stack items vertically */
}

#play-music {
padding: 12px 25px;
border: none;
border-radius: 6px;
background-color: #007BFF; /* Blue */
color: white;
font-size: 1.1em;
cursor: pointer;
transition: background-color 0.3s ease;
margin-top: 10px;
font-family: ‘Inter’, sans-serif;
}

#play-music:hover {
background-color: #0056b3; /* Darker blue */
}

#music-controls {
display: none; /* Initially hide the controls */
flex-direction: column;
align-items: center;
margin-top: 10px;
background-color: rgba(255,255,255,0.7);
padding: 10px;
border-radius: 8px;
border: 1px solid rgba(255,255,255,0.3);
backdrop-filter: blur(5px);
}

#music-controls button {
margin: 5px;
padding: 8px 16px;
border: none;
border-radius: 6px;
background-color: #4CAF50; /* Green */
color: white;
font-size: 0.9em;
cursor: pointer;
transition: background-color 0.3s ease;
font-family: ‘Inter’, sans-serif;
}

#music-controls button:hover {
background-color: #367c39; /* Darker green */
}

#volume-control {
width: 100px;
margin: 10px 0;
}

#music-info {
margin-bottom: 10px;
font-size: 0.9em;
color: #555;
}

</style>
</head>
<body>
<canvas id=”canvas”></canvas>
<div class=”container”>
<h1>Everything Will Be Alright</h1>
<p id=”quote”>Loading a reassuring quote…</p>
<div id=”music-container”>
<p id=”music-info”>Finding soothing music…</p>
<button id=”play-music” style=”display:none;”>Play Soothing Music</button>
</div>
<div id=”music-controls”>
<button id=”pause-music”>Pause</button>
<button id=”resume-music”>Resume</button>
<label for=”volume-control”>Volume:</label>
<input type=”range” id=”volume-control” min=”0″ max=”1″ step=”0.01″>
</div>
</div>
<script>
const canvas = document.getElementById(‘canvas’);
const ctx = canvas.getContext(‘2d’);
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

let stars = [];
const numStars = 200;

function initializeStars() {
stars = [];
for (let i = 0; i < numStars; i++) {
stars.push({
x: Math.random() * canvas.width,
y: Math.random() * canvas.height,
radius: Math.random() * 2,
color: `rgba(255, 255, 255, ${Math.random() * 0.5 + 0.5})`, // Varying opacity
speedX: (Math.random() – 0.5) * 0.2, // Subtle movement
speedY: (Math.random() – 0.5) * 0.2
});
}
}

function drawStars() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
stars.forEach(star => {
ctx.beginPath();
ctx.arc(star.x, star.y, star.radius, 0, Math.PI * 2);
ctx.fillStyle = star.color;
ctx.fill();
ctx.closePath();

// Update star position for subtle animation
star.x += star.speedX;
star.y += star.speedY;

// Wrap around edges
if (star.x > canvas.width) star.x = 0;
if (star.x < 0) star.x = canvas.width;
if (star.y > canvas.height) star.y = 0;
if (star.y < 0) star.y = canvas.height;
});
}

function animateStars() {
drawStars();
requestAnimationFrame(animateStars);
}

initializeStars();
animateStars();

window.addEventListener(‘resize’, () => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
initializeStars(); // Re-initialize stars on resize for proper distribution
});

const quoteElement = document.getElementById(‘quote’);
const quotes = [
“This too shall pass.”,
“Every cloud has a silver lining.”,
“You are stronger than you think.”,
“The best is yet to come.”,
“Breathe. You’re going to be okay. Breathe and remember that you’ve been in this place before. You’ve been this uncomfortable and anxious and scared, and you’ve survived. Breathe and know that you can survive this too. These feelings can’t break you. They’re painful and exhausting, but they can’t break you. You’re going to be okay.”
];

function displayQuote() {
const randomQuote = quotes[Math.floor(Math.random() * quotes.length)];
quoteElement.textContent = randomQuote;
}

displayQuote();
setInterval(displayQuote, 10000); // Change quote every 10 seconds

const playMusicButton = document.getElementById(‘play-music’);
const audio = new Audio();
const musicControls = document.getElementById(‘music-controls’);
const pauseMusicButton = document.getElementById(‘pause-music’);
const resumeMusicButton = document.getElementById(‘resume-music’);
const volumeControl = document.getElementById(‘volume-control’);
const musicInfo = document.getElementById(‘music-info’);

let isPlaying = false;
let selectedTrack = null; // Store the selected track URL

// Simulate an online search for music without an API
function searchForSoothingMusic() {
const tracks = [
{ title: “Relaxing Piano Music”, url: “https://www.bensound.com/royalty-free-music/track/rainy-day-lo-fi-jazz” },
{ title: “Gentle Rain Sounds”, url: “https://www.soundjay.com/buttons/sounds/rain-01a.mp3” },
{ title: “Calming Ocean Waves”, url: “https://www.soundjay.com/buttons/sounds/ocean-wave-01.mp3” },
{ title: “Soft Ambient Music”, url: “https://www.bensound.com/bensound-music/bensound-acousticbreeze.mp3” },
{ title: “Peaceful Flute Music”, url: “https://www.soundjay.com/buttons/sounds/flute-c-note.mp3” },
];

setTimeout(() => {
selectedTrack = tracks[Math.floor(Math.random() * tracks.length)];
musicInfo.textContent = `Found: “${selectedTrack.title}”. Would you like to hear it?`;
playMusicButton.textContent = “Play Music”;
playMusicButton.style.display = ‘inline-block’;
}, 2000);
}

searchForSoothingMusic();

playMusicButton.addEventListener(‘click’, () => {
if (selectedTrack) {
audio.src = selectedTrack.url;
musicControls.style.display = ‘flex’;

if (isPlaying) {
audio.pause();
isPlaying = false;
playMusicButton.textContent = “Resume Music”;
} else {
audio.play().then(() => {
isPlaying = true;
playMusicButton.textContent = “Pause Music”;
}).catch(error => {
console.error(“Playback failed:”, error);
alert(“Failed to play music. There may be an issue with the selected audio source.”);
isPlaying = false;
playMusicButton.textContent = “Play Music”;
});
}
} else {
alert(“No music track selected.”);
}
});

pauseMusicButton.addEventListener(‘click’, () => {
if (isPlaying) {
audio.pause();
isPlaying = false;
playMusicButton.textContent = “Resume Music”;
}
});

resumeMusicButton.addEventListener(‘click’, () => {
if (!isPlaying) {
audio.play().then(() => {
isPlaying = true;
playMusicButton.textContent = “Pause Music”;
}).catch(error => {
console.error(“Playback failed:”, error);
alert(“Failed to resume music.”);
isPlaying = false;
playMusicButton.textContent = “Play Music”;
});
}
});

volumeControl.addEventListener(‘input’, () => {
audio.volume = volumeControl.value;
});

audio.addEventListener(‘ended’, () => {
isPlaying = false;
playMusicButton.textContent = “Play Music”;
});

</script>
</body>
</html>

 

 

Creating, Crafting, Sustainability

Skip to toolbar