Component for PCBs, many visual tweaks, finished dechorionator content, added many many photos, started work on mars rover software lead, timeline to luxon and automatic date-based ordering
This commit is contained in:
@@ -1,5 +1,235 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
|
||||
import H2 from "@components/H2.astro";
|
||||
import H3 from "@components/H3.astro";
|
||||
import Li from "@components/Li.astro";
|
||||
import CustomCarousel from "@components/Media/CustomCarousel/CustomCarousel.astro";
|
||||
import PageGroup from "@components/PageGroup.astro";
|
||||
import Paragraph from "@components/Paragraph.astro";
|
||||
import Paragraphs from "@components/Paragraphs.astro";
|
||||
import PrintedCircuitBoard from "@components/PrintedCircuitBoard.astro";
|
||||
import SkillMatrix from "@components/SkillMatrix/SkillMatrix.astro";
|
||||
import Timeline from "@components/Timeline/Timeline.astro";
|
||||
import Ul from "@components/Ul.astro";
|
||||
|
||||
import type { carouselGroup } from "@interfaces/image-carousel.ts";
|
||||
import { timelineFromPrintedCircuitBoard } from "@interfaces/printed-circuit-board.ts";
|
||||
import type { categorySkills } from "@interfaces/skill-matrix.ts";
|
||||
import type { timelineEntry } from "@interfaces/timeline.ts";
|
||||
|
||||
import { dechorionatorPcb } from "./dechorionator.ts";
|
||||
import {
|
||||
subTitles,
|
||||
workingTimeline,
|
||||
} from "./osu-sinnhuber-aquatic-research-laboratory.ts";
|
||||
|
||||
import assembly_internal_overview from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/assembly-internal-overview.jpg";
|
||||
import assembly_pcb_connected from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/assembly-pcb-connected.jpg";
|
||||
import assembly_pcb_front_on from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/assembly-pcb-front-on.jpg";
|
||||
import assembly_pcb_front from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/assembly-pcb-front.jpg";
|
||||
import assembly_pcb_rear from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/assembly-pcb-rear.jpg";
|
||||
import assembly_surround_front from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/assembly-surround-front.jpg";
|
||||
import assembly_surround_rear from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/assembly-surround-rear.jpg";
|
||||
import off_front_lid_open from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/off-front-lid-open.jpg";
|
||||
import off_front from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/off-front.jpg";
|
||||
import on_front_closeup from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/on-front-closeup.jpg";
|
||||
import on_front from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/on-front.jpg";
|
||||
import rear_water_manifold from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/rear-water-manifold.jpg";
|
||||
import rear from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/rear.jpg";
|
||||
import top_drain from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/top-drain.jpg";
|
||||
import top_holder_closeup from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/top-holder-closeup.jpg";
|
||||
import top_lid_open from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/top-lid-open.jpg";
|
||||
import top_showerhead from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/top-showerhead.jpg";
|
||||
import travel_setup from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/dechorionator/travel-setup.jpg";
|
||||
import InlineLink from "@components/InlineLink.astro";
|
||||
import PopoverWordDefinition from "@components/PopoverWordDefinition.astro";
|
||||
|
||||
const headerCarouselGroup: carouselGroup = {
|
||||
animation: "slide",
|
||||
images: [
|
||||
off_front,
|
||||
off_front_lid_open,
|
||||
on_front,
|
||||
on_front_closeup,
|
||||
top_lid_open,
|
||||
top_showerhead,
|
||||
top_drain,
|
||||
top_holder_closeup,
|
||||
rear,
|
||||
rear_water_manifold,
|
||||
travel_setup,
|
||||
|
||||
assembly_surround_front,
|
||||
assembly_surround_rear,
|
||||
assembly_pcb_rear,
|
||||
assembly_pcb_front,
|
||||
assembly_pcb_front_on,
|
||||
assembly_pcb_connected,
|
||||
assembly_internal_overview,
|
||||
],
|
||||
};
|
||||
|
||||
const timeline: timelineEntry[] = [
|
||||
...workingTimeline,
|
||||
...timelineFromPrintedCircuitBoard(dechorionatorPcb),
|
||||
];
|
||||
|
||||
const categorizedSkills: categorySkills[] = [
|
||||
{
|
||||
category: "Electrical",
|
||||
skills: [
|
||||
{
|
||||
item: "Schematic & PCB Design",
|
||||
subItems: [
|
||||
{ item: "Mentor Graphics PADS" },
|
||||
{ item: "Altium Designer" },
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "PCB Assembly & Rework",
|
||||
subItems: [
|
||||
{ item: "Handheld Soldering" },
|
||||
{ item: "Handheld Hot-Air Reflow" },
|
||||
{ item: "Oven Reflow" },
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Electrical Diagnostics",
|
||||
subItems: [{ item: "Multimeters" }, { item: "Oscilloscopes" }],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Software & Environments",
|
||||
skills: [
|
||||
{ item: "Git" },
|
||||
{
|
||||
item: "Programming",
|
||||
subItems: [{ item: "Low-Level Embedded C/C++ (Atmel Studio)" }],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
---
|
||||
|
||||
<ExperienceLayout title="SARL - Dechorionator" />
|
||||
<ExperienceLayout title="Dechorionator" subTitles={subTitles}>
|
||||
<CustomCarousel carouselGroup={headerCarouselGroup} />
|
||||
<PageGroup>
|
||||
<Fragment slot="header"><H2>Summary</H2></Fragment>
|
||||
<PageGroup>
|
||||
<Fragment slot="header"><H3>Timeline</H3></Fragment>
|
||||
<Timeline timeline={timeline} />
|
||||
</PageGroup>
|
||||
<PageGroup>
|
||||
<Fragment slot="header"><H3>Key Takeaways</H3></Fragment>
|
||||
<Ul>
|
||||
<Li
|
||||
>Created an all-in-one tool for removing the chorions of zebrafish
|
||||
embryos in a controlled and repeatable manner</Li
|
||||
>
|
||||
<Li
|
||||
>Developed custom PCBs to handle motion, pump control, and user
|
||||
interaction</Li
|
||||
>
|
||||
<Li
|
||||
>Deployed multiple units to the lab, and one to an east-coast partner
|
||||
laboratory</Li
|
||||
>
|
||||
<Li
|
||||
>Cost reduced to roughly 1/5 that of the lab's previous dechorionation
|
||||
hardware</Li
|
||||
>
|
||||
</Ul>
|
||||
</PageGroup>
|
||||
<SkillMatrix categorizedSkills={categorizedSkills} />
|
||||
</PageGroup>
|
||||
<PageGroup>
|
||||
<Fragment slot="header"><H2>Details</H2></Fragment>
|
||||
<Paragraphs>
|
||||
<Paragraph>
|
||||
Before delving into what was built, some quick context is probably
|
||||
needed. A dechorionator is a device that removes <InlineLink
|
||||
href="https://en.wikipedia.org/wiki/Chorion">chorions</InlineLink
|
||||
> from embryos. Chorions are the outer membranes of an embryo which provide
|
||||
protection, and a permeable membrane which can allow gasses and nutrients
|
||||
to reach the developing animal inside. As SARL is a toxicology lab, and its
|
||||
experiments need to be deterministic, this protective layer can drastically
|
||||
skew tests results, and even worse, can can variances embryo to embryo, or
|
||||
egg batch to egg batch. To remove this, a special protein is added to a petri-dish
|
||||
full of embryos, and then the dish is gently swirled with jerking start and
|
||||
stop motions. The goal is to provide light agitation between the embryo, the
|
||||
dish, and their neighbors, helping the protein eat away the chorion and sluff
|
||||
off into the dish. This can, and has been done by hand, but when I joined
|
||||
SARL they already had two machines which which could automatically perform
|
||||
this task. However, they were incredibly expensive and massively overcomplicated,
|
||||
requiring a whole table's worth of custom shaker units, networked peristaltic
|
||||
pumps, and servos. The engineering team was tasked with simplifying this setup
|
||||
while reducing both their size and cost.
|
||||
</Paragraph>
|
||||
<Paragraph>
|
||||
We started with a <PopoverWordDefinition key="COTS" /> shaker unit from the
|
||||
company ELMI, which had a stepper-motor-based drive system, making it a perfect
|
||||
candidate for easy retrofit. After gutting the existing electronics, and taking
|
||||
some measurements, I started on a custom PCB design. Basic requirements were
|
||||
that the board needed to be able to control the stepper motor, control the
|
||||
speed of a liquid pump, provide controls to users, allow for config editing
|
||||
from those controls, and provide a screen for cycle progress and editing those
|
||||
config values. Since this was one of the first PCBs I'd ever designed and
|
||||
hand-assembled, I started with a basic proof-of-concept which was for bench
|
||||
use only (revision: 1.1.0). While I worked on the electronics, my co-worker
|
||||
and good friend <InlineLink href="https://dylanthrush.com"
|
||||
>Dylan Thrush</InlineLink
|
||||
> was busy designing a top-plate for the shaker to hold the dishes, shower
|
||||
them with water, and drain the pumped-in liquid.
|
||||
</Paragraph>
|
||||
<Paragraph>
|
||||
First tests showed that the overall concept was going to work, just
|
||||
needing signal conditioning for the rotary encoder to avoid ghosted or
|
||||
missing inputs. A larger problem we found was that the brushed-dc-motor
|
||||
driven peristaltic pump was not going to be able to supply the flowrate
|
||||
needed to properly shower the four dishes. We'd already chosen one of
|
||||
the highest-flowrate pumps which could fit inside the shaker housing,
|
||||
and ended up having to pivot to a much more expensive one from TCS
|
||||
Micropumps. Luckily, not only did it solve our flowrate problem, but
|
||||
also held up much better to the saltwater solution being pumped through
|
||||
it than our initial choice.
|
||||
</Paragraph>
|
||||
<Paragraph>
|
||||
With the proof-of-concept design functional, I began a redesign of the
|
||||
control PCB to replace the existing control panel and drive circuitry
|
||||
from the ELMI shaker (revision: 3.0.0). The existing control circuitry
|
||||
had a unique assembly design that I'd not encountered before, using a
|
||||
PCB with solderable standoffs as the front panel, and soldered copper
|
||||
strips as retention tabs. I was so fascinated by the design that I
|
||||
decided to emulate it. Check out the images at the end of the reel above
|
||||
to see how this unique assembly was put together! Around the time that
|
||||
the PCBs were ready, we'd hired a new engineer, <InlineLink
|
||||
href="https://www.linkedin.com/in/aaron-rito-2b754777/"
|
||||
>Aaron Rito</InlineLink
|
||||
>, who I tasked with writing the firmware while providing input and
|
||||
guidance.
|
||||
</Paragraph>
|
||||
<Paragraph>
|
||||
Over the next few months, many revisions were made to the firmware, as
|
||||
well as mechanical designs for the showerheads and water manifold. Dylan
|
||||
also had a final design for the top-plate milled out that looked
|
||||
beautiful. Once those changes were complete, we provided the prototype
|
||||
unit to the researchers, along with documentation on how to use the
|
||||
tuning values. They then spent a few weeks running the new dechorionator
|
||||
alongside the old ones, while tweaking these parameters until the
|
||||
performance matched. We then built up four more units, and pre-flashed
|
||||
them with this configuration. Three of these went into the lab, where a
|
||||
total of four of our new dechorionators sat on the same table where just
|
||||
two prior-generation ones used to live. It even had additional space for
|
||||
pre and post prep work on the petri-dishes! The last one I installed in
|
||||
a partner lab on the east coast after flying there with the head of the
|
||||
lab, Robyn Tanguay and deputy director, Lisa Truong.
|
||||
</Paragraph>
|
||||
</Paragraphs>
|
||||
</PageGroup>
|
||||
<PageGroup>
|
||||
<Fragment slot="header"><H2>Printed Circuit Boards</H2></Fragment>
|
||||
<PrintedCircuitBoard pcb={dechorionatorPcb} />
|
||||
</PageGroup>
|
||||
</ExperienceLayout>
|
||||
|
||||
Reference in New Issue
Block a user