# Pressure transmitter

Gauge pressure transmitter with coplanar sensor module and a dual-compartment Ex d head (LCD cover, cable gland, stopping plug) on a 2-valve block-and-bleed manifold. Pipe-stand mounted on an offset U-bolted bracket with gusseted base plate and an optional stainless sunshade. 1/2" impulse tubing with compression fittings falls at 1:10 towards a 1/2" flanged process connection (gas service, transmitter above the tap).

**Standards:** IEC 60079-1, IEC 61298, ASME B16.5, ASTM A269 tubing

## Installation

```bash
npx -y https://decktwin.com/cli/deck-twin-0.2.2.tgz add pressure-transmitter
```

Copies `instruments/pressure-transmitter.tsx`, any helper files it imports and the shared `lib/` into `src/components/deck-twin/`. Needs `three`, `@react-three/fiber` and `@react-three/drei`.

## Usage

```tsx
import { Canvas } from '@react-three/fiber'
import { OrbitControls } from '@react-three/drei'
import { Stage } from './components/deck-twin/lib/stage'
import { PressureTransmitter } from './components/deck-twin/instruments/pressure-transmitter'

export default function Scene() {
  return (
    <Canvas shadows camera={{ position: [8, 5, 9], fov: 35 }}>
      <Stage>
        <PressureTransmitter />
      </Stage>
      <OrbitControls makeDefault />
    </Canvas>
  )
}
```

## Props

| Prop | Type | Default | Range |
| --- | --- | --- | --- |
| `height` | `number (m)` | `1.35` | 0.9 – 1.8 |
| `rating` | `150 \| 300 \| 600 \| 900 \| 1500 \| 2500` | `600` |  |
| `sunshade` | `boolean` | `true` |  |
| `housing` | `"actuatorBlue" \| "stainless" \| "aluminium" \| "equipmentPaintDark"` | `"actuatorBlue"` |  |
| `tag` | `string` | `"PT-1001"` |  |
| `...group` | position, rotation, scale… |  |  |

## Ports

Flange faces in the component's local frame, metres. Origin: centre of the footprint at deck level (y = 0).

| Id | Label | Position | Direction | Size | Class |
| --- | --- | --- | --- | --- | --- |
| `process` | Process connection | -0.240, 0.673, 0.121 | -1, 0, 0 | 1/2" | 600 |

## P&ID

Plain circle (field-mounted bubble) with PT, PIT or PT plus loop number, joined by a short solid process connection line to the pipe or vessel.

ISA PT · ISA PIT · ISA PE · ISA 5.1 (field-mounted instrument bubble)

A bubble with a horizontal bar across it is a DCS / control-room function (PIC, PI on the console), not a field device. PG / PI with no bar is a local gauge (pressure-gauge). PDT has two process connections (dp-transmitter). PST / PSH / PSL are switches (pressure-switch).

Pressure transmitter specification form (ISA-TR20.00.01) fields and the props they set:

| Field | Prop |
| --- | --- |
| Process connection rating | `rating` |
| Housing material / finish | `housing` |
| Sunshade | `sunshade` |
| Tag number | `tag` |

## Typical suppliers

Emerson (Rosemount) · Yokogawa. The geometry is generic and sized from public standards. It is not vendor CAD.

## Source

`instruments/pressure-transmitter.tsx`. This is the component file only: it imports shared code, so install it with the command above rather than pasting it alone. https://decktwin.com/r/pressure-transmitter.json has every file.

```tsx
// Gauge pressure transmitter: coplanar sensor and dual-compartment Ex d head with LCD on a 2-valve manifold, 2" pipe stand, 1/2" impulse tubing to a flanged process connection. IEC 60079-1, ASME B16.5.
import type { MatKey } from '../lib/kit'
import { KitMesh, useKit, type GroupProps } from '../lib/mesh'
import { port, type Port } from '../lib/ports'
import type { Rating } from '../lib/standards'
import { buildStand, standLayout } from './_stand'

export interface PressureTransmitterProps {
  /** LCD centreline height above deck, m */
  height?: number
  /** class of the 1/2" process flange */
  rating?: Rating
  housing?: MatKey
  /** stainless sunshade over the head */
  sunshade?: boolean
  tag?: string
}

export const defaults = { height: 1.35, rating: 600 as Rating, housing: 'actuatorBlue' as MatKey, tag: 'PT-1001', sunshade: true }

export function ports(p: PressureTransmitterProps = {}): Port[] {
  const { height } = { ...defaults, ...p }
  const { faces } = standLayout({ valves: 2, height })
  return [port('process', 'Process connection', faces[0], [-1, 0, 0], 0.5, p.rating ?? defaults.rating, 'instrument')]
}

export function PressureTransmitter({ height = defaults.height, rating = defaults.rating, housing = defaults.housing, tag = defaults.tag, sunshade = defaults.sunshade, ...group }: PressureTransmitterProps & GroupProps) {
  const data = useKit((k) => buildStand(k, { valves: 2, height, rating, housing, tag, sunshade }), [height, rating, housing, tag, sunshade])
  return (
    <group {...group}>
      <KitMesh data={data} />
    </group>
  )
}

export default PressureTransmitter
```
