mars rover and embryo pick and plate content #19
4
Makefile
@@ -84,7 +84,9 @@ convert_video_times:
|
||||
-init_hw_device vaapi=va:/dev/dri/renderD128 \
|
||||
-filter_hw_device va \
|
||||
-i $(input) \
|
||||
-vf 'format=nv12,hwupload,scale_vaapi=-2:720,trim=start=$(start):end=$(end)' \
|
||||
-ss $(start) \
|
||||
-to $(end) \
|
||||
-vf 'format=nv12,hwupload,scale_vaapi=-2:720' \
|
||||
-c:v h264_vaapi \
|
||||
-rc_mode CQP \
|
||||
-qp 28 \
|
||||
|
||||
@@ -4,6 +4,7 @@ ASSEM
|
||||
astrojs
|
||||
Atmel
|
||||
barebones
|
||||
beaglebone
|
||||
Bitwarden
|
||||
Candian
|
||||
caperren
|
||||
@@ -47,6 +48,7 @@ offroad
|
||||
Onshape
|
||||
OSSM
|
||||
OSURC
|
||||
panelized
|
||||
Passthroughs
|
||||
pcbs
|
||||
Perren
|
||||
@@ -71,6 +73,7 @@ Steller
|
||||
Tanguay
|
||||
Teamcenter
|
||||
timelapse
|
||||
touchoff
|
||||
triaging
|
||||
trivago
|
||||
Truong
|
||||
|
||||
|
After Width: | Height: | Size: 1013 KiB |
|
After Width: | Height: | Size: 6.8 MiB |
|
After Width: | Height: | Size: 9.2 MiB |
|
After Width: | Height: | Size: 8.8 MiB |
|
Before Width: | Height: | Size: 8.5 MiB After Width: | Height: | Size: 8.5 MiB |
|
After Width: | Height: | Size: 6.3 MiB |
|
After Width: | Height: | Size: 1017 KiB |
|
After Width: | Height: | Size: 878 KiB |
|
After Width: | Height: | Size: 7.1 MiB |
|
After Width: | Height: | Size: 605 KiB |
|
After Width: | Height: | Size: 826 KiB |
|
After Width: | Height: | Size: 7.1 MiB |
|
After Width: | Height: | Size: 6.1 MiB |
|
After Width: | Height: | Size: 6.9 MiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 8.3 MiB |
|
After Width: | Height: | Size: 7.5 MiB |
|
After Width: | Height: | Size: 7.2 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 4.6 MiB |
|
After Width: | Height: | Size: 4.6 MiB |
|
After Width: | Height: | Size: 4.4 MiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 167 KiB |
|
After Width: | Height: | Size: 438 KiB |
|
After Width: | Height: | Size: 224 KiB |
|
After Width: | Height: | Size: 437 KiB |
|
After Width: | Height: | Size: 2.0 MiB |
5
src/components/H4.astro
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
<h4 class="md:text-md text-xs sm:text-sm"><slot /></h4>
|
||||
@@ -2,6 +2,9 @@
|
||||
import Carousel from "@components/Media/CustomCarousel/CustomCarousel.astro";
|
||||
import Ul from "@components/Ul.astro";
|
||||
|
||||
import H3 from "@components/H3.astro";
|
||||
import H4 from "@components/H4.astro";
|
||||
import PageGroup from "@components/PageGroup.astro";
|
||||
import type {
|
||||
printedCircuitBoard,
|
||||
printedCircuitBoardRevision,
|
||||
@@ -19,7 +22,11 @@ const semanticPcbRevisionSort = (
|
||||
-((a.major - b.major) * 100 + (a.minor - b.minor) * 10 + (a.patch - b.patch));
|
||||
---
|
||||
|
||||
<div class="grid grid-cols-1 gap-4 md:grid-cols-2">
|
||||
<PageGroup>
|
||||
<Fragment slot="header"
|
||||
><H3>{pcb.name}</H3><H4>{pcb.description}</H4></Fragment
|
||||
>
|
||||
<div class="mt-1 grid grid-cols-1 gap-4 md:grid-cols-2">
|
||||
{
|
||||
pcb.revisions?.sort(semanticPcbRevisionSort).map((revision) => (
|
||||
<div class="border-caperren-green block space-y-2 rounded-lg border bg-black py-2">
|
||||
@@ -40,12 +47,12 @@ const semanticPcbRevisionSort = (
|
||||
/>
|
||||
</div>
|
||||
{revision.notes && revision.notes.length > 0 && (
|
||||
<Ul
|
||||
class="border-caperren-green border-t p-4 text-sm"
|
||||
lineItems={revision.notes}
|
||||
/>
|
||||
<div class="border-caperren-green border-t p-4 text-sm">
|
||||
<Ul lineItems={revision.notes} />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</PageGroup>
|
||||
|
||||
@@ -50,7 +50,6 @@ export const siteLayout: navLink[] = [
|
||||
placeholderEntry: true,
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
navText: "Zebrafish Embryo Pick and Plate",
|
||||
isSubItem: true,
|
||||
path: "zebrafish-embryo-pick-and-plate",
|
||||
@@ -81,12 +80,10 @@ export const siteLayout: navLink[] = [
|
||||
],
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
navText: "OSU Robotics Club",
|
||||
path: "osu-robotics-club",
|
||||
children: [
|
||||
{
|
||||
enabled: false,
|
||||
navText: "Mars Rover Software Team Lead",
|
||||
path: "mars-rover-software-team-lead",
|
||||
},
|
||||
|
||||
@@ -19,7 +19,7 @@ import half_assembled_main_top_surround_bottom from "@assets/experience/osu-sinn
|
||||
export const dechorionatorPcb: printedCircuitBoard = {
|
||||
name: "Dechorionator",
|
||||
description:
|
||||
"Control board which provides motion and water flow control, along with user control and monitoring.",
|
||||
"Control board which provides motion and water flow control, along with user control and monitoring",
|
||||
|
||||
revisions: [
|
||||
{
|
||||
@@ -3,11 +3,13 @@ import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
|
||||
import H2 from "@components/H2.astro";
|
||||
import H3 from "@components/H3.astro";
|
||||
import InlineLink from "@components/InlineLink.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 PopoverWordDefinition from "@components/PopoverWordDefinition.astro";
|
||||
import PrintedCircuitBoard from "@components/PrintedCircuitBoard.astro";
|
||||
import SkillMatrix from "@components/SkillMatrix/SkillMatrix.astro";
|
||||
import Timeline from "@components/Timeline/Timeline.astro";
|
||||
@@ -18,7 +20,7 @@ import { timelineFromPrintedCircuitBoard } from "@interfaces/printed-circuit-boa
|
||||
import type { categorySkills } from "@interfaces/skill-matrix.ts";
|
||||
import type { timelineEntry } from "@interfaces/timeline.ts";
|
||||
|
||||
import { dechorionatorPcb } from "./dechorionator.ts";
|
||||
import { dechorionatorPcb } from "./dechorionator-pcbs.ts";
|
||||
import {
|
||||
subTitles,
|
||||
workingTimeline,
|
||||
@@ -42,8 +44,7 @@ import top_holder_closeup from "@assets/experience/osu-sinnhuber-aquatic-researc
|
||||
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";
|
||||
import { DateTime } from "luxon";
|
||||
|
||||
const headerCarouselGroup: carouselGroup = {
|
||||
animation: "slide",
|
||||
@@ -73,6 +74,16 @@ const headerCarouselGroup: carouselGroup = {
|
||||
const timeline: timelineEntry[] = [
|
||||
...workingTimeline,
|
||||
...timelineFromPrintedCircuitBoard(dechorionatorPcb),
|
||||
{
|
||||
event: "Project Started",
|
||||
eventDetail: "Initial Requirements Given",
|
||||
date: DateTime.fromISO("2014-05-01"),
|
||||
},
|
||||
{
|
||||
event: "Project Finished",
|
||||
eventDetail: "Delivered Units to Lab",
|
||||
date: DateTime.fromISO("2016-09-01"),
|
||||
},
|
||||
];
|
||||
|
||||
const categorizedSkills: categorySkills[] = [
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
import { DateTime } from "luxon";
|
||||
|
||||
import type { printedCircuitBoard } from "@interfaces/printed-circuit-board.ts";
|
||||
|
||||
import control_bottom_1_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/control/1-0-0/bottom.jpg";
|
||||
import control_top_1_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/control/1-0-0/top.jpg";
|
||||
import control_assembly_bottom_2_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/control/2-0-0/assembly-bottom.jpg";
|
||||
import control_assembly_top_beaglebone_2_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/control/2-0-0/assembly-top-beaglebone.jpg";
|
||||
import control_assembly_top_2_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/control/2-0-0/assembly-top.jpg";
|
||||
import control_bottom_2_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/control/2-0-0/bottom.png";
|
||||
import control_top_2_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/control/2-0-0/top.png";
|
||||
import lights_assembly_bottom_1_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/lights/1-0-0/assembly-bottom.jpg";
|
||||
import lights_assembly_top_1_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/lights/1-0-0/assembly-top.jpg";
|
||||
import lights_assembly_bottom_2_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/lights/2-0-0/assembly-bottom.jpg";
|
||||
import lights_assembly_top_2_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/lights/2-0-0/assembly-top.jpg";
|
||||
import lights_top_panelized_2_0_0 from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pcbs/lights/2-0-0/top-panelized.png";
|
||||
|
||||
export const pnpLights: printedCircuitBoard = {
|
||||
name: "Lighting Board",
|
||||
description:
|
||||
"Compact, bright, 24V lighting to provide high-contrast video for the pick and plate",
|
||||
|
||||
revisions: [
|
||||
{
|
||||
major: 2,
|
||||
minor: 0,
|
||||
patch: 0,
|
||||
date: DateTime.fromISO("2014-09-23"),
|
||||
images: [
|
||||
lights_top_panelized_2_0_0,
|
||||
lights_assembly_top_2_0_0,
|
||||
lights_assembly_bottom_2_0_0,
|
||||
],
|
||||
notes: [
|
||||
{
|
||||
item: "First panelized PCB design, with built-in test features",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
major: 1,
|
||||
minor: 0,
|
||||
patch: 0,
|
||||
date: DateTime.fromISO("2014-04-07"),
|
||||
images: [lights_assembly_top_1_0_0, lights_assembly_bottom_1_0_0],
|
||||
notes: [
|
||||
{
|
||||
item: "Worked, but couldn't remove heat efficiently long-term",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
export const pnpControl: printedCircuitBoard = {
|
||||
name: "Driver Board",
|
||||
description:
|
||||
"Motion controller, and single-board-computer interface, for the embryo pick and plate machine",
|
||||
|
||||
revisions: [
|
||||
{
|
||||
major: 2,
|
||||
minor: 0,
|
||||
patch: 0,
|
||||
date: DateTime.fromISO("2014-07-11"),
|
||||
images: [
|
||||
control_top_2_0_0,
|
||||
control_bottom_2_0_0,
|
||||
control_assembly_top_2_0_0,
|
||||
control_assembly_bottom_2_0_0,
|
||||
control_assembly_top_beaglebone_2_0_0,
|
||||
],
|
||||
notes: [
|
||||
{
|
||||
item: "Functional, but ultimately scrapped due to motion control complexity",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
major: 1,
|
||||
minor: 0,
|
||||
patch: 0,
|
||||
date: DateTime.fromISO("2013-12-02"),
|
||||
images: [control_top_1_0_0, control_bottom_1_0_0],
|
||||
notes: [
|
||||
{
|
||||
item: "First printed circuit board I ever designed, which was REALLY bad",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -1,5 +1,177 @@
|
||||
---
|
||||
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 Video from "@components/Media/Video.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 {
|
||||
subTitles,
|
||||
workingTimeline,
|
||||
} from "./osu-sinnhuber-aquatic-research-laboratory.ts";
|
||||
|
||||
import {
|
||||
pnpControl,
|
||||
pnpLights,
|
||||
} from "./zebrafish-embryo-pick-and-plate-pcbs.ts";
|
||||
|
||||
import installation_and_tuning from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/installation-and-tuning.jpg";
|
||||
import interface_tuning_and_detection from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/interface-tuning-and-detection.png";
|
||||
import off_controls_lid_overview from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-controls-lid-overview.jpg";
|
||||
import off_controls_syringe_overview from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-controls-syringe-overview.jpg";
|
||||
import off_controls_top_overview from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-controls-top-overview.jpg";
|
||||
import off_front_working_area_overview from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-front-working-area-overview.jpg";
|
||||
import off_front from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-front.jpg";
|
||||
import off_left from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-left.jpg";
|
||||
import off_lighting from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-lighting.jpg";
|
||||
import off_rear from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-rear.jpg";
|
||||
import off_right from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-right.jpg";
|
||||
import off_touchoff from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/off-touchoff.jpg";
|
||||
import on_dishes_lighting_reflection from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/on-dishes-lighting-reflection.jpg";
|
||||
import on_front_dishes_beakers from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/on-front-dishes-beakers.jpg";
|
||||
import on_front_overview from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/on-front-overview.jpg";
|
||||
import on_front from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/on-front.jpg";
|
||||
import on_screen from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/on-screen.jpg";
|
||||
import on_touchoff_block_isometric from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/on-touchoff-block-isometric.jpg";
|
||||
|
||||
import pick_and_placing from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/pick-and-placing.mp4";
|
||||
import precision_homing from "@assets/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate/precision-homing.mp4";
|
||||
import { DateTime } from "luxon";
|
||||
|
||||
const headerCarouselGroup: carouselGroup = {
|
||||
animation: "slide",
|
||||
images: [
|
||||
installation_and_tuning,
|
||||
on_front_overview,
|
||||
interface_tuning_and_detection,
|
||||
on_front,
|
||||
on_front_dishes_beakers,
|
||||
on_screen,
|
||||
off_touchoff,
|
||||
on_touchoff_block_isometric,
|
||||
off_controls_top_overview,
|
||||
off_controls_syringe_overview,
|
||||
off_controls_lid_overview,
|
||||
off_front,
|
||||
off_front_working_area_overview,
|
||||
off_left,
|
||||
off_rear,
|
||||
off_right,
|
||||
off_lighting,
|
||||
on_dishes_lighting_reflection,
|
||||
],
|
||||
};
|
||||
|
||||
const timeline: timelineEntry[] = [
|
||||
...workingTimeline,
|
||||
...timelineFromPrintedCircuitBoard(pnpLights),
|
||||
...timelineFromPrintedCircuitBoard(pnpControl),
|
||||
{
|
||||
event: "Project Started",
|
||||
eventDetail: "Initial Requirements Given",
|
||||
date: DateTime.fromISO("2013-12-01"),
|
||||
},
|
||||
{
|
||||
event: "Project Finished",
|
||||
eventDetail: "Delivered Units to Lab",
|
||||
date: DateTime.fromISO("2016-09-01"),
|
||||
},
|
||||
];
|
||||
|
||||
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)" }],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const videos: string[] = [pick_and_placing, precision_homing];
|
||||
---
|
||||
|
||||
<ExperienceLayout title="SARL - Zebrafish Embryo Pick and Plate" />
|
||||
<ExperienceLayout title="Zebrafish Embryo Pick and Plate" 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>Placeholder</Li>
|
||||
</Ul>
|
||||
</PageGroup>
|
||||
<SkillMatrix categorizedSkills={categorizedSkills} />
|
||||
</PageGroup>
|
||||
<PageGroup>
|
||||
<Fragment slot="header"><H2>Details</H2></Fragment>
|
||||
<Paragraphs>
|
||||
<Paragraph> Placeholder </Paragraph>
|
||||
</Paragraphs>
|
||||
</PageGroup>
|
||||
<PageGroup>
|
||||
<Fragment slot="header"><H2>Videos</H2></Fragment>
|
||||
<div class="grid grid-cols-1 gap-4 md:grid-cols-2">
|
||||
{
|
||||
videos.map((video) => (
|
||||
<Video
|
||||
videoPath={video}
|
||||
autoPlay={true}
|
||||
loop={true}
|
||||
playsInline={true}
|
||||
/>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</PageGroup>
|
||||
<PageGroup>
|
||||
<Fragment slot="header"><H2>Printed Circuit Boards</H2></Fragment>
|
||||
<PrintedCircuitBoard pcb={pnpLights} />
|
||||
<PrintedCircuitBoard pcb={pnpControl} />
|
||||
</PageGroup>
|
||||
</ExperienceLayout>
|
||||
|
||||
@@ -53,9 +53,9 @@ const headerCarouselGroup: carouselGroup = {
|
||||
href="/experience/osu-ceoas-ocean-mixing-group/robotic-oceanographic-surface-sampler"
|
||||
>robotic oceanographic surface sampler</InlineLink
|
||||
>
|
||||
and an <InlineLink
|
||||
and a <InlineLink
|
||||
href="/experience/osu-sinnhuber-aquatic-research-laboratory/zebrafish-embryo-pick-and-plate"
|
||||
>embryo pick-and-plate machine</InlineLink
|
||||
>zebrafish embryo pick-and-plate machine</InlineLink
|
||||
>. One my my proudest moments was when our club's mars rover took first
|
||||
place at the Candian International Rover Challenge in 2018, for which I
|
||||
was the <InlineLink
|
||||
|
||||