0hmX/robocraze-ov7670-camera-module-clone
This code defines and generates a 4-layer PCB hardware layout featuring an OV7670 VGA camera sensor module with fixed component placement, power regulation using ME6211 voltage regulators, a 2x9 header interface, and associated signal routing and mechanical footprints, designed for manufacturing and assembly.
- Version
- 1.0.7
- License
- MIT
- Stars
- 0
footprints/OV7670CSP2Footprint.tsx
import { Fragment } from "react"
/**
* OV7670 24-ball CSP2 land pattern from the OmniVision package drawing.
*
* The array is 5 columns by 6 rows on 0.62 mm pitch. Rows C and D only
* contain balls 1 and 2. The 0.30 mm circular lands match the nominal ball
* diameter; a fabricator should still validate mask/paste rules for its CSP
* process before this is released to production.
*/
const balls = [
[1, "A1", -1.24, 1.55],
[2, "A2", -0.62, 1.55],
[3, "A3", 0, 1.55],
[4, "A4", 0.62, 1.55],
[5, "A5", 1.24, 1.55],
[6, "B1", -1.24, 0.93],
[7, "B2", -0.62, 0.93],
[8, "B3", 0, 0.93],
[9, "B4", 0.62, 0.93],
[10, "B5", 1.24, 0.93],
[11, "C1", -1.24, 0.31],
[12, "C2", -0.62, 0.31],
[13, "D1", -1.24, -0.31],
[14, "D2", -0.62, -0.31],
[15, "E1", -1.24, -0.93],
[16, "E2", -0.62, -0.93],
[17, "E3", 0, -0.93],
[18, "E4", 0.62, -0.93],
[19, "E5", 1.24, -0.93],
[20, "F1", -1.24, -1.55],
[21, "F2", -0.62, -1.55],
[22, "F3", 0, -1.55],
[23, "F4", 0.62, -1.55],
[24, "F5", 1.24, -1.55],
] as const
const OV7670BallArray = () => (
<>
{balls.map(([pin, ball, pcbX, pcbY]) => (
<Fragment key={ball}>
<smtpad
portHints={[`pin${pin}`]}
pcbX={pcbX}
pcbY={pcbY}
shape="circle"
radius="0.15mm"
/>
</Fragment>
))}
</>
)
/** Bare CSP2 package footprint, centered on the optical axis. */
export const OV7670CSP2Footprint = () => (
<footprint>
<OV7670BallArray />
<courtyardoutline
outline={[
{ x: -2.15, y: 2.35 },
{ x: 2.15, y: 2.35 },
{ x: 2.15, y: -2.35 },
{ x: -2.15, y: -2.35 },
{ x: -2.15, y: 2.35 },
]}
/>
<silkscreenpath
route={[
{ x: -2.05, y: 1.65 },
{ x: -2.05, y: 2.15 },
{ x: -1.55, y: 2.15 },
]}
strokeWidth="0.12mm"
/>
<silkscreencircle
pcbX={-2.2}
pcbY={2.25}
radius="0.16mm"
strokeWidth="0.1mm"
/>
</footprint>
)
/**
* Assembly footprint used by the photographed module.
*
* The CSP geometry is datasheet-derived. The 19 mm holder courtyard and the
* two 2.0 mm mounting holes are photo-scaled placeholders because the seller
* does not publish the holder drawing. Verify them against the selected lens
* holder before fabrication.
*/
export const OV7670CameraAssemblyFootprint = () => (
<footprint>
<OV7670BallArray />
<hole pcbX={0} pcbY={7} diameter="2mm" />
<hole pcbX={0} pcbY={-7} diameter="2mm" />
<keepout
shape="circle"
pcbX={0}
pcbY={7}
radius="1.3mm"
layers={["top", "inner1", "inner2", "bottom"]}
/>
<keepout
shape="circle"
pcbX={0}
pcbY={-7}
radius="1.3mm"
layers={["top", "inner1", "inner2", "bottom"]}
/>
<courtyardoutline
outline={[
{ x: -9.5, y: 9.5 },
{ x: 9.5, y: 9.5 },
{ x: 9.5, y: -9.5 },
{ x: -9.5, y: -9.5 },
{ x: -9.5, y: 9.5 },
]}
/>
<silkscreenrect width="16mm" height="16mm" strokeWidth="0.15mm" />
<silkscreencircle radius="5.5mm" strokeWidth="0.15mm" />
<silkscreencircle
pcbX={-2.2}
pcbY={2.25}
radius="0.16mm"
strokeWidth="0.1mm"
/>
</footprint>
)