Compare commits
24 Commits
e61e244c39
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 073bae726a | |||
| d688a8497d | |||
| 3bdb3d7351 | |||
| 79a91745c5 | |||
| 1d378c9bb1 | |||
| f89d602c05 | |||
| afb0c88910 | |||
| 81b28b4461 | |||
| 696f2735ff | |||
| 2d48724e37 | |||
| c11c7f1a4a | |||
| c7f9c959e0 | |||
| 9de7a94a13 | |||
| 9966fada8e | |||
| 5206e98118 | |||
| 1f6019c13c | |||
| 52af4d05fd | |||
| 7881ea6d23 | |||
| c74ff25a6f | |||
| 7ff97a8765 | |||
| f3279601fb | |||
| 524de66ad3 | |||
| 63349a17ed | |||
| ff5b92986f |
@@ -1 +0,0 @@
|
||||
../../.agents/skills/heroui-react
|
||||
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -10,5 +10,6 @@
|
||||
},
|
||||
"[json]": {
|
||||
"editor.defaultFormatter": "oxc.oxc-vscode"
|
||||
}
|
||||
},
|
||||
"cmake.ignoreCMakeListsMissing": true
|
||||
}
|
||||
9
apps/csms/drizzle/0007_unusual_squadron_supreme.sql
Normal file
9
apps/csms/drizzle/0007_unusual_squadron_supreme.sql
Normal file
@@ -0,0 +1,9 @@
|
||||
ALTER TABLE "charge_point" ADD COLUMN "last_ws_connected_at" timestamp with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "charge_point" ADD COLUMN "last_ws_disconnected_at" timestamp with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "charge_point" ADD COLUMN "connection_session_id" varchar(64);--> statement-breakpoint
|
||||
ALTER TABLE "charge_point" ADD COLUMN "transport_status" varchar DEFAULT 'offline' NOT NULL;--> statement-breakpoint
|
||||
ALTER TABLE "charge_point" ADD COLUMN "last_command_status" varchar;--> statement-breakpoint
|
||||
ALTER TABLE "charge_point" ADD COLUMN "last_command_at" timestamp with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "transaction" ADD COLUMN "remote_stop_requested_at" timestamp with time zone;--> statement-breakpoint
|
||||
ALTER TABLE "transaction" ADD COLUMN "remote_stop_request_id" varchar(64);--> statement-breakpoint
|
||||
ALTER TABLE "transaction" ADD COLUMN "remote_stop_status" varchar;
|
||||
2042
apps/csms/drizzle/meta/0007_snapshot.json
Normal file
2042
apps/csms/drizzle/meta/0007_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -50,6 +50,13 @@
|
||||
"when": 1773682931777,
|
||||
"tag": "0006_spooky_skin",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"version": "7",
|
||||
"when": 1773819865056,
|
||||
"tag": "0007_unusual_squadron_supreme",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -62,6 +62,29 @@ export const chargePoint = pgTable('charge_point', {
|
||||
heartbeatInterval: integer('heartbeat_interval').default(60),
|
||||
/** 最后一次收到 Heartbeat.req 的时间(UTC) */
|
||||
lastHeartbeatAt: timestamp('last_heartbeat_at', { withTimezone: true }),
|
||||
/** 最近一次 WebSocket 连接建立时间(UTC) */
|
||||
lastWsConnectedAt: timestamp('last_ws_connected_at', { withTimezone: true }),
|
||||
/** 最近一次 WebSocket 连接关闭时间(UTC) */
|
||||
lastWsDisconnectedAt: timestamp('last_ws_disconnected_at', { withTimezone: true }),
|
||||
/** 最近一次活跃 WebSocket 会话 ID(用于区分重连代次) */
|
||||
connectionSessionId: varchar('connection_session_id', { length: 64 }),
|
||||
/**
|
||||
* OCPP 传输通道状态:
|
||||
* online = 当前实例持有活动 WebSocket
|
||||
* unavailable = 最近有心跳,但当前无可用下行通道
|
||||
* offline = 无活动通道
|
||||
*/
|
||||
transportStatus: varchar('transport_status', {
|
||||
enum: ['online', 'unavailable', 'offline'],
|
||||
})
|
||||
.notNull()
|
||||
.default('offline'),
|
||||
/** 最近一次下行命令确认结果 */
|
||||
lastCommandStatus: varchar('last_command_status', {
|
||||
enum: ['Accepted', 'Rejected', 'Error', 'Timeout'],
|
||||
}),
|
||||
/** 最近一次下行命令确认时间(UTC) */
|
||||
lastCommandAt: timestamp('last_command_at', { withTimezone: true }),
|
||||
/** 最后一次收到 BootNotification.req 的时间(UTC) */
|
||||
lastBootNotificationAt: timestamp('last_boot_notification_at', {
|
||||
withTimezone: true,
|
||||
@@ -398,6 +421,16 @@ export const transaction = pgTable(
|
||||
'DeAuthorized',
|
||||
],
|
||||
}),
|
||||
/** 管理端发起远程停止的请求时间 */
|
||||
remoteStopRequestedAt: timestamp('remote_stop_requested_at', {
|
||||
withTimezone: true,
|
||||
}),
|
||||
/** 管理端发起远程停止的 OCPP uniqueId */
|
||||
remoteStopRequestId: varchar('remote_stop_request_id', { length: 64 }),
|
||||
/** 最近一次远程停止请求的结果 */
|
||||
remoteStopStatus: varchar('remote_stop_status', {
|
||||
enum: ['Requested', 'Accepted', 'Rejected', 'Error', 'Timeout'],
|
||||
}),
|
||||
/**
|
||||
* 本次充电扣费金额(单位:分)
|
||||
* 由 StopTransaction 处理时根据实际用电量和充电桩电价计算写入
|
||||
|
||||
@@ -91,9 +91,18 @@ app.get(
|
||||
'/ocpp/:chargePointId',
|
||||
async (c, next) => {
|
||||
const chargePointId = c.req.param('chargePointId')
|
||||
const connInfo = getConnInfo(c)
|
||||
const remoteAddr = connInfo.remote.address
|
||||
const authHeader = c.req.header('Authorization')
|
||||
|
||||
console.info(
|
||||
`[OCPP][AUTH][BEGIN] cp=${chargePointId} remote=${remoteAddr} hasAuthHeader=${Boolean(authHeader)}`,
|
||||
)
|
||||
|
||||
if (!authHeader?.startsWith('Basic ')) {
|
||||
console.warn(
|
||||
`[OCPP][AUTH][REJECT] cp=${chargePointId} remote=${remoteAddr} reason=missing_or_invalid_scheme`,
|
||||
)
|
||||
c.header('WWW-Authenticate', 'Basic realm="OCPP"')
|
||||
return c.json({ error: 'Unauthorized' }, 401)
|
||||
}
|
||||
@@ -106,10 +115,16 @@ app.get(
|
||||
id = decoded.slice(0, colonIdx)
|
||||
password = decoded.slice(colonIdx + 1)
|
||||
} catch {
|
||||
console.warn(
|
||||
`[OCPP][AUTH][REJECT] cp=${chargePointId} remote=${remoteAddr} reason=invalid_authorization_header`,
|
||||
)
|
||||
return c.json({ error: 'Invalid Authorization header' }, 400)
|
||||
}
|
||||
|
||||
if (id !== chargePointId) {
|
||||
console.warn(
|
||||
`[OCPP][AUTH][REJECT] cp=${chargePointId} remote=${remoteAddr} reason=identity_mismatch authId=${id}`,
|
||||
)
|
||||
return c.json({ error: 'Unauthorized' }, 401)
|
||||
}
|
||||
|
||||
@@ -121,9 +136,14 @@ app.get(
|
||||
.limit(1)
|
||||
|
||||
if (!cp?.passwordHash || !(await verifyOcppPassword(password, cp.passwordHash))) {
|
||||
console.warn(
|
||||
`[OCPP][AUTH][REJECT] cp=${chargePointId} remote=${remoteAddr} reason=bad_credentials_or_missing_cp`,
|
||||
)
|
||||
return c.json({ error: 'Unauthorized' }, 401)
|
||||
}
|
||||
|
||||
console.info(`[OCPP][AUTH][PASS] cp=${chargePointId} remote=${remoteAddr}`)
|
||||
|
||||
await next()
|
||||
},
|
||||
upgradeWebSocket((c) => {
|
||||
|
||||
@@ -9,6 +9,11 @@ import type {
|
||||
OcppConnectionContext,
|
||||
} from "../types.ts";
|
||||
|
||||
function shortIdTag(idTagValue: string): string {
|
||||
if (idTagValue.length <= 8) return idTagValue;
|
||||
return `${idTagValue.slice(0, 4)}...${idTagValue.slice(-4)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shared helper — resolves idTagInfo from the database.
|
||||
* Used by Authorize, StartTransaction, and StopTransaction.
|
||||
@@ -56,9 +61,14 @@ export async function resolveIdTagInfo(
|
||||
|
||||
export async function handleAuthorize(
|
||||
payload: AuthorizeRequest,
|
||||
_ctx: OcppConnectionContext,
|
||||
ctx: OcppConnectionContext,
|
||||
): Promise<AuthorizeResponse> {
|
||||
console.info(
|
||||
`[OCPP][ACTION][Authorize][BEGIN] cp=${ctx.chargePointIdentifier} idTag=${shortIdTag(payload.idTag)}`,
|
||||
);
|
||||
const idTagInfo = await resolveIdTagInfo(payload.idTag);
|
||||
console.log(`[OCPP] Authorize idTag=${payload.idTag} -> ${idTagInfo.status}`);
|
||||
console.info(
|
||||
`[OCPP][ACTION][Authorize][END] cp=${ctx.chargePointIdentifier} idTag=${shortIdTag(payload.idTag)} status=${idTagInfo.status}`,
|
||||
);
|
||||
return { idTagInfo };
|
||||
}
|
||||
|
||||
@@ -12,6 +12,10 @@ export async function handleBootNotification(
|
||||
payload: BootNotificationRequest,
|
||||
ctx: OcppConnectionContext,
|
||||
): Promise<BootNotificationResponse> {
|
||||
console.info(
|
||||
`[OCPP][ACTION][BootNotification][BEGIN] cp=${ctx.chargePointIdentifier} vendor=${payload.chargePointVendor} model=${payload.chargePointModel} fw=${payload.firmwareVersion ?? 'n/a'}`,
|
||||
)
|
||||
|
||||
const db = useDrizzle()
|
||||
const { heartbeatInterval } = await getOcpp16jSettings()
|
||||
|
||||
@@ -32,6 +36,7 @@ export async function handleBootNotification(
|
||||
registrationStatus: 'Pending',
|
||||
heartbeatInterval,
|
||||
lastBootNotificationAt: dayjs().toDate(),
|
||||
transportStatus: 'online',
|
||||
})
|
||||
.onConflictDoUpdate({
|
||||
target: chargePoint.chargePointIdentifier,
|
||||
@@ -47,6 +52,7 @@ export async function handleBootNotification(
|
||||
// Do NOT override registrationStatus — preserve whatever the admin set
|
||||
heartbeatInterval,
|
||||
lastBootNotificationAt: dayjs().toDate(),
|
||||
transportStatus: 'online',
|
||||
updatedAt: dayjs().toDate(),
|
||||
},
|
||||
})
|
||||
@@ -55,7 +61,9 @@ export async function handleBootNotification(
|
||||
const status = cp.registrationStatus
|
||||
ctx.isRegistered = status === 'Accepted'
|
||||
|
||||
console.log(`[OCPP] BootNotification ${ctx.chargePointIdentifier} status=${status}`)
|
||||
console.info(
|
||||
`[OCPP][ACTION][BootNotification][END] cp=${ctx.chargePointIdentifier} status=${status} heartbeatInterval=${heartbeatInterval}`,
|
||||
)
|
||||
|
||||
return {
|
||||
currentTime: dayjs().toISOString(),
|
||||
|
||||
@@ -12,14 +12,25 @@ export async function handleHeartbeat(
|
||||
_payload: HeartbeatRequest,
|
||||
ctx: OcppConnectionContext,
|
||||
): Promise<HeartbeatResponse> {
|
||||
const now = dayjs()
|
||||
console.info(`[OCPP][ACTION][Heartbeat][BEGIN] cp=${ctx.chargePointIdentifier}`)
|
||||
|
||||
const db = useDrizzle()
|
||||
|
||||
await db
|
||||
.update(chargePoint)
|
||||
.set({ lastHeartbeatAt: dayjs().toDate() })
|
||||
.set({
|
||||
lastHeartbeatAt: now.toDate(),
|
||||
transportStatus: 'online',
|
||||
updatedAt: now.toDate(),
|
||||
})
|
||||
.where(eq(chargePoint.chargePointIdentifier, ctx.chargePointIdentifier))
|
||||
|
||||
console.info(
|
||||
`[OCPP][ACTION][Heartbeat][END] cp=${ctx.chargePointIdentifier} currentTime=${now.toISOString()}`,
|
||||
)
|
||||
|
||||
return {
|
||||
currentTime: dayjs().toISOString(),
|
||||
currentTime: now.toISOString(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,10 @@ export async function handleMeterValues(
|
||||
payload: MeterValuesRequest,
|
||||
ctx: OcppConnectionContext,
|
||||
): Promise<MeterValuesResponse> {
|
||||
console.info(
|
||||
`[OCPP][ACTION][MeterValues][BEGIN] cp=${ctx.chargePointIdentifier} connector=${payload.connectorId} txId=${payload.transactionId ?? 'n/a'} meterValueCount=${payload.meterValue.length}`,
|
||||
);
|
||||
|
||||
const db = useDrizzle();
|
||||
|
||||
const [cp] = await db
|
||||
@@ -48,5 +52,9 @@ export async function handleMeterValues(
|
||||
await db.insert(meterValue).values(records);
|
||||
}
|
||||
|
||||
console.info(
|
||||
`[OCPP][ACTION][MeterValues][END] cp=${ctx.chargePointIdentifier} connector=${payload.connectorId} txId=${payload.transactionId ?? 'n/a'} inserted=${records.length}`,
|
||||
);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -9,10 +9,19 @@ import type {
|
||||
} from "../types.ts";
|
||||
import { resolveIdTagInfo } from "./authorize.ts";
|
||||
|
||||
function shortIdTag(idTagValue: string): string {
|
||||
if (idTagValue.length <= 8) return idTagValue;
|
||||
return `${idTagValue.slice(0, 4)}...${idTagValue.slice(-4)}`;
|
||||
}
|
||||
|
||||
export async function handleStartTransaction(
|
||||
payload: StartTransactionRequest,
|
||||
ctx: OcppConnectionContext,
|
||||
): Promise<StartTransactionResponse> {
|
||||
console.info(
|
||||
`[OCPP][ACTION][StartTransaction][BEGIN] cp=${ctx.chargePointIdentifier} connector=${payload.connectorId} idTag=${shortIdTag(payload.idTag)} meterStart=${payload.meterStart} timestamp=${payload.timestamp}`,
|
||||
);
|
||||
|
||||
const db = useDrizzle();
|
||||
|
||||
// Resolve idTag authorization
|
||||
@@ -78,8 +87,8 @@ export async function handleStartTransaction(
|
||||
}
|
||||
|
||||
console.log(
|
||||
`[OCPP] StartTransaction cp=${ctx.chargePointIdentifier} connector=${payload.connectorId} ` +
|
||||
`idTag=${payload.idTag} status=${idTagInfo.status} txId=${tx.id}`,
|
||||
`[OCPP][ACTION][StartTransaction][END] cp=${ctx.chargePointIdentifier} connector=${payload.connectorId} ` +
|
||||
`idTag=${shortIdTag(payload.idTag)} status=${idTagInfo.status} txId=${tx.id} rejected=${rejected}`,
|
||||
);
|
||||
|
||||
return { transactionId: tx.id, idTagInfo };
|
||||
|
||||
@@ -42,6 +42,10 @@ export async function handleStatusNotification(
|
||||
payload: StatusNotificationRequest,
|
||||
ctx: OcppConnectionContext,
|
||||
): Promise<StatusNotificationResponse> {
|
||||
console.info(
|
||||
`[OCPP][ACTION][StatusNotification][BEGIN] cp=${ctx.chargePointIdentifier} connector=${payload.connectorId} status=${payload.status} errorCode=${payload.errorCode}`,
|
||||
)
|
||||
|
||||
const db = useDrizzle()
|
||||
|
||||
// Retrieve the internal charge point id
|
||||
@@ -52,6 +56,9 @@ export async function handleStatusNotification(
|
||||
.limit(1)
|
||||
|
||||
if (!cp) {
|
||||
console.error(
|
||||
`[OCPP][ACTION][StatusNotification][ERROR] cp=${ctx.chargePointIdentifier} reason=charge_point_not_found`,
|
||||
)
|
||||
throw new Error(`ChargePoint not found: ${ctx.chargePointIdentifier}`)
|
||||
}
|
||||
|
||||
@@ -101,5 +108,9 @@ export async function handleStatusNotification(
|
||||
})
|
||||
}
|
||||
|
||||
console.info(
|
||||
`[OCPP][ACTION][StatusNotification][END] cp=${ctx.chargePointIdentifier} connector=${payload.connectorId} status=${connStatus} errorCode=${connErrorCode} historySaved=${Boolean(upsertedConnector)}`,
|
||||
)
|
||||
|
||||
return {}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,12 @@ import { resolveIdTagInfo } from "./authorize.ts";
|
||||
|
||||
export async function handleStopTransaction(
|
||||
payload: StopTransactionRequest,
|
||||
_ctx: OcppConnectionContext,
|
||||
ctx: OcppConnectionContext,
|
||||
): Promise<StopTransactionResponse> {
|
||||
console.info(
|
||||
`[OCPP][ACTION][StopTransaction][BEGIN] cp=${ctx.chargePointIdentifier} txId=${payload.transactionId} meterStop=${payload.meterStop} reason=${payload.reason ?? 'none'} timestamp=${payload.timestamp}`,
|
||||
);
|
||||
|
||||
const db = useDrizzle();
|
||||
|
||||
// Update the transaction record
|
||||
@@ -26,13 +30,20 @@ export async function handleStopTransaction(
|
||||
stopMeterValue: payload.meterStop,
|
||||
stopIdTag: payload.idTag ?? null,
|
||||
stopReason: (payload.reason as (typeof transaction.$inferSelect)["stopReason"]) ?? null,
|
||||
remoteStopStatus: sql`case
|
||||
when ${transaction.remoteStopRequestedAt} is not null and coalesce(${transaction.remoteStopStatus}, 'Requested') in ('Requested', 'Accepted')
|
||||
then 'Accepted'
|
||||
else ${transaction.remoteStopStatus}
|
||||
end`,
|
||||
updatedAt: dayjs().toDate(),
|
||||
})
|
||||
.where(eq(transaction.id, payload.transactionId))
|
||||
.returning();
|
||||
|
||||
if (!tx) {
|
||||
console.warn(`[OCPP] StopTransaction: transaction ${payload.transactionId} not found`);
|
||||
console.warn(
|
||||
`[OCPP][ACTION][StopTransaction][MISS] cp=${ctx.chargePointIdentifier} txId=${payload.transactionId} reason=transaction_not_found`,
|
||||
);
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -177,7 +188,7 @@ export async function handleStopTransaction(
|
||||
}
|
||||
|
||||
console.log(
|
||||
`[OCPP] StopTransaction txId=${payload.transactionId} ` +
|
||||
`[OCPP][ACTION][StopTransaction][END] cp=${ctx.chargePointIdentifier} txId=${payload.transactionId} ` +
|
||||
`reason=${payload.reason ?? "none"} energyWh=${energyWh} ` +
|
||||
`feeFen=${feeFen} (elec=${electricityFen ?? "flat"} svc=${serviceFeeFen ?? "-"})`,
|
||||
);
|
||||
|
||||
@@ -1,11 +1,18 @@
|
||||
import type { WSContext } from 'hono/ws'
|
||||
import dayjs from 'dayjs'
|
||||
import { eq } from 'drizzle-orm'
|
||||
import { isSupportedOCPP } from '@/constants.js'
|
||||
import { useDrizzle } from '@/lib/db.js'
|
||||
import { chargePoint } from '@/db/schema.js'
|
||||
import {
|
||||
OCPP_MESSAGE_TYPE,
|
||||
type OcppCall,
|
||||
type OcppCallErrorMessage,
|
||||
type OcppCallResultMessage,
|
||||
type OcppErrorCode,
|
||||
type OcppMessage,
|
||||
type OcppConnectionContext,
|
||||
type CommandChannelStatus,
|
||||
type AuthorizeRequest,
|
||||
type AuthorizeResponse,
|
||||
type BootNotificationRequest,
|
||||
@@ -24,9 +31,26 @@ import {
|
||||
|
||||
/**
|
||||
* Global registry of active OCPP WebSocket connections.
|
||||
* Key = chargePointIdentifier, Value = WSContext
|
||||
* Key = chargePointIdentifier, Value = connection entry
|
||||
*/
|
||||
export const ocppConnections = new Map<string, WSContext>()
|
||||
export type OcppConnectionEntry = {
|
||||
ws: WSContext
|
||||
sessionId: string
|
||||
openedAt: Date
|
||||
lastMessageAt: Date
|
||||
}
|
||||
|
||||
type PendingCall =
|
||||
| {
|
||||
chargePointIdentifier: string
|
||||
action: string
|
||||
resolve: (payload: unknown) => void
|
||||
reject: (error: Error) => void
|
||||
timeout: ReturnType<typeof setTimeout>
|
||||
}
|
||||
|
||||
export const ocppConnections = new Map<string, OcppConnectionEntry>()
|
||||
const pendingCalls = new Map<string, PendingCall>()
|
||||
import { handleAuthorize } from './actions/authorize.ts'
|
||||
import { handleBootNotification } from './actions/boot-notification.ts'
|
||||
import { handleHeartbeat } from './actions/heartbeat.ts'
|
||||
@@ -77,6 +101,59 @@ const actionHandlers: ActionHandlerMap = {
|
||||
StopTransaction: handleStopTransaction,
|
||||
}
|
||||
|
||||
function shortId(value: string): string {
|
||||
return value.length <= 12 ? value : `${value.slice(0, 8)}...${value.slice(-4)}`
|
||||
}
|
||||
|
||||
function summarizeCallPayload(action: string, payload: unknown): Record<string, unknown> {
|
||||
const p = payload as Record<string, unknown>
|
||||
switch (action) {
|
||||
case 'BootNotification':
|
||||
return {
|
||||
chargePointVendor: p.chargePointVendor,
|
||||
chargePointModel: p.chargePointModel,
|
||||
firmwareVersion: p.firmwareVersion ?? null,
|
||||
}
|
||||
case 'Authorize':
|
||||
return {
|
||||
idTag: typeof p.idTag === 'string' ? shortId(p.idTag) : undefined,
|
||||
}
|
||||
case 'Heartbeat':
|
||||
return {}
|
||||
case 'StatusNotification':
|
||||
return {
|
||||
connectorId: p.connectorId,
|
||||
status: p.status,
|
||||
errorCode: p.errorCode,
|
||||
timestamp: p.timestamp ?? null,
|
||||
}
|
||||
case 'StartTransaction':
|
||||
return {
|
||||
connectorId: p.connectorId,
|
||||
idTag: typeof p.idTag === 'string' ? shortId(p.idTag) : undefined,
|
||||
meterStart: p.meterStart,
|
||||
timestamp: p.timestamp,
|
||||
}
|
||||
case 'StopTransaction':
|
||||
return {
|
||||
transactionId: p.transactionId,
|
||||
meterStop: p.meterStop,
|
||||
reason: p.reason ?? null,
|
||||
timestamp: p.timestamp,
|
||||
}
|
||||
case 'MeterValues':
|
||||
return {
|
||||
connectorId: p.connectorId,
|
||||
transactionId: p.transactionId ?? null,
|
||||
meterValueCount: Array.isArray(p.meterValue) ? p.meterValue.length : 0,
|
||||
}
|
||||
default:
|
||||
return {
|
||||
keys: p && typeof p === 'object' ? Object.keys(p).slice(0, 20) : [],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function sendCallResult(ws: WSContext, uniqueId: string, payload: unknown): void {
|
||||
ws.send(JSON.stringify([OCPP_MESSAGE_TYPE.CALLRESULT, uniqueId, payload]))
|
||||
}
|
||||
@@ -92,6 +169,108 @@ function sendCallError(
|
||||
)
|
||||
}
|
||||
|
||||
async function updateTransportState(
|
||||
chargePointIdentifier: string,
|
||||
values: Partial<typeof chargePoint.$inferInsert>,
|
||||
): Promise<void> {
|
||||
const db = useDrizzle()
|
||||
await db
|
||||
.update(chargePoint)
|
||||
.set({
|
||||
...values,
|
||||
updatedAt: dayjs().toDate(),
|
||||
})
|
||||
.where(eq(chargePoint.chargePointIdentifier, chargePointIdentifier))
|
||||
}
|
||||
|
||||
async function getRegistrationStatus(chargePointIdentifier: string) {
|
||||
const db = useDrizzle()
|
||||
const [cp] = await db
|
||||
.select({ registrationStatus: chargePoint.registrationStatus })
|
||||
.from(chargePoint)
|
||||
.where(eq(chargePoint.chargePointIdentifier, chargePointIdentifier))
|
||||
.limit(1)
|
||||
|
||||
return cp?.registrationStatus ?? null
|
||||
}
|
||||
|
||||
function getCommandChannelStatus(chargePointIdentifier: string): CommandChannelStatus {
|
||||
return ocppConnections.has(chargePointIdentifier) ? 'online' : 'unavailable'
|
||||
}
|
||||
|
||||
export async function sendOcppCall<TPayload extends Record<string, unknown>, TResult = unknown>(
|
||||
chargePointIdentifier: string,
|
||||
action: string,
|
||||
payload: TPayload,
|
||||
timeoutOrOptions: number | { timeoutMs?: number; uniqueId?: string } = 15000,
|
||||
): Promise<TResult> {
|
||||
const entry = ocppConnections.get(chargePointIdentifier)
|
||||
if (!entry) {
|
||||
await updateTransportState(chargePointIdentifier, { transportStatus: 'unavailable' })
|
||||
throw new Error('TransportUnavailable')
|
||||
}
|
||||
|
||||
const timeoutMs =
|
||||
typeof timeoutOrOptions === 'number' ? timeoutOrOptions : (timeoutOrOptions.timeoutMs ?? 15000)
|
||||
const uniqueId =
|
||||
typeof timeoutOrOptions === 'number' ? crypto.randomUUID() : (timeoutOrOptions.uniqueId ?? crypto.randomUUID())
|
||||
|
||||
console.info(
|
||||
`[OCPP][TX][CALL] cp=${chargePointIdentifier} action=${action} uniqueId=${uniqueId} timeoutMs=${timeoutMs}`,
|
||||
summarizeCallPayload(action, payload),
|
||||
)
|
||||
|
||||
const resultPromise = new Promise<TResult>((resolve, reject) => {
|
||||
const timeout = setTimeout(async () => {
|
||||
pendingCalls.delete(uniqueId)
|
||||
console.warn(
|
||||
`[OCPP][TX][TIMEOUT] cp=${chargePointIdentifier} action=${action} uniqueId=${uniqueId} timeoutMs=${timeoutMs}`,
|
||||
)
|
||||
await updateTransportState(chargePointIdentifier, {
|
||||
transportStatus: getCommandChannelStatus(chargePointIdentifier),
|
||||
lastCommandStatus: 'Timeout',
|
||||
lastCommandAt: dayjs().toDate(),
|
||||
})
|
||||
reject(new Error('CommandTimeout'))
|
||||
}, timeoutMs)
|
||||
|
||||
pendingCalls.set(uniqueId, {
|
||||
chargePointIdentifier,
|
||||
action,
|
||||
resolve: (response) => {
|
||||
console.info(
|
||||
`[OCPP][TX][CALLRESULT] cp=${chargePointIdentifier} action=${action} uniqueId=${uniqueId}`,
|
||||
)
|
||||
resolve(response as TResult)
|
||||
},
|
||||
reject,
|
||||
timeout,
|
||||
})
|
||||
})
|
||||
|
||||
try {
|
||||
entry.ws.send(JSON.stringify([OCPP_MESSAGE_TYPE.CALL, uniqueId, action, payload]))
|
||||
} catch (error) {
|
||||
const pending = pendingCalls.get(uniqueId)
|
||||
if (pending) {
|
||||
clearTimeout(pending.timeout)
|
||||
pendingCalls.delete(uniqueId)
|
||||
}
|
||||
await updateTransportState(chargePointIdentifier, {
|
||||
transportStatus: 'unavailable',
|
||||
lastCommandStatus: 'Error',
|
||||
lastCommandAt: dayjs().toDate(),
|
||||
})
|
||||
console.error(
|
||||
`[OCPP][TX][SEND_ERROR] cp=${chargePointIdentifier} action=${action} uniqueId=${uniqueId}`,
|
||||
error,
|
||||
)
|
||||
throw error instanceof Error ? error : new Error('CommandSendFailed')
|
||||
}
|
||||
|
||||
return resultPromise
|
||||
}
|
||||
|
||||
/**
|
||||
* Factory that produces a hono-ws event handler object for a single
|
||||
* OCPP WebSocket connection.
|
||||
@@ -104,24 +283,70 @@ export function createOcppHandler(chargePointIdentifier: string, remoteAddr?: st
|
||||
chargePointIdentifier,
|
||||
isRegistered: false,
|
||||
}
|
||||
const sessionId = crypto.randomUUID()
|
||||
|
||||
return {
|
||||
onOpen(_evt: Event, ws: WSContext) {
|
||||
async onOpen(_evt: Event, ws: WSContext) {
|
||||
const subProtocol = ws.protocol ?? 'unknown'
|
||||
if (!isSupportedOCPP(subProtocol)) {
|
||||
console.warn(
|
||||
`[OCPP][WS][OPEN_REJECT] cp=${chargePointIdentifier} session=${sessionId} subProtocol=${subProtocol} reason=unsupported_subprotocol`,
|
||||
)
|
||||
ws.close(1002, 'Unsupported subprotocol')
|
||||
return
|
||||
}
|
||||
ocppConnections.set(chargePointIdentifier, ws)
|
||||
console.log(
|
||||
`[OCPP] ${chargePointIdentifier} connected` +
|
||||
(remoteAddr ? ` from ${remoteAddr}` : ''),
|
||||
|
||||
const registrationStatus = await getRegistrationStatus(chargePointIdentifier)
|
||||
ctx.isRegistered = registrationStatus === 'Accepted'
|
||||
|
||||
const previous = ocppConnections.get(chargePointIdentifier)
|
||||
if (previous && previous.sessionId !== sessionId) {
|
||||
try {
|
||||
previous.ws.close(1012, 'Replaced by newer connection')
|
||||
} catch {
|
||||
// Ignore close race when the old socket is already gone.
|
||||
}
|
||||
}
|
||||
|
||||
ocppConnections.set(chargePointIdentifier, {
|
||||
ws,
|
||||
sessionId,
|
||||
openedAt: new Date(),
|
||||
lastMessageAt: new Date(),
|
||||
})
|
||||
await updateTransportState(chargePointIdentifier, {
|
||||
transportStatus: 'online',
|
||||
connectionSessionId: sessionId,
|
||||
lastWsConnectedAt: dayjs().toDate(),
|
||||
})
|
||||
console.info(
|
||||
`[OCPP][WS][OPEN] cp=${chargePointIdentifier} session=${sessionId} subProtocol=${subProtocol} registered=${ctx.isRegistered}` +
|
||||
(remoteAddr ? ` remote=${remoteAddr}` : ''),
|
||||
)
|
||||
if (previous && previous.sessionId !== sessionId) {
|
||||
console.info(
|
||||
`[OCPP][WS][REPLACE] cp=${chargePointIdentifier} oldSession=${previous.sessionId} newSession=${sessionId}`,
|
||||
)
|
||||
}
|
||||
},
|
||||
|
||||
async onMessage(evt: MessageEvent, ws: WSContext) {
|
||||
let uniqueId = '(unknown)'
|
||||
try {
|
||||
const current = ocppConnections.get(chargePointIdentifier)
|
||||
if (!current || current.sessionId !== sessionId) {
|
||||
console.warn(
|
||||
`[OCPP][WS][STALE] cp=${chargePointIdentifier} session=${sessionId} activeSession=${current?.sessionId ?? 'none'}`,
|
||||
)
|
||||
try {
|
||||
ws.close(1008, 'Stale connection')
|
||||
} catch {
|
||||
// Ignore close errors on stale sockets.
|
||||
}
|
||||
return
|
||||
}
|
||||
current.lastMessageAt = new Date()
|
||||
|
||||
const raw = evt.data
|
||||
if (typeof raw !== 'string') return
|
||||
|
||||
@@ -141,13 +366,65 @@ export function createOcppHandler(chargePointIdentifier: string, remoteAddr?: st
|
||||
const [messageType, msgUniqueId] = message
|
||||
uniqueId = String(msgUniqueId)
|
||||
|
||||
// CSMS only handles CALL messages from the charge point
|
||||
if (messageType === OCPP_MESSAGE_TYPE.CALL) {
|
||||
const [, , action, payload] = message as OcppCall
|
||||
console.info(
|
||||
`[OCPP][RX][CALL] cp=${chargePointIdentifier} session=${sessionId} action=${action} uniqueId=${uniqueId}`,
|
||||
summarizeCallPayload(action, payload),
|
||||
)
|
||||
} else if (messageType === OCPP_MESSAGE_TYPE.CALLRESULT) {
|
||||
console.info(
|
||||
`[OCPP][RX][CALLRESULT] cp=${chargePointIdentifier} session=${sessionId} uniqueId=${uniqueId}`,
|
||||
)
|
||||
} else if (messageType === OCPP_MESSAGE_TYPE.CALLERROR) {
|
||||
const [, , errorCode, errorDescription] = message as OcppCallErrorMessage
|
||||
console.warn(
|
||||
`[OCPP][RX][CALLERROR] cp=${chargePointIdentifier} session=${sessionId} uniqueId=${uniqueId} code=${errorCode} desc=${errorDescription}`,
|
||||
)
|
||||
}
|
||||
|
||||
if (messageType === OCPP_MESSAGE_TYPE.CALLRESULT) {
|
||||
const [, responseUniqueId, payload] = message as OcppCallResultMessage
|
||||
const pending = pendingCalls.get(responseUniqueId)
|
||||
if (!pending) return
|
||||
clearTimeout(pending.timeout)
|
||||
pendingCalls.delete(responseUniqueId)
|
||||
await updateTransportState(pending.chargePointIdentifier, {
|
||||
transportStatus: getCommandChannelStatus(pending.chargePointIdentifier),
|
||||
lastCommandStatus: 'Accepted',
|
||||
lastCommandAt: dayjs().toDate(),
|
||||
})
|
||||
pending.resolve(payload)
|
||||
return
|
||||
}
|
||||
|
||||
if (messageType === OCPP_MESSAGE_TYPE.CALLERROR) {
|
||||
const [, responseUniqueId, errorCode, errorDescription] = message as OcppCallErrorMessage
|
||||
const pending = pendingCalls.get(responseUniqueId)
|
||||
if (!pending) return
|
||||
clearTimeout(pending.timeout)
|
||||
pendingCalls.delete(responseUniqueId)
|
||||
await updateTransportState(pending.chargePointIdentifier, {
|
||||
transportStatus: getCommandChannelStatus(pending.chargePointIdentifier),
|
||||
lastCommandStatus: errorCode === 'InternalError' ? 'Error' : 'Rejected',
|
||||
lastCommandAt: dayjs().toDate(),
|
||||
})
|
||||
console.warn(
|
||||
`[OCPP][TX][REJECTED] cp=${pending.chargePointIdentifier} action=${pending.action} uniqueId=${responseUniqueId} code=${errorCode} desc=${errorDescription}`,
|
||||
)
|
||||
pending.reject(new Error(`${errorCode}:${errorDescription}`))
|
||||
return
|
||||
}
|
||||
|
||||
if (messageType !== OCPP_MESSAGE_TYPE.CALL) return
|
||||
|
||||
const [, , action, payload] = message as OcppCall
|
||||
|
||||
// Enforce BootNotification before any other action
|
||||
if (!ctx.isRegistered && action !== 'BootNotification') {
|
||||
console.warn(
|
||||
`[OCPP][RX][REJECT] cp=${chargePointIdentifier} session=${sessionId} action=${action} uniqueId=${uniqueId} reason=boot_notification_required`,
|
||||
)
|
||||
sendCallError(
|
||||
ws,
|
||||
uniqueId,
|
||||
@@ -159,6 +436,9 @@ export function createOcppHandler(chargePointIdentifier: string, remoteAddr?: st
|
||||
|
||||
const handler = actionHandlers[action as keyof ActionHandlerMap]
|
||||
if (!handler) {
|
||||
console.warn(
|
||||
`[OCPP][RX][NOT_IMPLEMENTED] cp=${chargePointIdentifier} session=${sessionId} action=${action} uniqueId=${uniqueId}`,
|
||||
)
|
||||
sendCallError(ws, uniqueId, 'NotImplemented', `Action '${action}' is not implemented`)
|
||||
return
|
||||
}
|
||||
@@ -167,16 +447,31 @@ export function createOcppHandler(chargePointIdentifier: string, remoteAddr?: st
|
||||
handler as (payload: unknown, ctx: OcppConnectionContext) => Promise<unknown>
|
||||
)(payload, ctx)
|
||||
|
||||
console.info(
|
||||
`[OCPP][TX][CALLRESULT] cp=${chargePointIdentifier} session=${sessionId} action=${action} uniqueId=${uniqueId}`,
|
||||
)
|
||||
sendCallResult(ws, uniqueId, response)
|
||||
} catch (err) {
|
||||
console.error(`[OCPP] Error handling message from ${chargePointIdentifier} (uniqueId=${uniqueId}):`, err)
|
||||
console.error(
|
||||
`[OCPP][RX][ERROR] cp=${chargePointIdentifier} session=${sessionId} uniqueId=${uniqueId}`,
|
||||
err,
|
||||
)
|
||||
sendCallError(ws, uniqueId, 'InternalError', 'Internal server error')
|
||||
}
|
||||
},
|
||||
|
||||
onClose(evt: CloseEvent, _ws: WSContext) {
|
||||
ocppConnections.delete(chargePointIdentifier)
|
||||
console.log(`[OCPP] ${chargePointIdentifier} disconnected (code=${evt.code})`)
|
||||
async onClose(evt: CloseEvent, _ws: WSContext) {
|
||||
const current = ocppConnections.get(chargePointIdentifier)
|
||||
if (current?.sessionId === sessionId) {
|
||||
ocppConnections.delete(chargePointIdentifier)
|
||||
await updateTransportState(chargePointIdentifier, {
|
||||
transportStatus: 'offline',
|
||||
lastWsDisconnectedAt: dayjs().toDate(),
|
||||
})
|
||||
}
|
||||
console.info(
|
||||
`[OCPP][WS][CLOSE] cp=${chargePointIdentifier} session=${sessionId} code=${evt.code} activeSession=${current?.sessionId ?? 'none'}`,
|
||||
)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,11 @@ export type OcppConnectionContext = {
|
||||
isRegistered: boolean
|
||||
}
|
||||
|
||||
export type OcppCallResultMessage = [3, string, Record<string, unknown>]
|
||||
export type OcppCallErrorMessage = [4, string, OcppErrorCode, string, Record<string, unknown>]
|
||||
|
||||
export type CommandChannelStatus = 'online' | 'unavailable' | 'offline'
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Action payload types (OCPP 1.6-J Section 4.x)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { Hono } from "hono";
|
||||
import { desc, eq, sql, inArray } from "drizzle-orm";
|
||||
import { desc, eq, sql } from "drizzle-orm";
|
||||
import dayjs from "dayjs";
|
||||
import { useDrizzle } from "@/lib/db.js";
|
||||
import { chargePoint, connector } from "@/db/schema.js";
|
||||
import { chargePoint, connector, meterValue } from "@/db/schema.js";
|
||||
import type { SampledValue } from "@/db/schema.js";
|
||||
import { ocppConnections } from "@/ocpp/handler.js";
|
||||
import { generateOcppPassword, hashOcppPassword } from "@/lib/ocpp-auth.js";
|
||||
import type { HonoEnv } from "@/types/hono.ts";
|
||||
@@ -81,12 +82,12 @@ app.post("/", async (c) => {
|
||||
if (body.feePerKwh !== undefined && (!Number.isInteger(body.feePerKwh) || body.feePerKwh < 0)) {
|
||||
return c.json({ error: "feePerKwh must be a non-negative integer" }, 400);
|
||||
}
|
||||
if (body.pricingMode !== undefined && !['fixed', 'tou'].includes(body.pricingMode)) {
|
||||
if (body.pricingMode !== undefined && !["fixed", "tou"].includes(body.pricingMode)) {
|
||||
return c.json({ error: "pricingMode must be 'fixed' or 'tou'" }, 400);
|
||||
}
|
||||
|
||||
const plainPassword = generateOcppPassword()
|
||||
const passwordHash = await hashOcppPassword(plainPassword)
|
||||
const plainPassword = generateOcppPassword();
|
||||
const passwordHash = await hashOcppPassword(plainPassword);
|
||||
|
||||
const [created] = await db
|
||||
.insert(chargePoint)
|
||||
@@ -122,6 +123,7 @@ app.get("/connections", (c) => {
|
||||
app.get("/:id", async (c) => {
|
||||
const db = useDrizzle();
|
||||
const id = c.req.param("id");
|
||||
const isAdmin = c.get("user")?.role === "admin";
|
||||
|
||||
const [cp] = await db.select().from(chargePoint).where(eq(chargePoint.id, id)).limit(1);
|
||||
|
||||
@@ -130,12 +132,39 @@ app.get("/:id", async (c) => {
|
||||
const allConnectors = await db.select().from(connector).where(eq(connector.chargePointId, id));
|
||||
const cpStatus = allConnectors.find((conn) => conn.connectorId === 0);
|
||||
const displayConnectors = allConnectors.filter((conn) => conn.connectorId > 0);
|
||||
const [latestMeter] = await db
|
||||
.select({
|
||||
timestamp: meterValue.timestamp,
|
||||
sampledValues: meterValue.sampledValues,
|
||||
})
|
||||
.from(meterValue)
|
||||
.where(eq(meterValue.chargePointId, id))
|
||||
.orderBy(desc(meterValue.timestamp), desc(meterValue.receivedAt))
|
||||
.limit(1);
|
||||
|
||||
const meterHistory = isAdmin
|
||||
? (
|
||||
await db
|
||||
.select({
|
||||
connectorNumber: meterValue.connectorNumber,
|
||||
timestamp: meterValue.timestamp,
|
||||
sampledValues: meterValue.sampledValues,
|
||||
})
|
||||
.from(meterValue)
|
||||
.where(eq(meterValue.chargePointId, id))
|
||||
.orderBy(desc(meterValue.timestamp), desc(meterValue.receivedAt))
|
||||
.limit(24)
|
||||
).reverse()
|
||||
: [];
|
||||
|
||||
return c.json({
|
||||
...cp,
|
||||
connectors: displayConnectors,
|
||||
chargePointStatus: cpStatus?.status ?? null,
|
||||
chargePointErrorCode: cpStatus?.errorCode ?? null,
|
||||
latestMeterTimestamp: latestMeter?.timestamp ?? null,
|
||||
latestMeterValues: ((latestMeter?.sampledValues as SampledValue[] | undefined) ?? []),
|
||||
meterHistory,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -175,21 +204,19 @@ app.patch("/:id", async (c) => {
|
||||
}
|
||||
set.registrationStatus = body.registrationStatus as "Accepted" | "Pending" | "Rejected";
|
||||
}
|
||||
if (body.chargePointVendor !== undefined) set.chargePointVendor = body.chargePointVendor.trim() || "Unknown";
|
||||
if (body.chargePointModel !== undefined) set.chargePointModel = body.chargePointModel.trim() || "Unknown";
|
||||
if (body.chargePointVendor !== undefined)
|
||||
set.chargePointVendor = body.chargePointVendor.trim() || "Unknown";
|
||||
if (body.chargePointModel !== undefined)
|
||||
set.chargePointModel = body.chargePointModel.trim() || "Unknown";
|
||||
if ("deviceName" in body) set.deviceName = body.deviceName?.trim() || null;
|
||||
if (body.pricingMode !== undefined) {
|
||||
if (!['fixed', 'tou'].includes(body.pricingMode)) {
|
||||
if (!["fixed", "tou"].includes(body.pricingMode)) {
|
||||
return c.json({ error: "pricingMode must be 'fixed' or 'tou'" }, 400);
|
||||
}
|
||||
set.pricingMode = body.pricingMode;
|
||||
}
|
||||
|
||||
const [updated] = await db
|
||||
.update(chargePoint)
|
||||
.set(set)
|
||||
.where(eq(chargePoint.id, id))
|
||||
.returning();
|
||||
const [updated] = await db.update(chargePoint).set(set).where(eq(chargePoint.id, id)).returning();
|
||||
|
||||
if (!updated) return c.json({ error: "Not found" }, 404);
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ import { desc, eq } from "drizzle-orm";
|
||||
import dayjs from "dayjs";
|
||||
import { useDrizzle } from "@/lib/db.js";
|
||||
import { idTag } from "@/db/schema.js";
|
||||
import { zValidator } from "@hono/zod-validator";
|
||||
import { z } from "zod";
|
||||
import type { HonoEnv } from "@/types/hono.ts";
|
||||
|
||||
|
||||
@@ -26,7 +26,9 @@ app.get("/", async (c) => {
|
||||
db
|
||||
.select({ count: sql<number>`count(*)::int` })
|
||||
.from(chargePoint)
|
||||
.where(sql`${chargePoint.lastHeartbeatAt} > now() - interval '120 seconds'`),
|
||||
.where(
|
||||
sql`${chargePoint.transportStatus} = 'online' and ${chargePoint.lastHeartbeatAt} > now() - interval '120 seconds'`,
|
||||
),
|
||||
db
|
||||
.select({ count: sql<number>`count(*)::int` })
|
||||
.from(transaction)
|
||||
|
||||
@@ -5,8 +5,7 @@ import { useDrizzle } from "@/lib/db.js";
|
||||
import { transaction, chargePoint, connector, idTag } from "@/db/schema.js";
|
||||
import type { SampledValue } from "@/db/schema.js";
|
||||
import { user } from "@/db/auth-schema.js";
|
||||
import { ocppConnections } from "@/ocpp/handler.js";
|
||||
import { OCPP_MESSAGE_TYPE } from "@/ocpp/types.js";
|
||||
import { sendOcppCall } from "@/ocpp/handler.js";
|
||||
import { resolveIdTagInfo } from "@/ocpp/actions/authorize.js";
|
||||
import type { HonoEnv } from "@/types/hono.ts";
|
||||
|
||||
@@ -84,19 +83,28 @@ app.post("/remote-start", async (c) => {
|
||||
return c.json({ error: "ChargePoint is not accepted" }, 400);
|
||||
}
|
||||
|
||||
// Require the charge point to be online
|
||||
const ws = ocppConnections.get(body.chargePointIdentifier.trim());
|
||||
if (!ws) return c.json({ error: "ChargePoint is offline" }, 503);
|
||||
try {
|
||||
const response = await sendOcppCall<
|
||||
{ connectorId: number; idTag: string },
|
||||
{ status?: string }
|
||||
>(body.chargePointIdentifier.trim(), "RemoteStartTransaction", {
|
||||
connectorId: body.connectorId,
|
||||
idTag: body.idTag.trim(),
|
||||
})
|
||||
|
||||
const uniqueId = crypto.randomUUID();
|
||||
ws.send(
|
||||
JSON.stringify([
|
||||
OCPP_MESSAGE_TYPE.CALL,
|
||||
uniqueId,
|
||||
"RemoteStartTransaction",
|
||||
{ connectorId: body.connectorId, idTag: body.idTag.trim() },
|
||||
]),
|
||||
);
|
||||
if (response?.status && response.status !== "Accepted") {
|
||||
return c.json({ error: `RemoteStartTransaction ${response.status}` }, 409)
|
||||
}
|
||||
} catch (error) {
|
||||
const message = error instanceof Error ? error.message : "CommandSendFailed"
|
||||
if (message === "TransportUnavailable") {
|
||||
return c.json({ error: "ChargePoint command channel is unavailable" }, 503)
|
||||
}
|
||||
if (message === "CommandTimeout") {
|
||||
return c.json({ error: "ChargePoint did not confirm RemoteStartTransaction in time" }, 504)
|
||||
}
|
||||
return c.json({ error: `RemoteStartTransaction failed: ${message}` }, 502)
|
||||
}
|
||||
|
||||
console.log(
|
||||
`[OCPP] RemoteStartTransaction cp=${body.chargePointIdentifier} ` +
|
||||
@@ -311,9 +319,8 @@ app.get("/:id", async (c) => {
|
||||
/**
|
||||
* POST /api/transactions/:id/stop
|
||||
* Manually stop an active transaction.
|
||||
* 1. If the charge point is connected, send OCPP RemoteStopTransaction.
|
||||
* 2. In either case (online or offline), settle the transaction in the DB immediately
|
||||
* so the record is always finalised from the admin side.
|
||||
* 1. If the charge point is connected, send OCPP RemoteStopTransaction and wait for confirmation.
|
||||
* 2. Record the stop request state in DB; final settlement still happens on StopTransaction.
|
||||
*/
|
||||
app.post("/:id/stop", async (c) => {
|
||||
const db = useDrizzle();
|
||||
@@ -324,7 +331,6 @@ app.post("/:id/stop", async (c) => {
|
||||
.select({
|
||||
transaction,
|
||||
chargePointIdentifier: chargePoint.chargePointIdentifier,
|
||||
feePerKwh: chargePoint.feePerKwh,
|
||||
})
|
||||
.from(transaction)
|
||||
.leftJoin(chargePoint, eq(transaction.chargePointId, chargePoint.id))
|
||||
@@ -336,55 +342,74 @@ app.post("/:id/stop", async (c) => {
|
||||
|
||||
const now = dayjs();
|
||||
|
||||
// Try to send RemoteStopTransaction via OCPP if the charge point is online
|
||||
const ws = row.chargePointIdentifier ? ocppConnections.get(row.chargePointIdentifier) : null;
|
||||
if (ws) {
|
||||
const uniqueId = crypto.randomUUID();
|
||||
ws.send(
|
||||
JSON.stringify([
|
||||
OCPP_MESSAGE_TYPE.CALL,
|
||||
uniqueId,
|
||||
let remoteStopStatus: "Requested" | "Accepted" | "Rejected" | "Error" | "Timeout" = "Requested";
|
||||
let remoteStopRequestId: string | null = null;
|
||||
let online = false;
|
||||
|
||||
if (row.chargePointIdentifier) {
|
||||
remoteStopRequestId = crypto.randomUUID();
|
||||
try {
|
||||
const response = await sendOcppCall<{ transactionId: number }, { status?: string }>(
|
||||
row.chargePointIdentifier,
|
||||
"RemoteStopTransaction",
|
||||
{ transactionId: row.transaction.id },
|
||||
]),
|
||||
);
|
||||
console.log(`[OCPP] Sent RemoteStopTransaction txId=${id} to ${row.chargePointIdentifier}`);
|
||||
{ uniqueId: remoteStopRequestId },
|
||||
)
|
||||
online = true;
|
||||
remoteStopStatus = response?.status === "Accepted" ? "Accepted" : "Rejected";
|
||||
console.log(`[OCPP] RemoteStopTransaction txId=${id} status=${response?.status ?? "unknown"} to ${row.chargePointIdentifier}`);
|
||||
} catch (error) {
|
||||
const message = error instanceof Error ? error.message : "CommandSendFailed";
|
||||
remoteStopStatus = message === "CommandTimeout" ? "Timeout" : "Error";
|
||||
online = message !== "TransportUnavailable";
|
||||
console.warn(`[OCPP] RemoteStopTransaction txId=${id} failed for ${row.chargePointIdentifier}: ${message}`);
|
||||
if (message === "TransportUnavailable") {
|
||||
return c.json(
|
||||
{
|
||||
error: "ChargePoint command channel is unavailable",
|
||||
online: false,
|
||||
remoteStopStatus,
|
||||
},
|
||||
503,
|
||||
);
|
||||
}
|
||||
if (message === "CommandTimeout") {
|
||||
return c.json(
|
||||
{
|
||||
error: "ChargePoint did not confirm RemoteStopTransaction in time",
|
||||
online: true,
|
||||
remoteStopStatus,
|
||||
},
|
||||
504,
|
||||
);
|
||||
}
|
||||
return c.json(
|
||||
{
|
||||
error: `RemoteStopTransaction failed: ${message}`,
|
||||
online,
|
||||
remoteStopStatus,
|
||||
},
|
||||
502,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Settle in DB regardless (charge point may be offline or slow to respond)
|
||||
// Use startMeterValue as stopMeterValue when the real value is unknown (offline case)
|
||||
const stopMeterValue = row.transaction.startMeterValue;
|
||||
const energyWh = 0; // cannot know actual energy without stop meter value
|
||||
const feePerKwh = row.feePerKwh ?? 0;
|
||||
const feeFen = feePerKwh > 0 && energyWh > 0 ? Math.ceil((energyWh * feePerKwh) / 1000) : 0;
|
||||
|
||||
const [updated] = await db
|
||||
.update(transaction)
|
||||
.set({
|
||||
stopTimestamp: now.toDate(),
|
||||
stopMeterValue,
|
||||
stopReason: "Remote",
|
||||
chargeAmount: feeFen,
|
||||
remoteStopRequestedAt: now.toDate(),
|
||||
remoteStopRequestId,
|
||||
remoteStopStatus,
|
||||
updatedAt: now.toDate(),
|
||||
})
|
||||
.where(eq(transaction.id, id))
|
||||
.returning();
|
||||
|
||||
if (feeFen > 0) {
|
||||
await db
|
||||
.update(idTag)
|
||||
.set({
|
||||
balance: sql`GREATEST(0, ${idTag.balance} - ${feeFen})`,
|
||||
updatedAt: now.toDate(),
|
||||
})
|
||||
.where(eq(idTag.idTag, row.transaction.idTag));
|
||||
}
|
||||
|
||||
return c.json({
|
||||
...updated,
|
||||
chargePointIdentifier: row.chargePointIdentifier,
|
||||
online: !!ws,
|
||||
energyWh,
|
||||
online,
|
||||
remoteStopStatus,
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -18,7 +18,12 @@ import {
|
||||
Tooltip,
|
||||
} from "@heroui/react";
|
||||
import { ArrowLeft, Pencil, ArrowRotateRight, Key, Copy, Check } from "@gravity-ui/icons";
|
||||
import { api, type ChargePointPasswordReset } from "@/lib/api";
|
||||
import {
|
||||
api,
|
||||
type ChargePointPasswordReset,
|
||||
type MeterHistoryPoint,
|
||||
type MeterSampledValue,
|
||||
} from "@/lib/api";
|
||||
import { useSession } from "@/lib/auth-client";
|
||||
import dayjs from "@/lib/dayjs";
|
||||
import InfoSection from "@/components/info-section";
|
||||
@@ -58,6 +63,8 @@ const registrationColorMap: Record<string, "success" | "warning" | "danger"> = {
|
||||
Rejected: "danger",
|
||||
};
|
||||
|
||||
const RESET_CONFIRM_TEXT = "我将重新配置设备";
|
||||
|
||||
const TX_LIMIT = 10;
|
||||
|
||||
// ── Helpers ────────────────────────────────────────────────────────────────
|
||||
@@ -75,6 +82,179 @@ function relativeTime(iso: string): string {
|
||||
return dayjs(iso).fromNow();
|
||||
}
|
||||
|
||||
function formatDateTime(iso: string | null | undefined): string {
|
||||
if (!iso) return "—";
|
||||
return dayjs(iso).format("YYYY/M/D HH:mm:ss");
|
||||
}
|
||||
|
||||
function extractMeterValue(sampledValues: MeterSampledValue[], measurands: string[]) {
|
||||
const parsedValues = sampledValues
|
||||
.map((sv) => {
|
||||
const numericValue = Number(sv.value);
|
||||
if (Number.isNaN(numericValue)) return null;
|
||||
return {
|
||||
value: numericValue,
|
||||
measurand: sv.measurand,
|
||||
phase: sv.phase,
|
||||
unit: sv.unit,
|
||||
};
|
||||
})
|
||||
.filter((sv): sv is NonNullable<typeof sv> => sv !== null);
|
||||
|
||||
const withoutPhase = parsedValues.find(
|
||||
(sv) =>
|
||||
((sv.measurand == null && measurands.includes("Energy.Active.Import.Register")) ||
|
||||
(sv.measurand != null && measurands.includes(sv.measurand))) &&
|
||||
!sv.phase,
|
||||
);
|
||||
if (withoutPhase) return withoutPhase;
|
||||
|
||||
return parsedValues.find(
|
||||
(sv) =>
|
||||
(sv.measurand == null && measurands.includes("Energy.Active.Import.Register")) ||
|
||||
(sv.measurand != null && measurands.includes(sv.measurand)),
|
||||
);
|
||||
}
|
||||
|
||||
function MeterCard({
|
||||
label,
|
||||
value,
|
||||
emphasis = false,
|
||||
}: {
|
||||
label: string;
|
||||
value: string;
|
||||
emphasis?: boolean;
|
||||
}) {
|
||||
return (
|
||||
<div
|
||||
className={`relative overflow-hidden rounded-xl border border-border/70 px-3 py-2.5 ${
|
||||
emphasis ? "bg-surface-secondary" : "bg-surface"
|
||||
}`}
|
||||
>
|
||||
<div className="min-w-0">
|
||||
<dt className="text-xs font-medium tracking-wide text-muted">{label}</dt>
|
||||
<dd className="mt-1 truncate text-base font-semibold tabular-nums text-foreground">
|
||||
{value}
|
||||
</dd>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function buildMeterSnapshot(history: MeterHistoryPoint[]) {
|
||||
const latestPoint = history[history.length - 1];
|
||||
return {
|
||||
latestTimestamp: latestPoint?.timestamp ?? null,
|
||||
latestValues: latestPoint?.sampledValues ?? [],
|
||||
};
|
||||
}
|
||||
|
||||
function MeterChannelSection({
|
||||
connectorNumber,
|
||||
history,
|
||||
}: {
|
||||
connectorNumber: number;
|
||||
history: MeterHistoryPoint[];
|
||||
}) {
|
||||
const snapshot = buildMeterSnapshot(history);
|
||||
const meterVoltage = extractMeterValue(snapshot.latestValues, ["Voltage"]);
|
||||
const meterCurrent = extractMeterValue(snapshot.latestValues, ["Current.Import"]);
|
||||
const meterPower = extractMeterValue(snapshot.latestValues, ["Power.Active.Import"]);
|
||||
const meterPf = extractMeterValue(snapshot.latestValues, ["Power.Factor"]);
|
||||
const meterFrequency = extractMeterValue(snapshot.latestValues, ["Frequency"]);
|
||||
const meterTemperature = extractMeterValue(snapshot.latestValues, ["Temperature"]);
|
||||
const meterEnergyReg = extractMeterValue(snapshot.latestValues, [
|
||||
"Energy.Active.Import.Register",
|
||||
]);
|
||||
|
||||
return (
|
||||
<InfoSection title={`连接器 #${connectorNumber}`}>
|
||||
{history.length === 0 ? (
|
||||
<div className="rounded-xl border border-dashed border-border/70 bg-surface px-4 py-6 text-center">
|
||||
<div className="mx-auto flex size-10 items-center justify-center rounded-full bg-muted/10 text-muted">
|
||||
<Plug className="size-5" />
|
||||
</div>
|
||||
<p className="mt-3 text-sm font-medium text-foreground">
|
||||
暂未收到该连接器的 MeterValue 采样数据
|
||||
</p>
|
||||
<p className="mt-1 text-xs leading-5 text-muted">
|
||||
充电桩上报后,这里会自动显示电压、电流、功率等实时计量信息。
|
||||
</p>
|
||||
</div>
|
||||
) : (
|
||||
<div className="space-y-3">
|
||||
<div className="flex items-center justify-between gap-3 rounded-xl border border-border/70 bg-surface-secondary px-3 py-2">
|
||||
<div>
|
||||
<p className="text-xs font-medium tracking-wide text-muted">
|
||||
连接器 #{connectorNumber}
|
||||
</p>
|
||||
<p className="text-sm font-medium text-foreground">
|
||||
{formatDateTime(snapshot.latestTimestamp)}
|
||||
</p>
|
||||
</div>
|
||||
<span className="rounded-full bg-accent/10 px-2 py-1 text-xs font-medium text-accent">
|
||||
最近 {history.length} 条
|
||||
</span>
|
||||
</div>
|
||||
<dl className="grid gap-3 sm:grid-cols-2 xl:grid-cols-3">
|
||||
<MeterCard
|
||||
label="电压"
|
||||
value={
|
||||
meterVoltage ? `${meterVoltage.value.toFixed(1)} ${meterVoltage.unit ?? "V"}` : "—"
|
||||
}
|
||||
/>
|
||||
<MeterCard
|
||||
label="电流"
|
||||
value={
|
||||
meterCurrent ? `${meterCurrent.value.toFixed(2)} ${meterCurrent.unit ?? "A"}` : "—"
|
||||
}
|
||||
/>
|
||||
<MeterCard
|
||||
label="有功功率"
|
||||
value={meterPower ? `${meterPower.value.toFixed(0)} ${meterPower.unit ?? "W"}` : "—"}
|
||||
/>
|
||||
<MeterCard label="功率因数" value={meterPf ? meterPf.value.toFixed(3) : "—"} />
|
||||
<MeterCard
|
||||
label="频率"
|
||||
value={
|
||||
meterFrequency
|
||||
? `${meterFrequency.value.toFixed(1)} ${meterFrequency.unit ?? "Hz"}`
|
||||
: "—"
|
||||
}
|
||||
/>
|
||||
<MeterCard
|
||||
label="温度"
|
||||
value={
|
||||
meterTemperature
|
||||
? `${meterTemperature.value.toFixed(1)} ${meterTemperature.unit ?? "Celsius"}`
|
||||
: "—"
|
||||
}
|
||||
/>
|
||||
<div className="sm:col-span-2 xl:col-span-1">
|
||||
<MeterCard
|
||||
label="累计电能表读数"
|
||||
value={
|
||||
meterEnergyReg
|
||||
? `${meterEnergyReg.value.toFixed(3)} ${meterEnergyReg.unit ?? "Wh"}`
|
||||
: "—"
|
||||
}
|
||||
emphasis
|
||||
/>
|
||||
</div>
|
||||
<div className="sm:col-span-2 xl:col-span-2">
|
||||
<MeterCard
|
||||
label="采样时间"
|
||||
value={formatDateTime(snapshot.latestTimestamp)}
|
||||
emphasis
|
||||
/>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
)}
|
||||
</InfoSection>
|
||||
);
|
||||
}
|
||||
|
||||
// ── Edit form type ─────────────────────────────────────────────────────────
|
||||
|
||||
type EditForm = {
|
||||
@@ -107,16 +287,25 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
});
|
||||
|
||||
// reset password
|
||||
const [resetConfirmOpen, setResetConfirmOpen] = useState(false);
|
||||
const [resetConfirmText, setResetConfirmText] = useState("");
|
||||
const [resetBusy, setResetBusy] = useState(false);
|
||||
const [resetResult, setResetResult] = useState<ChargePointPasswordReset | null>(null);
|
||||
const [resetCopied, setResetCopied] = useState(false);
|
||||
|
||||
const handleResetPassword = async () => {
|
||||
const openResetConfirm = () => {
|
||||
setResetConfirmText("");
|
||||
setResetConfirmOpen(true);
|
||||
};
|
||||
|
||||
const handleConfirmResetPassword = async () => {
|
||||
if (!cp) return;
|
||||
setResetBusy(true);
|
||||
try {
|
||||
const result = await api.chargePoints.resetPassword(cp.id);
|
||||
setResetResult(result);
|
||||
setResetConfirmOpen(false);
|
||||
setResetConfirmText("");
|
||||
} finally {
|
||||
setResetBusy(false);
|
||||
}
|
||||
@@ -180,8 +369,16 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
|
||||
// Online if last heartbeat within 3× interval
|
||||
const isOnline =
|
||||
cp?.transportStatus === "online" &&
|
||||
cp?.lastHeartbeatAt != null &&
|
||||
dayjs().diff(dayjs(cp.lastHeartbeatAt), "second") < (cp.heartbeatInterval ?? 60) * 3;
|
||||
const commandChannelUnavailable = cp?.transportStatus === "unavailable";
|
||||
const statusLabel = isOnline ? "在线" : commandChannelUnavailable ? "通道异常" : "离线";
|
||||
const transportStatusDotClass = isOnline
|
||||
? "bg-success animate-pulse"
|
||||
: commandChannelUnavailable
|
||||
? "bg-warning"
|
||||
: "bg-muted";
|
||||
|
||||
const { data: sessionData } = useSession();
|
||||
const isAdmin = sessionData?.user?.role === "admin";
|
||||
@@ -212,6 +409,16 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
}
|
||||
|
||||
const sortedConnectors = [...cp.connectors].sort((a, b) => a.connectorId - b.connectorId);
|
||||
const meterHistory = cp.meterHistory ?? [];
|
||||
const meterHistoryByConnector = meterHistory.reduce<Record<number, MeterHistoryPoint[]>>(
|
||||
(acc, row) => {
|
||||
if (!acc[row.connectorNumber]) acc[row.connectorNumber] = [];
|
||||
acc[row.connectorNumber].push(row);
|
||||
return acc;
|
||||
},
|
||||
{},
|
||||
);
|
||||
const displayConnectors = sortedConnectors.filter((connector) => connector.connectorId > 0);
|
||||
|
||||
// ── Render ───────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -231,10 +438,10 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
<div className="space-y-1.5">
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<h1 className="text-2xl font-semibold text-foreground">
|
||||
{cp.deviceName ?? <span className="font-mono">{cp.chargePointIdentifier}</span>}
|
||||
{cp.deviceName ?? <span>{cp.chargePointIdentifier}</span>}
|
||||
</h1>
|
||||
{isAdmin && cp.deviceName && (
|
||||
<span className="font-mono text-sm text-muted">{cp.chargePointIdentifier}</span>
|
||||
<span className="text-sm text-muted">{cp.chargePointIdentifier}</span>
|
||||
)}
|
||||
<Chip
|
||||
color={registrationColorMap[cp.registrationStatus] ?? "warning"}
|
||||
@@ -244,10 +451,8 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
{cp.registrationStatus}
|
||||
</Chip>
|
||||
<div className="flex items-center gap-1.5">
|
||||
<span
|
||||
className={`size-2 rounded-full ${isOnline ? "bg-success animate-pulse" : "bg-muted"}`}
|
||||
/>
|
||||
<span className="text-xs text-muted">{isOnline ? "在线" : "离线"}</span>
|
||||
<span className={`size-2 rounded-full ${transportStatusDotClass}`} />
|
||||
<span className="text-xs text-muted">{statusLabel}</span>
|
||||
</div>
|
||||
</div>
|
||||
{(cp.chargePointVendor || cp.chargePointModel) && (
|
||||
@@ -257,7 +462,14 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
)}
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<Button isIconOnly size="sm" variant="ghost" isDisabled={refreshing} onPress={() => cpQuery.refetch()} aria-label="刷新">
|
||||
<Button
|
||||
isIconOnly
|
||||
size="sm"
|
||||
variant="ghost"
|
||||
isDisabled={refreshing}
|
||||
onPress={() => cpQuery.refetch()}
|
||||
aria-label="刷新"
|
||||
>
|
||||
<ArrowRotateRight className={`size-4 ${refreshing ? "animate-spin" : ""}`} />
|
||||
</Button>
|
||||
{isAdmin && (
|
||||
@@ -265,7 +477,12 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
<Tooltip>
|
||||
<Tooltip.Content>重置 OCPP 认证密钥</Tooltip.Content>
|
||||
<Tooltip.Trigger>
|
||||
<Button size="sm" variant="ghost" isDisabled={resetBusy} onPress={handleResetPassword}>
|
||||
<Button
|
||||
size="sm"
|
||||
variant="ghost"
|
||||
isDisabled={resetBusy}
|
||||
onPress={openResetConfirm}
|
||||
>
|
||||
{resetBusy ? <Spinner size="sm" /> : <Key className="size-4" />}
|
||||
重置密钥
|
||||
</Button>
|
||||
@@ -332,6 +549,66 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
</dd>
|
||||
</div>
|
||||
))}
|
||||
|
||||
{isAdmin && (
|
||||
<Modal
|
||||
isOpen={resetConfirmOpen}
|
||||
onOpenChange={(open) => {
|
||||
if (!resetBusy) {
|
||||
setResetConfirmOpen(open);
|
||||
if (!open) setResetConfirmText("");
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Modal.Backdrop>
|
||||
<Modal.Container scroll="outside">
|
||||
<Modal.Dialog className="sm:max-w-md">
|
||||
<Modal.CloseTrigger />
|
||||
<Modal.Header>
|
||||
<Modal.Heading>重置 OCPP 认证密钥</Modal.Heading>
|
||||
</Modal.Header>
|
||||
<Modal.Body className="space-y-4">
|
||||
<p className="text-sm text-warning font-medium">
|
||||
重置后旧密钥将立即失效,请先确认设备已准备重新配置。
|
||||
</p>
|
||||
<TextField fullWidth>
|
||||
<Label className="text-sm font-normal">
|
||||
请输入 “
|
||||
<span className="font-medium cursor-text">{RESET_CONFIRM_TEXT}</span>”
|
||||
以继续
|
||||
</Label>
|
||||
<Input
|
||||
placeholder={RESET_CONFIRM_TEXT}
|
||||
value={resetConfirmText}
|
||||
onChange={(e) => setResetConfirmText(e.target.value)}
|
||||
autoComplete="off"
|
||||
/>
|
||||
</TextField>
|
||||
</Modal.Body>
|
||||
<Modal.Footer className="flex justify-end gap-2">
|
||||
<Button
|
||||
variant="ghost"
|
||||
onPress={() => {
|
||||
setResetConfirmOpen(false);
|
||||
setResetConfirmText("");
|
||||
}}
|
||||
isDisabled={resetBusy}
|
||||
>
|
||||
取消
|
||||
</Button>
|
||||
<Button
|
||||
variant="danger"
|
||||
isDisabled={resetBusy || resetConfirmText !== RESET_CONFIRM_TEXT}
|
||||
onPress={handleConfirmResetPassword}
|
||||
>
|
||||
{resetBusy ? <Spinner size="sm" /> : "确认重置"}
|
||||
</Button>
|
||||
</Modal.Footer>
|
||||
</Modal.Dialog>
|
||||
</Modal.Container>
|
||||
</Modal.Backdrop>
|
||||
</Modal>
|
||||
)}
|
||||
</dl>
|
||||
</InfoSection>
|
||||
)}
|
||||
@@ -436,10 +713,8 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
<dt className="shrink-0 text-sm text-muted">充电桥状态</dt>
|
||||
<dd>
|
||||
<div className="flex items-center gap-1.5">
|
||||
<span
|
||||
className={`size-2 rounded-full ${isOnline ? "bg-success animate-pulse" : "bg-muted"}`}
|
||||
/>
|
||||
<span className="text-sm text-foreground">{isOnline ? "在线" : "离线"}</span>
|
||||
<span className={`size-2 rounded-full ${transportStatusDotClass}`} />
|
||||
<span className="text-sm text-foreground">{statusLabel}</span>
|
||||
</div>
|
||||
</dd>
|
||||
</div>
|
||||
@@ -475,10 +750,8 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
{conn.errorCode && conn.errorCode !== "NoError" && (
|
||||
<p className="text-xs text-danger">错误: {conn.errorCode}</p>
|
||||
)}
|
||||
{/* {conn.info && <p className="text-xs text-muted">{conn.info}</p>} */}
|
||||
<p className="text-xs text-muted">
|
||||
更新于{" "}
|
||||
{dayjs(conn.lastStatusAt).format("MM/DD HH:mm")}
|
||||
更新于 {dayjs(conn.lastStatusAt).format("MM/DD HH:mm")}
|
||||
</p>
|
||||
</div>
|
||||
))}
|
||||
@@ -486,6 +759,19 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* MeterValue */}
|
||||
{isAdmin && (
|
||||
<div className="grid gap-4 lg:grid-cols-2">
|
||||
{displayConnectors.map((connector) => (
|
||||
<MeterChannelSection
|
||||
key={connector.id}
|
||||
connectorNumber={connector.connectorId}
|
||||
history={meterHistoryByConnector[connector.connectorId] ?? []}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Transactions */}
|
||||
<div className="space-y-3">
|
||||
<div className="flex items-center justify-between">
|
||||
@@ -592,7 +878,10 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
<Modal
|
||||
isOpen={resetResult !== null}
|
||||
onOpenChange={(open) => {
|
||||
if (!open) { setResetResult(null); setResetCopied(false); }
|
||||
if (!open) {
|
||||
setResetResult(null);
|
||||
setResetCopied(false);
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Modal.Backdrop>
|
||||
@@ -618,9 +907,15 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
isIconOnly
|
||||
size="sm"
|
||||
variant="ghost"
|
||||
onPress={() => resetResult && handleCopyResetPassword(resetResult.plainPassword)}
|
||||
onPress={() =>
|
||||
resetResult && handleCopyResetPassword(resetResult.plainPassword)
|
||||
}
|
||||
>
|
||||
{resetCopied ? <Check className="size-4 text-success" /> : <Copy className="size-4" />}
|
||||
{resetCopied ? (
|
||||
<Check className="size-4 text-success" />
|
||||
) : (
|
||||
<Copy className="size-4" />
|
||||
)}
|
||||
</Button>
|
||||
</Tooltip.Trigger>
|
||||
</Tooltip>
|
||||
@@ -628,7 +923,12 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
</div>
|
||||
</Modal.Body>
|
||||
<Modal.Footer className="flex justify-end">
|
||||
<Button onPress={() => { setResetResult(null); setResetCopied(false); }}>
|
||||
<Button
|
||||
onPress={() => {
|
||||
setResetResult(null);
|
||||
setResetCopied(false);
|
||||
}}
|
||||
>
|
||||
我已保存密钥
|
||||
</Button>
|
||||
</Modal.Footer>
|
||||
@@ -659,9 +959,7 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
<Input
|
||||
placeholder="1号楼A区01号桩"
|
||||
value={editForm.deviceName}
|
||||
onChange={(e) =>
|
||||
setEditForm((f) => ({ ...f, deviceName: e.target.value }))
|
||||
}
|
||||
onChange={(e) => setEditForm((f) => ({ ...f, deviceName: e.target.value }))}
|
||||
/>
|
||||
</TextField>
|
||||
<div className="grid grid-cols-2 gap-3">
|
||||
@@ -736,17 +1034,17 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
|
||||
</Select>
|
||||
</div>
|
||||
{editForm.pricingMode === "fixed" && (
|
||||
<TextField fullWidth>
|
||||
<Label className="text-sm font-medium">固定电价(分/kWh)</Label>
|
||||
<Input
|
||||
type="number"
|
||||
min="0"
|
||||
step="1"
|
||||
placeholder="0"
|
||||
value={editForm.feePerKwh}
|
||||
onChange={(e) => setEditForm((f) => ({ ...f, feePerKwh: e.target.value }))}
|
||||
/>
|
||||
</TextField>
|
||||
<TextField fullWidth>
|
||||
<Label className="text-sm font-medium">固定电价(分/kWh)</Label>
|
||||
<Input
|
||||
type="number"
|
||||
min="0"
|
||||
step="1"
|
||||
placeholder="0"
|
||||
value={editForm.feePerKwh}
|
||||
onChange={(e) => setEditForm((f) => ({ ...f, feePerKwh: e.target.value }))}
|
||||
/>
|
||||
</TextField>
|
||||
)}
|
||||
</Modal.Body>
|
||||
<Modal.Footer className="flex justify-end gap-2">
|
||||
|
||||
@@ -574,18 +574,22 @@ export default function ChargePointsPage() {
|
||||
{isAdmin && <Table.Cell>{""}</Table.Cell>}
|
||||
</Table.Row>
|
||||
)}
|
||||
{chargePoints.map((cp) => (
|
||||
<Table.Row key={cp.id} id={String(cp.id)} className={"group"}>
|
||||
{chargePoints.map((cp) => {
|
||||
const online =
|
||||
cp.transportStatus === "online" &&
|
||||
!!cp.lastHeartbeatAt &&
|
||||
dayjs().diff(dayjs(cp.lastHeartbeatAt), "second") < 120;
|
||||
const commandChannelUnavailable = cp.transportStatus === "unavailable";
|
||||
|
||||
return (
|
||||
<Table.Row key={cp.id} id={String(cp.id)} className={"group"}>
|
||||
<Table.Cell>
|
||||
<Tooltip delay={0}>
|
||||
<Tooltip.Trigger>
|
||||
<div className="flex items-center gap-2">
|
||||
<span
|
||||
className={`size-2 shrink-0 rounded-full ${
|
||||
cp.lastHeartbeatAt &&
|
||||
dayjs().diff(dayjs(cp.lastHeartbeatAt), "second") < 120
|
||||
? "bg-success"
|
||||
: "bg-gray-300"
|
||||
online ? "bg-success" : commandChannelUnavailable ? "bg-warning" : "bg-gray-300"
|
||||
}`}
|
||||
/>
|
||||
<div className="flex flex-col">
|
||||
@@ -604,11 +608,7 @@ export default function ChargePointsPage() {
|
||||
</div>
|
||||
</Tooltip.Trigger>
|
||||
<Tooltip.Content placement="start">
|
||||
{cp.lastHeartbeatAt
|
||||
? dayjs().diff(dayjs(cp.lastHeartbeatAt), "second") < 120
|
||||
? "在线"
|
||||
: "离线"
|
||||
: "从未连接"}
|
||||
{online ? "在线" : commandChannelUnavailable ? "通道异常" : cp.lastHeartbeatAt ? "离线" : "从未连接"}
|
||||
</Tooltip.Content>
|
||||
</Tooltip>
|
||||
</Table.Cell>
|
||||
@@ -751,8 +751,9 @@ export default function ChargePointsPage() {
|
||||
</div>
|
||||
</Table.Cell>
|
||||
)}
|
||||
</Table.Row>
|
||||
))}
|
||||
</Table.Row>
|
||||
);
|
||||
})}
|
||||
</Table.Body>
|
||||
</Table.Content>
|
||||
</Table.ScrollContainer>
|
||||
|
||||
@@ -363,8 +363,11 @@ function ChargePageContent() {
|
||||
const msg = err.message ?? "";
|
||||
const lowerMsg = msg.toLowerCase();
|
||||
|
||||
if (lowerMsg.includes("offline")) setStartError("充电桩当前不在线,请稍后再试");
|
||||
else if (
|
||||
if (lowerMsg.includes("command channel is unavailable") || lowerMsg.includes("offline")) {
|
||||
setStartError("充电桩下行通道不可用,请稍后再试");
|
||||
} else if (lowerMsg.includes("did not confirm remotestarttransaction in time")) {
|
||||
setStartError("充电桩未及时确认启动指令,请稍后重试");
|
||||
} else if (
|
||||
lowerMsg.includes("chargepoint is not accepted") ||
|
||||
lowerMsg.includes("not accepted")
|
||||
) {
|
||||
@@ -596,7 +599,10 @@ function ChargePageContent() {
|
||||
.filter((cp) => cp.registrationStatus === "Accepted")
|
||||
.map((cp) => {
|
||||
const online =
|
||||
!!cp.lastHeartbeatAt && dayjs().diff(dayjs(cp.lastHeartbeatAt), "second") < 120;
|
||||
cp.transportStatus === "online" &&
|
||||
!!cp.lastHeartbeatAt &&
|
||||
dayjs().diff(dayjs(cp.lastHeartbeatAt), "second") < 120;
|
||||
const commandChannelUnavailable = cp.transportStatus === "unavailable";
|
||||
const availableCount = cp.connectors.filter(
|
||||
(c) => c.status === "Available",
|
||||
).length;
|
||||
@@ -644,13 +650,17 @@ function ChargePageContent() {
|
||||
"shrink-0 inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-semibold",
|
||||
online
|
||||
? "bg-success/12 text-success"
|
||||
: commandChannelUnavailable
|
||||
? "bg-warning/12 text-warning"
|
||||
: "bg-surface-tertiary text-muted",
|
||||
].join(" ")}
|
||||
>
|
||||
<span
|
||||
className={`size-1.5 rounded-full ${online ? "bg-success" : "bg-muted"}`}
|
||||
className={`size-1.5 rounded-full ${
|
||||
online ? "bg-success" : commandChannelUnavailable ? "bg-warning" : "bg-muted"
|
||||
}`}
|
||||
/>
|
||||
{online ? "在线" : "离线"}
|
||||
{online ? "在线" : commandChannelUnavailable ? "通道异常" : "离线"}
|
||||
</span>
|
||||
</div>
|
||||
{/* Bottom row: connectors + fee */}
|
||||
|
||||
@@ -35,7 +35,7 @@ function timeAgo(dateStr: string | null | undefined): string {
|
||||
}
|
||||
|
||||
function cpOnline(cp: ChargePoint): boolean {
|
||||
if (!cp.lastHeartbeatAt) return false;
|
||||
if (cp.transportStatus !== "online" || !cp.lastHeartbeatAt) return false;
|
||||
return dayjs().diff(dayjs(cp.lastHeartbeatAt), "second") < 120;
|
||||
}
|
||||
|
||||
|
||||
@@ -184,7 +184,6 @@ export default function PricingPage() {
|
||||
const [activeTier, setActiveTier] = useState<PriceTier>("peak");
|
||||
const [isDirty, setIsDirty] = useState(false);
|
||||
const [saving, setSaving] = useState(false);
|
||||
const [showPayload, setShowPayload] = useState(false);
|
||||
|
||||
// Populate state once remote tariff loads
|
||||
useEffect(() => {
|
||||
@@ -286,7 +285,6 @@ export default function PricingPage() {
|
||||
|
||||
// ── Derived values ───────────────────────────────────────────────────────
|
||||
const slots = scheduleToSlots(schedule);
|
||||
const apiPayload: TariffConfig = { slots, prices };
|
||||
|
||||
// ── Admin gate ───────────────────────────────────────────────────────────
|
||||
if (!isAdmin) {
|
||||
|
||||
@@ -8,7 +8,6 @@ import {
|
||||
Controls,
|
||||
Handle,
|
||||
MiniMap,
|
||||
Panel,
|
||||
Position,
|
||||
type Node,
|
||||
type Edge,
|
||||
@@ -26,7 +25,9 @@ import { Clock, EvCharger, Plug, Zap } from "lucide-react";
|
||||
type ConnectionStatus = "online" | "stale" | "offline";
|
||||
|
||||
function getStatus(cp: ChargePoint, connected: string[]): ConnectionStatus {
|
||||
if (!connected.includes(cp.chargePointIdentifier)) return "offline";
|
||||
if (cp.transportStatus === "unavailable") return "stale";
|
||||
if (cp.transportStatus !== "online" || !connected.includes(cp.chargePointIdentifier))
|
||||
return "offline";
|
||||
if (!cp.lastHeartbeatAt) return "stale";
|
||||
return dayjs().diff(dayjs(cp.lastHeartbeatAt), "minute") < 5 ? "online" : "stale";
|
||||
}
|
||||
@@ -36,7 +37,7 @@ const STATUS_CONFIG: Record<
|
||||
{ color: string; edgeColor: string; label: string; animated: boolean }
|
||||
> = {
|
||||
online: { color: "#22c55e", edgeColor: "#22c55e", label: "在线", animated: true },
|
||||
stale: { color: "#f59e0b", edgeColor: "#f59e0b", label: "心跳超时", animated: true },
|
||||
stale: { color: "#f59e0b", edgeColor: "#f59e0b", label: "通道异常", animated: true },
|
||||
offline: { color: "#71717a", edgeColor: "#9ca3af", label: "离线", animated: false },
|
||||
};
|
||||
|
||||
|
||||
@@ -3,18 +3,7 @@
|
||||
import Link from "next/link";
|
||||
import { usePathname } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import {
|
||||
CreditCard,
|
||||
Gear,
|
||||
ListCheck,
|
||||
Person,
|
||||
PlugConnection,
|
||||
TagDollar,
|
||||
Thunderbolt,
|
||||
ThunderboltFill,
|
||||
Xmark,
|
||||
Bars,
|
||||
} from "@gravity-ui/icons";
|
||||
import { CreditCard, Gear, TagDollar, Thunderbolt, Xmark, Bars } from "@gravity-ui/icons";
|
||||
import SidebarFooter from "@/components/sidebar-footer";
|
||||
import { useSession } from "@/lib/auth-client";
|
||||
import { EvCharger, Gauge, Network, ReceiptText, UserCog, Users } from "lucide-react";
|
||||
|
||||
@@ -72,6 +72,24 @@ export type ConnectionsStatus = {
|
||||
connectedIdentifiers: string[];
|
||||
};
|
||||
|
||||
export type ChargePointConnectionStatus = "online" | "unavailable" | "offline";
|
||||
|
||||
export type MeterSampledValue = {
|
||||
value: string;
|
||||
context?: string;
|
||||
format?: string;
|
||||
measurand?: string;
|
||||
phase?: string;
|
||||
location?: string;
|
||||
unit?: string;
|
||||
};
|
||||
|
||||
export type MeterHistoryPoint = {
|
||||
connectorNumber: number;
|
||||
timestamp: string;
|
||||
sampledValues: MeterSampledValue[];
|
||||
};
|
||||
|
||||
export type ChargePoint = {
|
||||
id: string;
|
||||
chargePointIdentifier: string;
|
||||
@@ -79,7 +97,12 @@ export type ChargePoint = {
|
||||
chargePointVendor: string | null;
|
||||
chargePointModel: string | null;
|
||||
registrationStatus: string;
|
||||
transportStatus: ChargePointConnectionStatus;
|
||||
lastHeartbeatAt: string | null;
|
||||
lastWsConnectedAt: string | null;
|
||||
lastWsDisconnectedAt: string | null;
|
||||
lastCommandStatus: "Accepted" | "Rejected" | "Error" | "Timeout" | null;
|
||||
lastCommandAt: string | null;
|
||||
lastBootNotificationAt: string | null;
|
||||
feePerKwh: number;
|
||||
pricingMode: "fixed" | "tou";
|
||||
@@ -102,7 +125,12 @@ export type ChargePointDetail = {
|
||||
meterType: string | null;
|
||||
registrationStatus: string;
|
||||
heartbeatInterval: number | null;
|
||||
transportStatus: ChargePointConnectionStatus;
|
||||
lastHeartbeatAt: string | null;
|
||||
lastWsConnectedAt: string | null;
|
||||
lastWsDisconnectedAt: string | null;
|
||||
lastCommandStatus: "Accepted" | "Rejected" | "Error" | "Timeout" | null;
|
||||
lastCommandAt: string | null;
|
||||
lastBootNotificationAt: string | null;
|
||||
feePerKwh: number;
|
||||
pricingMode: "fixed" | "tou";
|
||||
@@ -111,6 +139,9 @@ export type ChargePointDetail = {
|
||||
connectors: ConnectorDetail[];
|
||||
chargePointStatus: string | null;
|
||||
chargePointErrorCode: string | null;
|
||||
latestMeterTimestamp: string | null;
|
||||
latestMeterValues: MeterSampledValue[];
|
||||
meterHistory: MeterHistoryPoint[];
|
||||
};
|
||||
|
||||
export type Transaction = {
|
||||
@@ -134,6 +165,9 @@ export type Transaction = {
|
||||
chargeAmount: number | null;
|
||||
electricityFee: number | null;
|
||||
serviceFee: number | null;
|
||||
remoteStopStatus: "Requested" | "Accepted" | "Rejected" | "Error" | "Timeout" | null;
|
||||
remoteStopRequestedAt: string | null;
|
||||
remoteStopRequestId: string | null;
|
||||
};
|
||||
|
||||
export type IdTag = {
|
||||
|
||||
@@ -4,7 +4,7 @@ const CSMS_INTERNAL_URL =
|
||||
process.env.CSMS_INTERNAL_URL ?? process.env.NEXT_PUBLIC_CSMS_URL ?? "http://localhost:3001";
|
||||
|
||||
/** 检查 CSMS 是否已完成初始化(有用户存在)。 */
|
||||
async function isInitialized(request: NextRequest): Promise<boolean> {
|
||||
async function isInitialized(): Promise<boolean> {
|
||||
try {
|
||||
const res = await fetch(`${CSMS_INTERNAL_URL}/api/setup`, {
|
||||
method: "GET",
|
||||
@@ -25,7 +25,7 @@ export async function proxy(request: NextRequest) {
|
||||
|
||||
// /setup 页面:已初始化则跳转登录
|
||||
if (pathname === "/setup") {
|
||||
if (await isInitialized(request)) {
|
||||
if (await isInitialized()) {
|
||||
return NextResponse.redirect(new URL("/login", request.url));
|
||||
}
|
||||
return NextResponse.next();
|
||||
@@ -33,7 +33,7 @@ export async function proxy(request: NextRequest) {
|
||||
|
||||
// /dashboard 路由:检查 session,未登录跳转 /login
|
||||
if (pathname.startsWith("/dashboard")) {
|
||||
if (!(await isInitialized(request))) {
|
||||
if (!(await isInitialized())) {
|
||||
return NextResponse.redirect(new URL("/setup", request.url));
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ export async function proxy(request: NextRequest) {
|
||||
|
||||
// /login 路由:未初始化则跳转 /setup
|
||||
if (pathname === "/login") {
|
||||
if (!(await isInitialized(request))) {
|
||||
if (!(await isInitialized())) {
|
||||
return NextResponse.redirect(new URL("/setup", request.url));
|
||||
}
|
||||
return NextResponse.next();
|
||||
|
||||
36
hardware/firmware/include/pins.h
Normal file
36
hardware/firmware/include/pins.h
Normal file
@@ -0,0 +1,36 @@
|
||||
#ifndef HELIOS_PINS_H
|
||||
#define HELIOS_PINS_H
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
// Panel switches and LEDs
|
||||
static const uint8_t PIN_CC1 = 39; // High-active switch
|
||||
static const uint8_t PIN_CC2 = 36; // High-active switch
|
||||
static const uint8_t PIN_LED1 = 32; // Low-active LED
|
||||
static const uint8_t PIN_LED2 = 33; // Low-active LED
|
||||
|
||||
// Key inputs
|
||||
static const uint8_t PIN_KEY1 = 34;
|
||||
static const uint8_t PIN_KEY2 = 35;
|
||||
|
||||
// Relay outputs
|
||||
static const uint8_t PIN_RELAY1 = 27;
|
||||
static const uint8_t PIN_RELAY2 = 14;
|
||||
|
||||
// I2C (OLED)
|
||||
static const uint8_t PIN_OLED_SCL = 22;
|
||||
static const uint8_t PIN_OLED_SDA = 21;
|
||||
|
||||
// SPI (RC522)
|
||||
static const uint8_t PIN_RC_MOSI = 23;
|
||||
static const uint8_t PIN_RC_MISO = 19;
|
||||
static const uint8_t PIN_RC_SCK = 18;
|
||||
static const uint8_t PIN_RC_CS = 5;
|
||||
static const uint8_t PIN_RC_RST = 4;
|
||||
|
||||
// UART2 <-> IM1281C (U2)
|
||||
static const uint8_t PIN_U2TXD = 26;
|
||||
static const uint8_t PIN_U2RXD = 25;
|
||||
static const uint32_t BAUD_IM1281C = 9600;
|
||||
|
||||
#endif // HELIOS_PINS_H
|
||||
125
hardware/firmware/lib/IM1281C/src/IM1281C.cpp
Normal file
125
hardware/firmware/lib/IM1281C/src/IM1281C.cpp
Normal file
@@ -0,0 +1,125 @@
|
||||
#include "IM1281C.h"
|
||||
|
||||
IM1281C::IM1281C()
|
||||
: _serial(nullptr),
|
||||
_slaveAddress(1),
|
||||
_lastAResult(0xFF),
|
||||
_lastBResult(0xFF)
|
||||
{
|
||||
}
|
||||
|
||||
bool IM1281C::begin(HardwareSerial &serial,
|
||||
int8_t rxPin,
|
||||
int8_t txPin,
|
||||
uint8_t slaveAddress,
|
||||
uint32_t baudRate,
|
||||
uint32_t serialConfig)
|
||||
{
|
||||
_serial = &serial;
|
||||
_slaveAddress = slaveAddress;
|
||||
_a = IM1281CAData{};
|
||||
_b = IM1281CBData{};
|
||||
_lastAResult = 0xFF;
|
||||
_lastBResult = 0xFF;
|
||||
|
||||
_serial->begin(baudRate, serialConfig, rxPin, txPin);
|
||||
_node.begin(_slaveAddress, *_serial);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IM1281C::readA()
|
||||
{
|
||||
return readAll();
|
||||
}
|
||||
|
||||
bool IM1281C::readB()
|
||||
{
|
||||
return readAll();
|
||||
}
|
||||
|
||||
bool IM1281C::readAll()
|
||||
{
|
||||
if (_serial == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// IM1281C datasheet addresses are effectively 32-bit data items.
|
||||
// Requesting 0x0010 from 0x0048 yields 64 data bytes (0x40), which covers A/B block.
|
||||
const uint8_t result = _node.readHoldingRegisters(0x0048, 16);
|
||||
_lastAResult = result;
|
||||
_lastBResult = result;
|
||||
|
||||
if (result != _node.ku8MBSuccess)
|
||||
{
|
||||
_a.valid = false;
|
||||
_b.valid = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
const uint32_t aVoltageRaw = combineWords(_node.getResponseBuffer(0), _node.getResponseBuffer(1));
|
||||
const uint32_t aCurrentRaw = combineWords(_node.getResponseBuffer(2), _node.getResponseBuffer(3));
|
||||
const uint32_t aPowerRaw = combineWords(_node.getResponseBuffer(4), _node.getResponseBuffer(5));
|
||||
const uint32_t aEnergyRaw = combineWords(_node.getResponseBuffer(6), _node.getResponseBuffer(7));
|
||||
const uint32_t aPfRaw = combineWords(_node.getResponseBuffer(8), _node.getResponseBuffer(9));
|
||||
const uint32_t aCo2Raw = combineWords(_node.getResponseBuffer(10), _node.getResponseBuffer(11));
|
||||
const uint32_t aTempRaw = combineWords(_node.getResponseBuffer(12), _node.getResponseBuffer(13));
|
||||
const uint32_t aFreqRaw = combineWords(_node.getResponseBuffer(14), _node.getResponseBuffer(15));
|
||||
|
||||
_a.voltage = scaleValue(aVoltageRaw, 0.0001f);
|
||||
_a.current = scaleValue(aCurrentRaw, 0.0001f);
|
||||
_a.power = scaleValue(aPowerRaw, 0.0001f);
|
||||
_a.energy = scaleValue(aEnergyRaw, 0.0001f);
|
||||
_a.powerFactor = scaleValue(aPfRaw, 0.001f);
|
||||
_a.co2 = scaleValue(aCo2Raw, 0.0001f);
|
||||
_a.temperature = scaleValue(aTempRaw, 0.01f);
|
||||
_a.frequency = scaleValue(aFreqRaw, 0.01f);
|
||||
_a.valid = true;
|
||||
|
||||
const uint32_t bVoltageRaw = combineWords(_node.getResponseBuffer(16), _node.getResponseBuffer(17));
|
||||
const uint32_t bCurrentRaw = combineWords(_node.getResponseBuffer(18), _node.getResponseBuffer(19));
|
||||
const uint32_t bPowerRaw = combineWords(_node.getResponseBuffer(20), _node.getResponseBuffer(21));
|
||||
const uint32_t bEnergyRaw = combineWords(_node.getResponseBuffer(22), _node.getResponseBuffer(23));
|
||||
const uint32_t bPfRaw = combineWords(_node.getResponseBuffer(24), _node.getResponseBuffer(25));
|
||||
const uint32_t bCo2Raw = combineWords(_node.getResponseBuffer(26), _node.getResponseBuffer(27));
|
||||
|
||||
_b.voltage = scaleValue(bVoltageRaw, 0.0001f);
|
||||
_b.current = scaleValue(bCurrentRaw, 0.0001f);
|
||||
_b.power = scaleValue(bPowerRaw, 0.0001f);
|
||||
_b.energy = scaleValue(bEnergyRaw, 0.0001f);
|
||||
_b.powerFactor = scaleValue(bPfRaw, 0.001f);
|
||||
_b.co2 = scaleValue(bCo2Raw, 0.0001f);
|
||||
_b.valid = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const IM1281CAData &IM1281C::a() const
|
||||
{
|
||||
return _a;
|
||||
}
|
||||
|
||||
const IM1281CBData &IM1281C::b() const
|
||||
{
|
||||
return _b;
|
||||
}
|
||||
|
||||
uint8_t IM1281C::lastAResult() const
|
||||
{
|
||||
return _lastAResult;
|
||||
}
|
||||
|
||||
uint8_t IM1281C::lastBResult() const
|
||||
{
|
||||
return _lastBResult;
|
||||
}
|
||||
|
||||
uint32_t IM1281C::combineWords(uint16_t highWord, uint16_t lowWord)
|
||||
{
|
||||
return (static_cast<uint32_t>(highWord) << 16) | static_cast<uint32_t>(lowWord);
|
||||
}
|
||||
|
||||
float IM1281C::scaleValue(uint32_t raw, float scale)
|
||||
{
|
||||
return static_cast<float>(raw) * scale;
|
||||
}
|
||||
65
hardware/firmware/lib/IM1281C/src/IM1281C.h
Normal file
65
hardware/firmware/lib/IM1281C/src/IM1281C.h
Normal file
@@ -0,0 +1,65 @@
|
||||
#ifndef HELIOS_IM1281C_H
|
||||
#define HELIOS_IM1281C_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <ModbusMaster.h>
|
||||
|
||||
struct IM1281CAData
|
||||
{
|
||||
float voltage = 0.0f;
|
||||
float current = 0.0f;
|
||||
float power = 0.0f;
|
||||
float energy = 0.0f;
|
||||
float powerFactor = 0.0f;
|
||||
float co2 = 0.0f;
|
||||
float temperature = 0.0f;
|
||||
float frequency = 0.0f;
|
||||
bool valid = false;
|
||||
};
|
||||
|
||||
struct IM1281CBData
|
||||
{
|
||||
float voltage = 0.0f;
|
||||
float current = 0.0f;
|
||||
float power = 0.0f;
|
||||
float energy = 0.0f;
|
||||
float powerFactor = 0.0f;
|
||||
float co2 = 0.0f;
|
||||
bool valid = false;
|
||||
};
|
||||
|
||||
class IM1281C
|
||||
{
|
||||
public:
|
||||
IM1281C();
|
||||
|
||||
bool begin(HardwareSerial &serial,
|
||||
int8_t rxPin,
|
||||
int8_t txPin,
|
||||
uint8_t slaveAddress = 1,
|
||||
uint32_t baudRate = 4800,
|
||||
uint32_t serialConfig = SERIAL_8N1);
|
||||
|
||||
bool readA();
|
||||
bool readB();
|
||||
bool readAll();
|
||||
|
||||
const IM1281CAData &a() const;
|
||||
const IM1281CBData &b() const;
|
||||
uint8_t lastAResult() const;
|
||||
uint8_t lastBResult() const;
|
||||
|
||||
private:
|
||||
static uint32_t combineWords(uint16_t highWord, uint16_t lowWord);
|
||||
static float scaleValue(uint32_t raw, float scale);
|
||||
|
||||
ModbusMaster _node;
|
||||
HardwareSerial *_serial;
|
||||
uint8_t _slaveAddress;
|
||||
uint8_t _lastAResult;
|
||||
uint8_t _lastBResult;
|
||||
IM1281CAData _a;
|
||||
IM1281CBData _b;
|
||||
};
|
||||
|
||||
#endif // HELIOS_IM1281C_H
|
||||
@@ -17,5 +17,7 @@ lib_deps =
|
||||
roboticsbrno/SmartLeds@^3.1.5
|
||||
miguelbalboa/MFRC522@^1.4.12
|
||||
tzapu/WiFiManager@^2.0.17
|
||||
adafruit/Adafruit SSD1306@^2.5.16
|
||||
4-20ma/ModbusMaster@^2.0.1
|
||||
build_flags = -DMO_PLATFORM=MO_PLATFORM_ARDUINO -DMO_MG_USE_VERSION=MO_MG_V715 -DMO_NUMCONNECTORS=3
|
||||
board_build.partitions = partitions.csv
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
#include <Arduino.h>
|
||||
#include <Wire.h>
|
||||
#include <SPI.h>
|
||||
#include <WiFiManager.h>
|
||||
#include <Preferences.h>
|
||||
#include <string.h>
|
||||
@@ -6,12 +8,16 @@
|
||||
#include <MicroOcpp.h>
|
||||
#include <MicroOcppMongooseClient.h>
|
||||
#include <MicroOcpp/Core/Context.h>
|
||||
#include <MicroOcpp/Core/Configuration.h>
|
||||
|
||||
#include <Adafruit_SSD1306.h>
|
||||
#include <SmartLeds.h>
|
||||
#include <MFRC522.h>
|
||||
|
||||
#include "esp_system.h"
|
||||
#include "config.h"
|
||||
#include "IM1281C.h"
|
||||
#include "pins.h"
|
||||
|
||||
/* LED State Enum */
|
||||
enum LEDState
|
||||
@@ -30,6 +36,53 @@ static volatile LEDState s_led_state = LED_INITIALIZING;
|
||||
static volatile unsigned long s_blink_last_time = 0;
|
||||
static volatile bool s_blink_on = false;
|
||||
static const unsigned long BLINK_INTERVAL = 200; // 200ms blink interval
|
||||
static const unsigned long AUTH_WINDOW_MS = 30000;
|
||||
static const unsigned long IM1281C_POLL_INTERVAL_MS = 5000;
|
||||
static const unsigned long OLED_REFRESH_INTERVAL_MS = 500;
|
||||
static const unsigned long CARD_ID_DISPLAY_MS = 5000;
|
||||
static const unsigned long WAIT_HINT_BLINK_MS = 300;
|
||||
static const int CC_FILTER_MIN = 0;
|
||||
static const int CC_FILTER_MAX = 100;
|
||||
static const int CC_FILTER_ON_THRESHOLD = 75;
|
||||
static const int CC_FILTER_OFF_THRESHOLD = 25;
|
||||
static const int CC_FILTER_DELTA_UP = 6;
|
||||
static const int CC_FILTER_DELTA_DOWN_IDLE = -8;
|
||||
static const int CC_FILTER_DELTA_DOWN_ACTIVE = -20;
|
||||
|
||||
static bool s_cc1_plugged = false;
|
||||
static bool s_cc2_plugged = false;
|
||||
static bool s_cc1_raw_last = false;
|
||||
static bool s_cc2_raw_last = false;
|
||||
static unsigned long s_cc1_last_change_ms = 0;
|
||||
static unsigned long s_cc2_last_change_ms = 0;
|
||||
static bool s_cc1_prev_plugged = false;
|
||||
static bool s_cc2_prev_plugged = false;
|
||||
static bool s_cc1_filter_inited = false;
|
||||
static int s_cc1_filter_score = 0;
|
||||
static bool s_cc2_filter_inited = false;
|
||||
static int s_cc2_filter_score = 0;
|
||||
|
||||
static bool s_auth_in_progress = false;
|
||||
static bool s_auth_ok = false;
|
||||
static unsigned long s_auth_ok_at_ms = 0;
|
||||
static String s_auth_id_tag;
|
||||
static String s_last_swipe_id;
|
||||
static unsigned long s_last_swipe_at_ms = 0;
|
||||
|
||||
static bool s_remote_start_accepted = false;
|
||||
|
||||
static bool authWindowValid();
|
||||
static bool isConnectorIdle(unsigned int connectorId);
|
||||
static void clearAuthWait(const char *reason)
|
||||
{
|
||||
if (s_auth_ok || s_auth_id_tag.length() > 0)
|
||||
{
|
||||
Serial.printf("[main] Clear pending authorization: %s\n", reason);
|
||||
}
|
||||
s_auth_ok = false;
|
||||
s_auth_ok_at_ms = 0;
|
||||
s_auth_id_tag = "";
|
||||
}
|
||||
|
||||
uint8_t mac[6];
|
||||
char cpSerial[13];
|
||||
@@ -49,6 +102,8 @@ void saveConfigCallback()
|
||||
|
||||
struct mg_mgr mgr;
|
||||
|
||||
Adafruit_SSD1306 display(128, 64, &Wire, -1);
|
||||
|
||||
/**
|
||||
* WS2812B LED Pin
|
||||
* - GPIO 17 - RYMCU ESP32-DevKitC
|
||||
@@ -58,6 +113,638 @@ struct mg_mgr mgr;
|
||||
#define LED_COUNT 1
|
||||
|
||||
SmartLed leds(LED_WS2812B, LED_COUNT, LED_PIN, 0, DoubleBuffer);
|
||||
MFRC522 rfid(PIN_RC_CS, PIN_RC_RST);
|
||||
IM1281C im1281c;
|
||||
|
||||
static IM1281CAData s_meter_a;
|
||||
static IM1281CBData s_meter_b;
|
||||
static bool s_meter_data_ready = false;
|
||||
static bool s_oled_ready = false;
|
||||
static String s_oled_card_id;
|
||||
static unsigned long s_oled_card_started_at_ms = 0;
|
||||
static unsigned long s_oled_card_duration_ms = 0;
|
||||
static String s_oled_msg_title;
|
||||
static String s_oled_msg_line1;
|
||||
static String s_oled_msg_line2;
|
||||
static unsigned long s_oled_msg_started_at_ms = 0;
|
||||
static unsigned long s_oled_msg_duration_ms = 0;
|
||||
static bool s_oled_msg_alert = false;
|
||||
|
||||
static const char *ledStageText(LEDState state)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case LED_INITIALIZING:
|
||||
return "INIT";
|
||||
case LED_WIFI_CONNECTED:
|
||||
return "WIFI";
|
||||
case LED_OCPP_CONNECTED:
|
||||
return "OCPP";
|
||||
case LED_ERROR:
|
||||
return "ERROR";
|
||||
case LED_RESET_TX:
|
||||
return "RST-TX";
|
||||
case LED_FACTORY_RESET:
|
||||
return "FACTORY";
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
|
||||
static const char *cpStatusShort(ChargePointStatus status)
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case ChargePointStatus_Available:
|
||||
return "AVL";
|
||||
case ChargePointStatus_Preparing:
|
||||
return "PRE";
|
||||
case ChargePointStatus_Charging:
|
||||
return "CHG";
|
||||
case ChargePointStatus_SuspendedEVSE:
|
||||
return "SEVSE";
|
||||
case ChargePointStatus_SuspendedEV:
|
||||
return "SEV";
|
||||
case ChargePointStatus_Finishing:
|
||||
return "FIN";
|
||||
case ChargePointStatus_Reserved:
|
||||
return "RSV";
|
||||
case ChargePointStatus_Unavailable:
|
||||
return "UNAV";
|
||||
case ChargePointStatus_Faulted:
|
||||
return "FLT";
|
||||
default:
|
||||
return "N/A";
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int getWaitHintConnectorId()
|
||||
{
|
||||
if (!authWindowValid())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const bool c1_active = isTransactionActive(1) || isTransactionRunning(1) || ocppPermitsCharge(1);
|
||||
const bool c2_active = isTransactionActive(2) || isTransactionRunning(2) || ocppPermitsCharge(2);
|
||||
|
||||
if (c1_active && !c2_active && isConnectorIdle(2))
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (c2_active && !c1_active && isConnectorIdle(1))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!s_cc1_plugged && !s_cc2_plugged)
|
||||
{
|
||||
if (isConnectorIdle(1) && isOperative(1))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (isConnectorIdle(2) && isOperative(2))
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void showOledCard(const String &idTag, unsigned long durationMs = CARD_ID_DISPLAY_MS)
|
||||
{
|
||||
s_oled_card_id = idTag;
|
||||
s_oled_card_started_at_ms = millis();
|
||||
s_oled_card_duration_ms = durationMs;
|
||||
}
|
||||
|
||||
static bool isOledCardVisible()
|
||||
{
|
||||
return s_oled_card_id.length() > 0 && (millis() - s_oled_card_started_at_ms) <= s_oled_card_duration_ms;
|
||||
}
|
||||
|
||||
static void showOledMessage(const String &title, const String &line1 = String(), const String &line2 = String(), unsigned long durationMs = 2500, bool alert = false)
|
||||
{
|
||||
s_oled_msg_title = title;
|
||||
s_oled_msg_line1 = line1;
|
||||
s_oled_msg_line2 = line2;
|
||||
s_oled_msg_started_at_ms = millis();
|
||||
s_oled_msg_duration_ms = durationMs;
|
||||
s_oled_msg_alert = alert;
|
||||
}
|
||||
|
||||
static bool isOledMessageVisible()
|
||||
{
|
||||
return s_oled_msg_title.length() > 0 && (millis() - s_oled_msg_started_at_ms) <= s_oled_msg_duration_ms;
|
||||
}
|
||||
|
||||
static int energyKwhToWh(float energyKwh)
|
||||
{
|
||||
if (energyKwh <= 0.0f)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
float energyWh = energyKwh * 1000.0f;
|
||||
if (energyWh > 2147483000.0f)
|
||||
{
|
||||
energyWh = 2147483000.0f;
|
||||
}
|
||||
return static_cast<int>(energyWh + 0.5f);
|
||||
}
|
||||
|
||||
static void drawCenteredText(const String &text, int16_t y, uint8_t textSize)
|
||||
{
|
||||
int16_t x1 = 0;
|
||||
int16_t y1 = 0;
|
||||
uint16_t w = 0;
|
||||
uint16_t h = 0;
|
||||
|
||||
display.setTextSize(textSize);
|
||||
display.getTextBounds(text.c_str(), 0, y, &x1, &y1, &w, &h);
|
||||
|
||||
int16_t x = (128 - static_cast<int16_t>(w)) / 2;
|
||||
if (x < 0)
|
||||
{
|
||||
x = 0;
|
||||
}
|
||||
|
||||
display.setCursor(x, y);
|
||||
display.print(text);
|
||||
}
|
||||
|
||||
static void refreshOled()
|
||||
{
|
||||
if (!s_oled_ready)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static unsigned long s_last_refresh_ms = 0;
|
||||
const unsigned long now = millis();
|
||||
if ((now - s_last_refresh_ms) < OLED_REFRESH_INTERVAL_MS)
|
||||
{
|
||||
return;
|
||||
}
|
||||
s_last_refresh_ms = now;
|
||||
|
||||
const bool c1_chg = ocppPermitsCharge(1);
|
||||
const bool c2_chg = ocppPermitsCharge(2);
|
||||
const ChargePointStatus st1 = getChargePointStatus(1);
|
||||
const ChargePointStatus st2 = getChargePointStatus(2);
|
||||
const bool show_message = isOledMessageVisible();
|
||||
const bool show_card = !show_message && isOledCardVisible();
|
||||
|
||||
display.clearDisplay();
|
||||
display.setTextColor(SSD1306_WHITE);
|
||||
display.setTextWrap(false);
|
||||
|
||||
if (show_message)
|
||||
{
|
||||
String title = s_oled_msg_title;
|
||||
String line1 = s_oled_msg_line1;
|
||||
String line2 = s_oled_msg_line2;
|
||||
|
||||
if (s_oled_msg_alert)
|
||||
{
|
||||
const uint8_t alertTitleSize = (title.length() <= 10) ? 2 : 1;
|
||||
const int16_t alertTitleY = (alertTitleSize == 2) ? 6 : 10;
|
||||
if (title.length() > 21)
|
||||
{
|
||||
title = title.substring(0, 21);
|
||||
}
|
||||
if (line1.length() > 14)
|
||||
{
|
||||
line1 = line1.substring(0, 14);
|
||||
}
|
||||
if (line2.length() > 14)
|
||||
{
|
||||
line2 = line2.substring(0, 14);
|
||||
}
|
||||
|
||||
drawCenteredText(title, alertTitleY, alertTitleSize);
|
||||
if (line1.length() > 0)
|
||||
{
|
||||
drawCenteredText(line1, 30, 1);
|
||||
}
|
||||
if (line2.length() > 0)
|
||||
{
|
||||
drawCenteredText(line2, 44, 1);
|
||||
}
|
||||
display.display();
|
||||
return;
|
||||
}
|
||||
|
||||
if (title.length() > 14)
|
||||
{
|
||||
title = title.substring(0, 14);
|
||||
}
|
||||
if (line1.length() > 16)
|
||||
{
|
||||
line1 = line1.substring(0, 16);
|
||||
}
|
||||
if (line2.length() > 16)
|
||||
{
|
||||
line2 = line2.substring(0, 16);
|
||||
}
|
||||
|
||||
drawCenteredText(title, 6, 2);
|
||||
if (line1.length() > 0)
|
||||
{
|
||||
drawCenteredText(line1, 30, 1);
|
||||
}
|
||||
if (line2.length() > 0)
|
||||
{
|
||||
drawCenteredText(line2, 44, 1);
|
||||
}
|
||||
display.display();
|
||||
return;
|
||||
}
|
||||
|
||||
if (show_card)
|
||||
{
|
||||
String shownId = s_oled_card_id;
|
||||
if (shownId.length() > 12)
|
||||
{
|
||||
shownId = shownId.substring(shownId.length() - 12);
|
||||
}
|
||||
|
||||
// Card display mode: full-screen centered content
|
||||
drawCenteredText(String("CARD"), 16, 1);
|
||||
drawCenteredText(shownId, 34, 2);
|
||||
display.display();
|
||||
return;
|
||||
}
|
||||
|
||||
display.setTextSize(1);
|
||||
display.setCursor(0, 0);
|
||||
display.printf("ST:%s AUTH:%s", ledStageText(s_led_state), authWindowValid() ? "WAIT" : "IDLE");
|
||||
|
||||
display.setCursor(0, 8);
|
||||
display.printf("C1 P%d CH%d %s", s_cc1_plugged ? 1 : 0, c1_chg ? 1 : 0, cpStatusShort(st1));
|
||||
|
||||
display.setCursor(0, 16);
|
||||
display.printf("C2 P%d CH%d %s", s_cc2_plugged ? 1 : 0, c2_chg ? 1 : 0, cpStatusShort(st2));
|
||||
|
||||
if (!s_meter_data_ready)
|
||||
{
|
||||
display.setCursor(0, 28);
|
||||
display.print("Meter: waiting IM1281C");
|
||||
}
|
||||
else
|
||||
{
|
||||
display.setCursor(0, 24);
|
||||
display.printf("A U%.1f I%.2f", s_meter_a.voltage, s_meter_a.current);
|
||||
|
||||
display.setCursor(0, 32);
|
||||
display.printf("A P%.0f E%.3f", s_meter_a.power, s_meter_a.energy);
|
||||
|
||||
display.setCursor(0, 40);
|
||||
display.printf("B U%.1f I%.2f", s_meter_b.voltage, s_meter_b.current);
|
||||
|
||||
display.setCursor(0, 48);
|
||||
display.printf("B P%.0f E%.3f", s_meter_b.power, s_meter_b.energy);
|
||||
|
||||
display.setCursor(0, 56);
|
||||
display.printf("T%.1fC F%.1fHz", s_meter_a.temperature, s_meter_a.frequency);
|
||||
}
|
||||
|
||||
display.display();
|
||||
}
|
||||
|
||||
static bool isConnectorPlugged(unsigned int connectorId)
|
||||
{
|
||||
if (connectorId == 1)
|
||||
return s_cc1_plugged;
|
||||
if (connectorId == 2)
|
||||
return s_cc2_plugged;
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool isConnectorIdle(unsigned int connectorId)
|
||||
{
|
||||
return !isTransactionActive(connectorId) && !isTransactionRunning(connectorId) && !getTransaction(connectorId);
|
||||
}
|
||||
|
||||
static bool isConnectorStartReady(unsigned int connectorId)
|
||||
{
|
||||
return connectorId >= 1 && connectorId <= 2 && isOperative(connectorId) && isConnectorIdle(connectorId) && isConnectorPlugged(connectorId);
|
||||
}
|
||||
|
||||
static void updateConnectorPluggedState()
|
||||
{
|
||||
const bool cc1_raw = (digitalRead(PIN_CC1) == HIGH);
|
||||
|
||||
if (!s_cc1_filter_inited)
|
||||
{
|
||||
s_cc1_filter_inited = true;
|
||||
s_cc1_filter_score = cc1_raw ? CC_FILTER_MAX : CC_FILTER_MIN;
|
||||
s_cc1_plugged = cc1_raw;
|
||||
}
|
||||
|
||||
int cc1_delta = cc1_raw ? CC_FILTER_DELTA_UP : CC_FILTER_DELTA_DOWN_IDLE;
|
||||
if ((isTransactionActive(1) || isTransactionRunning(1)) && !cc1_raw)
|
||||
{
|
||||
cc1_delta = CC_FILTER_DELTA_DOWN_ACTIVE;
|
||||
}
|
||||
|
||||
s_cc1_filter_score += cc1_delta;
|
||||
if (s_cc1_filter_score > CC_FILTER_MAX)
|
||||
{
|
||||
s_cc1_filter_score = CC_FILTER_MAX;
|
||||
}
|
||||
else if (s_cc1_filter_score < CC_FILTER_MIN)
|
||||
{
|
||||
s_cc1_filter_score = CC_FILTER_MIN;
|
||||
}
|
||||
|
||||
bool cc1_candidate = s_cc1_plugged;
|
||||
if (s_cc1_filter_score >= CC_FILTER_ON_THRESHOLD)
|
||||
{
|
||||
cc1_candidate = true;
|
||||
}
|
||||
else if (s_cc1_filter_score <= CC_FILTER_OFF_THRESHOLD)
|
||||
{
|
||||
cc1_candidate = false;
|
||||
}
|
||||
|
||||
if (cc1_candidate != s_cc1_plugged)
|
||||
{
|
||||
bool cc1_plugged_old = s_cc1_plugged;
|
||||
s_cc1_plugged = cc1_candidate;
|
||||
|
||||
// If connector1 just connected and auth window is valid, try to start
|
||||
if (!cc1_plugged_old && s_cc1_plugged && s_auth_ok && (millis() - s_auth_ok_at_ms) <= AUTH_WINDOW_MS && s_auth_id_tag.length() > 0 && isConnectorIdle(1))
|
||||
{
|
||||
Serial.printf("[main] Connector 1 plugged in, auto-starting with idTag %s\n", s_auth_id_tag.c_str());
|
||||
auto tx = beginTransaction_authorized(s_auth_id_tag.c_str(), nullptr, 1);
|
||||
if (tx != nullptr)
|
||||
{
|
||||
s_auth_ok = false;
|
||||
s_auth_id_tag = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const bool cc2_raw = (digitalRead(PIN_CC2) == HIGH);
|
||||
|
||||
if (!s_cc2_filter_inited)
|
||||
{
|
||||
s_cc2_filter_inited = true;
|
||||
s_cc2_filter_score = cc2_raw ? CC_FILTER_MAX : CC_FILTER_MIN;
|
||||
s_cc2_plugged = cc2_raw;
|
||||
}
|
||||
|
||||
int delta = cc2_raw ? CC_FILTER_DELTA_UP : CC_FILTER_DELTA_DOWN_IDLE;
|
||||
if ((isTransactionActive(2) || isTransactionRunning(2)) && !cc2_raw)
|
||||
{
|
||||
delta = CC_FILTER_DELTA_DOWN_ACTIVE;
|
||||
}
|
||||
|
||||
s_cc2_filter_score += delta;
|
||||
if (s_cc2_filter_score > CC_FILTER_MAX)
|
||||
{
|
||||
s_cc2_filter_score = CC_FILTER_MAX;
|
||||
}
|
||||
else if (s_cc2_filter_score < CC_FILTER_MIN)
|
||||
{
|
||||
s_cc2_filter_score = CC_FILTER_MIN;
|
||||
}
|
||||
|
||||
bool cc2_candidate = s_cc2_plugged;
|
||||
if (s_cc2_filter_score >= CC_FILTER_ON_THRESHOLD)
|
||||
{
|
||||
cc2_candidate = true;
|
||||
}
|
||||
else if (s_cc2_filter_score <= CC_FILTER_OFF_THRESHOLD)
|
||||
{
|
||||
cc2_candidate = false;
|
||||
}
|
||||
|
||||
if (cc2_candidate != s_cc2_plugged)
|
||||
{
|
||||
bool cc2_plugged_old = s_cc2_plugged;
|
||||
s_cc2_plugged = cc2_candidate;
|
||||
|
||||
// If connector2 just connected and auth window is valid, try to start
|
||||
if (!cc2_plugged_old && s_cc2_plugged && s_auth_ok && (millis() - s_auth_ok_at_ms) <= AUTH_WINDOW_MS && s_auth_id_tag.length() > 0 && isConnectorIdle(2))
|
||||
{
|
||||
Serial.printf("[main] Connector 2 plugged in, auto-starting with idTag %s\n", s_auth_id_tag.c_str());
|
||||
auto tx = beginTransaction_authorized(s_auth_id_tag.c_str(), nullptr, 2);
|
||||
if (tx != nullptr)
|
||||
{
|
||||
s_auth_ok = false;
|
||||
s_auth_id_tag = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void updatePanelLedsFromPlugState()
|
||||
{
|
||||
// Reserved for startup sync; runtime LED behavior is tied to charging permission.
|
||||
digitalWrite(PIN_LED1, HIGH);
|
||||
digitalWrite(PIN_LED2, HIGH);
|
||||
}
|
||||
|
||||
static void updateChargeActuators()
|
||||
{
|
||||
const bool chg1_on = ocppPermitsCharge(1);
|
||||
const bool chg2_on = ocppPermitsCharge(2);
|
||||
bool led1_on = chg1_on;
|
||||
bool led2_on = chg2_on;
|
||||
|
||||
// During local authorization wait, blink the suggested idle connector LED.
|
||||
const unsigned int hintConnector = getWaitHintConnectorId();
|
||||
if (hintConnector > 0)
|
||||
{
|
||||
const bool blink_on = ((millis() / WAIT_HINT_BLINK_MS) % 2) == 0;
|
||||
if (hintConnector == 1 && !chg1_on)
|
||||
{
|
||||
led1_on = blink_on;
|
||||
}
|
||||
else if (hintConnector == 2 && !chg2_on)
|
||||
{
|
||||
led2_on = blink_on;
|
||||
}
|
||||
}
|
||||
|
||||
// LEDs and relays are low-active
|
||||
digitalWrite(PIN_LED1, led1_on ? LOW : HIGH);
|
||||
digitalWrite(PIN_LED2, led2_on ? LOW : HIGH);
|
||||
digitalWrite(PIN_RELAY1, chg1_on ? LOW : HIGH);
|
||||
digitalWrite(PIN_RELAY2, chg2_on ? LOW : HIGH);
|
||||
}
|
||||
|
||||
static void stopIfUnplugged()
|
||||
{
|
||||
if (s_cc1_prev_plugged && !s_cc1_plugged && (isTransactionActive(1) || isTransactionRunning(1)))
|
||||
{
|
||||
Serial.println("[main] Connector 1 unplugged. Stop transaction immediately.");
|
||||
endTransaction(nullptr, "EVDisconnected", 1);
|
||||
}
|
||||
|
||||
if (s_cc2_prev_plugged && !s_cc2_plugged && (isTransactionActive(2) || isTransactionRunning(2)))
|
||||
{
|
||||
Serial.println("[main] Connector 2 unplugged. Stop transaction immediately.");
|
||||
endTransaction(nullptr, "EVDisconnected", 2);
|
||||
}
|
||||
|
||||
s_cc1_prev_plugged = s_cc1_plugged;
|
||||
s_cc2_prev_plugged = s_cc2_plugged;
|
||||
}
|
||||
|
||||
static bool authWindowValid()
|
||||
{
|
||||
return s_auth_ok && (millis() - s_auth_ok_at_ms) <= AUTH_WINDOW_MS && s_auth_id_tag.length() > 0;
|
||||
}
|
||||
|
||||
static void requestAuthorizeByCard(const String &idTag)
|
||||
{
|
||||
if (s_auth_in_progress)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
clearAuthWait("new card swiped");
|
||||
showOledCard(idTag);
|
||||
s_auth_in_progress = true;
|
||||
|
||||
Serial.printf("[main] Authorize idTag: %s\n", idTag.c_str());
|
||||
authorize(
|
||||
idTag.c_str(),
|
||||
[idTag](JsonObject payload)
|
||||
{
|
||||
s_auth_in_progress = false;
|
||||
const char *status = payload["idTagInfo"]["status"] | "";
|
||||
if (!strcmp(status, "Accepted"))
|
||||
{
|
||||
s_auth_ok = true;
|
||||
s_auth_ok_at_ms = millis();
|
||||
s_auth_id_tag = idTag;
|
||||
Serial.printf("[main] Authorize accepted for idTag %s\n", idTag.c_str());
|
||||
showOledMessage("AUTH OK", "Swipe ready", String("ID ") + idTag.substring(max(0, (int)idTag.length() - 10)), 2200, false);
|
||||
|
||||
// Check if there's already a connector plugged in; if so, start immediately
|
||||
unsigned int targetConnector = 0;
|
||||
if (s_cc1_plugged && isConnectorIdle(1) && isOperative(1))
|
||||
{
|
||||
targetConnector = 1;
|
||||
}
|
||||
else if (s_cc2_plugged && isConnectorIdle(2) && isOperative(2))
|
||||
{
|
||||
targetConnector = 2;
|
||||
}
|
||||
|
||||
if (targetConnector > 0)
|
||||
{
|
||||
// Immediately start the transaction on the plugged connector
|
||||
Serial.printf("[main] Connector %u is plugged in, auto-starting transaction\n", targetConnector);
|
||||
auto tx = beginTransaction_authorized(idTag.c_str(), nullptr, targetConnector);
|
||||
if (tx != nullptr)
|
||||
{
|
||||
clearAuthWait("transaction started");
|
||||
showOledMessage("START OK", String("C") + String(targetConnector), "Charging", 2200, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
showOledMessage("START FAIL", String("C") + String(targetConnector), "Busy/Not Ready", 2500, true);
|
||||
}
|
||||
}
|
||||
// Otherwise, wait for a connector to be plugged in
|
||||
}
|
||||
else
|
||||
{
|
||||
clearAuthWait("authorize rejected");
|
||||
Serial.printf("[main] Authorize rejected, status=%s\n", status);
|
||||
showOledMessage("AUTH FAIL", status, "Try again", 2500, true);
|
||||
}
|
||||
},
|
||||
[]()
|
||||
{
|
||||
s_auth_in_progress = false;
|
||||
clearAuthWait("authorize aborted");
|
||||
Serial.println("[main] Authorize aborted");
|
||||
showOledMessage("AUTH ABORT", "Swipe again", String(), 1800, true);
|
||||
});
|
||||
}
|
||||
|
||||
static void pollRfidCard()
|
||||
{
|
||||
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
String idTag;
|
||||
for (byte i = 0; i < rfid.uid.size; i++)
|
||||
{
|
||||
if (rfid.uid.uidByte[i] < 0x10)
|
||||
{
|
||||
idTag += '0';
|
||||
}
|
||||
idTag += String(rfid.uid.uidByte[i], HEX);
|
||||
}
|
||||
idTag.toUpperCase();
|
||||
|
||||
s_last_swipe_id = idTag;
|
||||
s_last_swipe_at_ms = millis();
|
||||
|
||||
rfid.PICC_HaltA();
|
||||
rfid.PCD_StopCrypto1();
|
||||
|
||||
requestAuthorizeByCard(idTag);
|
||||
}
|
||||
|
||||
static void expireAuthWaitIfNeeded()
|
||||
{
|
||||
if (s_auth_ok && s_auth_id_tag.length() > 0 && (millis() - s_auth_ok_at_ms) > AUTH_WINDOW_MS)
|
||||
{
|
||||
clearAuthWait("authorization timeout");
|
||||
}
|
||||
}
|
||||
|
||||
static void pollIm1281c()
|
||||
{
|
||||
static unsigned long s_last_poll_ms = 0;
|
||||
const unsigned long now = millis();
|
||||
if ((now - s_last_poll_ms) < IM1281C_POLL_INTERVAL_MS)
|
||||
{
|
||||
return;
|
||||
}
|
||||
s_last_poll_ms = now;
|
||||
|
||||
if (!im1281c.readAll())
|
||||
{
|
||||
Serial.printf("[IM1281C] read failed: A=%u B=%u\n", im1281c.lastAResult(), im1281c.lastBResult());
|
||||
return;
|
||||
}
|
||||
|
||||
const IM1281CAData &a = im1281c.a();
|
||||
const IM1281CBData &b = im1281c.b();
|
||||
s_meter_a = a;
|
||||
s_meter_b = b;
|
||||
s_meter_data_ready = true;
|
||||
|
||||
Serial.printf("[IM1281C] A: U=%.4fV I=%.4fA P=%.4fW E=%.4fkWh PF=%.3f CO2=%.4fkg T=%.2fC F=%.2fHz\n",
|
||||
a.voltage,
|
||||
a.current,
|
||||
a.power,
|
||||
a.energy,
|
||||
a.powerFactor,
|
||||
a.co2,
|
||||
a.temperature,
|
||||
a.frequency);
|
||||
Serial.printf("[IM1281C] B: U=%.4fV I=%.4fA P=%.4fW E=%.4fkWh PF=%.3f CO2=%.4fkg\n",
|
||||
b.voltage,
|
||||
b.current,
|
||||
b.power,
|
||||
b.energy,
|
||||
b.powerFactor,
|
||||
b.co2);
|
||||
}
|
||||
|
||||
/* LED Control Functions */
|
||||
void updateLED()
|
||||
@@ -171,9 +858,64 @@ void setup()
|
||||
s_blink_last_time = 0;
|
||||
s_blink_on = false;
|
||||
|
||||
// Initialize CC switches (input) and panel LEDs (low-active output)
|
||||
pinMode(PIN_CC1, INPUT);
|
||||
pinMode(PIN_CC2, INPUT);
|
||||
pinMode(PIN_LED1, OUTPUT);
|
||||
pinMode(PIN_LED2, OUTPUT);
|
||||
pinMode(PIN_RELAY1, OUTPUT);
|
||||
pinMode(PIN_RELAY2, OUTPUT);
|
||||
digitalWrite(PIN_LED1, HIGH); // Off by default (low-active)
|
||||
digitalWrite(PIN_LED2, HIGH); // Off by default (low-active)
|
||||
digitalWrite(PIN_RELAY1, HIGH); // Off by default (low-active)
|
||||
digitalWrite(PIN_RELAY2, HIGH); // Off by default (low-active)
|
||||
updateConnectorPluggedState();
|
||||
updatePanelLedsFromPlugState();
|
||||
|
||||
leds[0] = Rgb{255, 255, 0};
|
||||
leds.show();
|
||||
|
||||
// Initialize I2C for OLED (from schematic pin map)
|
||||
Wire.begin(PIN_OLED_SDA, PIN_OLED_SCL);
|
||||
|
||||
// Initialize SSD1306 OLED over I2C, try 0x3C then 0x3D
|
||||
if (display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
|
||||
{
|
||||
s_oled_ready = true;
|
||||
}
|
||||
else if (display.begin(SSD1306_SWITCHCAPVCC, 0x3D))
|
||||
{
|
||||
s_oled_ready = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
s_oled_ready = false;
|
||||
Serial.println("[OLED] SSD1306 init failed");
|
||||
}
|
||||
|
||||
if (s_oled_ready)
|
||||
{
|
||||
display.clearDisplay();
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(SSD1306_WHITE);
|
||||
display.setCursor(0, 0);
|
||||
display.println("Helios EVCS");
|
||||
display.setCursor(0, 12);
|
||||
display.println("Booting...");
|
||||
display.display();
|
||||
}
|
||||
|
||||
// Initialize IM1281C over UART2 (default: address 1, 4800bps, 8N1)
|
||||
im1281c.begin(Serial2, PIN_U2RXD, PIN_U2TXD);
|
||||
|
||||
// Initialize SPI bus for RC522
|
||||
SPI.begin(PIN_RC_SCK, PIN_RC_MISO, PIN_RC_MOSI, PIN_RC_CS);
|
||||
pinMode(PIN_RC_CS, OUTPUT);
|
||||
digitalWrite(PIN_RC_CS, HIGH);
|
||||
pinMode(PIN_RC_RST, OUTPUT);
|
||||
digitalWrite(PIN_RC_RST, HIGH);
|
||||
rfid.PCD_Init();
|
||||
|
||||
// Load configuration from Preferences
|
||||
Preferences preferences;
|
||||
preferences.begin("ocpp-config", false);
|
||||
@@ -403,6 +1145,139 @@ void setup()
|
||||
|
||||
mocpp_initialize(*client, ChargerCredentials(CFG_CP_MODAL, CFG_CP_VENDOR, CFG_CP_FW_VERSION, cpSerial, nullptr, nullptr, CFG_CB_SERIAL, nullptr, nullptr), MicroOcpp::makeDefaultFilesystemAdapter(MicroOcpp::FilesystemOpt::Use_Mount_FormatOnFail));
|
||||
|
||||
// Expose both physical connectors to CSMS and feed live plug-state from CC switches.
|
||||
// connectorId 1 <-> CC1, connectorId 2 <-> CC2
|
||||
setConnectorPluggedInput([]()
|
||||
{ return s_cc1_plugged; },
|
||||
1);
|
||||
setConnectorPluggedInput([]()
|
||||
{ return s_cc2_plugged; },
|
||||
2);
|
||||
|
||||
// Occupied state drives StatusNotification (Available <-> Preparing/Finishing)
|
||||
// to report plug-in / unplug events even without an active transaction.
|
||||
setOccupiedInput([]()
|
||||
{ return s_cc1_plugged; },
|
||||
1);
|
||||
setOccupiedInput([]()
|
||||
{ return s_cc2_plugged; },
|
||||
2);
|
||||
|
||||
// Bind IM1281C metering values to OCPP connector 1 / 2
|
||||
setEnergyMeterInput([]()
|
||||
{ return s_meter_data_ready ? energyKwhToWh(s_meter_a.energy) : 0; },
|
||||
1);
|
||||
setPowerMeterInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_a.power : 0.0f; },
|
||||
1);
|
||||
addMeterValueInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_a.voltage : 0.0f; },
|
||||
"Voltage", "V", nullptr, nullptr, 1);
|
||||
addMeterValueInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_a.current : 0.0f; },
|
||||
"Current.Import", "A", nullptr, nullptr, 1);
|
||||
addMeterValueInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_a.powerFactor : 0.0f; },
|
||||
"Power.Factor", nullptr, nullptr, nullptr, 1);
|
||||
addMeterValueInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_a.frequency : 0.0f; },
|
||||
"Frequency", "Hz", nullptr, nullptr, 1);
|
||||
addMeterValueInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_a.temperature : 0.0f; },
|
||||
"Temperature", "Celsius", nullptr, nullptr, 1);
|
||||
|
||||
setEnergyMeterInput([]()
|
||||
{ return s_meter_data_ready ? energyKwhToWh(s_meter_b.energy) : 0; },
|
||||
2);
|
||||
setPowerMeterInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_b.power : 0.0f; },
|
||||
2);
|
||||
addMeterValueInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_b.voltage : 0.0f; },
|
||||
"Voltage", "V", nullptr, nullptr, 2);
|
||||
addMeterValueInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_b.current : 0.0f; },
|
||||
"Current.Import", "A", nullptr, nullptr, 2);
|
||||
addMeterValueInput([]()
|
||||
{ return s_meter_data_ready ? s_meter_b.powerFactor : 0.0f; },
|
||||
"Power.Factor", nullptr, nullptr, nullptr, 2);
|
||||
|
||||
// MicroOcpp defaults MeterValuesSampledData to Energy + Power only.
|
||||
// Expand sampled measurands so CSMS can receive voltage/current/PF/frequency/temperature.
|
||||
static const char *kMeterValuesSampledData =
|
||||
"Energy.Active.Import.Register,Power.Active.Import,Voltage,Current.Import,Power.Factor,Frequency,Temperature";
|
||||
if (auto *cfg = MicroOcpp::getConfigurationPublic("MeterValuesSampledData"))
|
||||
{
|
||||
cfg->setString(kMeterValuesSampledData);
|
||||
}
|
||||
if (auto *cfg = MicroOcpp::getConfigurationPublic("MeterValuesAlignedData"))
|
||||
{
|
||||
cfg->setString(kMeterValuesSampledData);
|
||||
}
|
||||
MicroOcpp::configuration_save();
|
||||
|
||||
// Custom RemoteStartTransaction policy:
|
||||
// accept only when target connector is idle + operative + plugged.
|
||||
setRequestHandler(
|
||||
"RemoteStartTransaction",
|
||||
[](JsonObject payload)
|
||||
{
|
||||
s_remote_start_accepted = false;
|
||||
|
||||
const char *idTag = payload["idTag"] | "";
|
||||
if (!idTag || !*idTag)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int reqConnectorId = payload["connectorId"] | -1;
|
||||
unsigned int targetConnector = 0;
|
||||
|
||||
if (reqConnectorId >= 1 && reqConnectorId <= 2)
|
||||
{
|
||||
if (isConnectorStartReady((unsigned int)reqConnectorId))
|
||||
{
|
||||
targetConnector = (unsigned int)reqConnectorId;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (unsigned int cid = 1; cid <= 2; cid++)
|
||||
{
|
||||
if (isConnectorStartReady(cid))
|
||||
{
|
||||
targetConnector = cid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (targetConnector == 0)
|
||||
{
|
||||
showOledMessage("REMOTE REJ", "No idle plug", "or not ready", 2500, true);
|
||||
return;
|
||||
}
|
||||
|
||||
auto tx = beginTransaction_authorized(idTag, nullptr, targetConnector);
|
||||
s_remote_start_accepted = (tx != nullptr);
|
||||
if (s_remote_start_accepted)
|
||||
{
|
||||
Serial.printf("[main] Remote start accepted on connector %u\n", targetConnector);
|
||||
showOledMessage("REMOTE OK", String("C") + String(targetConnector), "Charging", 2200, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
showOledMessage("REMOTE REJ", String("C") + String(targetConnector), "Busy/Not Ready", 2500, true);
|
||||
}
|
||||
},
|
||||
[]() -> std::unique_ptr<MicroOcpp::JsonDoc>
|
||||
{
|
||||
auto doc = std::unique_ptr<MicroOcpp::JsonDoc>(new MicroOcpp::JsonDoc(JSON_OBJECT_SIZE(1)));
|
||||
JsonObject payload = doc->to<JsonObject>();
|
||||
payload["status"] = s_remote_start_accepted ? "Accepted" : "Rejected";
|
||||
return doc;
|
||||
});
|
||||
|
||||
// For development/recovery: Set up BOOT button (GPIO 0)
|
||||
pinMode(0, INPUT_PULLUP);
|
||||
|
||||
@@ -410,16 +1285,28 @@ void setup()
|
||||
setOnSendConf("RemoteStopTransaction", [](JsonObject payload)
|
||||
{
|
||||
if (!strcmp(payload["status"], "Rejected")) {
|
||||
Serial.println("[main] MicroOcpp rejected RemoteStopTransaction! Force overriding and stopping charging...");
|
||||
endTransaction(nullptr, "Remote", 1);
|
||||
unsigned int connectorId = payload["connectorId"] | 1;
|
||||
if (connectorId < 1 || connectorId > 2)
|
||||
{
|
||||
connectorId = 1;
|
||||
}
|
||||
Serial.printf("[main] MicroOcpp rejected RemoteStopTransaction on connector %u. Force overriding and stopping charging...\n", connectorId);
|
||||
endTransaction(nullptr, "Remote", connectorId);
|
||||
} });
|
||||
}
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
updateConnectorPluggedState();
|
||||
stopIfUnplugged();
|
||||
pollRfidCard();
|
||||
expireAuthWaitIfNeeded();
|
||||
pollIm1281c();
|
||||
|
||||
mg_mgr_poll(&mgr, 10);
|
||||
mocpp_loop();
|
||||
updateChargeActuators();
|
||||
|
||||
// Handle BOOT button (GPIO 0) interactions for recovery
|
||||
bool is_btn_pressed = (digitalRead(0) == LOW);
|
||||
@@ -478,8 +1365,9 @@ void loop()
|
||||
}
|
||||
else if (held_time >= 3000)
|
||||
{
|
||||
Serial.println("BOOT button held for > 3s! Forcefully ending dangling transaction...");
|
||||
Serial.println("BOOT button held for > 3s! Forcefully ending dangling transactions on connector 1 and 2...");
|
||||
endTransaction(nullptr, "PowerLoss", 1);
|
||||
endTransaction(nullptr, "PowerLoss", 2);
|
||||
}
|
||||
boot_was_pressed = false;
|
||||
// Temporarily set to init so the logic below restores the actual network state accurately
|
||||
@@ -508,6 +1396,7 @@ void loop()
|
||||
}
|
||||
|
||||
updateLED();
|
||||
refreshOled();
|
||||
|
||||
delay(10);
|
||||
}
|
||||
|
||||
1
hardware/pcb/.history
Submodule
1
hardware/pcb/.history
Submodule
Submodule hardware/pcb/.history added at 468ec3b809
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 0,
|
||||
"active_layer": 5,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
@@ -15,6 +15,7 @@
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"prototype_zone_fills": false,
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
@@ -64,9 +65,42 @@
|
||||
"version": 5
|
||||
},
|
||||
"net_inspector_panel": {
|
||||
"col_hidden": [],
|
||||
"col_order": [],
|
||||
"col_widths": [],
|
||||
"col_hidden": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"col_order": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9
|
||||
],
|
||||
"col_widths": [
|
||||
174,
|
||||
159,
|
||||
100,
|
||||
63,
|
||||
100,
|
||||
100,
|
||||
100,
|
||||
63,
|
||||
100,
|
||||
100
|
||||
],
|
||||
"custom_group_rules": [],
|
||||
"expanded_rows": [],
|
||||
"filter_by_net_name": true,
|
||||
@@ -74,16 +108,18 @@
|
||||
"filter_text": "",
|
||||
"group_by_constraint": false,
|
||||
"group_by_netclass": false,
|
||||
"show_time_domain_details": false,
|
||||
"show_unconnected_nets": false,
|
||||
"show_zero_pad_nets": false,
|
||||
"sort_ascending": true,
|
||||
"sorting_column": -1
|
||||
"sorting_column": 0
|
||||
},
|
||||
"open_jobsets": [],
|
||||
"project": {
|
||||
"files": []
|
||||
},
|
||||
"schematic": {
|
||||
"hierarchy_collapsed": [],
|
||||
"selection_filter": {
|
||||
"graphics": true,
|
||||
"images": true,
|
||||
@@ -91,6 +127,7 @@
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pins": true,
|
||||
"ruleAreas": true,
|
||||
"symbols": true,
|
||||
"text": true,
|
||||
"wires": true
|
||||
|
||||
@@ -2,25 +2,264 @@
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {},
|
||||
"diff_pair_dimensions": [],
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_barcodes": false,
|
||||
"apply_defaults_to_fp_dimensions": false,
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": true,
|
||||
"text_position": 0,
|
||||
"units_format": 0
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 1.0,
|
||||
"height": 1.7,
|
||||
"width": 1.7
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [
|
||||
{
|
||||
"gap": 0.0,
|
||||
"via_gap": 0.0,
|
||||
"width": 0.0
|
||||
}
|
||||
],
|
||||
"drc_exclusions": [],
|
||||
"rules": {},
|
||||
"track_widths": [],
|
||||
"via_dimensions": []
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "error",
|
||||
"creepage": "error",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_filters_mismatch": "ignore",
|
||||
"footprint_symbol_field_mismatch": "warning",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_to_hole": "warning",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"mirrored_text_on_front_layer": "warning",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"missing_tuning_profile": "warning",
|
||||
"net_conflict": "warning",
|
||||
"nonmirrored_text_on_back_layer": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_on_edge_cuts": "error",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_angle": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_not_centered_on_via": "ignore",
|
||||
"track_on_post_machined_layer": "error",
|
||||
"track_segment_length": "error",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"tuning_profile_track_geometries": "ignore",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_groove_width": 0.0,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpthpad": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_onsmdpad": true,
|
||||
"td_ontrackend": false,
|
||||
"td_onvia": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [
|
||||
0.0,
|
||||
0.2,
|
||||
0.254,
|
||||
0.5,
|
||||
1.0,
|
||||
2.0,
|
||||
2.54,
|
||||
12.0
|
||||
],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [
|
||||
{
|
||||
"diameter": 0.0,
|
||||
"drill": 0.0
|
||||
}
|
||||
],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"bom_rev": "",
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
"mpn": "",
|
||||
"sch_revision": "1.0.0"
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"component_class_settings": {
|
||||
"assignments": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"sheet_component_classes": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
@@ -210,11 +449,14 @@
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"field_name_whitespace": "warning",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"ground_pin_not_ground": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"isolated_pin_label": "warning",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
@@ -237,6 +479,7 @@
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"stacked_pin_name": "warning",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"undefined_netclass": "error",
|
||||
@@ -246,8 +489,14 @@
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
"pinned_footprint_libs": [
|
||||
"RayineComponents",
|
||||
"converted"
|
||||
],
|
||||
"pinned_symbol_libs": [
|
||||
"RayineComponents",
|
||||
"converted"
|
||||
]
|
||||
},
|
||||
"meta": {
|
||||
"filename": "HeliosDAONE.kicad_pro",
|
||||
@@ -257,7 +506,7 @@
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"clearance": 0.254,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
@@ -268,25 +517,75 @@
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"track_width": 0.254,
|
||||
"tuning_profile": "",
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
},
|
||||
{
|
||||
"name": "Power In",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 8.0,
|
||||
"tuning_profile": ""
|
||||
},
|
||||
{
|
||||
"name": "Power Low",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 0,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 2.54,
|
||||
"tuning_profile": ""
|
||||
},
|
||||
{
|
||||
"name": "Power Out",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 1,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 6.0,
|
||||
"tuning_profile": ""
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 4
|
||||
"version": 5
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
"netclass_patterns": [
|
||||
{
|
||||
"netclass": "Power In",
|
||||
"pattern": "L"
|
||||
},
|
||||
{
|
||||
"netclass": "Power In",
|
||||
"pattern": "N"
|
||||
},
|
||||
{
|
||||
"netclass": "Power Out",
|
||||
"pattern": "/L?OUT"
|
||||
},
|
||||
{
|
||||
"netclass": "Power Out",
|
||||
"pattern": "/L?IN"
|
||||
},
|
||||
{
|
||||
"netclass": "Power Low",
|
||||
"pattern": "N_low"
|
||||
},
|
||||
{
|
||||
"netclass": "Power Low",
|
||||
"pattern": "L_low"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"plot": "out/",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
@@ -297,6 +596,10 @@
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"annotation": {
|
||||
"method": 0,
|
||||
"sort_order": 0
|
||||
},
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
@@ -368,6 +671,7 @@
|
||||
"sort_asc": true,
|
||||
"sort_field": "位号"
|
||||
},
|
||||
"bus_aliases": {},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
@@ -375,6 +679,7 @@
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
"hop_over_size_choice": 0,
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
@@ -398,6 +703,7 @@
|
||||
"net_format_name": "",
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"reuse_designators": true,
|
||||
"space_save_all_events": true,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
@@ -406,13 +712,28 @@
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
"subpart_id_separator": 0,
|
||||
"top_level_sheets": [
|
||||
{
|
||||
"filename": "HeliosDAONE.kicad_sch",
|
||||
"name": "HeliosDAONE",
|
||||
"uuid": "ef4a6f87-87d3-400e-b11f-0c7519b83474"
|
||||
}
|
||||
],
|
||||
"used_designators": "NT1,J4",
|
||||
"variants": []
|
||||
},
|
||||
"sheets": [
|
||||
[
|
||||
"ef4a6f87-87d3-400e-b11f-0c7519b83474",
|
||||
"Root"
|
||||
"HeliosDAONE"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
"text_variables": {},
|
||||
"tuning_profiles": {
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"tuning_profiles_impedance_geometric": []
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
4727
hardware/pcb/bom/bom.html
Normal file
4727
hardware/pcb/bom/bom.html
Normal file
File diff suppressed because one or more lines are too long
5
hardware/pcb/design-block-lib-table
Normal file
5
hardware/pcb/design-block-lib-table
Normal file
@@ -0,0 +1,5 @@
|
||||
(design_block_lib_table
|
||||
(version 7)
|
||||
(lib (name "converted.3dmodels") (type "KiCad") (uri "${KIPRJMOD}/library/converted.3dmodels") (options "") (descr ""))
|
||||
(lib (name "RayineComponents.3dmodels") (type "KiCad") (uri "${KIPRJMOD}/library/RayineComponents.3dmodels") (options "") (descr ""))
|
||||
)
|
||||
5
hardware/pcb/fp-lib-table
Normal file
5
hardware/pcb/fp-lib-table
Normal file
@@ -0,0 +1,5 @@
|
||||
(fp_lib_table
|
||||
(version 7)
|
||||
(lib (name "converted") (type "KiCad") (uri "${KIPRJMOD}/library/converted.pretty") (options "") (descr ""))
|
||||
(lib (name "RayineComponents") (type "KiCad") (uri "${KIPRJMOD}/library/RayineComponents.pretty") (options "") (descr ""))
|
||||
)
|
||||
22086
hardware/pcb/library/RayineComponents.3dmodels/IM1281B.step
Normal file
22086
hardware/pcb/library/RayineComponents.3dmodels/IM1281B.step
Normal file
File diff suppressed because it is too large
Load Diff
16500
hardware/pcb/library/RayineComponents.3dmodels/JQC-3FF-005-1Z.step
Normal file
16500
hardware/pcb/library/RayineComponents.3dmodels/JQC-3FF-005-1Z.step
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
27873
hardware/pcb/library/RayineComponents.3dmodels/RFID-RC522.STEP
Normal file
27873
hardware/pcb/library/RayineComponents.3dmodels/RFID-RC522.STEP
Normal file
File diff suppressed because it is too large
Load Diff
172931
hardware/pcb/library/RayineComponents.3dmodels/STM32F103C8T6 Blue Pill.step
Normal file
172931
hardware/pcb/library/RayineComponents.3dmodels/STM32F103C8T6 Blue Pill.step
Normal file
File diff suppressed because it is too large
Load Diff
17426
hardware/pcb/library/RayineComponents.3dmodels/TS-1187A-B-A-B.step
Normal file
17426
hardware/pcb/library/RayineComponents.3dmodels/TS-1187A-B-A-B.step
Normal file
File diff suppressed because it is too large
Load Diff
44805
hardware/pcb/library/RayineComponents.bak
Normal file
44805
hardware/pcb/library/RayineComponents.bak
Normal file
File diff suppressed because it is too large
Load Diff
5487
hardware/pcb/library/RayineComponents.kicad_sym
Normal file
5487
hardware/pcb/library/RayineComponents.kicad_sym
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,347 @@
|
||||
(footprint "ATK-MW8266D"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -7.5 -15.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "66aa11d5-8592-4413-b775-d71d584519b9")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "ATK-MW8266D"
|
||||
(at 0 16.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "5815b450-1250-4e76-9986-3ff62a23b5e8")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "http://www.openedv.com/docs/modules/iot/atk-esp.html"
|
||||
(at 0 19.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "0fb6cb36-8ca6-487d-8c0d-a111335a7659")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" "Alientek ESP8266 WiFi-uart module"
|
||||
(at 0 15.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "a47c0fec-7785-421c-aac7-7e389cab5ec0")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -7.68 11.85)
|
||||
(end -7.68 14.51)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "29d9255d-b015-4ad2-aab1-ffb5dabb1953")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.08 11.85)
|
||||
(end -7.68 11.85)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f257bc4a-4fe5-4492-b32f-388fdf1eed6a")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.08 11.85)
|
||||
(end 5.08 14.51)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "8d52cd63-d2a0-491c-a22a-a0bd0865a432")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.08 14.51)
|
||||
(end -7.68 14.51)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d943dfc9-983f-4ade-8939-62f08de85bee")
|
||||
)
|
||||
(fp_line
|
||||
(start 7.68 13.18)
|
||||
(end 7.68 14.51)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "5d19fb20-66bc-4484-b4d6-918e676e283e")
|
||||
)
|
||||
(fp_line
|
||||
(start 7.68 14.51)
|
||||
(end 6.35 14.51)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ff4f5a89-b3ca-4c6d-b958-0b0f32714ce7")
|
||||
)
|
||||
(fp_rect
|
||||
(start -9.5 -14.5)
|
||||
(end 9.5 14.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ede2f971-8bca-4848-a9d1-5c33c5a0958a")
|
||||
)
|
||||
(fp_rect
|
||||
(start -9.5 -14.5)
|
||||
(end 9.5 14.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "66ae0904-3f9c-4dfe-a4b7-6849aa993956")
|
||||
)
|
||||
(fp_line
|
||||
(start -7.62 11.91)
|
||||
(end 7.62 11.91)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "e28763b7-19c6-4e1f-9ceb-66fdf852892f")
|
||||
)
|
||||
(fp_line
|
||||
(start -7.62 14.45)
|
||||
(end -7.62 11.91)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "eabaf0a7-21f0-4c24-9bfd-ed96f8115773")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.985 14.45)
|
||||
(end -7.62 14.45)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "9a66edeb-1224-4244-a1d9-d81e0cceb48a")
|
||||
)
|
||||
(fp_line
|
||||
(start 7.62 11.91)
|
||||
(end 7.62 13.815)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "e6e525c7-36c9-4a03-95d4-95538bda6255")
|
||||
)
|
||||
(fp_line
|
||||
(start 7.62 13.815)
|
||||
(end 6.985 14.45)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "c8951726-0351-4973-93ca-d06384388a9f")
|
||||
)
|
||||
(fp_text user "ATK ESP8266"
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e0dd6b14-8a07-41e1-bf80-301e6b2dcdf6")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.125)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "Antenna"
|
||||
(at 0 -8 0)
|
||||
(unlocked yes)
|
||||
(layer "Cmts.User")
|
||||
(uuid "0f6ce970-b525-479d-ad3d-f11982c77192")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "KEEP-OUT ZONE"
|
||||
(at 0 -10.5 0)
|
||||
(unlocked yes)
|
||||
(layer "Cmts.User")
|
||||
(uuid "c0ab660f-d948-4406-911e-3c72f96f67c4")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 18 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "b75931b7-2a21-4ae4-b19c-43cca2d6041c")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at 6.35 13.18 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "18e8dd2e-b72c-4db4-932f-c11db201eebf")
|
||||
)
|
||||
(pad "2" thru_hole oval
|
||||
(at 3.81 13.18 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "6d442aff-a326-47ff-9bc9-8c42d38b71eb")
|
||||
)
|
||||
(pad "3" thru_hole oval
|
||||
(at 1.27 13.18 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "82e78d8f-8e07-4ce4-9659-582bda8e9df7")
|
||||
)
|
||||
(pad "4" thru_hole oval
|
||||
(at -1.27 13.18 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "cb113e47-fafd-4bf0-ba84-662108a9f031")
|
||||
)
|
||||
(pad "5" thru_hole oval
|
||||
(at -3.81 13.18 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "f411c3ad-52b0-4635-85e6-8add0231b772")
|
||||
)
|
||||
(pad "6" thru_hole oval
|
||||
(at -6.35 13.18 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "b6e7b4aa-4a6f-4fcb-9d38-766ecbc7e6d7")
|
||||
)
|
||||
(zone
|
||||
(net 0)
|
||||
(net_name "")
|
||||
(layers "F.Cu" "B.Cu" "In1.Cu" "In2.Cu" "In3.Cu" "In4.Cu" "In5.Cu" "In6.Cu"
|
||||
"In7.Cu" "In8.Cu" "In9.Cu" "In10.Cu" "In11.Cu" "In12.Cu" "In13.Cu" "In14.Cu"
|
||||
"In15.Cu" "In16.Cu" "In17.Cu" "In18.Cu" "In19.Cu" "In20.Cu" "In21.Cu"
|
||||
"In22.Cu" "In23.Cu" "In24.Cu" "In25.Cu" "In26.Cu" "In27.Cu" "In28.Cu"
|
||||
"In29.Cu" "In30.Cu"
|
||||
)
|
||||
(uuid "d80086d3-2edd-4077-a281-5f9dde62f7bf")
|
||||
(name "No routing")
|
||||
(hatch edge 0.5)
|
||||
(connect_pads
|
||||
(clearance 0)
|
||||
)
|
||||
(min_thickness 0.25)
|
||||
(filled_areas_thickness no)
|
||||
(keepout
|
||||
(tracks not_allowed)
|
||||
(vias not_allowed)
|
||||
(pads not_allowed)
|
||||
(copperpour not_allowed)
|
||||
(footprints not_allowed)
|
||||
)
|
||||
(placement
|
||||
(enabled no)
|
||||
(sheetname "")
|
||||
)
|
||||
(fill
|
||||
(thermal_gap 0.5)
|
||||
(thermal_bridge_width 0.5)
|
||||
)
|
||||
(polygon
|
||||
(pts
|
||||
(xy -9 -14) (xy -9 -5) (xy 9 -5) (xy 9 -14)
|
||||
)
|
||||
)
|
||||
)
|
||||
(group ""
|
||||
(uuid "9f51b370-845a-4d90-8d44-1d4e55cb4015")
|
||||
(members "18e8dd2e-b72c-4db4-932f-c11db201eebf" "29d9255d-b015-4ad2-aab1-ffb5dabb1953"
|
||||
"5d19fb20-66bc-4484-b4d6-918e676e283e" "6d442aff-a326-47ff-9bc9-8c42d38b71eb"
|
||||
"82e78d8f-8e07-4ce4-9659-582bda8e9df7" "8d52cd63-d2a0-491c-a22a-a0bd0865a432"
|
||||
"9a66edeb-1224-4244-a1d9-d81e0cceb48a" "b6e7b4aa-4a6f-4fcb-9d38-766ecbc7e6d7"
|
||||
"c8951726-0351-4973-93ca-d06384388a9f" "cb113e47-fafd-4bf0-ba84-662108a9f031"
|
||||
"d943dfc9-983f-4ade-8939-62f08de85bee" "e28763b7-19c6-4e1f-9ceb-66fdf852892f"
|
||||
"e6e525c7-36c9-4a03-95d4-95538bda6255" "eabaf0a7-21f0-4c24-9bfd-ed96f8115773"
|
||||
"f257bc4a-4fe5-4492-b32f-388fdf1eed6a" "f411c3ad-52b0-4635-85e6-8add0231b772"
|
||||
"ff4f5a89-b3ca-4c6d-b958-0b0f32714ce7"
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x06_P2.54mm_Vertical.wrl"
|
||||
(offset
|
||||
(xyz 6.36 -13.2 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 90)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,434 @@
|
||||
(footprint "ESP32_DevKitC_RYMCU"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 2.54 -1.27 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f90805cc-4d4b-41fe-be1f-935a6ccd7187")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "ESP32_DevKitC_RYMCU"
|
||||
(at 13.95 27.36 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "073466aa-48f6-40ac-959a-562ae10316f4")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 13.95 26.36 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "77aad992-a83f-4438-956f-713db2195079")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 13.95 26.36 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "8145992e-dad2-4c89-a3c7-32f709709fbe")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_rect
|
||||
(start 0 0)
|
||||
(end 27.9 54.72)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "68b0d5d5-8795-47a1-ae4e-291796a3f18e")
|
||||
)
|
||||
(fp_rect
|
||||
(start 0 6.52)
|
||||
(end 27.9 54.72)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "410419f6-9a84-431d-b0fe-ea63c5dab233")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 13.95 28.86 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "b28476b5-8745-46f2-84ff-ed88578518c6")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole circle
|
||||
(at 1.27 7.62)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "4d908c32-ee53-4cd8-8dd8-c83526125db9")
|
||||
)
|
||||
(pad "2" thru_hole circle
|
||||
(at 1.27 10.16)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "ecdf825f-df08-4035-8d59-cb6ed4c24beb")
|
||||
)
|
||||
(pad "3" thru_hole circle
|
||||
(at 1.27 12.7)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "09cd60d4-d6d7-4cf1-a67c-610276979a7e")
|
||||
)
|
||||
(pad "4" thru_hole circle
|
||||
(at 1.27 15.24)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "12d78e63-c037-4eec-b366-5d94448f5d25")
|
||||
)
|
||||
(pad "5" thru_hole circle
|
||||
(at 1.27 17.78)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "06d3a89d-fe67-4daa-84f2-6bd31d59e5ef")
|
||||
)
|
||||
(pad "6" thru_hole circle
|
||||
(at 1.27 20.32)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "d4a098e4-c1e5-43aa-8e75-4228d19e6511")
|
||||
)
|
||||
(pad "7" thru_hole circle
|
||||
(at 1.27 22.86)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "16512920-dc5f-4c6c-9b0c-27510285db55")
|
||||
)
|
||||
(pad "8" thru_hole circle
|
||||
(at 1.27 25.4)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "45aac27f-9f05-4f81-ad09-0714c25504c8")
|
||||
)
|
||||
(pad "9" thru_hole circle
|
||||
(at 1.27 27.94)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "7a997b1c-f21f-46d3-9347-959ee7d9f1de")
|
||||
)
|
||||
(pad "10" thru_hole circle
|
||||
(at 1.27 30.48)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "57e29aee-4c51-4516-bbfa-a8bd80a4c00c")
|
||||
)
|
||||
(pad "11" thru_hole circle
|
||||
(at 1.27 33.02)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "ea89ec96-b8c5-4335-bb7e-597c316eff94")
|
||||
)
|
||||
(pad "12" thru_hole circle
|
||||
(at 1.27 35.56)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "fd2e9e48-33f4-497d-9ffb-12eed7bccfe2")
|
||||
)
|
||||
(pad "13" thru_hole circle
|
||||
(at 1.27 38.1)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "4670b0d7-cb62-4979-89e0-e63d08cfd26d")
|
||||
)
|
||||
(pad "14" thru_hole circle
|
||||
(at 1.27 40.64)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "227f099d-a257-42c4-bd36-cd213080e3c2")
|
||||
)
|
||||
(pad "15" thru_hole circle
|
||||
(at 1.27 43.18)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "a3850576-c175-4b64-94dd-d75b5cb187f9")
|
||||
)
|
||||
(pad "16" thru_hole circle
|
||||
(at 1.27 45.72)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "ee7ad67b-e7ae-4d9f-beb8-a352c3eaf871")
|
||||
)
|
||||
(pad "17" thru_hole circle
|
||||
(at 1.27 48.26)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "6c35dae6-968e-49f8-b904-1fac85e3393a")
|
||||
)
|
||||
(pad "18" thru_hole circle
|
||||
(at 1.27 50.8)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "0cfb47e4-44a9-4816-b89a-579900cee929")
|
||||
)
|
||||
(pad "19" thru_hole circle
|
||||
(at 1.27 53.34)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8916e867-5855-460d-a74f-a27707253b96")
|
||||
)
|
||||
(pad "20" thru_hole circle
|
||||
(at 26.67 7.62)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "129091dd-4697-48d5-b76e-dd59a66c0ad5")
|
||||
)
|
||||
(pad "21" thru_hole circle
|
||||
(at 26.67 10.16)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "919d2459-ee68-45a1-9d9d-ba99370a6dc2")
|
||||
)
|
||||
(pad "22" thru_hole circle
|
||||
(at 26.67 12.7)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "24e6209d-35c1-42c3-af63-bf831ee21d7e")
|
||||
)
|
||||
(pad "23" thru_hole circle
|
||||
(at 26.67 15.24)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "b2d91fe8-e1de-4bfe-bbee-aa3bef091b6d")
|
||||
)
|
||||
(pad "24" thru_hole circle
|
||||
(at 26.67 17.78)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "734323f3-75ac-46f9-9079-1211d7454270")
|
||||
)
|
||||
(pad "25" thru_hole circle
|
||||
(at 26.67 20.32)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "18cac653-2b82-47ec-aa9f-69d70415c651")
|
||||
)
|
||||
(pad "26" thru_hole circle
|
||||
(at 26.67 22.86)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "09fc6e3e-9085-4ca5-8e2f-11df51d2fcd5")
|
||||
)
|
||||
(pad "27" thru_hole circle
|
||||
(at 26.67 25.4)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "2dbeceec-2c22-458c-9750-f8127d7421ea")
|
||||
)
|
||||
(pad "28" thru_hole circle
|
||||
(at 26.67 27.94)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "b9dc4bd4-b2c1-4a09-b6bc-d9d7c8f2afd6")
|
||||
)
|
||||
(pad "29" thru_hole circle
|
||||
(at 26.67 30.48)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "d0e31f52-bb07-4ee5-8282-653990482522")
|
||||
)
|
||||
(pad "30" thru_hole circle
|
||||
(at 26.67 33.02)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "5b9d293c-3fd1-454c-9819-d9a844c69a07")
|
||||
)
|
||||
(pad "31" thru_hole circle
|
||||
(at 26.67 35.56)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "bab5e48e-f53b-4398-a169-4ed56a7bb1ec")
|
||||
)
|
||||
(pad "32" thru_hole circle
|
||||
(at 26.67 38.1)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "e94dc7d1-3da4-4b89-bbad-fae698e32613")
|
||||
)
|
||||
(pad "33" thru_hole circle
|
||||
(at 26.67 40.64)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "71dd4fab-106d-460f-8d64-b2c8b23ef31b")
|
||||
)
|
||||
(pad "34" thru_hole circle
|
||||
(at 26.67 43.18)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "a2aeac4c-6dbc-4893-baaf-38dd95940827")
|
||||
)
|
||||
(pad "35" thru_hole circle
|
||||
(at 26.67 45.72)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8aba11e9-b351-494b-a249-87bf14dce163")
|
||||
)
|
||||
(pad "36" thru_hole circle
|
||||
(at 26.67 48.26)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "d2497308-c801-4a35-b253-bd28976a86db")
|
||||
)
|
||||
(pad "37" thru_hole circle
|
||||
(at 26.67 50.8)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8d2f081f-d314-4943-b49a-465d242bc0e2")
|
||||
)
|
||||
(pad "38" thru_hole circle
|
||||
(at 26.67 53.34)
|
||||
(size 1.8 1.8)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "a8230a12-5c94-4632-a656-9c3fe10f121a")
|
||||
)
|
||||
(zone
|
||||
(net 0)
|
||||
(net_name "")
|
||||
(layers "F.Cu" "B.Cu" "In1.Cu" "In2.Cu" "In3.Cu" "In4.Cu" "In5.Cu" "In6.Cu"
|
||||
"In7.Cu" "In8.Cu" "In9.Cu" "In10.Cu" "In11.Cu" "In12.Cu" "In13.Cu" "In14.Cu"
|
||||
"In15.Cu" "In16.Cu" "In17.Cu" "In18.Cu" "In19.Cu" "In20.Cu" "In21.Cu"
|
||||
"In22.Cu" "In23.Cu" "In24.Cu" "In25.Cu" "In26.Cu" "In27.Cu" "In28.Cu"
|
||||
"In29.Cu" "In30.Cu"
|
||||
)
|
||||
(uuid "09d3fc69-13c2-4142-9898-59b96eeaa21d")
|
||||
(name "No routing")
|
||||
(hatch edge 0.5)
|
||||
(connect_pads
|
||||
(clearance 0)
|
||||
)
|
||||
(min_thickness 0.25)
|
||||
(filled_areas_thickness no)
|
||||
(keepout
|
||||
(tracks not_allowed)
|
||||
(vias not_allowed)
|
||||
(pads not_allowed)
|
||||
(copperpour not_allowed)
|
||||
(footprints not_allowed)
|
||||
)
|
||||
(placement
|
||||
(enabled no)
|
||||
(sheetname "")
|
||||
)
|
||||
(fill
|
||||
(thermal_gap 0.5)
|
||||
(thermal_bridge_width 0.5)
|
||||
)
|
||||
(polygon
|
||||
(pts
|
||||
(xy 0 0) (xy 27.9 0) (xy 27.9 6.52) (xy 0 6.52)
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
782
hardware/pcb/library/RayineComponents.pretty/IM1281B.kicad_mod
Normal file
782
hardware/pcb/library/RayineComponents.pretty/IM1281B.kicad_mod
Normal file
@@ -0,0 +1,782 @@
|
||||
(footprint "IM1281B"
|
||||
(version 20260206)
|
||||
(generator "pcbnew")
|
||||
(generator_version "10.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 2 -26.4 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "64dcfe44-f2d6-4a35-b887-32cafb1b4e0e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "IM1281B"
|
||||
(at 21.50945 0.95 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "a3c2f98d-50b1-4330-b82f-8b4b0df286c9")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "8fbb7397-470a-426e-a7b1-2d7e1829b42a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "6335b030-9bee-428a-ab70-e5166d47724a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(duplicate_pad_numbers_are_jumpers no)
|
||||
(fp_line
|
||||
(start 0.0254 -25.4762)
|
||||
(end 43.2054 -25.4762)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "78884b96-a5bc-4126-b702-806fe1e7449a")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.0254 -0.0508)
|
||||
(end 0.0254 -25.4762)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7b6f2ce5-2cfb-4b35-8f5e-1b3a26d0f148")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.0254 -0.0508)
|
||||
(end 43.2054 -0.0508)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "23dd1778-fe54-4eb2-8326-fcd515989e5f")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.0508 -23.6728)
|
||||
(end 24.257 -23.6728)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d15eb9cb-6436-4705-8bbd-549bfbb5fdb4")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.0508 -10.7188)
|
||||
(end 0.0508 -23.5458)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b010ec4f-603e-4be4-bf1f-f952c937863e")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.0508 -10.7188)
|
||||
(end 24.257 -10.7188)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "eec1225e-7f00-45d7-97ee-0c170dbdf4df")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.4135 -10.795)
|
||||
(end 18.3261 -10.795)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "12d3f410-196c-47b4-9af2-d2130b5c50c6")
|
||||
)
|
||||
(fp_line
|
||||
(start 12.2428 -10.7188)
|
||||
(end 12.2428 -23.6728)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4853787f-4ad4-44b9-9fb7-d83ddd356679")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.257 -20.0025)
|
||||
(end 24.257 -23.6728)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0a0c00d4-8d91-449f-9586-5caecebf77f8")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.257 -14.3891)
|
||||
(end 24.257 -20.0025)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "23820f7e-d206-418c-8621-e8c8416e1f7e")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.257 -10.7188)
|
||||
(end 24.257 -14.3891)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "47a1c6bb-3a19-4309-b7ef-4de05f966458")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.7904 -22.86)
|
||||
(end 24.7904 -25.0698)
|
||||
(stroke
|
||||
(width 0.127)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "aaf60d37-3734-496c-8ab8-a952b3323a24")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.7904 -22.86)
|
||||
(end 30.5562 -22.86)
|
||||
(stroke
|
||||
(width 0.127)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "67208698-3f2e-4f00-8fee-be73bf7c426e")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.8158 -25.0952)
|
||||
(end 30.5562 -25.0952)
|
||||
(stroke
|
||||
(width 0.127)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7746d09e-a8ba-494a-8475-9f0d7671aa42")
|
||||
)
|
||||
(fp_line
|
||||
(start 30.5562 -22.86)
|
||||
(end 30.5562 -25.0952)
|
||||
(stroke
|
||||
(width 0.127)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ff938a1c-842b-44ce-a384-8ba6af898acf")
|
||||
)
|
||||
(fp_line
|
||||
(start 30.8578 -1.3716)
|
||||
(end 30.8578 -21.1836)
|
||||
(stroke
|
||||
(width 0.2032)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3175ef0d-f4e9-4210-8d8a-b1eb6082cd9f")
|
||||
)
|
||||
(fp_line
|
||||
(start 30.8578 -1.3462)
|
||||
(end 41.3734 -1.3462)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "8f6cb92a-4441-4583-92df-1385f3097def")
|
||||
)
|
||||
(fp_line
|
||||
(start 30.934 -21.209)
|
||||
(end 41.3734 -21.209)
|
||||
(stroke
|
||||
(width 0.2032)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "65d9d1e8-1222-41b1-9d4e-957422affbb0")
|
||||
)
|
||||
(fp_line
|
||||
(start 32.5088 -2.7544)
|
||||
(end 32.5088 -3.2304)
|
||||
(stroke
|
||||
(width 1.524)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e695a6ba-dc13-4114-b473-6664a55799f0")
|
||||
)
|
||||
(fp_line
|
||||
(start 35.2552 -22.86)
|
||||
(end 35.2552 -25.0698)
|
||||
(stroke
|
||||
(width 0.127)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "59f774ac-864f-42a8-8ee6-ce66ee596e97")
|
||||
)
|
||||
(fp_line
|
||||
(start 35.2552 -22.86)
|
||||
(end 41.021 -22.86)
|
||||
(stroke
|
||||
(width 0.127)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "246a3996-2fa4-4332-a323-1f7a8b596da9")
|
||||
)
|
||||
(fp_line
|
||||
(start 35.2806 -25.0952)
|
||||
(end 41.021 -25.0952)
|
||||
(stroke
|
||||
(width 0.127)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3f4529c9-cb25-4d29-8013-15a3fa9dac36")
|
||||
)
|
||||
(fp_line
|
||||
(start 39.751 -2.7544)
|
||||
(end 39.751 -3.2304)
|
||||
(stroke
|
||||
(width 1.524)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "11764331-a69b-4c19-a687-3bbbc478164e")
|
||||
)
|
||||
(fp_line
|
||||
(start 41.021 -22.86)
|
||||
(end 41.021 -25.0952)
|
||||
(stroke
|
||||
(width 0.127)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6d3dc788-80ab-4309-92c3-e26fc08e90da")
|
||||
)
|
||||
(fp_line
|
||||
(start 41.3734 -1.3462)
|
||||
(end 41.3734 -21.1582)
|
||||
(stroke
|
||||
(width 0.2032)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6f59f528-d7f0-417e-a556-5cd661fb7373")
|
||||
)
|
||||
(fp_line
|
||||
(start 43.2054 -0.0508)
|
||||
(end 43.2054 -25.4762)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c4018832-9820-435b-a407-1a4ea93e2742")
|
||||
)
|
||||
(fp_arc
|
||||
(start 33.4902 -3.6576)
|
||||
(mid 34.7902 -4.9576)
|
||||
(end 36.0902 -3.6576)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e8f6dc9e-2e11-4d09-b669-2237f0f503ba")
|
||||
)
|
||||
(fp_arc
|
||||
(start 36.0394 -18.923)
|
||||
(mid 34.7394 -17.623)
|
||||
(end 33.4394 -18.923)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "125aef75-4ecd-4f71-be39-b8049f6208fd")
|
||||
)
|
||||
(fp_arc
|
||||
(start 36.2842 -3.5814)
|
||||
(mid 37.5842 -4.8814)
|
||||
(end 38.8842 -3.5814)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "9f141317-b9c0-4ad5-87e7-4b67f0cc67ae")
|
||||
)
|
||||
(fp_arc
|
||||
(start 38.6302 -18.9992)
|
||||
(mid 37.3302 -17.6992)
|
||||
(end 36.0302 -18.9992)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "5519400f-0008-4555-bfba-54498406bdb9")
|
||||
)
|
||||
(fp_circle
|
||||
(center 2.7428 -12.1968)
|
||||
(end 2.7428 -12.821797)
|
||||
(stroke
|
||||
(width 1.249995)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "8376cb43-0a88-4b26-a0ab-4c2947355e91")
|
||||
)
|
||||
(fp_circle
|
||||
(center 4.6228 -22.6568)
|
||||
(end 4.6228 -23.2283)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "cbc5d1ab-6216-4bf4-a543-085c1bf1090f")
|
||||
)
|
||||
(fp_circle
|
||||
(center 19.8628 -22.6568)
|
||||
(end 19.8628 -23.2283)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "cec98098-0d30-4d40-bad2-4bac6a513343")
|
||||
)
|
||||
(fp_circle
|
||||
(center 21.7428 -12.2476)
|
||||
(end 21.7428 -12.872597)
|
||||
(stroke
|
||||
(width 1.249995)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ea5570ea-661a-42b4-a0ec-db5b5899473f")
|
||||
)
|
||||
(fp_circle
|
||||
(center 32.5088 -19.558)
|
||||
(end 32.5088 -20.058)
|
||||
(stroke
|
||||
(width 1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "29d1e83a-0d7c-4433-a176-07b5432c538d")
|
||||
)
|
||||
(fp_circle
|
||||
(center 39.751 -19.558)
|
||||
(end 39.751 -20.058)
|
||||
(stroke
|
||||
(width 1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a30d5dcb-f4ad-4015-9249-6dae143e49d5")
|
||||
)
|
||||
(fp_line
|
||||
(start 15.5702 -3.2258)
|
||||
(end 28.2702 -3.2258)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "c3b7a7a2-9918-4489-ac60-aeb288b26e12")
|
||||
)
|
||||
(fp_line
|
||||
(start 15.5702 -0.6858)
|
||||
(end 15.5702 -3.2258)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "63649af0-d292-4635-8243-482452db3006")
|
||||
)
|
||||
(fp_line
|
||||
(start 15.5702 -0.6858)
|
||||
(end 28.2702 -0.6858)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "3b6f7fbd-0f83-46e0-aa86-f1b017350e58")
|
||||
)
|
||||
(fp_line
|
||||
(start 18.1102 -0.6858)
|
||||
(end 18.1102 -3.2258)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "280341ed-5cb5-46dd-a51b-dba04ac63c80")
|
||||
)
|
||||
(fp_line
|
||||
(start 27.8892 -25.1968)
|
||||
(end 38.0492 -25.1968)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "f72d4112-e2c0-4496-8456-19713316d2d0")
|
||||
)
|
||||
(fp_line
|
||||
(start 27.8892 -22.6568)
|
||||
(end 27.8892 -25.1968)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "8a0903d1-3729-4ced-b959-e9c897d95e8a")
|
||||
)
|
||||
(fp_line
|
||||
(start 27.8892 -22.6568)
|
||||
(end 38.0492 -22.6568)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "e350d926-6e4c-4ffe-abe0-b8052ec838fe")
|
||||
)
|
||||
(fp_line
|
||||
(start 28.2702 -0.6858)
|
||||
(end 28.2702 -3.2258)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "860e4939-a57c-4b5e-8416-1fe9a8f0bda2")
|
||||
)
|
||||
(fp_line
|
||||
(start 30.4292 -22.6568)
|
||||
(end 30.4292 -25.1968)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "2c63376d-0a70-4b3b-9349-7fb06146bd2f")
|
||||
)
|
||||
(fp_line
|
||||
(start 38.0492 -22.6568)
|
||||
(end 38.0492 -25.1968)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "d1bd7ea8-daa2-4f27-a885-f67727ab00db")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 -27.94)
|
||||
(end 43.18 -27.94)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "3467d99d-f38c-46e9-90ba-e80fe0dbf331")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.0254 2.54)
|
||||
(end 0 -27.94)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "bad5571f-dbb4-45fd-a0f0-58af7898db1d")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.0254 2.54)
|
||||
(end 43.2054 2.54)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "2f8f90f9-84b0-490f-b3c8-55fd12e02cc2")
|
||||
)
|
||||
(fp_line
|
||||
(start 43.2054 2.54)
|
||||
(end 43.2054 -27.94)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "5d6c5e51-51d7-4d05-bbb0-997f44835a22")
|
||||
)
|
||||
(fp_text user "IM1281B"
|
||||
(at 0.4 -0.8 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ca17ac62-ec7d-4f09-a6f0-a8a516a35dc5")
|
||||
(effects
|
||||
(font
|
||||
(size 1.524 1.524)
|
||||
(thickness 0.254)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "CT41A"
|
||||
(at 5.207 -16.92 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f156c8e3-8e13-43ec-98eb-4dd80a9703df")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "PF"
|
||||
(at 17.5 -3.5 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "57b26baa-29b8-422a-912b-f19435d21b00")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "TX"
|
||||
(at 20 -3.5 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0ba7e37f-3836-4f9b-a524-db17315330cc")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "RX"
|
||||
(at 22.5 -3.5 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e7b34392-89b0-417d-b3f9-df1be527034c")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "VCC"
|
||||
(at 25 -3.5 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "49854185-6946-4cd1-a81e-c84d143a15e3")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "VN"
|
||||
(at 25.527 -23.136225 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7e156e8e-6e66-40f7-9a90-bde506beb94a")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.2032)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "GND"
|
||||
(at 27.5 -3.5 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "be6ff3ee-264e-4c26-ad69-f5257dd0bfcd")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "PT02A"
|
||||
(at 35.234855 -14.478 270)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7985a8cf-81d4-4477-8edd-a3ca9b15abd0")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "VL"
|
||||
(at 38.1508 -23.187025 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "cab479bc-5750-4d2f-9c50-833fd8c45256")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.2032)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at 16.8402 -1.9558)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "c92c40b9-d8e2-4357-9eb3-26b65b52f505")
|
||||
)
|
||||
(pad "2" thru_hole circle
|
||||
(at 19.3802 -1.9558)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(thermal_bridge_angle 90)
|
||||
(uuid "d8d203a9-0e03-48c3-bdef-54321542302c")
|
||||
)
|
||||
(pad "3" thru_hole circle
|
||||
(at 21.9202 -1.9558)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(thermal_bridge_angle 90)
|
||||
(uuid "5d10b803-1b50-4f77-b630-8da92f9a07ba")
|
||||
)
|
||||
(pad "4" thru_hole circle
|
||||
(at 24.4602 -1.9558)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(thermal_bridge_angle 90)
|
||||
(uuid "8a04be09-560f-4532-9bde-2026ede08105")
|
||||
)
|
||||
(pad "5" thru_hole circle
|
||||
(at 27.0002 -1.9558)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(thermal_bridge_angle 90)
|
||||
(uuid "57fd2c25-4857-44ec-a4f3-9eb925de9bb8")
|
||||
)
|
||||
(pad "6" thru_hole oval
|
||||
(at 36.7792 -23.9268)
|
||||
(size 1.5 1.778)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "4fb68f0c-d934-4d77-aa82-127403c2fba5")
|
||||
)
|
||||
(pad "7" thru_hole rect
|
||||
(at 29.1592 -23.9268)
|
||||
(size 1.5 1.778)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "771bc945-978d-4474-9dcd-ff9533cf13ff")
|
||||
)
|
||||
(pad "8" thru_hole circle
|
||||
(at 12.2428 -31)
|
||||
(size 5.08 5.08)
|
||||
(drill 2.54)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "acbaff89-4fc5-47a0-867c-b9b342ef0a23")
|
||||
)
|
||||
(pad "9" thru_hole circle
|
||||
(at 12.2428 6)
|
||||
(size 5.08 5.08)
|
||||
(drill 2.54)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "cf2e8f07-3b40-4103-9d14-4fa6eb3d9431")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${USER_3DMODEL}/IM1281B.step"
|
||||
(offset
|
||||
(xyz 36.8 23.5 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 0.98 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -0)
|
||||
)
|
||||
)
|
||||
)
|
||||
868
hardware/pcb/library/RayineComponents.pretty/IM1281C.kicad_mod
Normal file
868
hardware/pcb/library/RayineComponents.pretty/IM1281C.kicad_mod
Normal file
@@ -0,0 +1,868 @@
|
||||
(footprint "IM1281C"
|
||||
(version 20260206)
|
||||
(generator "pcbnew")
|
||||
(generator_version "10.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 2.286 -40.132 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fe9168ac-555b-4db2-a1de-5ac53b9e4f31")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "IM1281C"
|
||||
(at 3.556 1.27 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "9dd90b1f-14b2-4f02-9fc3-52657c6e894e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "f7ed3c86-805a-4f21-b584-50b266020746")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 93.768545 -18.6182 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "49a35a34-9e29-4a94-be84-1df5b86b479f")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(duplicate_pad_numbers_are_jumpers no)
|
||||
(fp_line
|
||||
(start 0 -35.5)
|
||||
(end 24.5 -35.5)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "489d509f-82cd-424c-a1f5-ff13d5b6e7bc")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 -22.5)
|
||||
(end 0 -35.5)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e5ada2d1-d524-4978-bb94-eb5eb682e98f")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 -22.5)
|
||||
(end 24.5 -22.5)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b9989d2c-ebe7-48db-b75d-b77794e32f31")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 0)
|
||||
(end 0 -36.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "9349c9ae-2a75-424b-836c-4b3604b8f928")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 0)
|
||||
(end 60 0)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4e4c1075-1579-4a09-a4ad-a0edf07f58ec")
|
||||
)
|
||||
(fp_line
|
||||
(start 12.25 -35.5)
|
||||
(end 12.25 -22.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "11b754fe-3517-4e11-ab23-8ee682e23053")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.5 -35.5)
|
||||
(end 49 -35.5)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e7f880a2-b43d-4b5f-97eb-c2287c576671")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.5 -22.5)
|
||||
(end 24.5 -35.5)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "03583d2c-30a2-4b56-9d4d-5d6f10f08821")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.5 -22.5)
|
||||
(end 24.5 -35.5)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "160171c3-0cf4-4d9c-a667-c01259f04703")
|
||||
)
|
||||
(fp_line
|
||||
(start 24.5 -22.5)
|
||||
(end 49 -22.5)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d19388fa-6212-4efd-b389-bb946568beeb")
|
||||
)
|
||||
(fp_line
|
||||
(start 36.75 -35.5)
|
||||
(end 36.75 -22.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "467d1a9c-867e-4311-8ff7-20e6bdf5cbac")
|
||||
)
|
||||
(fp_line
|
||||
(start 49 -22.5)
|
||||
(end 49 -35.5)
|
||||
(stroke
|
||||
(width 0.3048)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3214d7d4-5a1c-4bc2-a709-076868432a31")
|
||||
)
|
||||
(fp_line
|
||||
(start 49.05 -35.33)
|
||||
(end 49.05 -32.67)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "bcae564f-9ec5-4e47-b760-1e0aeaa830c0")
|
||||
)
|
||||
(fp_line
|
||||
(start 49.5 -0.5)
|
||||
(end 49.5 -19.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3a9ce882-f371-42c5-8de9-1f771c8d50a4")
|
||||
)
|
||||
(fp_line
|
||||
(start 49.5 -0.5)
|
||||
(end 59.5 -0.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "47001e29-3045-49d3-8af6-b3896a07a016")
|
||||
)
|
||||
(fp_line
|
||||
(start 56.73 -35.33)
|
||||
(end 49.05 -35.33)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "edee6b7e-4087-456a-a459-23fddc868ddc")
|
||||
)
|
||||
(fp_line
|
||||
(start 56.73 -35.33)
|
||||
(end 56.73 -32.67)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "53ff4055-0678-40bb-a55f-697bfb53c34c")
|
||||
)
|
||||
(fp_line
|
||||
(start 56.73 -32.67)
|
||||
(end 49.05 -32.67)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "df0a49e8-0aae-4d58-9810-5824bd16bc23")
|
||||
)
|
||||
(fp_line
|
||||
(start 59.33 -34)
|
||||
(end 59.33 -32.67)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1c52accb-2eea-455d-a80a-36be67b2bd4f")
|
||||
)
|
||||
(fp_line
|
||||
(start 59.33 -32.67)
|
||||
(end 58 -32.67)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "71dced72-9823-4a4a-a450-d2f1cfbd660f")
|
||||
)
|
||||
(fp_line
|
||||
(start 59.5 -19.5)
|
||||
(end 49.5 -19.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b75b2f0b-c6c8-43f7-ac8d-b646cf8d9bb1")
|
||||
)
|
||||
(fp_line
|
||||
(start 59.5 -19.5)
|
||||
(end 59.5 -0.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0c8aa3a3-82c1-4195-9532-fcc87ee2bbdb")
|
||||
)
|
||||
(fp_line
|
||||
(start 60 -36.5)
|
||||
(end 0 -36.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "5bf58fc1-3468-4476-9773-54819969c74d")
|
||||
)
|
||||
(fp_line
|
||||
(start 60 -36.5)
|
||||
(end 60 0)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a4639be6-14cf-4f4b-9544-6465dfa33c0b")
|
||||
)
|
||||
(fp_arc
|
||||
(start 52.0226 -2.4308)
|
||||
(mid 53.3226 -3.7308)
|
||||
(end 54.6226 -2.4308)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "89c113b6-dc01-4e29-a793-dcb6cf11624b")
|
||||
)
|
||||
(fp_arc
|
||||
(start 54.3866 -17.493)
|
||||
(mid 53.0866 -16.193)
|
||||
(end 51.7866 -17.493)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6300f23f-b2bd-42a8-be17-731520198b20")
|
||||
)
|
||||
(fp_arc
|
||||
(start 54.6134 -2.507)
|
||||
(mid 55.9134 -3.807)
|
||||
(end 57.2134 -2.507)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2dbc243f-c315-4353-bbcb-beb71e9dc1b2")
|
||||
)
|
||||
(fp_arc
|
||||
(start 56.9774 -17.5692)
|
||||
(mid 55.6774 -16.2692)
|
||||
(end 54.3774 -17.5692)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "9de87d0e-83f7-4d7a-9634-fdc90a56e740")
|
||||
)
|
||||
(fp_circle
|
||||
(center 1.9685 -23.8335)
|
||||
(end 1.9685 -24.405)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "99ebe313-2cb7-4f4f-9b16-3785218e8567")
|
||||
)
|
||||
(fp_circle
|
||||
(center 4.5085 -33.9935)
|
||||
(end 4.5085 -34.565)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "9da61688-8e13-4097-8bf9-fd47aa1634ea")
|
||||
)
|
||||
(fp_circle
|
||||
(center 20.066 -33.9935)
|
||||
(end 20.066 -33.422)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ef708353-0c26-45b0-84ec-0486b8ba0d65")
|
||||
)
|
||||
(fp_circle
|
||||
(center 22.606 -23.8335)
|
||||
(end 22.606 -23.262)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1ca6b705-205f-4af3-835e-a691a242279d")
|
||||
)
|
||||
(fp_circle
|
||||
(center 26.4685 -23.8335)
|
||||
(end 26.4685 -24.405)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3e1c4ff6-2042-490c-8202-c834ad93722e")
|
||||
)
|
||||
(fp_circle
|
||||
(center 29.0085 -33.9935)
|
||||
(end 29.0085 -34.565)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b42084ff-ef54-4ca1-933c-39c88d1f67ca")
|
||||
)
|
||||
(fp_circle
|
||||
(center 44.566 -33.9935)
|
||||
(end 44.566 -33.422)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e6e5c0da-cf6e-496b-8301-f7f16093c69c")
|
||||
)
|
||||
(fp_circle
|
||||
(center 47.106 -23.8335)
|
||||
(end 47.106 -23.262)
|
||||
(stroke
|
||||
(width 1.143)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "bfbe3ccd-0d22-490b-bbf3-ad79b629e49a")
|
||||
)
|
||||
(fp_circle
|
||||
(center 50.856 -18.128)
|
||||
(end 50.856 -18.628)
|
||||
(stroke
|
||||
(width 1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "da7c8701-a360-45f9-845e-e2cb46d20874")
|
||||
)
|
||||
(fp_circle
|
||||
(center 50.9018 -1.872)
|
||||
(end 50.9018 -1.372)
|
||||
(stroke
|
||||
(width 1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a5dcfb95-36bc-41c6-aea7-bc2975e911e3")
|
||||
)
|
||||
(fp_circle
|
||||
(center 58.0982 -18.128)
|
||||
(end 58.0982 -18.628)
|
||||
(stroke
|
||||
(width 1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3542dab8-339a-4022-bdd1-79774d666177")
|
||||
)
|
||||
(fp_circle
|
||||
(center 58.144 -1.872)
|
||||
(end 58.144 -1.372)
|
||||
(stroke
|
||||
(width 1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ab04b3c2-a95f-408b-8db7-3f0fd7f3d877")
|
||||
)
|
||||
(fp_line
|
||||
(start 24 -3.81)
|
||||
(end 36.7 -3.81)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "4a3a57fe-da54-47fb-a6e1-d64563829023")
|
||||
)
|
||||
(fp_line
|
||||
(start 24 -1.27)
|
||||
(end 24 -3.81)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "cf12f589-67c7-4c3f-b72e-b641d34e61d8")
|
||||
)
|
||||
(fp_line
|
||||
(start 24 -1.27)
|
||||
(end 36.7 -1.27)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "0f6f8de4-e21c-4300-9139-286719ff6e92")
|
||||
)
|
||||
(fp_line
|
||||
(start 26.54 -1.27)
|
||||
(end 26.54 -3.81)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "ae87a6a7-135b-4262-916a-d0541c7baa53")
|
||||
)
|
||||
(fp_line
|
||||
(start 36.7 -1.27)
|
||||
(end 36.7 -3.81)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "5fc596d8-8d04-41b7-8942-7e6d25f0a0b0")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 -39.04)
|
||||
(end 0 2.54)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "187dd031-6961-4533-a35b-6fc28403898f")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 -39.04)
|
||||
(end 60 -39.04)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "e9b5faa1-11e2-4f9b-a8be-270b9abf26ea")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 2.54)
|
||||
(end 60 2.54)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "4237a21b-0fe2-44ef-b265-71ea07f98355")
|
||||
)
|
||||
(fp_line
|
||||
(start 60 -39.04)
|
||||
(end 60 2.54)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "0ef89fde-ae51-4ba4-b782-840c57db4561")
|
||||
)
|
||||
(fp_line
|
||||
(start 49.11 -35.27)
|
||||
(end 59.27 -35.27)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "5238e886-318f-44d2-9760-fa898cef4e07")
|
||||
)
|
||||
(fp_line
|
||||
(start 49.11 -32.73)
|
||||
(end 49.11 -35.27)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "45d3f4d6-48c2-4979-9232-fc1622427a2f")
|
||||
)
|
||||
(fp_line
|
||||
(start 58.635 -32.73)
|
||||
(end 49.11 -32.73)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "9d410165-de66-4660-9dfb-80f41fd66f65")
|
||||
)
|
||||
(fp_line
|
||||
(start 59.27 -35.27)
|
||||
(end 59.27 -33.365)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "f7c513eb-d873-4e00-abad-ca8c139bb9b1")
|
||||
)
|
||||
(fp_line
|
||||
(start 59.27 -33.365)
|
||||
(end 58.635 -32.73)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "f8dc48fe-ae70-49e4-9030-c57fc1c7c2a4")
|
||||
)
|
||||
(fp_text user "IM1281C"
|
||||
(at 0 -0.254 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "44f32f16-aa2b-42e6-8ed0-ecea9e657d31")
|
||||
(effects
|
||||
(font
|
||||
(size 1.524 1.524)
|
||||
(thickness 0.254)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "CT41A"
|
||||
(at 5.08 -28.7012 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "5c3da85d-c779-4c37-b498-273133e18918")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "PF2"
|
||||
(at 23.368 -4.064 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3073fb23-de1b-47b7-afb1-7761b48b9272")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "GND"
|
||||
(at 26.02 -4.064 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "615d373a-d1cf-41d1-8d36-5c1759345378")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "PF1"
|
||||
(at 28.448 -4.064 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "edb1ab47-7d84-43e4-b74b-c47e17b27e10")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "CT41A"
|
||||
(at 29.58 -28.7012 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "041aae02-718a-4a1b-a47c-5bb212fb4860")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "TX"
|
||||
(at 30.988 -4.064 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6e2e8466-173f-4e27-bbfe-c57b5b5ebcf0")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "RX"
|
||||
(at 33.528 -4.064 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "584fb5c6-8140-4ff2-acb3-16eedb27e11d")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "VCC"
|
||||
(at 36.068 -4.064 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6818cfc8-791a-472c-a418-6ebcf77fa5d8")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "VN"
|
||||
(at 49.53 -30.48 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3c10906b-3a9e-4e32-bfa1-c9809f9eb550")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.2032)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "PT02A"
|
||||
(at 54.42 -12.54 270)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "dade1830-5011-44db-95ad-dc490b411276")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "VL"
|
||||
(at 57.15 -30.48 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "03b910f1-55f3-4f81-a64e-a30f4c82d1e7")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.2032)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole circle
|
||||
(at 22.73 -2.54)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(thermal_bridge_angle 90)
|
||||
(uuid "86890be6-a7de-4b66-ae96-3c5409d3df50")
|
||||
)
|
||||
(pad "2" thru_hole rect
|
||||
(at 25.27 -2.54)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "90f51025-2439-48ef-ad23-9da54a50a6d2")
|
||||
)
|
||||
(pad "3" thru_hole circle
|
||||
(at 27.81 -2.54)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(thermal_bridge_angle 90)
|
||||
(uuid "064dba03-b3e9-4d62-8a28-b2a86736ca81")
|
||||
)
|
||||
(pad "4" thru_hole circle
|
||||
(at 30.35 -2.54)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(thermal_bridge_angle 90)
|
||||
(uuid "403430e4-42ce-4e23-a2ed-ab8672da2aa5")
|
||||
)
|
||||
(pad "5" thru_hole circle
|
||||
(at 32.89 -2.54)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(thermal_bridge_angle 90)
|
||||
(uuid "0dc8fbe5-c9f0-423e-8c05-997d7d8e31cf")
|
||||
)
|
||||
(pad "6" thru_hole circle
|
||||
(at 35.43 -2.54)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.9)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(thermal_bridge_angle 90)
|
||||
(uuid "33b80c00-0c2f-4765-ae53-8ca34e3b2aa7")
|
||||
)
|
||||
(pad "7" thru_hole rect
|
||||
(at 58 -34 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "23a115d3-d41d-46e3-a837-fd6b6a7f3d73")
|
||||
)
|
||||
(pad "8" thru_hole oval
|
||||
(at 50.38 -34 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "815a0210-aa7c-47fb-8b7c-00ed5da1daa1")
|
||||
)
|
||||
(pad "9" thru_hole circle
|
||||
(at 36.83 -43.18)
|
||||
(size 5.08 5.08)
|
||||
(drill 2.54)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "0b7a14ce-3569-4c43-8abf-e77ae16b0441")
|
||||
)
|
||||
(pad "10" thru_hole circle
|
||||
(at 36.83 7.62)
|
||||
(size 5.08 5.08)
|
||||
(drill 2.54)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "b9f73c87-cb2a-4888-9f5c-dc806cd4dca4")
|
||||
)
|
||||
(pad "11" thru_hole circle
|
||||
(at 12.7 -43.18)
|
||||
(size 5.08 5.08)
|
||||
(drill 2.54)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "c2f8e08e-fb5d-46ca-b685-a6e56f7f91e9")
|
||||
)
|
||||
(pad "12" thru_hole circle
|
||||
(at 12.7 7.62)
|
||||
(size 5.08 5.08)
|
||||
(drill 2.54)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "f14d7bb5-1895-4583-81f3-4bd5175ff5b7")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,411 @@
|
||||
(footprint "OLED_12864_IIC_0.96"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -11.5 -15.25 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "af33b77d-8c94-4096-b7bd-9b998bd9105e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "OLED_12864_IIC_0.96"
|
||||
(at 0 21.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "8fd431c8-3a98-4a99-8f75-73a5ee95b071")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "48881b68-4c1f-4225-b28e-459a51e93340")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "3dc059d6-6786-4720-80de-115a0a26e730")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -13.5 -14)
|
||||
(end 13.5 -14)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ae0d72db-ab14-4b9b-96a1-6f072bd8c6f3")
|
||||
)
|
||||
(fp_line
|
||||
(start -13.5 14)
|
||||
(end -13.5 -14)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ccc5e632-b9f9-4b8f-b854-7446193940cf")
|
||||
)
|
||||
(fp_line
|
||||
(start -13.5 14)
|
||||
(end -7 14)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "122717f0-b086-4b5e-beee-6c3d8cfcc201")
|
||||
)
|
||||
(fp_line
|
||||
(start -7 12)
|
||||
(end -7 14)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "af3c2124-03ff-48f3-8db8-ee274e1e5582")
|
||||
)
|
||||
(fp_line
|
||||
(start -7 12)
|
||||
(end 7 12)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "cf94e387-430a-4efe-960e-04510dce6763")
|
||||
)
|
||||
(fp_line
|
||||
(start 7 12)
|
||||
(end 7 14)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "335ee4bc-2f93-41fc-9a25-a9d9ba1d3f44")
|
||||
)
|
||||
(fp_line
|
||||
(start 13.5 -14)
|
||||
(end 13.5 14)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b8b5accb-360c-48da-8602-c066e3e5f1bd")
|
||||
)
|
||||
(fp_line
|
||||
(start 13.5 14)
|
||||
(end 7 14)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2775154a-79dd-4727-9868-e919f698cee8")
|
||||
)
|
||||
(fp_rect
|
||||
(start -13 -9.8)
|
||||
(end 13 9.8)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fddccd1e-9d3a-4776-b2f7-d8c3fed42185")
|
||||
)
|
||||
(fp_line
|
||||
(start -5.15 -13.6)
|
||||
(end -2.54 -13.6)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "69696b24-f6aa-4d8e-ac22-1bcdee3d4c7e")
|
||||
)
|
||||
(fp_line
|
||||
(start -5.15 -10.94)
|
||||
(end -5.15 -13.6)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "aaf9174c-36a1-4512-9f7b-8cfb649faba2")
|
||||
)
|
||||
(fp_line
|
||||
(start -5.15 -10.94)
|
||||
(end -2.54 -10.94)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "4f4861d2-9e9c-42ff-9edd-cb7dcc7b908e")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.54 -13.6)
|
||||
(end 5.14 -13.6)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "6c071c66-3042-4496-9960-2f90659dcd59")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.54 -10.94)
|
||||
(end -2.54 -13.6)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "77f583fd-03e8-420e-ac93-fba9481b849c")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.54 -10.94)
|
||||
(end 5.14 -10.94)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "c6f45abf-0ee7-466d-8aaf-cc86737f2eb2")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.14 -10.94)
|
||||
(end 5.14 -13.6)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "B.SilkS")
|
||||
(uuid "39acec8c-0bdc-40a3-b7d8-b267fc8dc174")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -13.5 -14) (xy 13.5 -14) (xy 13.5 14) (xy -13.5 14)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "92762d21-e25c-4d41-9799-e2f30424f5fc")
|
||||
)
|
||||
(fp_line
|
||||
(start -5.08 -12.905)
|
||||
(end -4.445 -13.54)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "4d9fd298-bd81-4ae0-a01f-d17b1dc3e1d9")
|
||||
)
|
||||
(fp_line
|
||||
(start -5.08 -11)
|
||||
(end -5.08 -12.905)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "68f631a1-0447-4d2d-985a-fbb28ea0e1e3")
|
||||
)
|
||||
(fp_line
|
||||
(start -4.445 -13.54)
|
||||
(end 5.08 -13.54)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "b5454a7b-69f4-4bbb-bfc0-9570e9908283")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.08 -13.54)
|
||||
(end 5.08 -11)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "d613c0ae-76d6-42b6-8152-1c88bcfe08e7")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.08 -11)
|
||||
(end -5.08 -11)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "864ff6c6-d15e-4edf-9a7d-bd899e7ca262")
|
||||
)
|
||||
(fp_text user "SDA"
|
||||
(at 2.75 -10 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3fda5818-66c7-4113-bf97-1db6c0e9b215")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "OLED 0.96\" I2C"
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "79f6b89a-cd30-446a-a8be-cb1551c9ae04")
|
||||
(effects
|
||||
(font
|
||||
(size 1.2 1.2)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "SCL"
|
||||
(at 0.2 -10 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7ca97dde-957a-4a7a-957a-68f8066ed8a0")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "GND"
|
||||
(at -5 -10 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "961ba907-6869-4e07-b15d-308130e5e273")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "VCC"
|
||||
(at -2.4 -10 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c0b90d02-b352-4349-94da-f01bb1960ab4")
|
||||
(effects
|
||||
(font
|
||||
(size 0.8 0.8)
|
||||
(thickness 0.1)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 23.25 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "4f4e0e75-cd5f-4db9-abd1-4e27e9556cf4")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at -3.81 -12.27 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "c9bf91c5-5653-44db-87e4-68bfca977bef")
|
||||
)
|
||||
(pad "2" thru_hole oval
|
||||
(at -1.27 -12.27 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "d69c56a9-7c14-4253-8756-c8a5fad7f14d")
|
||||
)
|
||||
(pad "3" thru_hole oval
|
||||
(at 1.27 -12.27 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "4ec0e2e9-5562-4d23-b34c-02fbebf35ec1")
|
||||
)
|
||||
(pad "4" thru_hole oval
|
||||
(at 3.81 -12.27 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "d3318c3f-0bee-4e0e-b480-d085712a2f2d")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${USER_3DMODEL}/OLED_IIC_12864_0.96.step"
|
||||
(offset
|
||||
(xyz 34.3 5 12.1)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -0)
|
||||
)
|
||||
)
|
||||
(model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x04_P2.54mm_Vertical.step"
|
||||
(offset
|
||||
(xyz -3.8 12.27 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -90)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,539 @@
|
||||
(footprint "RFID_RC522"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -17.78 -31.115 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "035ddb91-0658-4af8-a13d-ddf98c50dd59")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "RFID_RC522"
|
||||
(at 0 1 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "bdaf21c6-09ad-4d7b-af6d-14b5e5bd6124")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at -11.96 -16.905 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "fbf13de2-2bc9-4731-bc02-81852ba04089")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at -11.96 -16.905 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "241103cd-c46c-412f-b13d-038c95d8d7de")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -20 -30)
|
||||
(end -20 30)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e6237026-b310-4e88-8421-6ec576006fa5")
|
||||
)
|
||||
(fp_line
|
||||
(start -20 -30)
|
||||
(end 20 -30)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "88b5eea1-f2a5-436d-9a1a-1f4159943aa5")
|
||||
)
|
||||
(fp_line
|
||||
(start -10.22 -29.778)
|
||||
(end -10.22 -27.118)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6b72374f-07ac-4750-a04f-f481fd92776b")
|
||||
)
|
||||
(fp_line
|
||||
(start 7.62 -29.778)
|
||||
(end -10.22 -29.778)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "5bb5a24f-9b82-4b78-80b8-c959c6662e0e")
|
||||
)
|
||||
(fp_line
|
||||
(start 7.62 -29.778)
|
||||
(end 7.62 -27.118)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "52559693-3d17-4632-bccb-d96e8fb2139a")
|
||||
)
|
||||
(fp_line
|
||||
(start 7.62 -27.118)
|
||||
(end -10.22 -27.118)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d4989a4e-687f-4aca-8fb4-7cbcf4b237c4")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.22 -28.448)
|
||||
(end 10.22 -27.118)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6d15b2fc-a00c-46c8-b8a3-b28415809691")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.22 -27.118)
|
||||
(end 8.89 -27.118)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "09c268cc-6a21-4bb5-877a-4766bd226f33")
|
||||
)
|
||||
(fp_line
|
||||
(start 20 30)
|
||||
(end -20 30)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b32d60ed-c339-4df3-91e0-16a871ee60a6")
|
||||
)
|
||||
(fp_line
|
||||
(start 20 30)
|
||||
(end 20 -30)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a1d0659d-8ea4-43a3-9a46-b0f0d2f5456a")
|
||||
)
|
||||
(fp_arc
|
||||
(start -7.071068 17.071068)
|
||||
(mid -10 10)
|
||||
(end -7.071068 2.928932)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "8578fffb-ef47-4784-9c4c-806d3aa88b3c")
|
||||
)
|
||||
(fp_arc
|
||||
(start -5.656854 15.656854)
|
||||
(mid -8 10)
|
||||
(end -5.656854 4.343146)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f34f2822-b895-4001-966f-481bc2b9035a")
|
||||
)
|
||||
(fp_arc
|
||||
(start -4.242641 14.242641)
|
||||
(mid -6 10)
|
||||
(end -4.242641 5.757359)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7c15d5be-d301-4e69-8c9d-24406e81868f")
|
||||
)
|
||||
(fp_arc
|
||||
(start -2.828427 12.828427)
|
||||
(mid -4 10)
|
||||
(end -2.828427 7.171573)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "bd6ba14e-4b2e-4def-b8ed-405f80b4e971")
|
||||
)
|
||||
(fp_arc
|
||||
(start -1.414214 11.414214)
|
||||
(mid -2.000001 10)
|
||||
(end -1.414214 8.585786)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "57bf66af-78d5-4cbf-86fe-444d453c94a2")
|
||||
)
|
||||
(fp_arc
|
||||
(start 1.414214 8.585786)
|
||||
(mid 2.000001 10)
|
||||
(end 1.414214 11.414214)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "09310083-2e12-4251-a35b-c72d635080c6")
|
||||
)
|
||||
(fp_arc
|
||||
(start 2.828427 7.171573)
|
||||
(mid 4 10)
|
||||
(end 2.828427 12.828427)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6cbbce2c-5ab1-40c7-bb6d-779c0116d23a")
|
||||
)
|
||||
(fp_arc
|
||||
(start 4.242641 5.757359)
|
||||
(mid 6 10)
|
||||
(end 4.242641 14.242641)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "49d9b195-3487-428a-b075-de004f698911")
|
||||
)
|
||||
(fp_arc
|
||||
(start 5.656854 4.343146)
|
||||
(mid 8 10)
|
||||
(end 5.656854 15.656854)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "8df4b8dc-eeed-4a84-b9ae-28957541def9")
|
||||
)
|
||||
(fp_arc
|
||||
(start 7.071068 2.928932)
|
||||
(mid 10 10)
|
||||
(end 7.071068 17.071068)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d740483c-ea02-4ba0-814b-fdf2fdbc46eb")
|
||||
)
|
||||
(fp_circle
|
||||
(center 0 10)
|
||||
(end 0 10.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a6dcba14-d8ef-41cd-9c7f-1b4d3e18ff78")
|
||||
)
|
||||
(fp_circle
|
||||
(center -17 -15)
|
||||
(end -13.8 -15)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "Cmts.User")
|
||||
(uuid "b642eaac-74c7-4556-a9a6-6cf18824c1c2")
|
||||
)
|
||||
(fp_circle
|
||||
(center -12.5 22.5)
|
||||
(end -9.3 22.5)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "Cmts.User")
|
||||
(uuid "8525d831-7618-478b-82f0-ab45cf567e56")
|
||||
)
|
||||
(fp_circle
|
||||
(center 12.5 22.5)
|
||||
(end 9.3 22.5)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "Cmts.User")
|
||||
(uuid "510256af-b6ce-4b4e-9fb4-aa6aaaf399ec")
|
||||
)
|
||||
(fp_circle
|
||||
(center 17 -15)
|
||||
(end 13.8 -15)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "Cmts.User")
|
||||
(uuid "fbc4b471-73d2-47c0-bfd5-b846a1224037")
|
||||
)
|
||||
(fp_line
|
||||
(start -20 -30)
|
||||
(end -20 30)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "8fcad557-4bc8-4dcd-bd4a-43ee8d455dce")
|
||||
)
|
||||
(fp_line
|
||||
(start -20 -30)
|
||||
(end 20 -30)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "b4903fd7-07b5-4ee4-b053-c890ae6dd38b")
|
||||
)
|
||||
(fp_line
|
||||
(start 20 30)
|
||||
(end -20 30)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "e1bb6cc2-313e-477f-ae8d-8eec069d5916")
|
||||
)
|
||||
(fp_line
|
||||
(start 20 30)
|
||||
(end 20 -30)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "eca65d4b-d036-46e5-9f25-5b7ab1a9d963")
|
||||
)
|
||||
(fp_line
|
||||
(start -10.16 -29.718)
|
||||
(end 10.16 -29.718)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "971902f7-cf22-4bfc-9ced-ad6d260896fa")
|
||||
)
|
||||
(fp_line
|
||||
(start -10.16 -27.178)
|
||||
(end -10.16 -29.718)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "968787b4-0331-4283-9c50-9faa5874b98f")
|
||||
)
|
||||
(fp_line
|
||||
(start 9.525 -27.178)
|
||||
(end -10.16 -27.178)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "ef44f9a6-d2fc-4350-a34a-3db8c1ee3397")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.16 -29.718)
|
||||
(end 10.16 -27.813)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "68a7f4b4-ebc4-45fc-bfec-eae79f12dde8")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.16 -27.813)
|
||||
(end 9.525 -27.178)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "fb3f778f-63b2-4bf5-bc2c-9319ba519032")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 2.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "8075237d-f9d2-4ce9-a3ec-b528dc0b75c7")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "" np_thru_hole circle
|
||||
(at -17 -15)
|
||||
(size 3.2 3.2)
|
||||
(drill 3.2)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(uuid "8909b979-bd99-4d7b-bbf5-2299c67efb75")
|
||||
)
|
||||
(pad "" np_thru_hole circle
|
||||
(at -12.5 22.5)
|
||||
(size 3.2 3.2)
|
||||
(drill 3.2)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(uuid "2b857417-f652-4f71-8410-98a1bc79c69e")
|
||||
)
|
||||
(pad "" np_thru_hole circle
|
||||
(at 12.5 22.5)
|
||||
(size 3.2 3.2)
|
||||
(drill 3.2)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "5c932b8d-39bb-4719-8d18-66dbdc856fe9")
|
||||
)
|
||||
(pad "" np_thru_hole circle
|
||||
(at 17 -15 180)
|
||||
(size 3.2 3.2)
|
||||
(drill 3.2)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(uuid "7cd8eca7-735a-492a-966d-9e65ade64636")
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at 8.89 -28.448 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "ca26e70b-c9c6-4a63-99e4-6499b940280b")
|
||||
)
|
||||
(pad "2" thru_hole oval
|
||||
(at 6.35 -28.448 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "1e28318b-1616-420e-b6b5-c097c3c3b2c5")
|
||||
)
|
||||
(pad "3" thru_hole oval
|
||||
(at 3.81 -28.448 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "6c2a74e8-8a13-4fb7-8373-6f39c7bb3a7d")
|
||||
)
|
||||
(pad "4" thru_hole oval
|
||||
(at 1.27 -28.448 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "ffab03c8-748b-4b64-a156-8c4b69df4018")
|
||||
)
|
||||
(pad "5" thru_hole oval
|
||||
(at -1.27 -28.448 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "bc7ac3a8-e2a5-4bdf-82a2-a7a557554a32")
|
||||
)
|
||||
(pad "6" thru_hole oval
|
||||
(at -3.81 -28.448 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "9881b1dc-95ce-4060-9e8f-ebd1e6ede0a4")
|
||||
)
|
||||
(pad "7" thru_hole oval
|
||||
(at -6.35 -28.448 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "5cc5f140-2162-4331-914f-183a585f7337")
|
||||
)
|
||||
(pad "8" thru_hole oval
|
||||
(at -8.89 -28.448 270)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "ff81d216-d0af-4b15-b912-79a791e81094")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${USER_3DMODEL}/RFID-RC522.STEP"
|
||||
(offset
|
||||
(xyz -4.12 -0.1 -50.9)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -0)
|
||||
)
|
||||
)
|
||||
(model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x08_P2.54mm_Vertical.step"
|
||||
(offset
|
||||
(xyz -8.9 28.45 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -90)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,463 @@
|
||||
(footprint "Relay_JQC-3FF-005-1Z"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(descr "Hongfa subminature high power latching SPDT relay 5, 6, 9, 12, 18, 24, 48VDC. 10A switching current, Form-B https://www.generationrobots.com/media/JQC-3FF-v1.pdf")
|
||||
(tags "relays Hongmei 1-coil")
|
||||
(property "Reference" "REF**"
|
||||
(at -2 -3 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fd0f43dc-deff-461c-bd31-27a3beb9413e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "Relay_JQC-3FF-005-1Z"
|
||||
(at 7 -5 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "d7e8705c-9d76-44dd-8194-796951704bf6")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 7 15.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "aab30ce8-a74c-41bf-8f45-7d4e93216534")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 12 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "dec044f5-0ced-40cf-b2ed-80bb1a7a2ac8")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -4 12.1)
|
||||
(end -4 14.3)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "99171971-3c81-4a22-8c9c-48d77f0c8a8d")
|
||||
)
|
||||
(fp_line
|
||||
(start -4 14.3)
|
||||
(end -1.8 14.3)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "131830d3-6fe5-4319-9e20-b691e40805d5")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.6 -1.9)
|
||||
(end -3.6 13.9)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "838f0a8f-7324-4280-a908-878a6a98823c")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.6 13.9)
|
||||
(end 15.8 13.9)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "33ba6bb8-42b1-48d9-9243-e6a0b90f186c")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.4 6)
|
||||
(end 2.4 6)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "474a76b7-47e3-4bec-be4e-cbebec304983")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.9 3.95)
|
||||
(end 2.9 7.75)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d2897046-4386-4b1b-a073-011aa31676c8")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.9 7.75)
|
||||
(end 4.9 7.75)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "82f1f9ae-930a-4ff9-9ac3-be26bb7a82ab")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.9 0)
|
||||
(end 1.4 0)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d8ce081b-29d4-4d4b-998e-c8f7afb2d808")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.9 3.95)
|
||||
(end 3.9 0)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3bd94a4b-7a31-42fc-942b-d9505c30b9d6")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.9 7.75)
|
||||
(end 3.9 12)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "28a818ea-c007-423f-914f-d6a09612d188")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.9 12)
|
||||
(end 1.4 12)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4a09816a-4fb2-4528-b623-29029859f318")
|
||||
)
|
||||
(fp_line
|
||||
(start 4.9 3.95)
|
||||
(end 2.9 3.95)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "df645c7c-d2ae-4cd0-8cf3-fef8cfad0162")
|
||||
)
|
||||
(fp_line
|
||||
(start 4.9 5.55)
|
||||
(end 2.9 6.55)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "67b18a82-53b1-4474-b6fb-34be6eee9015")
|
||||
)
|
||||
(fp_line
|
||||
(start 4.9 7.75)
|
||||
(end 4.9 3.95)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "378dc484-e631-4ddf-938d-ff1a87e5de4d")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.4 6)
|
||||
(end 5.3 6)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e7ef2ce8-8d9f-4a16-b154-cf68ce65a91d")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.4 6)
|
||||
(end 8.2 4.2)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "43dab8e3-dfa6-48de-84fd-2ee408ba2eff")
|
||||
)
|
||||
(fp_line
|
||||
(start 8 2.8)
|
||||
(end 8 4)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f4eb66b6-8353-481e-95ae-ecfca6372f23")
|
||||
)
|
||||
(fp_line
|
||||
(start 8 2.8)
|
||||
(end 12.2 2.8)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0597be12-47d4-46ae-bcf7-0440b41a86a4")
|
||||
)
|
||||
(fp_line
|
||||
(start 8 9.2)
|
||||
(end 8 8)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "abf38c4f-669e-40a0-b930-a731d8c37b33")
|
||||
)
|
||||
(fp_line
|
||||
(start 12.2 1.6)
|
||||
(end 12.2 2.8)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "24276916-5336-43e6-a7db-94230dc5909b")
|
||||
)
|
||||
(fp_line
|
||||
(start 12.2 9.2)
|
||||
(end 8 9.2)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "07ccb6f5-ab53-4d0e-8414-7bbc521a2b1b")
|
||||
)
|
||||
(fp_line
|
||||
(start 12.2 10.4)
|
||||
(end 12.2 9.2)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4aadd050-76f0-4b35-a902-75be48d645b6")
|
||||
)
|
||||
(fp_line
|
||||
(start 15.8 -1.9)
|
||||
(end -3.6 -1.9)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "939d5683-2a43-4e05-8e01-ae7ac09576a4")
|
||||
)
|
||||
(fp_line
|
||||
(start 15.8 13.9)
|
||||
(end 15.8 -1.9)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "bc5f1f15-fa5d-4a4f-a05c-67fe3aef8a12")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.8 -2.1)
|
||||
(end -3.8 14.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "f8f73ccd-07e6-4407-941e-f386d4134e00")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.8 14.1)
|
||||
(end 16 14.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "87e640b1-c99c-41fa-b7b0-8ebd0d6ef2c8")
|
||||
)
|
||||
(fp_line
|
||||
(start 16 -2.1)
|
||||
(end -3.8 -2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "775bf8b8-bac0-42d6-9b9f-ab6b36180b4d")
|
||||
)
|
||||
(fp_line
|
||||
(start 16 14.1)
|
||||
(end 16 -2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "7b717307-0883-4ef7-9d76-e0cc361cf439")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.4 -1.7)
|
||||
(end -3.4 12.7)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "4bacdf74-fc4f-48ab-a7ca-0e65c4803bfe")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.4 12.7)
|
||||
(end -2.4 13.7)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "f06c9a94-b8cc-49fc-ae73-3cc3b533bacf")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.4 13.7)
|
||||
(end 15.6 13.7)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "0009184d-aa19-4312-953e-b182713505da")
|
||||
)
|
||||
(fp_line
|
||||
(start 15.6 -1.7)
|
||||
(end -3.4 -1.7)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "38e34458-de7d-421f-a0c5-a3f045379dc2")
|
||||
)
|
||||
(fp_line
|
||||
(start 15.6 13.7)
|
||||
(end 15.6 -1.7)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "85c7b886-f11a-4157-aaad-c93ebe925452")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 6.2 6 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "af70861d-430d-475b-86c5-b944e80520a7")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "11" thru_hole circle
|
||||
(at -2 6)
|
||||
(size 2.5 2.5)
|
||||
(drill 1.3)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "33d00e72-2fd6-47c4-baa1-38067895fe89")
|
||||
)
|
||||
(pad "12" thru_hole circle
|
||||
(at 12.2 0)
|
||||
(size 2.5 2.5)
|
||||
(drill 1.3)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "d832323f-a6d3-460a-abbc-3df3880e92e2")
|
||||
)
|
||||
(pad "14" thru_hole circle
|
||||
(at 12.2 12)
|
||||
(size 2.5 2.5)
|
||||
(drill 1.3)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "e5f366d2-b01f-461d-ba35-ae4ccaa55bc8")
|
||||
)
|
||||
(pad "A1" thru_hole roundrect
|
||||
(at 0 0)
|
||||
(size 2.5 2.5)
|
||||
(drill 1.3)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(roundrect_rratio 0.1)
|
||||
(uuid "36a20b37-5997-41a5-a8b2-8ca4b6199d3a")
|
||||
)
|
||||
(pad "A2" thru_hole circle
|
||||
(at 0 12)
|
||||
(size 2.5 2.5)
|
||||
(drill 1.3)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "774f9c67-df5c-4f55-b385-72e4ef19a931")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${KICAD9_3DMODEL_DIR}/Relay_THT.3dshapes/Relay_SPDT_Hongfa_JQC-3FF_0XX-1Z.wrl"
|
||||
(hide yes)
|
||||
(offset
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
)
|
||||
(model "${USER_3DMODEL}/JQC-3FF-005-1Z.step"
|
||||
(offset
|
||||
(xyz 5.12 -6 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -0)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,622 @@
|
||||
(footprint "STM32F103C8T6 Blue Pill"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -27 -12.6 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "01ff5d8f-706c-4b44-8185-d8a365c083ee")
|
||||
(effects
|
||||
(font
|
||||
(size 1.143 1.143)
|
||||
(thickness 0.152)
|
||||
)
|
||||
(justify left)
|
||||
)
|
||||
)
|
||||
(property "Value" "STM32F103C8T6 Blue Pill"
|
||||
(at -0.254 -13.462 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "9d1b79e9-7a3c-4da4-9535-1e565ed91a56")
|
||||
(effects
|
||||
(font
|
||||
(size 1.143 1.143)
|
||||
(thickness 0.152)
|
||||
)
|
||||
(justify left)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "d6ba3252-d702-4c1b-b346-f8ba5a2f2157")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "b51ab3db-2c14-4c1e-a736-b072dcafa1eb")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -26.67 -11.43)
|
||||
(end -26.67 11.43)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ed1c9a5e-bf23-47c6-b244-f12c627bb4a0")
|
||||
)
|
||||
(fp_line
|
||||
(start -26.67 -11.43)
|
||||
(end 26.67 -11.43)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6857faba-5e2f-4416-a8f8-7bef1a64bf3f")
|
||||
)
|
||||
(fp_line
|
||||
(start -26.67 5.945)
|
||||
(end -25.5 4.775)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3a5d92bc-ea81-498a-81e2-8dadb72fe79e")
|
||||
)
|
||||
(fp_line
|
||||
(start -25.5 -4.798)
|
||||
(end -26.67 -5.968)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "759752cd-f9a9-4cf5-952e-6016ffc4af4d")
|
||||
)
|
||||
(fp_line
|
||||
(start -25.5 -4)
|
||||
(end -25.5 -4.798)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "07267a24-18e0-49e1-96d5-ec1a306e1678")
|
||||
)
|
||||
(fp_line
|
||||
(start -25.5 4.775)
|
||||
(end -25.5 -4)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b66466ce-1902-4222-ab3c-eeac88f52358")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.889087 0)
|
||||
(end 0 -3.889087)
|
||||
(stroke
|
||||
(width 0.2)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a397b36d-12e9-4632-adeb-739ee9a9df61")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.889087 0)
|
||||
(end 0 3.889087)
|
||||
(stroke
|
||||
(width 0.2)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "42da9ee5-ab35-412a-b247-6d7f8b8e11fb")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.889087 0)
|
||||
(end 0 -3.889087)
|
||||
(stroke
|
||||
(width 0.2)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "13b10686-1ada-4a2f-99a9-6afa28cd682e")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.889087 0)
|
||||
(end 0 3.889087)
|
||||
(stroke
|
||||
(width 0.2)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "71864ecf-a444-48cc-900f-358fd8c2bf49")
|
||||
)
|
||||
(fp_line
|
||||
(start 22 -6)
|
||||
(end 24 -6)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "acd8e159-6bae-4311-b013-63bfa619c235")
|
||||
)
|
||||
(fp_line
|
||||
(start 22 6)
|
||||
(end 22 -6)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a0573afd-0d4b-4e75-a249-c8a9b78399c2")
|
||||
)
|
||||
(fp_line
|
||||
(start 24 -6)
|
||||
(end 24 6)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "67aa4be3-3951-464f-98d7-39556a55ca98")
|
||||
)
|
||||
(fp_line
|
||||
(start 24 6)
|
||||
(end 22 6)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7396e575-0ca9-4dac-a895-01f8349d267c")
|
||||
)
|
||||
(fp_line
|
||||
(start 26.67 -11.43)
|
||||
(end 26.67 11.43)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "821817f9-d895-4965-9974-f3fe1d27ae6b")
|
||||
)
|
||||
(fp_line
|
||||
(start 26.67 11.43)
|
||||
(end -26.67 11.43)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1e1d0244-bd68-4192-a8af-7d058e875270")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -26.67 -5.968) (xy -25.5 -4.798) (xy -25.5 4.775) (xy -26.67 5.945)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "Cmts.User")
|
||||
(uuid "6fdf45d9-e14f-4567-899f-87bf022d8bf4")
|
||||
)
|
||||
(fp_line
|
||||
(start -26.67 -11.43)
|
||||
(end -26.67 11.43)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "3a129635-5a57-4060-8196-bdd6e142b284")
|
||||
)
|
||||
(fp_line
|
||||
(start -26.67 -11.43)
|
||||
(end 26.67 -11.43)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "703e3838-7665-4533-8600-0969cc2a4b4f")
|
||||
)
|
||||
(fp_line
|
||||
(start 26.67 -11.43)
|
||||
(end 26.67 11.43)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "7fd8fc78-7a8c-49b9-a470-b66971fe3adf")
|
||||
)
|
||||
(fp_line
|
||||
(start 26.67 11.43)
|
||||
(end -26.67 11.43)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "a91b8cf1-32ca-4b06-9fe7-8dce0f4a243b")
|
||||
)
|
||||
(pad "1" thru_hole circle
|
||||
(at -24.13 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "1661a8cb-d8d4-4fe6-941f-4ee76fdc08ea")
|
||||
)
|
||||
(pad "2" thru_hole circle
|
||||
(at -21.59 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "6ed4f8d3-adb2-4ca9-9cb9-c36039ac0cfb")
|
||||
)
|
||||
(pad "3" thru_hole circle
|
||||
(at -19.05 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "b010cc98-b83b-4f1c-be7d-e6335aae6e17")
|
||||
)
|
||||
(pad "4" thru_hole circle
|
||||
(at -16.51 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "102b556e-ce18-42b4-819f-aa40a4d26b78")
|
||||
)
|
||||
(pad "5" thru_hole circle
|
||||
(at -13.97 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "f048f45b-9ab6-4650-8c47-a0027e0a4c3a")
|
||||
)
|
||||
(pad "6" thru_hole circle
|
||||
(at -11.43 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "b56cd404-d451-4697-946d-9485101ca0ff")
|
||||
)
|
||||
(pad "7" thru_hole circle
|
||||
(at -8.89 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "86ef7c22-0d6e-40e7-ad91-f5b41712ee29")
|
||||
)
|
||||
(pad "8" thru_hole circle
|
||||
(at -6.35 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8d01dd26-648b-428f-a324-bf4b5298951d")
|
||||
)
|
||||
(pad "9" thru_hole circle
|
||||
(at -3.81 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "f23201fa-f347-4d36-b927-e60d87b279ef")
|
||||
)
|
||||
(pad "10" thru_hole circle
|
||||
(at -1.27 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8d62d1e8-3163-435c-bbcf-d22d50c788bd")
|
||||
)
|
||||
(pad "11" thru_hole circle
|
||||
(at 1.27 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "1c7f2466-ded2-4667-b504-b6070a5a407d")
|
||||
)
|
||||
(pad "12" thru_hole circle
|
||||
(at 3.81 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "dfc68a86-0a4a-43ea-ba09-88f0e08e5d01")
|
||||
)
|
||||
(pad "13" thru_hole circle
|
||||
(at 6.35 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "a17dea35-81ab-40a0-a73f-a4d95e3e1650")
|
||||
)
|
||||
(pad "14" thru_hole circle
|
||||
(at 8.89 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "d8349489-ee61-4433-9586-0e89c5dd275b")
|
||||
)
|
||||
(pad "15" thru_hole circle
|
||||
(at 11.43 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "dd548998-74ce-4b3e-ba76-14fc1af9c4d8")
|
||||
)
|
||||
(pad "16" thru_hole circle
|
||||
(at 13.97 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "85ec34c5-4176-4176-b674-01cc053ee878")
|
||||
)
|
||||
(pad "17" thru_hole circle
|
||||
(at 16.51 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "48f99ab3-b9c3-40bc-af17-c0c172fd734e")
|
||||
)
|
||||
(pad "18" thru_hole circle
|
||||
(at 19.05 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "4bd02961-623a-4a65-a495-6c06d6c2eec6")
|
||||
)
|
||||
(pad "19" thru_hole circle
|
||||
(at 21.59 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "35707ac2-1c11-4549-956f-61cd5c3ae9fc")
|
||||
)
|
||||
(pad "20" thru_hole circle
|
||||
(at 24.13 7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "436d3db7-dc77-44ab-abd7-515ab5e57dc9")
|
||||
)
|
||||
(pad "21" thru_hole circle
|
||||
(at 24.13 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "4d1a13ce-c5c4-42f5-8414-f6dea5e50793")
|
||||
)
|
||||
(pad "22" thru_hole circle
|
||||
(at 21.59 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "6d059125-a5b9-4c82-ac5c-18eb8db71d0b")
|
||||
)
|
||||
(pad "23" thru_hole circle
|
||||
(at 19.05 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "59591f5d-5369-4701-83b9-a80a0a0384d1")
|
||||
)
|
||||
(pad "24" thru_hole circle
|
||||
(at 16.51 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "77f93625-51ab-4679-930f-4869f35005f8")
|
||||
)
|
||||
(pad "25" thru_hole circle
|
||||
(at 13.97 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "236aaed7-55e8-4fa0-9bec-b5ee3f6cd231")
|
||||
)
|
||||
(pad "26" thru_hole circle
|
||||
(at 11.43 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "71c09176-e129-4a4b-9112-1ab53b21a76d")
|
||||
)
|
||||
(pad "27" thru_hole circle
|
||||
(at 8.89 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8f57fb49-15c7-4006-8756-439a102fd32e")
|
||||
)
|
||||
(pad "28" thru_hole circle
|
||||
(at 6.35 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "25ba20f4-5fef-45b8-a009-bf9201274b1b")
|
||||
)
|
||||
(pad "29" thru_hole circle
|
||||
(at 3.81 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "e522c48c-1d17-434c-a493-171bf2895077")
|
||||
)
|
||||
(pad "30" thru_hole circle
|
||||
(at 1.27 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "b370f3ec-cfc1-4ddb-989c-df8cf9d11634")
|
||||
)
|
||||
(pad "31" thru_hole circle
|
||||
(at -1.27 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "c6ba6e14-1321-4c47-b975-2d3e716e7bd1")
|
||||
)
|
||||
(pad "32" thru_hole circle
|
||||
(at -3.81 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "7f10c4fe-8924-412b-be1b-8782503cd5b9")
|
||||
)
|
||||
(pad "33" thru_hole circle
|
||||
(at -6.35 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "b5b08c43-d6f4-4d57-bb33-f791eb77e065")
|
||||
)
|
||||
(pad "34" thru_hole circle
|
||||
(at -8.89 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "b46e7755-20ec-4ab0-97cf-5d1666fdedd5")
|
||||
)
|
||||
(pad "35" thru_hole circle
|
||||
(at -11.43 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "d2309b81-3795-4df3-b9fb-3319beac5f76")
|
||||
)
|
||||
(pad "36" thru_hole circle
|
||||
(at -13.97 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "9be12942-0717-4ccf-858b-b436e4ba12f8")
|
||||
)
|
||||
(pad "37" thru_hole circle
|
||||
(at -16.51 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "0a0d45aa-1ca2-4af9-a089-56030ffdfc14")
|
||||
)
|
||||
(pad "38" thru_hole circle
|
||||
(at -19.05 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "48f4854f-dc05-49d6-8866-aa08acd52adf")
|
||||
)
|
||||
(pad "39" thru_hole circle
|
||||
(at -21.59 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "dfd1d94a-eb23-47db-809e-6a90e995bf31")
|
||||
)
|
||||
(pad "40" thru_hole circle
|
||||
(at -24.13 -7.62)
|
||||
(size 1.6 1.6)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Paste" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "61019b44-a018-4984-9b72-af365424a707")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${USER_3DMODEL}/STM32F103C8T6 Blue Pill.step"
|
||||
(offset
|
||||
(xyz 0 0 5.28)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -0)
|
||||
)
|
||||
)
|
||||
(model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x20_P2.54mm_Vertical.step"
|
||||
(offset
|
||||
(xyz -24.15 7.6 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -90)
|
||||
)
|
||||
)
|
||||
(model "${KICAD9_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x20_P2.54mm_Vertical.step"
|
||||
(offset
|
||||
(xyz -24.1 -7.58 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -90)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,302 @@
|
||||
(footprint "SW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 0 -4 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ed5965af-c280-4652-9dc2-d69811e48be6")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "SW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5"
|
||||
(at 0 1 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "af59e606-d553-4be1-9fe6-4404d694b654")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "4ef8af1f-2c7d-4d76-977c-547d750c7c97")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "120434ea-1390-4d44-afd7-af909d3360b6")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr smd)
|
||||
(fp_line
|
||||
(start -2.55 -1.168)
|
||||
(end -2.55 1.168)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a483c794-0917-453e-abbe-9df006d685eb")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.17 1.655)
|
||||
(end -1.275 2.55)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fe1b389b-6ba5-4ec9-9176-aab15a908653")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.801 -1.001)
|
||||
(end -1.001 -1.801)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "74a6bd5d-1d2c-4e14-9621-7a637e3ec697")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.801 0.998)
|
||||
(end -1.801 -1.001)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3d42e139-faab-4db8-8a48-f84aa1ff8929")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.275 -2.55)
|
||||
(end -2.17 -1.655)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4ddd9f5e-8926-48d8-894a-3ea6ff06e32b")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.275 -2.55)
|
||||
(end 1.275 -2.55)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "9e97bfd5-12ab-494f-8ccf-68f43f9e6535")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.275 2.55)
|
||||
(end 1.275 2.55)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "470b533e-b051-479b-962f-46dd8686e977")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.001 -1.801)
|
||||
(end 0.899 -1.801)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "657ca91b-d6ac-41be-97aa-946f29ec7082")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.899 1.9)
|
||||
(end -1.801 0.998)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2afbb7f9-f3c7-4ee6-81b1-7ed85b973b9d")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.8 1.9)
|
||||
(end -0.899 1.9)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d49203a0-502f-4707-9d30-1f5b88108fdf")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.899 -1.801)
|
||||
(end 1.801 -0.899)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c7655c12-4889-45b3-aba0-6e1fadaa259b")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.275 -2.55)
|
||||
(end 2.17 -1.655)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ddfc6ba3-15a0-4f3e-ba80-ce30e6e7d1a5")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.801 -0.899)
|
||||
(end 1.801 0.899)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f4592342-1c43-4583-8a5a-f77f58d49855")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.801 0.899)
|
||||
(end 0.8 1.9)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "61e13fa6-908b-4a34-a137-2f5d492b3c9b")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.17 1.655)
|
||||
(end 1.275 2.55)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d073193f-fc12-4920-bee2-1a7da6ad4f2f")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.55 -1.168)
|
||||
(end 2.55 1.168)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4aec8f4a-c9e0-44d3-a1c9-c9bbf6712d33")
|
||||
)
|
||||
(fp_circle
|
||||
(center 0 0)
|
||||
(end 1.275 0)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "dfad9233-d228-4a50-a059-603c4921bc76")
|
||||
)
|
||||
(fp_rect
|
||||
(start -3.5 -2.5)
|
||||
(end 3.5 2.5)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "a12d43f6-05fd-48fb-b094-41491d836e0f")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 2.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "1b0c4aec-4c31-4b20-9d67-1d5cd371a9cf")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" smd rect
|
||||
(at -3 -1.85)
|
||||
(size 1 0.75)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "ede3d644-016c-42f7-9f34-ad594d15b656")
|
||||
)
|
||||
(pad "2" smd rect
|
||||
(at 3 -1.85)
|
||||
(size 1 0.75)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "88ee239b-fbc4-4a6c-9a46-0d6ec2f6270f")
|
||||
)
|
||||
(pad "3" smd rect
|
||||
(at -3 1.85)
|
||||
(size 1 0.75)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "236ca59d-916e-40b6-a5d5-e5afdc310590")
|
||||
)
|
||||
(pad "4" smd rect
|
||||
(at 3 1.85)
|
||||
(size 1 0.75)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "bf546c1d-979b-481f-940d-86a37581f9e1")
|
||||
)
|
||||
(group ""
|
||||
(uuid "dc81c066-2597-47f0-abda-0bf62b30f6c3")
|
||||
(members "236ca59d-916e-40b6-a5d5-e5afdc310590" "2afbb7f9-f3c7-4ee6-81b1-7ed85b973b9d"
|
||||
"3d42e139-faab-4db8-8a48-f84aa1ff8929" "470b533e-b051-479b-962f-46dd8686e977"
|
||||
"4aec8f4a-c9e0-44d3-a1c9-c9bbf6712d33" "4ddd9f5e-8926-48d8-894a-3ea6ff06e32b"
|
||||
"61e13fa6-908b-4a34-a137-2f5d492b3c9b" "657ca91b-d6ac-41be-97aa-946f29ec7082"
|
||||
"74a6bd5d-1d2c-4e14-9621-7a637e3ec697" "88ee239b-fbc4-4a6c-9a46-0d6ec2f6270f"
|
||||
"9e97bfd5-12ab-494f-8ccf-68f43f9e6535" "a483c794-0917-453e-abbe-9df006d685eb"
|
||||
"bf546c1d-979b-481f-940d-86a37581f9e1" "c7655c12-4889-45b3-aba0-6e1fadaa259b"
|
||||
"d073193f-fc12-4920-bee2-1a7da6ad4f2f" "d49203a0-502f-4707-9d30-1f5b88108fdf"
|
||||
"ddfc6ba3-15a0-4f3e-ba80-ce30e6e7d1a5" "dfad9233-d228-4a50-a059-603c4921bc76"
|
||||
"ede3d644-016c-42f7-9f34-ad594d15b656" "f4592342-1c43-4583-8a5a-f77f58d49855"
|
||||
"fe1b389b-6ba5-4ec9-9176-aab15a908653"
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${USER_3DMODEL}/TS-1187A-B-A-B.step"
|
||||
(offset
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,307 @@
|
||||
(footprint "SW-TH_SS12D10G5"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" ""
|
||||
(at -0.0001 -4.312 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c8f157f4-1339-4b73-8507-bbf6597bd918")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "SW-TH_SS12D10G5"
|
||||
(at -0.0001 4.312 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "1a065337-a29e-411b-9e96-534869430518")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "86ecd2ee-252f-45f3-a768-052ab2d6522a")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "b7820832-e45f-4401-bed8-9790df7c1223")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_line
|
||||
(start -6.3501 -3.35)
|
||||
(end -6.3501 3.35)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7174d9d9-9e05-4d49-af0f-398ef7571139")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.3501 -3.35)
|
||||
(end 6.3499 -3.35)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4ff6df59-5576-4f74-a589-03f8b3f914f5")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.5501 -1.8)
|
||||
(end -3.5501 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "56cecc0e-424e-4d17-bb9c-fa0e42b6b46e")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.5501 1.8)
|
||||
(end 3.5499 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a2c87ae9-b111-48aa-8f7f-1e834f588a2d")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.2328 -1.8)
|
||||
(end -3.2328 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c3f9273a-b3c6-4d59-92dc-917808f36c9e")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.2328 1.8)
|
||||
(end -3.2422 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "152f749f-cc6a-4420-99c3-5419a75c17bf")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.753 -1.8)
|
||||
(end -2.753 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4f5f5e2d-d874-4010-8a47-175ca8b7d4b6")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.753 1.8)
|
||||
(end -2.7625 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "50f19b98-436f-4662-be72-f74e820eec28")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.2732 -1.8)
|
||||
(end -2.2732 1.7999)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d98fbf71-4ff3-449e-9b28-b99c1eb476e0")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.2732 1.7999)
|
||||
(end -2.2827 1.7999)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e04a3dba-e86c-4a7c-a908-dfe1ce566bd1")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.7934 -1.8)
|
||||
(end -1.7934 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6ed33d4d-35fc-4698-96d4-6904b608362b")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.7934 1.8)
|
||||
(end -1.8029 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "03727839-5f05-4fbb-8726-36ca8417cb97")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.3137 -1.8)
|
||||
(end -1.3137 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ae38569c-033e-42ef-ab48-97281b2bf19a")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.3137 1.8)
|
||||
(end -1.2572 1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c3dde96b-bed8-420b-acb5-4e11178889c4")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.45 -1.8)
|
||||
(end -3.5501 -1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "062c21b2-5a6c-42f6-8d2f-8e0b18b03adc")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.7401 -1.8)
|
||||
(end 2.3167 -1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6e4285e2-3023-465b-9c25-c4321c29ffa5")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.5499 -1.8)
|
||||
(end 2.5499 -1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7b2a3e47-9ac4-4375-858b-8ca5a18cfbc8")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.5499 -1.3)
|
||||
(end 3.5499 -1.8)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2c93a21d-74df-47ac-acaa-1c4e1f8abb81")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.5499 1.8)
|
||||
(end 3.5499 -1.3)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7e0f6d82-9ba0-4a1b-83a9-c4079c6c112c")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.3499 -3.35)
|
||||
(end 6.3499 3.35)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "52640202-69e8-412c-a4fc-083a5fc85557")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.3499 3.35)
|
||||
(end -6.3501 3.35)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "26fc296a-9f91-4d20-9369-bf5d37aee786")
|
||||
)
|
||||
(fp_circle
|
||||
(center -6.3501 3.35)
|
||||
(end -6.3201 3.35)
|
||||
(stroke
|
||||
(width 0.06)
|
||||
(type default)
|
||||
)
|
||||
(fill no)
|
||||
(layer "User.5")
|
||||
(uuid "5bb72387-4a82-4c72-9b84-27736dbd0bb7")
|
||||
)
|
||||
(pad "1" thru_hole oval
|
||||
(at -4.7001 0)
|
||||
(size 1.7 2.9)
|
||||
(drill oval 1.1 2.3)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(solder_mask_margin 0.05)
|
||||
(solder_paste_margin 0)
|
||||
(thermal_bridge_angle 0)
|
||||
(uuid "1a133d9c-e3f6-46e5-8e54-cfd3a5517778")
|
||||
)
|
||||
(pad "2" thru_hole oval
|
||||
(at -0.0001 0)
|
||||
(size 1.7 2.9)
|
||||
(drill oval 1.1 2.3)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(solder_mask_margin 0.05)
|
||||
(solder_paste_margin 0)
|
||||
(thermal_bridge_angle 0)
|
||||
(uuid "574fd89e-b9b2-4fb6-9756-537454d19391")
|
||||
)
|
||||
(pad "3" thru_hole oval
|
||||
(at 4.7 0)
|
||||
(size 1.7 2.9)
|
||||
(drill oval 1.1 2.3)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(solder_mask_margin 0.05)
|
||||
(solder_paste_margin 0)
|
||||
(thermal_bridge_angle 0)
|
||||
(uuid "550d4de2-7c34-40ea-84f3-c50fd57a1064")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
@@ -0,0 +1,278 @@
|
||||
(footprint "SW_PUSH_XC29"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 0 -6.9 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6d4e3b69-fa22-40fb-bb05-60a9be78f909")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "SW_PUSH_XC29"
|
||||
(at 0 8.2 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "4d802352-0671-461a-b882-9ca09391f2ca")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "bcdcd157-1dec-4ffc-90c9-052278494080")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "64bac866-3e13-4253-9fbb-89d94515eceb")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -6 -5.5)
|
||||
(end -6 -4.8)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "61cec425-db14-4a92-ad50-5aa908e7880a")
|
||||
)
|
||||
(fp_line
|
||||
(start -6 -5.5)
|
||||
(end -1.5 -5.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e14ee26d-7446-46b6-827b-7713fe755ad7")
|
||||
)
|
||||
(fp_line
|
||||
(start -6 0.15)
|
||||
(end -6 0.85)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "11264e82-313d-4503-977e-816b2cc75e78")
|
||||
)
|
||||
(fp_line
|
||||
(start -6 5.8)
|
||||
(end -6 6.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "183da6ee-de6b-46f1-b294-5ddea6dce7dd")
|
||||
)
|
||||
(fp_line
|
||||
(start -6 6.5)
|
||||
(end -1.5 6.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "cba49449-b7ea-4a86-a183-3a3679008928")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.5 -5.5)
|
||||
(end 6 -5.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "34c9f964-03e4-466a-a838-019f5c74ae7d")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.5 6.5)
|
||||
(end 6 6.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "13d139d7-36aa-435e-aa9a-faead6802d1b")
|
||||
)
|
||||
(fp_line
|
||||
(start 6 -5.5)
|
||||
(end 6 -4.8)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "da600876-37aa-4a29-b505-f5e4282e297f")
|
||||
)
|
||||
(fp_line
|
||||
(start 6 0.15)
|
||||
(end 6 0.85)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a336a8b6-d965-4387-b0b0-d7068a459e25")
|
||||
)
|
||||
(fp_line
|
||||
(start 6 5.8)
|
||||
(end 6 6.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "73007545-f9f8-4269-b14d-131ef069e42d")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.25 -2)
|
||||
(end 6.25 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "f02a347d-c894-4186-ab8d-21e489d65aa2")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.25 3)
|
||||
(end -6.25 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "110c5e5c-ec92-4c51-b940-6f4220751ce7")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.25 3)
|
||||
(end 6.25 3)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "ee707ae1-e1ea-4518-9b04-6831d56efef9")
|
||||
)
|
||||
(fp_line
|
||||
(start 0 -5)
|
||||
(end 0 6)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "6c7b24c9-8111-4e6f-a1d0-9cde9e0bcdb0")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.25 0.5)
|
||||
(end -6.25 0.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "6bf6f130-7716-41de-805a-5455b04b6e6c")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.25 3)
|
||||
(end 6.25 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "ee33d6bc-6234-498c-8f35-7d6eee55c7b9")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 0.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "f5f88e80-6fa1-4795-b319-2ca6a7584209")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole circle
|
||||
(at -6.25 -2)
|
||||
(size 4 4)
|
||||
(drill 1.1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "9c14fb01-2fdb-4dce-b0b5-d7130849c066")
|
||||
)
|
||||
(pad "2" thru_hole circle
|
||||
(at 6.25 -2)
|
||||
(size 4 4)
|
||||
(drill 1.1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "2c385aff-7cde-4115-97e9-045b81c9ac01")
|
||||
)
|
||||
(pad "3" thru_hole circle
|
||||
(at -6.25 3)
|
||||
(size 4 4)
|
||||
(drill 1.1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "49e3f24e-ebec-45f0-95d9-5edc7009c278")
|
||||
)
|
||||
(pad "4" thru_hole circle
|
||||
(at 6.25 3)
|
||||
(size 4 4)
|
||||
(drill 1.1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "696856b5-63e6-4ebd-85c6-7634529ea5e1")
|
||||
)
|
||||
(pad "5" thru_hole circle
|
||||
(at 0 6)
|
||||
(size 2 2)
|
||||
(drill 0.85)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "2031a9e3-31c0-41ce-8413-f105f435afc6")
|
||||
)
|
||||
(pad "6" thru_hole circle
|
||||
(at 0 -5)
|
||||
(size 2 2)
|
||||
(drill 0.85)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "290332d1-1db4-4c03-8461-efac1255c54c")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
@@ -0,0 +1,381 @@
|
||||
(footprint "Transformer_220_5_1A_Module"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -12.6 -11.6 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "caaf2c29-9fab-4ebe-8fc8-4544a0b601eb")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "Transformer_220/5_1A_Module"
|
||||
(at 0 11 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "e8002a30-de96-403d-a118-43e8fb0ccd3f")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "82149ce1-b99a-44fb-96ec-2ab80849a45d")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "76cd516d-fc85-4d42-bd0d-7c038e87d23b")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -14.95 6.77)
|
||||
(end -13.62 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a9ad7a2a-425e-4915-81db-ae21254d6710")
|
||||
)
|
||||
(fp_line
|
||||
(start -14.95 8.1)
|
||||
(end -14.95 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0cdadd8a-ab8e-41d8-a5e6-cb687d29274f")
|
||||
)
|
||||
(fp_line
|
||||
(start -12.35 6.77)
|
||||
(end -7.21 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "398a06cb-de44-45a1-ae15-4b68df40a61a")
|
||||
)
|
||||
(fp_line
|
||||
(start -12.35 9.43)
|
||||
(end -12.35 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ddfc0ab8-0f67-4bb8-b2cd-39199141aef7")
|
||||
)
|
||||
(fp_line
|
||||
(start -12.35 9.43)
|
||||
(end -7.21 9.43)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "26128a49-7993-4a56-ad7d-4af3f4066bbc")
|
||||
)
|
||||
(fp_line
|
||||
(start -7.21 9.43)
|
||||
(end -7.21 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "dbf47577-be91-40b8-9dee-93017f253d85")
|
||||
)
|
||||
(fp_line
|
||||
(start 9.73 6.77)
|
||||
(end 11.06 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "05b30b40-f9fc-4617-b382-c5c44bc07232")
|
||||
)
|
||||
(fp_line
|
||||
(start 9.73 8.1)
|
||||
(end 9.73 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "eb1e018a-9555-47ef-bc7e-5b1034bda958")
|
||||
)
|
||||
(fp_line
|
||||
(start 12.33 6.77)
|
||||
(end 14.93 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0ac30cc0-7458-4698-a3c3-7771bc02304c")
|
||||
)
|
||||
(fp_line
|
||||
(start 12.33 9.43)
|
||||
(end 12.33 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1ae1ee4c-c4eb-4ed8-8a8b-47a7c1dd8443")
|
||||
)
|
||||
(fp_line
|
||||
(start 12.33 9.43)
|
||||
(end 14.93 9.43)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b9457030-bbcd-41a5-9b6c-e749434778cc")
|
||||
)
|
||||
(fp_line
|
||||
(start 14.93 9.43)
|
||||
(end 14.93 6.77)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0a6a2e53-4b80-4fe0-a63e-10540e1700df")
|
||||
)
|
||||
(fp_rect
|
||||
(start -15 -10.5)
|
||||
(end 15 9.5)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "da790940-a745-4ac2-a959-dbf0f8233eed")
|
||||
)
|
||||
(fp_line
|
||||
(start -14.89 7.465)
|
||||
(end -14.255 6.83)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "8f8ffc37-bf7c-4271-9d52-7e7a7487b4ad")
|
||||
)
|
||||
(fp_line
|
||||
(start -14.89 9.37)
|
||||
(end -14.89 7.465)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "6a284d45-7a96-407f-838e-115c605cc3d5")
|
||||
)
|
||||
(fp_line
|
||||
(start -14.255 6.83)
|
||||
(end -7.27 6.83)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "a34505a5-b8fb-4efe-8581-861e55951131")
|
||||
)
|
||||
(fp_line
|
||||
(start -7.27 6.83)
|
||||
(end -7.27 9.37)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "048898e9-55de-4a34-8b0f-8ea0980abf46")
|
||||
)
|
||||
(fp_line
|
||||
(start -7.27 9.37)
|
||||
(end -14.89 9.37)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "3adffad4-814c-4868-bcb1-a6cfa41ed646")
|
||||
)
|
||||
(fp_line
|
||||
(start 9.79 7.465)
|
||||
(end 10.425 6.83)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "cc5aabd3-3bcf-4ab7-9ec1-15d25e14bedf")
|
||||
)
|
||||
(fp_line
|
||||
(start 9.79 9.37)
|
||||
(end 9.79 7.465)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "7c9e8e68-62af-4f93-be66-03b3174b616a")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.425 6.83)
|
||||
(end 14.87 6.83)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "07778d00-3a2d-4025-a484-7b8646d8ac7c")
|
||||
)
|
||||
(fp_line
|
||||
(start 14.87 6.83)
|
||||
(end 14.87 9.37)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "64c49d72-1df8-4120-8b64-c65f8aa2f8c1")
|
||||
)
|
||||
(fp_line
|
||||
(start 14.87 9.37)
|
||||
(end 9.79 9.37)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "fc9506a7-7049-4ced-8afb-9f6abf07fee6")
|
||||
)
|
||||
(fp_text user "V-"
|
||||
(at 11 5 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7a811511-54ef-42fe-aac4-04b55e02da43")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "N"
|
||||
(at -8.509 5.6 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "849e0305-c0cd-4e84-92ac-8f9c5303cd13")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "V+"
|
||||
(at 13.6 5 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a6ee0f8f-072b-416b-87f6-94af7f46cdfd")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "L"
|
||||
(at -13.6 5.6 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c4ab9a46-aa6e-4ce4-a01f-300571d779c1")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 12.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "7cba04c1-ad08-43c1-99fe-100f9706e3ff")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at -13.62 8.1 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "2bf4194c-11d7-4a14-8ca2-264838ad4377")
|
||||
)
|
||||
(pad "2" thru_hole oval
|
||||
(at -8.54 8.1 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8ebf881d-9c13-462c-80bc-cd4927c19cfc")
|
||||
)
|
||||
(pad "3" thru_hole oval
|
||||
(at 13.6 8.1 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "54e638f0-c8e1-4208-936d-a05ad24e571e")
|
||||
)
|
||||
(pad "4" thru_hole rect
|
||||
(at 11.06 8.1 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "f626e4d4-746d-4737-b656-17ede08c9408")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
@@ -0,0 +1,459 @@
|
||||
(footprint "Transformer_220_5_2A_Module"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 2.4 -1.1 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "caaf2c29-9fab-4ebe-8fc8-4544a0b601eb")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "Transformer_220/5_2A_Module"
|
||||
(at 17.272 24.13 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "e8002a30-de96-403d-a118-43e8fb0ccd3f")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 15 10.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "82149ce1-b99a-44fb-96ec-2ab80849a45d")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 15 10.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "76cd516d-fc85-4d42-bd0d-7c038e87d23b")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start 3.242 20.32)
|
||||
(end 4.572 20.32)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a9ad7a2a-425e-4915-81db-ae21254d6710")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.242 21.65)
|
||||
(end 3.242 20.32)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0cdadd8a-ab8e-41d8-a5e6-cb687d29274f")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.842 20.32)
|
||||
(end 10.982 20.32)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "398a06cb-de44-45a1-ae15-4b68df40a61a")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.842 22.98)
|
||||
(end 5.842 20.32)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ddfc0ab8-0f67-4bb8-b2cd-39199141aef7")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.842 22.98)
|
||||
(end 10.982 22.98)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "26128a49-7993-4a56-ad7d-4af3f4066bbc")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.982 22.98)
|
||||
(end 10.982 20.32)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "dbf47577-be91-40b8-9dee-93017f253d85")
|
||||
)
|
||||
(fp_line
|
||||
(start 28.896 20.26)
|
||||
(end 30.226 20.26)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "05b30b40-f9fc-4617-b382-c5c44bc07232")
|
||||
)
|
||||
(fp_line
|
||||
(start 28.896 21.59)
|
||||
(end 28.896 20.26)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "eb1e018a-9555-47ef-bc7e-5b1034bda958")
|
||||
)
|
||||
(fp_line
|
||||
(start 31.496 20.26)
|
||||
(end 34.096 20.26)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0ac30cc0-7458-4698-a3c3-7771bc02304c")
|
||||
)
|
||||
(fp_line
|
||||
(start 31.496 22.92)
|
||||
(end 31.496 20.26)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1ae1ee4c-c4eb-4ed8-8a8b-47a7c1dd8443")
|
||||
)
|
||||
(fp_line
|
||||
(start 31.496 22.92)
|
||||
(end 34.096 22.92)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b9457030-bbcd-41a5-9b6c-e749434778cc")
|
||||
)
|
||||
(fp_line
|
||||
(start 34.096 22.92)
|
||||
(end 34.096 20.26)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0a6a2e53-4b80-4fe0-a63e-10540e1700df")
|
||||
)
|
||||
(fp_rect
|
||||
(start 0 0)
|
||||
(end 35.53 22.97)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "da790940-a745-4ac2-a959-dbf0f8233eed")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.302 21.015)
|
||||
(end 3.937 20.38)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "8f8ffc37-bf7c-4271-9d52-7e7a7487b4ad")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.302 22.92)
|
||||
(end 3.302 21.015)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "6a284d45-7a96-407f-838e-115c605cc3d5")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.937 20.38)
|
||||
(end 10.922 20.38)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "a34505a5-b8fb-4efe-8581-861e55951131")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.922 20.38)
|
||||
(end 10.922 22.92)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "048898e9-55de-4a34-8b0f-8ea0980abf46")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.922 22.92)
|
||||
(end 3.302 22.92)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "3adffad4-814c-4868-bcb1-a6cfa41ed646")
|
||||
)
|
||||
(fp_line
|
||||
(start 28.956 20.955)
|
||||
(end 29.591 20.32)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "cc5aabd3-3bcf-4ab7-9ec1-15d25e14bedf")
|
||||
)
|
||||
(fp_line
|
||||
(start 28.956 22.86)
|
||||
(end 28.956 20.955)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "7c9e8e68-62af-4f93-be66-03b3174b616a")
|
||||
)
|
||||
(fp_line
|
||||
(start 29.591 20.32)
|
||||
(end 34.036 20.32)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "07778d00-3a2d-4025-a484-7b8646d8ac7c")
|
||||
)
|
||||
(fp_line
|
||||
(start 34.036 20.32)
|
||||
(end 34.036 22.86)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "64c49d72-1df8-4120-8b64-c65f8aa2f8c1")
|
||||
)
|
||||
(fp_line
|
||||
(start 34.036 22.86)
|
||||
(end 28.956 22.86)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "fc9506a7-7049-4ced-8afb-9f6abf07fee6")
|
||||
)
|
||||
(fp_text user "V+"
|
||||
(at 30.166 18.49 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7a811511-54ef-42fe-aac4-04b55e02da43")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "N"
|
||||
(at 9.683 19.15 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "849e0305-c0cd-4e84-92ac-8f9c5303cd13")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "V-"
|
||||
(at 32.766 18.49 90)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a6ee0f8f-072b-416b-87f6-94af7f46cdfd")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "L"
|
||||
(at 4.592 19.15 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c4ab9a46-aa6e-4ce4-a01f-300571d779c1")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15875)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 17.272 25.63 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "7cba04c1-ad08-43c1-99fe-100f9706e3ff")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(dimension
|
||||
(type orthogonal)
|
||||
(layer "F.Fab")
|
||||
(uuid "4f0719e7-359e-42e3-a83e-5e9ecd08e404")
|
||||
(pts
|
||||
(xy 0 22.97) (xy 30.226 22.97)
|
||||
)
|
||||
(height 5.732)
|
||||
(orientation 0)
|
||||
(format
|
||||
(prefix "")
|
||||
(suffix "")
|
||||
(units 3)
|
||||
(units_format 0)
|
||||
(precision 4)
|
||||
(override_value "30.2")
|
||||
(suppress_zeroes yes)
|
||||
)
|
||||
(style
|
||||
(thickness 0.1)
|
||||
(arrow_length 1.27)
|
||||
(text_position_mode 0)
|
||||
(arrow_direction outward)
|
||||
(extension_height 0.58642)
|
||||
(extension_offset 0.5)
|
||||
(keep_text_aligned yes)
|
||||
)
|
||||
(gr_text "30.2"
|
||||
(at 15.113 27.602 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "4f0719e7-359e-42e3-a83e-5e9ecd08e404")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(dimension
|
||||
(type orthogonal)
|
||||
(layer "F.Fab")
|
||||
(uuid "5bcada13-da53-47f1-bc13-d129160d80aa")
|
||||
(pts
|
||||
(xy 0 22.97) (xy 4.572 22.97)
|
||||
)
|
||||
(height 2.684)
|
||||
(orientation 0)
|
||||
(format
|
||||
(prefix "")
|
||||
(suffix "")
|
||||
(units 3)
|
||||
(units_format 0)
|
||||
(precision 4)
|
||||
(override_value "4.54")
|
||||
(suppress_zeroes yes)
|
||||
)
|
||||
(style
|
||||
(thickness 0.1)
|
||||
(arrow_length 1.27)
|
||||
(text_position_mode 0)
|
||||
(arrow_direction outward)
|
||||
(extension_height 0.58642)
|
||||
(extension_offset 0.5)
|
||||
(keep_text_aligned yes)
|
||||
)
|
||||
(gr_text "4.54"
|
||||
(at 2.286 24.554 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "5bcada13-da53-47f1-bc13-d129160d80aa")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at 4.572 21.65 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "2bf4194c-11d7-4a14-8ca2-264838ad4377")
|
||||
)
|
||||
(pad "2" thru_hole oval
|
||||
(at 9.652 21.65 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8ebf881d-9c13-462c-80bc-cd4927c19cfc")
|
||||
)
|
||||
(pad "3" thru_hole rect
|
||||
(at 30.226 21.59 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "f626e4d4-746d-4737-b656-17ede08c9408")
|
||||
)
|
||||
(pad "4" thru_hole oval
|
||||
(at 32.766 21.59 90)
|
||||
(size 1.7 1.7)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "54e638f0-c8e1-4208-936d-a05ad24e571e")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
29177
hardware/pcb/library/converted.3dmodels/CONN-TH_HB9500SS-9.5-2P.step
Normal file
29177
hardware/pcb/library/converted.3dmodels/CONN-TH_HB9500SS-9.5-2P.step
Normal file
File diff suppressed because it is too large
Load Diff
13742
hardware/pcb/library/converted.3dmodels/CONN-TH_HB9500SS-9.5-2P.wrl
Normal file
13742
hardware/pcb/library/converted.3dmodels/CONN-TH_HB9500SS-9.5-2P.wrl
Normal file
File diff suppressed because it is too large
Load Diff
39787
hardware/pcb/library/converted.3dmodels/CONN-TH_HB9500SS-9.5-4P.step
Normal file
39787
hardware/pcb/library/converted.3dmodels/CONN-TH_HB9500SS-9.5-4P.step
Normal file
File diff suppressed because it is too large
Load Diff
23471
hardware/pcb/library/converted.3dmodels/CONN-TH_HB9500SS-9.5-4P.wrl
Normal file
23471
hardware/pcb/library/converted.3dmodels/CONN-TH_HB9500SS-9.5-4P.wrl
Normal file
File diff suppressed because it is too large
Load Diff
19714
hardware/pcb/library/converted.3dmodels/SW-TH_SHOU-HAN_SS12D10G4.step
Normal file
19714
hardware/pcb/library/converted.3dmodels/SW-TH_SHOU-HAN_SS12D10G4.step
Normal file
File diff suppressed because it is too large
Load Diff
2019
hardware/pcb/library/converted.3dmodels/SW-TH_SHOU-HAN_SS12D10G4.wrl
Normal file
2019
hardware/pcb/library/converted.3dmodels/SW-TH_SHOU-HAN_SS12D10G4.wrl
Normal file
File diff suppressed because it is too large
Load Diff
964
hardware/pcb/library/converted.bak
Normal file
964
hardware/pcb/library/converted.bak
Normal file
@@ -0,0 +1,964 @@
|
||||
(kicad_symbol_lib
|
||||
(version 20241209)
|
||||
(generator https://github.com/tangsangsimida/EasyKiConverter)
|
||||
(symbol "SS12D10G5"
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property
|
||||
"Reference"
|
||||
"U"
|
||||
(id 0)
|
||||
(at 0 7.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Value"
|
||||
"SS12D10G5"
|
||||
(id 1)
|
||||
(at 0 -9.00 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Footprint"
|
||||
"converted:SW-TH_SHOU-HAN_SS12D10G4"
|
||||
(id 2)
|
||||
(at 0 -11.54 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Manufacturer"
|
||||
"SHOU HAN(首韩)"
|
||||
(id 4)
|
||||
(at 0 -14.08 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"LCSC Part"
|
||||
"C7431054"
|
||||
(id 5)
|
||||
(at 0 -16.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(circle
|
||||
(center -1.33 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 1.21 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 3.75 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 1.66) (xy 1.21 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.33 1.66) (xy 1.21 1.66) (xy 1.21 -0.37))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 4.20) (xy 1.71 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 2.22 4.20) (xy 2.73 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.24 4.20) (xy 3.75 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 4.20) (xy 3.75 3.70))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 3.19) (xy 3.75 2.43))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 1.92) (xy 3.75 1.16))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 0.65) (xy 3.75 -0.11))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.11) (xy 3.75 -0.37))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.59 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.08 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 -0.37) (xy 1.46 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 -0.37) (xy 0.95 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.37) (xy 4.00 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.37) (xy 3.49 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -1.33 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 1.21 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 3.75 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
)
|
||||
(symbol "SS12D10G5"
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property
|
||||
"Reference"
|
||||
"U"
|
||||
(id 0)
|
||||
(at 0 7.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Value"
|
||||
"SS12D10G5"
|
||||
(id 1)
|
||||
(at 0 -9.00 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Footprint"
|
||||
"converted:SW-TH_SHOU-HAN_SS12D10G4"
|
||||
(id 2)
|
||||
(at 0 -11.54 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Manufacturer"
|
||||
"SHOU HAN(首韩)"
|
||||
(id 4)
|
||||
(at 0 -14.08 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"LCSC Part"
|
||||
"C7431054"
|
||||
(id 5)
|
||||
(at 0 -16.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(circle
|
||||
(center -1.33 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 1.21 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 3.75 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 1.66) (xy 1.21 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.33 1.66) (xy 1.21 1.66) (xy 1.21 -0.37))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 4.20) (xy 1.71 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 2.22 4.20) (xy 2.73 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.24 4.20) (xy 3.75 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 4.20) (xy 3.75 3.70))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 3.19) (xy 3.75 2.43))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 1.92) (xy 3.75 1.16))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 0.65) (xy 3.75 -0.11))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.11) (xy 3.75 -0.37))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.59 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.08 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 -0.37) (xy 1.46 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 -0.37) (xy 0.95 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.37) (xy 4.00 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.37) (xy 3.49 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -1.33 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 1.21 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 3.75 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
)
|
||||
(symbol "HB9500SS-9.5-10P"
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property
|
||||
"Reference"
|
||||
"U"
|
||||
(id 0)
|
||||
(at 0 16.51 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Value"
|
||||
"HB9500SS-9.5-10P"
|
||||
(id 1)
|
||||
(at 0 -16.51 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Footprint"
|
||||
"converted:CONN-TH_HB9500SS-9.5-10P"
|
||||
(id 2)
|
||||
(at 0 -19.05 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Datasheet"
|
||||
"https://lcsc.com/product-detail/Barrier-Terminal-Blocks_Cixi-Kefa-Elec-HB9500SS-9-5-10P_C707853.html"
|
||||
(id 3)
|
||||
(at 0 -21.59 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Manufacturer"
|
||||
"KEFA(科发)"
|
||||
(id 4)
|
||||
(at 0 -24.13 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"LCSC Part"
|
||||
"C707853"
|
||||
(id 5)
|
||||
(at 0 -26.67 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(rectangle
|
||||
(start -0.97 13.97)
|
||||
(end 4.11 -13.97)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 0.30 12.70)
|
||||
(radius 0.38)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 11.43 0)
|
||||
(length 2.54)
|
||||
(name "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 8.89 0)
|
||||
(length 2.54)
|
||||
(name "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 6.35 0)
|
||||
(length 2.54)
|
||||
(name "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 3.81 0)
|
||||
(length 2.54)
|
||||
(name "4" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "4" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 1.27 0)
|
||||
(length 2.54)
|
||||
(name "5" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "5" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 -1.27 0)
|
||||
(length 2.54)
|
||||
(name "6" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "6" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 -3.81 0)
|
||||
(length 2.54)
|
||||
(name "7" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "7" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 -6.35 0)
|
||||
(length 2.54)
|
||||
(name "8" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "8" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 -8.89 0)
|
||||
(length 2.54)
|
||||
(name "9" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "9" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.51 -11.43 0)
|
||||
(length 2.54)
|
||||
(name "10" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "10" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
)
|
||||
(symbol "SS12D10G5"
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property
|
||||
"Reference"
|
||||
"U"
|
||||
(id 0)
|
||||
(at 0 7.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Value"
|
||||
"SS12D10G5"
|
||||
(id 1)
|
||||
(at 0 -9.00 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Footprint"
|
||||
"converted:SW-TH_SHOU-HAN_SS12D10G4"
|
||||
(id 2)
|
||||
(at 0 -11.54 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Manufacturer"
|
||||
"SHOU HAN(首韩)"
|
||||
(id 4)
|
||||
(at 0 -14.08 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"LCSC Part"
|
||||
"C7431054"
|
||||
(id 5)
|
||||
(at 0 -16.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(circle
|
||||
(center -1.33 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 1.21 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 3.75 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 1.66) (xy 1.21 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.33 1.66) (xy 1.21 1.66) (xy 1.21 -0.37))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 4.20) (xy 1.71 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 2.22 4.20) (xy 2.73 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.24 4.20) (xy 3.75 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 4.20) (xy 3.75 3.70))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 3.19) (xy 3.75 2.43))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 1.92) (xy 3.75 1.16))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 0.65) (xy 3.75 -0.11))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.11) (xy 3.75 -0.37))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.59 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.08 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 -0.37) (xy 1.46 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 -0.37) (xy 0.95 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.37) (xy 4.00 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.37) (xy 3.49 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -1.33 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 1.21 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 3.75 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
)
|
||||
(symbol "HB9500SS-9.5-2P"
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property
|
||||
"Reference"
|
||||
"U"
|
||||
(id 0)
|
||||
(at 0 7.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Value"
|
||||
"HB9500SS-9.5-2P"
|
||||
(id 1)
|
||||
(at 0 -7.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Footprint"
|
||||
"converted:CONN-TH_HB9500SS-9.5-2P"
|
||||
(id 2)
|
||||
(at 0 -10.16 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Datasheet"
|
||||
"https://lcsc.com/product-detail/Barrier-Terminal-Blocks_Cixi-Kefa-Elec-HB9500SS-9-5-2P_C707845.html"
|
||||
(id 3)
|
||||
(at 0 -12.70 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Manufacturer"
|
||||
"KEFA(科发)"
|
||||
(id 4)
|
||||
(at 0 -15.24 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"LCSC Part"
|
||||
"C707845"
|
||||
(id 5)
|
||||
(at 0 -17.78 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(rectangle
|
||||
(start -1.02 3.81)
|
||||
(end 4.06 -3.81)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 0.25 2.54)
|
||||
(radius 0.38)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 1.27 0)
|
||||
(length 2.54)
|
||||
(name "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 -1.27 0)
|
||||
(length 2.54)
|
||||
(name "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
)
|
||||
(symbol "SS12D10G5"
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property
|
||||
"Reference"
|
||||
"U"
|
||||
(id 0)
|
||||
(at 0 7.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Value"
|
||||
"SS12D10G5"
|
||||
(id 1)
|
||||
(at 0 -9.00 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Footprint"
|
||||
"converted:SW-TH_SHOU-HAN_SS12D10G4"
|
||||
(id 2)
|
||||
(at 0 -11.54 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Manufacturer"
|
||||
"SHOU HAN(首韩)"
|
||||
(id 4)
|
||||
(at 0 -14.08 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"LCSC Part"
|
||||
"C7431054"
|
||||
(id 5)
|
||||
(at 0 -16.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(circle
|
||||
(center -1.33 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 1.21 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 3.75 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 1.66) (xy 1.21 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.33 1.66) (xy 1.21 1.66) (xy 1.21 -0.37))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 4.20) (xy 1.71 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 2.22 4.20) (xy 2.73 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.24 4.20) (xy 3.75 4.20))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 4.20) (xy 3.75 3.70))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 3.19) (xy 3.75 2.43))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 1.92) (xy 3.75 1.16))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 0.65) (xy 3.75 -0.11))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.11) (xy 3.75 -0.37))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.59 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy -1.33 -0.37) (xy -1.08 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 -0.37) (xy 1.46 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 1.21 -0.37) (xy 0.95 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.37) (xy 4.00 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts (xy 3.75 -0.37) (xy 3.49 0.39))
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -1.33 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 1.21 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 3.75 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
)
|
||||
(symbol "HB9500SS-9.5-2P"
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property
|
||||
"Reference"
|
||||
"U"
|
||||
(id 0)
|
||||
(at 0 7.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Value"
|
||||
"HB9500SS-9.5-2P"
|
||||
(id 1)
|
||||
(at 0 -7.62 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Footprint"
|
||||
"converted:CONN-TH_HB9500SS-9.5-2P"
|
||||
(id 2)
|
||||
(at 0 -10.16 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Datasheet"
|
||||
"https://lcsc.com/product-detail/Barrier-Terminal-Blocks_Cixi-Kefa-Elec-HB9500SS-9-5-2P_C707845.html"
|
||||
(id 3)
|
||||
(at 0 -12.70 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Manufacturer"
|
||||
"KEFA(科发)"
|
||||
(id 4)
|
||||
(at 0 -15.24 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"LCSC Part"
|
||||
"C707845"
|
||||
(id 5)
|
||||
(at 0 -17.78 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(rectangle
|
||||
(start -1.02 3.81)
|
||||
(end 4.06 -3.81)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 0.25 2.54)
|
||||
(radius 0.38)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 1.27 0)
|
||||
(length 2.54)
|
||||
(name "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 -1.27 0)
|
||||
(length 2.54)
|
||||
(name "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
)
|
||||
(symbol "HB9500SS-9.5-4P"
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property
|
||||
"Reference"
|
||||
"U"
|
||||
(id 0)
|
||||
(at 0 8.89 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Value"
|
||||
"HB9500SS-9.5-4P"
|
||||
(id 1)
|
||||
(at 0 -8.89 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) )
|
||||
)
|
||||
(property
|
||||
"Footprint"
|
||||
"converted:CONN-TH_HB9500SS-9.5-4P"
|
||||
(id 2)
|
||||
(at 0 -11.43 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Datasheet"
|
||||
"https://lcsc.com/product-detail/Barrier-Terminal-Blocks_Cixi-Kefa-Elec-HB9500SS-9-5-4P_C707847.html"
|
||||
(id 3)
|
||||
(at 0 -13.97 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"Manufacturer"
|
||||
"KEFA(科发)"
|
||||
(id 4)
|
||||
(at 0 -16.51 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(property
|
||||
"LCSC Part"
|
||||
"C707847"
|
||||
(id 5)
|
||||
(at 0 -19.05 0)
|
||||
(effects (font (size 1.27 1.27) (thickness 0) ) hide)
|
||||
)
|
||||
(rectangle
|
||||
(start -1.02 6.35)
|
||||
(end 4.06 -6.35)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle
|
||||
(center 0.25 5.08)
|
||||
(radius 0.38)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 3.81 0)
|
||||
(length 2.54)
|
||||
(name "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "1" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 1.27 0)
|
||||
(length 2.54)
|
||||
(name "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "2" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 -1.27 0)
|
||||
(length 2.54)
|
||||
(name "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "3" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 -3.81 0)
|
||||
(length 2.54)
|
||||
(name "4" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
(number "4" (effects (font (size 1.27 1.27) (thickness 0) )))
|
||||
)
|
||||
)
|
||||
)
|
||||
643
hardware/pcb/library/converted.kicad_sym
Normal file
643
hardware/pcb/library/converted.kicad_sym
Normal file
@@ -0,0 +1,643 @@
|
||||
(kicad_symbol_lib
|
||||
(version 20241209)
|
||||
(generator "kicad_symbol_editor")
|
||||
(generator_version "9.0")
|
||||
(symbol "HB9500SS-9.5-2P"
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property "Reference" "U"
|
||||
(at 0 7.62 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "HB9500SS-9.5-2P"
|
||||
(at 0 -7.62 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "converted:CONN-TH_HB9500SS-9.5-2P"
|
||||
(at 0 -10.16 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "https://lcsc.com/product-detail/Barrier-Terminal-Blocks_Cixi-Kefa-Elec-HB9500SS-9-5-2P_C707845.html"
|
||||
(at 0 -12.7 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Manufacturer" "KEFA(科发)"
|
||||
(at 0 -15.24 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "LCSC Part" "C707845"
|
||||
(at 0 -17.78 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(symbol "HB9500SS-9.5-2P_1_1"
|
||||
(rectangle
|
||||
(start -1.02 3.81)
|
||||
(end 4.06 -3.81)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 0.25 2.54)
|
||||
(radius 0.38)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 1.27 0)
|
||||
(length 2.54)
|
||||
(name "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 -1.27 0)
|
||||
(length 2.54)
|
||||
(name "2"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "2"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "HB9500SS-9.5-4P"
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property "Reference" "U"
|
||||
(at 0 8.89 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "HB9500SS-9.5-4P"
|
||||
(at 0 -8.89 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "converted:CONN-TH_HB9500SS-9.5-4P"
|
||||
(at 0 -11.43 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "https://lcsc.com/product-detail/Barrier-Terminal-Blocks_Cixi-Kefa-Elec-HB9500SS-9-5-4P_C707847.html"
|
||||
(at 0 -13.97 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Manufacturer" "KEFA(科发)"
|
||||
(at 0 -16.51 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "LCSC Part" "C707847"
|
||||
(at 0 -19.05 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(symbol "HB9500SS-9.5-4P_1_1"
|
||||
(rectangle
|
||||
(start -1.02 6.35)
|
||||
(end 4.06 -6.35)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 0.25 5.08)
|
||||
(radius 0.38)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 3.81 0)
|
||||
(length 2.54)
|
||||
(name "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 1.27 0)
|
||||
(length 2.54)
|
||||
(name "2"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "2"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 -1.27 0)
|
||||
(length 2.54)
|
||||
(name "3"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "3"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -3.56 -3.81 0)
|
||||
(length 2.54)
|
||||
(name "4"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "4"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "SS12D10G5"
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property "Reference" "U"
|
||||
(at 0 7.62 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "SS12D10G5"
|
||||
(at 0 -9 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "converted:SW-TH_SHOU-HAN_SS12D10G4"
|
||||
(at 0 -11.54 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Manufacturer" "SHOU HAN(首韩)"
|
||||
(at 0 -14.08 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "LCSC Part" "C7431054"
|
||||
(at 0 -16.62 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(symbol "SS12D10G5_1_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.33 -0.37) (xy -1.59 0.39)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.33 -0.37) (xy -1.08 0.39)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.33 -0.37) (xy -1.33 1.66) (xy 1.21 1.66) (xy 1.21 -0.37)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center -1.33 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.21 4.2) (xy 1.71 4.2)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.21 1.66) (xy 1.21 4.2)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.21 -0.37) (xy 0.95 0.39)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.21 -0.37) (xy 1.46 0.39)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 1.21 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 2.22 4.2) (xy 2.73 4.2)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.24 4.2) (xy 3.75 4.2)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.75 4.2) (xy 3.75 3.7)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.75 3.19) (xy 3.75 2.43)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.75 1.92) (xy 3.75 1.16)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.75 0.65) (xy 3.75 -0.11)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.75 -0.11) (xy 3.75 -0.37)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.75 -0.37) (xy 3.49 0.39)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.75 -0.37) (xy 4 0.39)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 3.75 -1.13)
|
||||
(radius 0.25)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -1.33 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 1.21 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "2"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "2"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 3.75 -3.92 90)
|
||||
(length 2.54)
|
||||
(name "3"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "3"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,222 @@
|
||||
(footprint "CONN-TH_HB9500SS-9.5-2P"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -8.509 -9.017 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c12c5012-e42c-48e6-8649-8d29d929d8d4")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "CONN-TH_HB9500SS-9.5-2P"
|
||||
(at 0.635 9.271 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "5bf005a9-6b42-43d2-88c9-a64eb397f554")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "2c723e25-892f-4f68-b499-ed6f947e1f16")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "65bf4008-8b20-4622-864d-46141a489a05")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -10.31 -8.11)
|
||||
(end -10.31 8.09)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1481d5cf-5542-46ec-9342-44b4c476969c")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.29 -8.11)
|
||||
(end -10.31 -8.11)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ddd63f81-9010-4a5c-b229-e14f2093d268")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.29 -8.11)
|
||||
(end 10.29 8.09)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "aa0855fe-2496-48f0-bed0-ddbf8099e675")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.29 8.09)
|
||||
(end -10.31 8.09)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1d639874-53f8-4cd7-bac0-9898b6a7978c")
|
||||
)
|
||||
(fp_circle
|
||||
(center -10.44 8.22)
|
||||
(end -10.42 8.22)
|
||||
(stroke
|
||||
(width 0.06)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fc3a73fb-c184-4e20-8220-1fe10f8bf36e")
|
||||
)
|
||||
(fp_line
|
||||
(start -10.44 -8.23)
|
||||
(end 10.42 -8.23)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "78c920b4-9948-44f0-8049-40b68060f611")
|
||||
)
|
||||
(fp_line
|
||||
(start -10.44 8.22)
|
||||
(end -10.44 -8.23)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "9f7e327e-89fe-4a17-8da1-ba8f8dc254cd")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.42 -8.23)
|
||||
(end 10.42 8.22)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "ec8dea4a-c621-448d-ab70-486ac2a51be9")
|
||||
)
|
||||
(fp_line
|
||||
(start 10.42 8.22)
|
||||
(end -10.44 8.22)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "8a381d58-1e0a-4926-affe-40f786b923f8")
|
||||
)
|
||||
(fp_circle
|
||||
(center -4.76 -4.11)
|
||||
(end -4.32 -4.11)
|
||||
(stroke
|
||||
(width 0.9)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.Fab")
|
||||
(uuid "3f747209-1430-44fb-85d5-bb449bd7f380")
|
||||
)
|
||||
(fp_circle
|
||||
(center 4.74 -4.11)
|
||||
(end 5.18 -4.11)
|
||||
(stroke
|
||||
(width 0.9)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.Fab")
|
||||
(uuid "65d4933f-0ab6-4462-aa92-bac7488d7d5b")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at -4.572 6.731 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "6b75b0dd-b12e-47e9-be93-6ec825a121d6")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at -4.76 -4.11)
|
||||
(size 3.49 3.49)
|
||||
(drill 1.98)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "6809a690-a23e-4609-bec8-68265c6ff4ee")
|
||||
)
|
||||
(pad "2" thru_hole custom
|
||||
(at 4.74 -4.11)
|
||||
(size 3.49 3.49)
|
||||
(drill 1.98)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(options
|
||||
(clearance outline)
|
||||
(anchor circle)
|
||||
)
|
||||
(primitives)
|
||||
(uuid "06a8144f-36f2-452d-8a20-9bcfd5b58137")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "../converted.3dmodels/CONN-TH_HB9500SS-9.5-2P.wrl"
|
||||
(offset
|
||||
(xyz -0.01 0.01 13)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -0)
|
||||
)
|
||||
)
|
||||
(model "../converted.3dmodels/CONN-TH_HB9500SS-9.5-2P.step"
|
||||
(hide yes)
|
||||
(offset
|
||||
(xyz -0.01 0.01 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,270 @@
|
||||
(footprint "CONN-TH_HB9500SS-9.5-4P"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -17.907 -9.144 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c0ae3e6b-a9f8-4e44-a9cf-dfe0c175feec")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "CONN-TH_HB9500SS-9.5-4P"
|
||||
(at -8.255 7.112 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "9ce19949-9a26-4a0f-a7a2-cf8bc1ebe1b0")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "664e8648-cd07-496d-84e7-f01eba29a795")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "c2b870e8-c465-4b9e-82fe-e186de6e1e7a")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -19.81 -8.11)
|
||||
(end -19.81 8.09)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d0a85028-4765-4808-8a4f-a662d7b9aac1")
|
||||
)
|
||||
(fp_line
|
||||
(start 19.79 -8.11)
|
||||
(end -19.81 -8.11)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "771ae154-b508-4c1a-acc4-930b3bc38f32")
|
||||
)
|
||||
(fp_line
|
||||
(start 19.79 -8.11)
|
||||
(end 19.79 8.09)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "3e727369-2ed3-471c-996b-86d45dd84e37")
|
||||
)
|
||||
(fp_line
|
||||
(start 19.79 8.09)
|
||||
(end -19.81 8.09)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d4a5f618-7fe4-4766-82e7-e810d1c3dafb")
|
||||
)
|
||||
(fp_circle
|
||||
(center -19.94 8.22)
|
||||
(end -19.92 8.22)
|
||||
(stroke
|
||||
(width 0.06)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "76b1a2dc-fcff-4bd9-b83b-f70242cfd254")
|
||||
)
|
||||
(fp_line
|
||||
(start -19.94 -8.23)
|
||||
(end 19.92 -8.23)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "e29763e2-63a2-4359-b9ad-6d48b3d6440d")
|
||||
)
|
||||
(fp_line
|
||||
(start -19.94 8.22)
|
||||
(end -19.94 -8.23)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "736aec42-49f7-454b-ab35-e79944aa0e2f")
|
||||
)
|
||||
(fp_line
|
||||
(start 19.92 -8.23)
|
||||
(end 19.92 8.22)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "3c0a4486-e7a7-4381-94ae-820aca1a01b1")
|
||||
)
|
||||
(fp_line
|
||||
(start 19.92 8.22)
|
||||
(end -19.94 8.22)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "0ad2e2f8-ebfa-4213-beb8-1feb018c1df2")
|
||||
)
|
||||
(fp_circle
|
||||
(center -14.26 -4.11)
|
||||
(end -13.82 -4.11)
|
||||
(stroke
|
||||
(width 0.9)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.Fab")
|
||||
(uuid "2f8fd3ae-ebbc-49d2-8506-541924354afd")
|
||||
)
|
||||
(fp_circle
|
||||
(center -4.76 -4.11)
|
||||
(end -4.32 -4.11)
|
||||
(stroke
|
||||
(width 0.9)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.Fab")
|
||||
(uuid "551f636f-0ae6-4342-9aab-4cc9f3ebdf08")
|
||||
)
|
||||
(fp_circle
|
||||
(center 4.74 -4.11)
|
||||
(end 5.18 -4.11)
|
||||
(stroke
|
||||
(width 0.9)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.Fab")
|
||||
(uuid "ec8c1c65-caba-4310-aa54-4663841e7652")
|
||||
)
|
||||
(fp_circle
|
||||
(center 14.24 -4.11)
|
||||
(end 14.68 -4.11)
|
||||
(stroke
|
||||
(width 0.9)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.Fab")
|
||||
(uuid "6a2ad5ed-3308-4d07-b51a-04c2e3b56019")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at -14.097 5.461 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "347edc2a-c557-4107-bd32-dba62d8a267a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at -14.26 -4.11)
|
||||
(size 3.49 3.49)
|
||||
(drill 1.98)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "c7f09bd1-e6e1-4ddb-9083-b56d907ae18e")
|
||||
)
|
||||
(pad "2" thru_hole custom
|
||||
(at -4.76 -4.11)
|
||||
(size 3.49 3.49)
|
||||
(drill 1.98)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(options
|
||||
(clearance outline)
|
||||
(anchor circle)
|
||||
)
|
||||
(primitives)
|
||||
(uuid "8a6e9fbd-42b4-4221-b06a-3f4e11210df4")
|
||||
)
|
||||
(pad "3" thru_hole custom
|
||||
(at 4.74 -4.11)
|
||||
(size 3.49 3.49)
|
||||
(drill 1.98)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(options
|
||||
(clearance outline)
|
||||
(anchor circle)
|
||||
)
|
||||
(primitives)
|
||||
(uuid "bdd3bcda-3f18-4ec2-8ed2-4988f4a8b8dc")
|
||||
)
|
||||
(pad "4" thru_hole custom
|
||||
(at 14.24 -4.11)
|
||||
(size 3.49 3.49)
|
||||
(drill 1.98)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(options
|
||||
(clearance outline)
|
||||
(anchor circle)
|
||||
)
|
||||
(primitives)
|
||||
(uuid "8827f79c-625f-4698-900e-e97c230b4625")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "../converted.3dmodels/CONN-TH_HB9500SS-9.5-4P.wrl"
|
||||
(offset
|
||||
(xyz -0.01 0.01 13)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -0)
|
||||
)
|
||||
)
|
||||
(model "../converted.3dmodels/CONN-TH_HB9500SS-9.5-4P.step"
|
||||
(hide yes)
|
||||
(offset
|
||||
(xyz -0.01 0 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -0)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,469 @@
|
||||
(footprint "SW-TH_SHOU-HAN_SS12D10G4"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -4.445 -4.318 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "5ed66327-f9fb-4d7c-8054-7b0d63080912")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "SW-TH_SHOU-HAN_SS12D10G4"
|
||||
(at 0.01 6.35 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "a6e76fc0-97d9-4037-bf04-5478afe716a1")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "6edf8423-11f3-46c4-8118-bdd56628d4d2")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "1ce72336-3690-4698-90f5-1eab3d1e7954")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -6.34 -3.37)
|
||||
(end -6.34 3.33)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "edfa1e33-a6f3-43aa-b114-10773ba38cbb")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.34 -3.37)
|
||||
(end 6.36 -3.37)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "41dfc94d-b818-4517-b6f1-fdc7fa7c2713")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.54 -1.82)
|
||||
(end -3.54 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a0780d6f-2e1c-4733-9075-3920046b7d72")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.54 1.78)
|
||||
(end 3.56 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a04b6865-8dca-404b-8ccb-ffe25b2ee3cc")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.23 -1.82)
|
||||
(end -3.23 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2c1bb9d3-263f-4f04-b2ee-83dc89347e0f")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.23 1.78)
|
||||
(end -3.24 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "77b8a0cd-8fd0-4131-8438-ed063bea600e")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.75 -1.82)
|
||||
(end -2.75 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0e2ccd31-fb9b-463e-a33a-61e01e44dc1b")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.75 1.78)
|
||||
(end -2.76 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "18d67333-131e-4bda-bfdb-ba713c62013d")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.27 -1.82)
|
||||
(end -2.27 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "abdec75e-7eb8-4f17-8b4b-9c596eabe352")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.27 1.78)
|
||||
(end -2.28 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a959e6a0-7b97-45ae-b157-9ecb2fb570a6")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.79 -1.82)
|
||||
(end -1.79 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1fc7b986-ec3c-4141-bf36-fb8d92b05145")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.79 1.78)
|
||||
(end -1.8 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "e17524ab-51cf-46ae-a06f-ddbdff6d48a3")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.31 -1.82)
|
||||
(end -1.31 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b1e9ee37-1e05-4f92-ad6a-d6b31e0f90f9")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.31 1.78)
|
||||
(end -1.25 1.78)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "acc0a04e-3e0d-49b8-8e3a-4e7851ccc22f")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.46 -1.82)
|
||||
(end -3.54 -1.82)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c277423b-07cd-4ac0-9a12-03b72baf6711")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.75 -1.82)
|
||||
(end 2.32 -1.82)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2dddd5ca-5a88-4fe7-837d-80115c141db9")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.56 -1.82)
|
||||
(end 2.56 -1.82)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "bf5e62a5-f54a-412a-b2f9-eb10849fcb84")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.56 -1.32)
|
||||
(end 3.56 -1.82)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "58137773-8868-4f51-8aed-787aef25ef6c")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.56 1.78)
|
||||
(end 3.56 -1.32)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "222f5c11-9e32-4f91-b0e6-799d98e21a22")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.36 -3.37)
|
||||
(end 6.36 3.33)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4694f741-a131-4506-8db3-2e2c788c42a3")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.36 3.33)
|
||||
(end -6.34 3.33)
|
||||
(stroke
|
||||
(width 0.25)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d5ceffb9-ee1d-400b-b842-6d00a87f873e")
|
||||
)
|
||||
(fp_circle
|
||||
(center -6.34 3.33)
|
||||
(end -6.32 3.33)
|
||||
(stroke
|
||||
(width 0.06)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c7c87e65-ad10-451e-a568-98d05f79158d")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -2.39 -1.15) (xy 0.01 -1.15) (xy 0.01 1.25) (xy -2.39 1.25) (xy -2.39 -1.15)
|
||||
)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "066bb198-fc4b-473c-ab6c-bd4faa99488e")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.01 -1.15) (xy 2.39 -1.15) (xy 2.43 -1.15) (xy 2.43 -0.84) (xy -0.01 -0.84) (xy -0.01 -0.94)
|
||||
(xy -0.01 -1.15)
|
||||
)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "e9f45446-23c6-4313-8823-cfe3814470bf")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.01 0.99) (xy 2.39 0.99) (xy 2.42 0.99) (xy 2.42 1.29) (xy -0.02 1.29) (xy -0.02 1.19) (xy -0.01 0.99)
|
||||
)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "071ddbb8-ab59-4827-ac61-fb6a1fb7da3e")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.01 1.28) (xy -0.01 -1.12) (xy -0.01 -1.15) (xy 0.29 -1.15) (xy 0.29 1.29) (xy 0.19 1.29) (xy -0.01 1.28)
|
||||
)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "d66077c9-60a9-4457-9700-879ba9abc74c")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 2.13 1.29) (xy 2.13 -1.11) (xy 2.13 -1.14) (xy 2.44 -1.14) (xy 2.44 1.29) (xy 2.33 1.29) (xy 2.13 1.29)
|
||||
)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "d261527b-fb0f-41f8-81fc-4a7d9dcbab0d")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.34 -3.37)
|
||||
(end 6.36 -3.37)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "0234a2d4-a928-40fb-9a75-ac1135df590a")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.34 3.33)
|
||||
(end -6.34 -3.37)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "fb22553b-4aad-4c01-beed-e81c95d0844c")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.36 -3.37)
|
||||
(end 6.36 3.33)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "5a3774eb-4386-4681-986a-ec8c83731b29")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.36 3.33)
|
||||
(end -6.34 3.33)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "2cd90ec7-4db4-419d-9a9d-c599d6e5786e")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -5.19 -0.67) (xy -4.39 -0.67) (xy -4.39 0.63) (xy -5.19 0.63) (xy -5.19 -0.67)
|
||||
)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "e745ca8c-9698-4c18-8a97-bbb0a42010bd")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.39 -0.67) (xy 0.41 -0.67) (xy 0.41 0.63) (xy -0.39 0.63) (xy -0.39 -0.67)
|
||||
)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "19264bfb-3d94-4fd7-877f-c52270adc575")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 4.41 -0.67) (xy 5.21 -0.67) (xy 5.21 0.63) (xy 4.41 0.63) (xy 4.41 -0.67)
|
||||
)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "e1bc0efc-2e99-4061-b488-9ffd0b8d6497")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 4.445 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "17a74dde-7a03-4ba7-9412-3ab3cb468052")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole oval
|
||||
(at -4.79 -0.02)
|
||||
(size 1.69 2.89)
|
||||
(drill oval 1.1 2.29)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "7ef401ff-3953-4173-8a34-968aa481e74c")
|
||||
)
|
||||
(pad "2" thru_hole oval
|
||||
(at 0.01 -0.02)
|
||||
(size 1.69 2.89)
|
||||
(drill oval 1.1 2.29)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "d765877f-f49c-4662-a893-ecb848b19fb7")
|
||||
)
|
||||
(pad "3" thru_hole oval
|
||||
(at 4.81 -0.02)
|
||||
(size 1.69 2.89)
|
||||
(drill oval 1.1 2.29)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "11d41814-1adb-4370-95ee-969557b370aa")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "../converted.3dmodels/SW-TH_SHOU-HAN_SS12D10G4.wrl"
|
||||
(offset
|
||||
(xyz -0.01 0 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
)
|
||||
(model "../converted.3dmodels/SW-TH_SHOU-HAN_SS12D10G4.step"
|
||||
(offset
|
||||
(xyz -0.01 0 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
)
|
||||
)
|
||||
1030
hardware/pcb/out/HeliosDAONE-B_Cu.gbr
Normal file
1030
hardware/pcb/out/HeliosDAONE-B_Cu.gbr
Normal file
File diff suppressed because it is too large
Load Diff
215
hardware/pcb/out/HeliosDAONE-B_Mask.gbr
Normal file
215
hardware/pcb/out/HeliosDAONE-B_Mask.gbr
Normal file
@@ -0,0 +1,215 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,10.0.1*%
|
||||
%TF.CreationDate,2026-04-17T01:40:59+08:00*%
|
||||
%TF.ProjectId,HeliosDAONE,48656c69-6f73-4444-914f-4e452e6b6963,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Bot*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 10.0.1) date 2026-04-17 01:40:59*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
|
||||
0 Add a 4 corners polygon primitive as box body*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
%AMFreePoly0*
|
||||
4,1,49,0.340433,1.711470,0.560912,1.652393,0.771794,1.565043,0.969470,1.450914,1.150558,1.311960,1.311960,1.150558,1.450914,0.969470,1.565043,0.771794,1.652393,0.560912,1.711470,0.340433,1.741264,0.114128,1.741264,-0.114128,1.711470,-0.340433,1.652393,-0.560912,1.565043,-0.771794,1.450914,-0.969470,1.311960,-1.150558,1.150558,-1.311960,0.969470,-1.450914,0.771794,-1.565043,
|
||||
0.560912,-1.652393,0.340433,-1.711470,0.114128,-1.741264,-0.114128,-1.741264,-0.340433,-1.711470,-0.560912,-1.652393,-0.771794,-1.565043,-0.969470,-1.450914,-1.150558,-1.311960,-1.311960,-1.150558,-1.450914,-0.969470,-1.565043,-0.771794,-1.652393,-0.560912,-1.711470,-0.340433,-1.741264,-0.114128,-1.741264,0.114128,-1.711470,0.340433,-1.652393,0.560912,-1.565043,0.771794,-1.450914,0.969470,
|
||||
-1.311960,1.150558,-1.150558,1.311960,-0.969470,1.450914,-0.771794,1.565043,-0.560912,1.652393,-0.340433,1.711470,-0.114128,1.741264,0.114128,1.741264,0.340433,1.711470,0.340433,1.711470,$1*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10C,5.080000*%
|
||||
%ADD11O,1.700000X1.700000*%
|
||||
%ADD12R,1.700000X1.700000*%
|
||||
%ADD13C,1.500000*%
|
||||
%ADD14R,1.500000X1.500000*%
|
||||
%ADD15C,2.000000*%
|
||||
%ADD16C,4.000000*%
|
||||
%ADD17O,2.890000X1.690000*%
|
||||
%ADD18R,3.490000X3.490000*%
|
||||
%ADD19FreePoly0,180.000000*%
|
||||
%ADD20C,1.700000*%
|
||||
%ADD21C,2.500000*%
|
||||
%ADD22RoundRect,0.250000X1.000000X1.000000X-1.000000X1.000000X-1.000000X-1.000000X1.000000X-1.000000X0*%
|
||||
%ADD23C,1.800000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,U5*%
|
||||
X43486000Y-48507000D03*
|
||||
X67616000Y-66414000D03*
|
||||
X26976000Y-48507000D03*
|
||||
X67616000Y-90544000D03*
|
||||
D11*
|
||||
X58436000Y-104094000D03*
|
||||
D12*
|
||||
X58436000Y-111714000D03*
|
||||
D13*
|
||||
X26976000Y-89144000D03*
|
||||
X26976000Y-86604000D03*
|
||||
X26976000Y-84064000D03*
|
||||
X26976000Y-81524000D03*
|
||||
D14*
|
||||
X26976000Y-78984000D03*
|
||||
D13*
|
||||
X26976000Y-76444000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,U2*%
|
||||
X79846000Y-159237700D03*
|
||||
X79846000Y-161777700D03*
|
||||
X79846000Y-164317700D03*
|
||||
X79846000Y-166857700D03*
|
||||
X79846000Y-169397700D03*
|
||||
X79846000Y-171937700D03*
|
||||
X79846000Y-174477700D03*
|
||||
D12*
|
||||
X79846000Y-177017700D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,SW2*%
|
||||
X113153100Y-171754700D03*
|
||||
X113153100Y-182754700D03*
|
||||
D16*
|
||||
X119403100Y-179754700D03*
|
||||
X106903100Y-179754700D03*
|
||||
X119403100Y-174754700D03*
|
||||
X106903100Y-174754700D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,SW1*%
|
||||
X92964050Y-171754700D03*
|
||||
X92964050Y-182754700D03*
|
||||
D16*
|
||||
X99214050Y-179754700D03*
|
||||
X86714050Y-179754700D03*
|
||||
X99214050Y-174754700D03*
|
||||
X86714050Y-174754700D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,T1*%
|
||||
X120206100Y-99847000D03*
|
||||
D11*
|
||||
X120206100Y-94767000D03*
|
||||
D12*
|
||||
X120146100Y-74193000D03*
|
||||
D11*
|
||||
X120146100Y-71653000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,SW3*%
|
||||
X112727505Y-164037700D03*
|
||||
X112727505Y-159237700D03*
|
||||
X112727505Y-154437700D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,J1*%
|
||||
X115923100Y-37140300D03*
|
||||
D19*
|
||||
X106423100Y-37140300D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,J4*%
|
||||
X43021000Y-116377700D03*
|
||||
D20*
|
||||
X45561000Y-116377700D03*
|
||||
X48101000Y-116377700D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,K2*%
|
||||
X91270300Y-72414000D03*
|
||||
X77070300Y-78414000D03*
|
||||
X77070300Y-66414000D03*
|
||||
D22*
|
||||
X89270300Y-78414000D03*
|
||||
D21*
|
||||
X89270300Y-66414000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,U3*%
|
||||
X87249000Y-120714700D03*
|
||||
D11*
|
||||
X89789000Y-120714700D03*
|
||||
X92329000Y-120714700D03*
|
||||
X94869000Y-120714700D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,J5*%
|
||||
X55476000Y-37140300D03*
|
||||
D19*
|
||||
X45976000Y-37140300D03*
|
||||
X36476000Y-37140300D03*
|
||||
X26976000Y-37140300D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,SW4*%
|
||||
X92976000Y-164037700D03*
|
||||
X92976000Y-159237700D03*
|
||||
X92976000Y-154437700D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,K1*%
|
||||
X91270300Y-96544000D03*
|
||||
X77070300Y-102544000D03*
|
||||
X77070300Y-90544000D03*
|
||||
D22*
|
||||
X89270300Y-102544000D03*
|
||||
D21*
|
||||
X89270300Y-90544000D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,U1*%
|
||||
X68421000Y-120377700D03*
|
||||
X65881000Y-120377700D03*
|
||||
X63341000Y-120377700D03*
|
||||
X60801000Y-120377700D03*
|
||||
X58261000Y-120377700D03*
|
||||
X55721000Y-120377700D03*
|
||||
X53181000Y-120377700D03*
|
||||
X50641000Y-120377700D03*
|
||||
X48101000Y-120377700D03*
|
||||
X45561000Y-120377700D03*
|
||||
X43021000Y-120377700D03*
|
||||
X40481000Y-120377700D03*
|
||||
X37941000Y-120377700D03*
|
||||
X35401000Y-120377700D03*
|
||||
X32861000Y-120377700D03*
|
||||
X30321000Y-120377700D03*
|
||||
X27781000Y-120377700D03*
|
||||
X25241000Y-120377700D03*
|
||||
X22701000Y-120377700D03*
|
||||
X68421000Y-145777700D03*
|
||||
X65881000Y-145777700D03*
|
||||
X63341000Y-145777700D03*
|
||||
X60801000Y-145777700D03*
|
||||
X58261000Y-145777700D03*
|
||||
X55721000Y-145777700D03*
|
||||
X53181000Y-145777700D03*
|
||||
X50641000Y-145777700D03*
|
||||
X48101000Y-145777700D03*
|
||||
X45561000Y-145777700D03*
|
||||
X43021000Y-145777700D03*
|
||||
X40481000Y-145777700D03*
|
||||
X37941000Y-145777700D03*
|
||||
X35401000Y-145777700D03*
|
||||
X32861000Y-145777700D03*
|
||||
X30321000Y-145777700D03*
|
||||
X27781000Y-145777700D03*
|
||||
X25241000Y-145777700D03*
|
||||
X22701000Y-145777700D03*
|
||||
%TD*%
|
||||
M02*
|
||||
15
hardware/pcb/out/HeliosDAONE-B_Paste.gbr
Normal file
15
hardware/pcb/out/HeliosDAONE-B_Paste.gbr
Normal file
@@ -0,0 +1,15 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,10.0.1*%
|
||||
%TF.CreationDate,2026-04-17T01:40:59+08:00*%
|
||||
%TF.ProjectId,HeliosDAONE,48656c69-6f73-4444-914f-4e452e6b6963,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Paste,Bot*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 10.0.1) date 2026-04-17 01:40:59*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
||||
46
hardware/pcb/out/HeliosDAONE-B_Silkscreen.gbr
Normal file
46
hardware/pcb/out/HeliosDAONE-B_Silkscreen.gbr
Normal file
@@ -0,0 +1,46 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,10.0.1*%
|
||||
%TF.CreationDate,2026-04-17T01:40:59+08:00*%
|
||||
%TF.ProjectId,HeliosDAONE,48656c69-6f73-4444-914f-4e452e6b6963,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Legend,Bot*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 10.0.1) date 2026-04-17 01:40:59*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.254000*%
|
||||
%ADD11C,0.120000*%
|
||||
G04 APERTURE END LIST*
|
||||
%TO.C,U5*%
|
||||
D10*
|
||||
X28246000Y-77714000D02*
|
||||
X28246000Y-90414000D01*
|
||||
X25706000Y-90414000D02*
|
||||
X28246000Y-90414000D01*
|
||||
X25706000Y-80254000D02*
|
||||
X28246000Y-80254000D01*
|
||||
X25706000Y-77714000D02*
|
||||
X28246000Y-77714000D01*
|
||||
X25706000Y-77714000D02*
|
||||
X25706000Y-90414000D01*
|
||||
%TO.C,U3*%
|
||||
D11*
|
||||
X85909000Y-119384700D02*
|
||||
X88519000Y-119384700D01*
|
||||
X85909000Y-122044700D02*
|
||||
X85909000Y-119384700D01*
|
||||
X85909000Y-122044700D02*
|
||||
X88519000Y-122044700D01*
|
||||
X88519000Y-119384700D02*
|
||||
X96199000Y-119384700D01*
|
||||
X88519000Y-122044700D02*
|
||||
X88519000Y-119384700D01*
|
||||
X88519000Y-122044700D02*
|
||||
X96199000Y-122044700D01*
|
||||
X96199000Y-122044700D02*
|
||||
X96199000Y-119384700D01*
|
||||
%TD*%
|
||||
M02*
|
||||
40
hardware/pcb/out/HeliosDAONE-Edge_Cuts.gbr
Normal file
40
hardware/pcb/out/HeliosDAONE-Edge_Cuts.gbr
Normal file
@@ -0,0 +1,40 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,10.0.1*%
|
||||
%TF.CreationDate,2026-04-17T01:40:59+08:00*%
|
||||
%TF.ProjectId,HeliosDAONE,48656c69-6f73-4444-914f-4e452e6b6963,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Profile,NP*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 10.0.1) date 2026-04-17 01:40:59*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X17254000Y-21780000D02*
|
||||
X17254000Y-21780000D01*
|
||||
G75*
|
||||
G02*
|
||||
X21254000Y-17780000I4000000J0D01*
|
||||
G01*
|
||||
X123254000Y-17780000D01*
|
||||
G75*
|
||||
G02*
|
||||
X127254000Y-21780000I0J-4000000D01*
|
||||
G01*
|
||||
X127254000Y-188780000D01*
|
||||
G75*
|
||||
G02*
|
||||
X123254000Y-192780000I-4000000J0D01*
|
||||
G01*
|
||||
X21254000Y-192780000D01*
|
||||
G75*
|
||||
G02*
|
||||
X17254000Y-188780000I0J4000000D01*
|
||||
G01*
|
||||
X17254000Y-21780000D01*
|
||||
M02*
|
||||
7804
hardware/pcb/out/HeliosDAONE-F_Cu.gbr
Normal file
7804
hardware/pcb/out/HeliosDAONE-F_Cu.gbr
Normal file
File diff suppressed because it is too large
Load Diff
294
hardware/pcb/out/HeliosDAONE-F_Mask.gbr
Normal file
294
hardware/pcb/out/HeliosDAONE-F_Mask.gbr
Normal file
@@ -0,0 +1,294 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,10.0.1*%
|
||||
%TF.CreationDate,2026-04-17T01:40:59+08:00*%
|
||||
%TF.ProjectId,HeliosDAONE,48656c69-6f73-4444-914f-4e452e6b6963,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Top*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 10.0.1) date 2026-04-17 01:40:59*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
|
||||
0 Add a 4 corners polygon primitive as box body*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
%AMFreePoly0*
|
||||
4,1,49,0.340433,1.711470,0.560912,1.652393,0.771794,1.565043,0.969470,1.450914,1.150558,1.311960,1.311960,1.150558,1.450914,0.969470,1.565043,0.771794,1.652393,0.560912,1.711470,0.340433,1.741264,0.114128,1.741264,-0.114128,1.711470,-0.340433,1.652393,-0.560912,1.565043,-0.771794,1.450914,-0.969470,1.311960,-1.150558,1.150558,-1.311960,0.969470,-1.450914,0.771794,-1.565043,
|
||||
0.560912,-1.652393,0.340433,-1.711470,0.114128,-1.741264,-0.114128,-1.741264,-0.340433,-1.711470,-0.560912,-1.652393,-0.771794,-1.565043,-0.969470,-1.450914,-1.150558,-1.311960,-1.311960,-1.150558,-1.450914,-0.969470,-1.565043,-0.771794,-1.652393,-0.560912,-1.711470,-0.340433,-1.741264,-0.114128,-1.741264,0.114128,-1.711470,0.340433,-1.652393,0.560912,-1.565043,0.771794,-1.450914,0.969470,
|
||||
-1.311960,1.150558,-1.150558,1.311960,-0.969470,1.450914,-0.771794,1.565043,-0.560912,1.652393,-0.340433,1.711470,-0.114128,1.741264,0.114128,1.741264,0.340433,1.711470,0.340433,1.711470,$1*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10C,5.080000*%
|
||||
%ADD11O,1.700000X1.700000*%
|
||||
%ADD12R,1.700000X1.700000*%
|
||||
%ADD13C,1.500000*%
|
||||
%ADD14R,1.500000X1.500000*%
|
||||
%ADD15C,2.000000*%
|
||||
%ADD16C,4.000000*%
|
||||
%ADD17RoundRect,0.250000X0.475000X-0.250000X0.475000X0.250000X-0.475000X0.250000X-0.475000X-0.250000X0*%
|
||||
%ADD18RoundRect,0.200000X0.200000X0.275000X-0.200000X0.275000X-0.200000X-0.275000X0.200000X-0.275000X0*%
|
||||
%ADD19RoundRect,0.225000X-0.225000X-0.375000X0.225000X-0.375000X0.225000X0.375000X-0.225000X0.375000X0*%
|
||||
%ADD20RoundRect,0.200000X-0.275000X0.200000X-0.275000X-0.200000X0.275000X-0.200000X0.275000X0.200000X0*%
|
||||
%ADD21RoundRect,0.150000X0.150000X-0.750000X0.150000X0.750000X-0.150000X0.750000X-0.150000X-0.750000X0*%
|
||||
%ADD22O,2.890000X1.690000*%
|
||||
%ADD23R,3.490000X3.490000*%
|
||||
%ADD24FreePoly0,180.000000*%
|
||||
%ADD25C,1.700000*%
|
||||
%ADD26C,2.500000*%
|
||||
%ADD27RoundRect,0.250000X1.000000X1.000000X-1.000000X1.000000X-1.000000X-1.000000X1.000000X-1.000000X0*%
|
||||
%ADD28RoundRect,0.150000X-0.587500X-0.150000X0.587500X-0.150000X0.587500X0.150000X-0.587500X0.150000X0*%
|
||||
%ADD29C,1.800000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,U5*%
|
||||
X43486000Y-48507000D03*
|
||||
X67616000Y-66414000D03*
|
||||
X26976000Y-48507000D03*
|
||||
X67616000Y-90544000D03*
|
||||
D11*
|
||||
X58436000Y-104094000D03*
|
||||
D12*
|
||||
X58436000Y-111714000D03*
|
||||
D13*
|
||||
X26976000Y-89144000D03*
|
||||
X26976000Y-86604000D03*
|
||||
X26976000Y-84064000D03*
|
||||
X26976000Y-81524000D03*
|
||||
D14*
|
||||
X26976000Y-78984000D03*
|
||||
D13*
|
||||
X26976000Y-76444000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,U2*%
|
||||
X79846000Y-159237700D03*
|
||||
X79846000Y-161777700D03*
|
||||
X79846000Y-164317700D03*
|
||||
X79846000Y-166857700D03*
|
||||
X79846000Y-169397700D03*
|
||||
X79846000Y-171937700D03*
|
||||
X79846000Y-174477700D03*
|
||||
D12*
|
||||
X79846000Y-177017700D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,SW2*%
|
||||
X113153100Y-171754700D03*
|
||||
X113153100Y-182754700D03*
|
||||
D16*
|
||||
X119403100Y-179754700D03*
|
||||
X106903100Y-179754700D03*
|
||||
X119403100Y-174754700D03*
|
||||
X106903100Y-174754700D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,SW1*%
|
||||
X92964050Y-171754700D03*
|
||||
X92964050Y-182754700D03*
|
||||
D16*
|
||||
X99214050Y-179754700D03*
|
||||
X86714050Y-179754700D03*
|
||||
X99214050Y-174754700D03*
|
||||
X86714050Y-174754700D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,C2*%
|
||||
X105153100Y-169574000D03*
|
||||
X105153100Y-171474000D03*
|
||||
%TD*%
|
||||
%TO.C,C1*%
|
||||
X85214050Y-169574000D03*
|
||||
X85214050Y-171474000D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,R1*%
|
||||
X87889050Y-170024000D03*
|
||||
X89539050Y-170024000D03*
|
||||
%TD*%
|
||||
%TO.C,R2*%
|
||||
X107828100Y-170024000D03*
|
||||
X109478100Y-170024000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,D1*%
|
||||
X73519600Y-114934700D03*
|
||||
X76819600Y-114934700D03*
|
||||
%TD*%
|
||||
%TO.C,D2*%
|
||||
X88894600Y-114934700D03*
|
||||
X92194600Y-114934700D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,R4*%
|
||||
X86861600Y-113792700D03*
|
||||
X86861600Y-115442700D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,OC1*%
|
||||
X66752600Y-115027700D03*
|
||||
X69292600Y-115027700D03*
|
||||
X69292600Y-108727700D03*
|
||||
X66752600Y-108727700D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,R5*%
|
||||
X71522600Y-108727700D03*
|
||||
X71522600Y-110377700D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,T1*%
|
||||
X120206100Y-99847000D03*
|
||||
D11*
|
||||
X120206100Y-94767000D03*
|
||||
D12*
|
||||
X120146100Y-74193000D03*
|
||||
D11*
|
||||
X120146100Y-71653000D03*
|
||||
%TD*%
|
||||
D22*
|
||||
%TO.C,SW3*%
|
||||
X112727505Y-164037700D03*
|
||||
X112727505Y-159237700D03*
|
||||
X112727505Y-154437700D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,J1*%
|
||||
X115923100Y-37140300D03*
|
||||
D24*
|
||||
X106423100Y-37140300D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,J4*%
|
||||
X43021000Y-116377700D03*
|
||||
D25*
|
||||
X45561000Y-116377700D03*
|
||||
X48101000Y-116377700D03*
|
||||
%TD*%
|
||||
D26*
|
||||
%TO.C,K2*%
|
||||
X91270300Y-72414000D03*
|
||||
X77070300Y-78414000D03*
|
||||
X77070300Y-66414000D03*
|
||||
D27*
|
||||
X89270300Y-78414000D03*
|
||||
D26*
|
||||
X89270300Y-66414000D03*
|
||||
%TD*%
|
||||
D28*
|
||||
%TO.C,Q2*%
|
||||
X90319600Y-110377700D03*
|
||||
X90319600Y-112277700D03*
|
||||
X92194600Y-111327700D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,U3*%
|
||||
X87249000Y-120714700D03*
|
||||
D11*
|
||||
X89789000Y-120714700D03*
|
||||
X92329000Y-120714700D03*
|
||||
X94869000Y-120714700D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,R3*%
|
||||
X71522600Y-113802700D03*
|
||||
X71522600Y-115452700D03*
|
||||
%TD*%
|
||||
D28*
|
||||
%TO.C,Q1*%
|
||||
X74944600Y-110377700D03*
|
||||
X74944600Y-112277700D03*
|
||||
X76819600Y-111327700D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,J5*%
|
||||
X55476000Y-37140300D03*
|
||||
D24*
|
||||
X45976000Y-37140300D03*
|
||||
X36476000Y-37140300D03*
|
||||
X26976000Y-37140300D03*
|
||||
%TD*%
|
||||
D22*
|
||||
%TO.C,SW4*%
|
||||
X92976000Y-164037700D03*
|
||||
X92976000Y-159237700D03*
|
||||
X92976000Y-154437700D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,R6*%
|
||||
X86861600Y-108727700D03*
|
||||
X86861600Y-110377700D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,OC2*%
|
||||
X82035600Y-115027700D03*
|
||||
X84575600Y-115027700D03*
|
||||
X84575600Y-108727700D03*
|
||||
X82035600Y-108727700D03*
|
||||
%TD*%
|
||||
D26*
|
||||
%TO.C,K1*%
|
||||
X91270300Y-96544000D03*
|
||||
X77070300Y-102544000D03*
|
||||
X77070300Y-90544000D03*
|
||||
D27*
|
||||
X89270300Y-102544000D03*
|
||||
D26*
|
||||
X89270300Y-90544000D03*
|
||||
%TD*%
|
||||
D29*
|
||||
%TO.C,U1*%
|
||||
X68421000Y-120377700D03*
|
||||
X65881000Y-120377700D03*
|
||||
X63341000Y-120377700D03*
|
||||
X60801000Y-120377700D03*
|
||||
X58261000Y-120377700D03*
|
||||
X55721000Y-120377700D03*
|
||||
X53181000Y-120377700D03*
|
||||
X50641000Y-120377700D03*
|
||||
X48101000Y-120377700D03*
|
||||
X45561000Y-120377700D03*
|
||||
X43021000Y-120377700D03*
|
||||
X40481000Y-120377700D03*
|
||||
X37941000Y-120377700D03*
|
||||
X35401000Y-120377700D03*
|
||||
X32861000Y-120377700D03*
|
||||
X30321000Y-120377700D03*
|
||||
X27781000Y-120377700D03*
|
||||
X25241000Y-120377700D03*
|
||||
X22701000Y-120377700D03*
|
||||
X68421000Y-145777700D03*
|
||||
X65881000Y-145777700D03*
|
||||
X63341000Y-145777700D03*
|
||||
X60801000Y-145777700D03*
|
||||
X58261000Y-145777700D03*
|
||||
X55721000Y-145777700D03*
|
||||
X53181000Y-145777700D03*
|
||||
X50641000Y-145777700D03*
|
||||
X48101000Y-145777700D03*
|
||||
X45561000Y-145777700D03*
|
||||
X43021000Y-145777700D03*
|
||||
X40481000Y-145777700D03*
|
||||
X37941000Y-145777700D03*
|
||||
X35401000Y-145777700D03*
|
||||
X32861000Y-145777700D03*
|
||||
X30321000Y-145777700D03*
|
||||
X27781000Y-145777700D03*
|
||||
X25241000Y-145777700D03*
|
||||
X22701000Y-145777700D03*
|
||||
%TD*%
|
||||
M02*
|
||||
112
hardware/pcb/out/HeliosDAONE-F_Paste.gbr
Normal file
112
hardware/pcb/out/HeliosDAONE-F_Paste.gbr
Normal file
@@ -0,0 +1,112 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,10.0.1*%
|
||||
%TF.CreationDate,2026-04-17T01:40:59+08:00*%
|
||||
%TF.ProjectId,HeliosDAONE,48656c69-6f73-4444-914f-4e452e6b6963,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Paste,Top*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 10.0.1) date 2026-04-17 01:40:59*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
|
||||
0 Add a 4 corners polygon primitive as box body*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10RoundRect,0.250000X0.475000X-0.250000X0.475000X0.250000X-0.475000X0.250000X-0.475000X-0.250000X0*%
|
||||
%ADD11RoundRect,0.200000X0.200000X0.275000X-0.200000X0.275000X-0.200000X-0.275000X0.200000X-0.275000X0*%
|
||||
%ADD12RoundRect,0.225000X-0.225000X-0.375000X0.225000X-0.375000X0.225000X0.375000X-0.225000X0.375000X0*%
|
||||
%ADD13RoundRect,0.200000X-0.275000X0.200000X-0.275000X-0.200000X0.275000X-0.200000X0.275000X0.200000X0*%
|
||||
%ADD14RoundRect,0.150000X0.150000X-0.750000X0.150000X0.750000X-0.150000X0.750000X-0.150000X-0.750000X0*%
|
||||
%ADD15RoundRect,0.150000X-0.587500X-0.150000X0.587500X-0.150000X0.587500X0.150000X-0.587500X0.150000X0*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,C2*%
|
||||
X105153100Y-169574000D03*
|
||||
X105153100Y-171474000D03*
|
||||
%TD*%
|
||||
%TO.C,C1*%
|
||||
X85214050Y-169574000D03*
|
||||
X85214050Y-171474000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,R1*%
|
||||
X87889050Y-170024000D03*
|
||||
X89539050Y-170024000D03*
|
||||
%TD*%
|
||||
%TO.C,R2*%
|
||||
X107828100Y-170024000D03*
|
||||
X109478100Y-170024000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,D1*%
|
||||
X73519600Y-114934700D03*
|
||||
X76819600Y-114934700D03*
|
||||
%TD*%
|
||||
%TO.C,D2*%
|
||||
X88894600Y-114934700D03*
|
||||
X92194600Y-114934700D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,R4*%
|
||||
X86861600Y-113792700D03*
|
||||
X86861600Y-115442700D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,OC1*%
|
||||
X66752600Y-115027700D03*
|
||||
X69292600Y-115027700D03*
|
||||
X69292600Y-108727700D03*
|
||||
X66752600Y-108727700D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,R5*%
|
||||
X71522600Y-108727700D03*
|
||||
X71522600Y-110377700D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,Q2*%
|
||||
X90319600Y-110377700D03*
|
||||
X90319600Y-112277700D03*
|
||||
X92194600Y-111327700D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,R3*%
|
||||
X71522600Y-113802700D03*
|
||||
X71522600Y-115452700D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,Q1*%
|
||||
X74944600Y-110377700D03*
|
||||
X74944600Y-112277700D03*
|
||||
X76819600Y-111327700D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,R6*%
|
||||
X86861600Y-108727700D03*
|
||||
X86861600Y-110377700D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,OC2*%
|
||||
X82035600Y-115027700D03*
|
||||
X84575600Y-115027700D03*
|
||||
X84575600Y-108727700D03*
|
||||
X82035600Y-108727700D03*
|
||||
%TD*%
|
||||
M02*
|
||||
4532
hardware/pcb/out/HeliosDAONE-F_Silkscreen.gbr
Normal file
4532
hardware/pcb/out/HeliosDAONE-F_Silkscreen.gbr
Normal file
File diff suppressed because it is too large
Load Diff
179
hardware/pcb/out/HeliosDAONE-NPTH-drl_map.gbr
Normal file
179
hardware/pcb/out/HeliosDAONE-NPTH-drl_map.gbr
Normal file
@@ -0,0 +1,179 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,10.0.1*%
|
||||
%TF.CreationDate,2026-04-17T01:41:30+08:00*%
|
||||
%TF.ProjectId,HeliosDAONE,48656c69-6f73-4444-914f-4e452e6b6963,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Drillmap*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX45Y45*%
|
||||
G04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 10.0.1) date 2026-04-17 01:41:30*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.050000*%
|
||||
%ADD11C,0.200000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X1725400Y-2178000D02*
|
||||
X1725400Y-2178000D01*
|
||||
G75*
|
||||
G02*
|
||||
X2125400Y-1778000I400000J0D01*
|
||||
G01*
|
||||
X12325400Y-1778000D01*
|
||||
G75*
|
||||
G02*
|
||||
X12725400Y-2178000I0J-400000D01*
|
||||
G01*
|
||||
X12725400Y-18878000D01*
|
||||
G75*
|
||||
G02*
|
||||
X12325400Y-19278000I-400000J0D01*
|
||||
G01*
|
||||
X2125400Y-19278000D01*
|
||||
G75*
|
||||
G02*
|
||||
X1725400Y-18878000I0J400000D01*
|
||||
G01*
|
||||
X1725400Y-2178000D01*
|
||||
D11*
|
||||
X1983677Y-19591984D02*
|
||||
X1983677Y-19391984D01*
|
||||
X1983677Y-19391984D02*
|
||||
X2031296Y-19391984D01*
|
||||
X2031296Y-19391984D02*
|
||||
X2059867Y-19401508D01*
|
||||
X2059867Y-19401508D02*
|
||||
X2078915Y-19420555D01*
|
||||
X2078915Y-19420555D02*
|
||||
X2088439Y-19439603D01*
|
||||
X2088439Y-19439603D02*
|
||||
X2097963Y-19477698D01*
|
||||
X2097963Y-19477698D02*
|
||||
X2097963Y-19506270D01*
|
||||
X2097963Y-19506270D02*
|
||||
X2088439Y-19544365D01*
|
||||
X2088439Y-19544365D02*
|
||||
X2078915Y-19563412D01*
|
||||
X2078915Y-19563412D02*
|
||||
X2059867Y-19582460D01*
|
||||
X2059867Y-19582460D02*
|
||||
X2031296Y-19591984D01*
|
||||
X2031296Y-19591984D02*
|
||||
X1983677Y-19591984D01*
|
||||
X2183677Y-19591984D02*
|
||||
X2183677Y-19458650D01*
|
||||
X2183677Y-19496746D02*
|
||||
X2193201Y-19477698D01*
|
||||
X2193201Y-19477698D02*
|
||||
X2202724Y-19468174D01*
|
||||
X2202724Y-19468174D02*
|
||||
X2221772Y-19458650D01*
|
||||
X2221772Y-19458650D02*
|
||||
X2240820Y-19458650D01*
|
||||
X2307486Y-19591984D02*
|
||||
X2307486Y-19458650D01*
|
||||
X2307486Y-19391984D02*
|
||||
X2297963Y-19401508D01*
|
||||
X2297963Y-19401508D02*
|
||||
X2307486Y-19411031D01*
|
||||
X2307486Y-19411031D02*
|
||||
X2317010Y-19401508D01*
|
||||
X2317010Y-19401508D02*
|
||||
X2307486Y-19391984D01*
|
||||
X2307486Y-19391984D02*
|
||||
X2307486Y-19411031D01*
|
||||
X2431296Y-19591984D02*
|
||||
X2412248Y-19582460D01*
|
||||
X2412248Y-19582460D02*
|
||||
X2402724Y-19563412D01*
|
||||
X2402724Y-19563412D02*
|
||||
X2402724Y-19391984D01*
|
||||
X2536058Y-19591984D02*
|
||||
X2517010Y-19582460D01*
|
||||
X2517010Y-19582460D02*
|
||||
X2507486Y-19563412D01*
|
||||
X2507486Y-19563412D02*
|
||||
X2507486Y-19391984D01*
|
||||
X2764629Y-19591984D02*
|
||||
X2764629Y-19391984D01*
|
||||
X2764629Y-19391984D02*
|
||||
X2831296Y-19534841D01*
|
||||
X2831296Y-19534841D02*
|
||||
X2897962Y-19391984D01*
|
||||
X2897962Y-19391984D02*
|
||||
X2897962Y-19591984D01*
|
||||
X3078915Y-19591984D02*
|
||||
X3078915Y-19487222D01*
|
||||
X3078915Y-19487222D02*
|
||||
X3069391Y-19468174D01*
|
||||
X3069391Y-19468174D02*
|
||||
X3050343Y-19458650D01*
|
||||
X3050343Y-19458650D02*
|
||||
X3012248Y-19458650D01*
|
||||
X3012248Y-19458650D02*
|
||||
X2993201Y-19468174D01*
|
||||
X3078915Y-19582460D02*
|
||||
X3059867Y-19591984D01*
|
||||
X3059867Y-19591984D02*
|
||||
X3012248Y-19591984D01*
|
||||
X3012248Y-19591984D02*
|
||||
X2993201Y-19582460D01*
|
||||
X2993201Y-19582460D02*
|
||||
X2983677Y-19563412D01*
|
||||
X2983677Y-19563412D02*
|
||||
X2983677Y-19544365D01*
|
||||
X2983677Y-19544365D02*
|
||||
X2993201Y-19525317D01*
|
||||
X2993201Y-19525317D02*
|
||||
X3012248Y-19515793D01*
|
||||
X3012248Y-19515793D02*
|
||||
X3059867Y-19515793D01*
|
||||
X3059867Y-19515793D02*
|
||||
X3078915Y-19506270D01*
|
||||
X3174153Y-19458650D02*
|
||||
X3174153Y-19658650D01*
|
||||
X3174153Y-19468174D02*
|
||||
X3193201Y-19458650D01*
|
||||
X3193201Y-19458650D02*
|
||||
X3231296Y-19458650D01*
|
||||
X3231296Y-19458650D02*
|
||||
X3250343Y-19468174D01*
|
||||
X3250343Y-19468174D02*
|
||||
X3259867Y-19477698D01*
|
||||
X3259867Y-19477698D02*
|
||||
X3269391Y-19496746D01*
|
||||
X3269391Y-19496746D02*
|
||||
X3269391Y-19553889D01*
|
||||
X3269391Y-19553889D02*
|
||||
X3259867Y-19572936D01*
|
||||
X3259867Y-19572936D02*
|
||||
X3250343Y-19582460D01*
|
||||
X3250343Y-19582460D02*
|
||||
X3231296Y-19591984D01*
|
||||
X3231296Y-19591984D02*
|
||||
X3193201Y-19591984D01*
|
||||
X3193201Y-19591984D02*
|
||||
X3174153Y-19582460D01*
|
||||
X3355105Y-19572936D02*
|
||||
X3364629Y-19582460D01*
|
||||
X3364629Y-19582460D02*
|
||||
X3355105Y-19591984D01*
|
||||
X3355105Y-19591984D02*
|
||||
X3345582Y-19582460D01*
|
||||
X3345582Y-19582460D02*
|
||||
X3355105Y-19572936D01*
|
||||
X3355105Y-19572936D02*
|
||||
X3355105Y-19591984D01*
|
||||
X3355105Y-19468174D02*
|
||||
X3364629Y-19477698D01*
|
||||
X3364629Y-19477698D02*
|
||||
X3355105Y-19487222D01*
|
||||
X3355105Y-19487222D02*
|
||||
X3345582Y-19477698D01*
|
||||
X3345582Y-19477698D02*
|
||||
X3355105Y-19468174D01*
|
||||
X3355105Y-19468174D02*
|
||||
X3355105Y-19487222D01*
|
||||
M02*
|
||||
12
hardware/pcb/out/HeliosDAONE-NPTH.drl
Normal file
12
hardware/pcb/out/HeliosDAONE-NPTH.drl
Normal file
@@ -0,0 +1,12 @@
|
||||
M48
|
||||
; DRILL file KiCad 10.0.1 date 2026-04-17T01:41:30
|
||||
; FORMAT={-:-/ absolute / metric / decimal}
|
||||
; #@! TF.CreationDate,2026-04-17T01:41:30+08:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,10.0.1
|
||||
; #@! TF.FileFunction,NonPlated,1,2,NPTH
|
||||
FMAT,2
|
||||
METRIC
|
||||
%
|
||||
G90
|
||||
G05
|
||||
M30
|
||||
5738
hardware/pcb/out/HeliosDAONE-PTH-drl_map.gbr
Normal file
5738
hardware/pcb/out/HeliosDAONE-PTH-drl_map.gbr
Normal file
File diff suppressed because it is too large
Load Diff
187
hardware/pcb/out/HeliosDAONE-PTH.drl
Normal file
187
hardware/pcb/out/HeliosDAONE-PTH.drl
Normal file
@@ -0,0 +1,187 @@
|
||||
M48
|
||||
; DRILL file KiCad 10.0.1 date 2026-04-17T01:41:30
|
||||
; FORMAT={-:-/ absolute / metric / decimal}
|
||||
; #@! TF.CreationDate,2026-04-17T01:41:30+08:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,10.0.1
|
||||
; #@! TF.FileFunction,Plated,1,2,PTH
|
||||
FMAT,2
|
||||
METRIC
|
||||
; #@! TA.AperFunction,Plated,PTH,ViaDrill
|
||||
T1C0.300
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T2C0.850
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T3C0.900
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T4C1.000
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T5C1.100
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T6C1.300
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T7C1.980
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T8C2.540
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X39.116Y-84.074
|
||||
X39.116Y-86.614
|
||||
X51.181Y-161.798
|
||||
X52.578Y-118.999
|
||||
X58.293Y-126.111
|
||||
X59.817Y-132.969
|
||||
X67.183Y-167.259
|
||||
X68.707Y-124.079
|
||||
X68.707Y-125.476
|
||||
X72.517Y-117.094
|
||||
X75.184Y-113.919
|
||||
X76.327Y-161.798
|
||||
X76.327Y-171.958
|
||||
X82.069Y-86.904
|
||||
X83.312Y-76.327
|
||||
X89.308Y-86.904
|
||||
X92.98Y-117.102
|
||||
X92.98Y-118.102
|
||||
X93.98Y-117.102
|
||||
X93.98Y-118.102
|
||||
X94.869Y-86.868
|
||||
X94.98Y-117.102
|
||||
X94.98Y-118.102
|
||||
T2
|
||||
X92.964Y-171.755
|
||||
X92.964Y-182.755
|
||||
X113.153Y-171.755
|
||||
X113.153Y-182.755
|
||||
T3
|
||||
X26.976Y-76.444
|
||||
X26.976Y-78.984
|
||||
X26.976Y-81.524
|
||||
X26.976Y-84.064
|
||||
X26.976Y-86.604
|
||||
X26.976Y-89.144
|
||||
T4
|
||||
X22.701Y-120.378
|
||||
X22.701Y-145.778
|
||||
X25.241Y-120.378
|
||||
X25.241Y-145.778
|
||||
X27.781Y-120.378
|
||||
X27.781Y-145.778
|
||||
X30.321Y-120.378
|
||||
X30.321Y-145.778
|
||||
X32.861Y-120.378
|
||||
X32.861Y-145.778
|
||||
X35.401Y-120.378
|
||||
X35.401Y-145.778
|
||||
X37.941Y-120.378
|
||||
X37.941Y-145.778
|
||||
X40.481Y-120.378
|
||||
X40.481Y-145.778
|
||||
X43.021Y-116.378
|
||||
X43.021Y-120.378
|
||||
X43.021Y-145.778
|
||||
X45.561Y-116.378
|
||||
X45.561Y-120.378
|
||||
X45.561Y-145.778
|
||||
X48.101Y-116.378
|
||||
X48.101Y-120.378
|
||||
X48.101Y-145.778
|
||||
X50.641Y-120.378
|
||||
X50.641Y-145.778
|
||||
X53.181Y-120.378
|
||||
X53.181Y-145.778
|
||||
X55.721Y-120.378
|
||||
X55.721Y-145.778
|
||||
X58.261Y-120.378
|
||||
X58.261Y-145.778
|
||||
X58.436Y-104.094
|
||||
X58.436Y-111.714
|
||||
X60.801Y-120.378
|
||||
X60.801Y-145.778
|
||||
X63.341Y-120.378
|
||||
X63.341Y-145.778
|
||||
X65.881Y-120.378
|
||||
X65.881Y-145.778
|
||||
X68.421Y-120.378
|
||||
X68.421Y-145.778
|
||||
X79.846Y-159.238
|
||||
X79.846Y-161.778
|
||||
X79.846Y-164.318
|
||||
X79.846Y-166.858
|
||||
X79.846Y-169.398
|
||||
X79.846Y-171.938
|
||||
X79.846Y-174.478
|
||||
X79.846Y-177.018
|
||||
X87.249Y-120.715
|
||||
X89.789Y-120.715
|
||||
X92.329Y-120.715
|
||||
X94.869Y-120.715
|
||||
X120.146Y-71.653
|
||||
X120.146Y-74.193
|
||||
X120.206Y-94.767
|
||||
X120.206Y-99.847
|
||||
T5
|
||||
X86.714Y-174.755
|
||||
X86.714Y-179.755
|
||||
X99.214Y-174.755
|
||||
X99.214Y-179.755
|
||||
X106.903Y-174.755
|
||||
X106.903Y-179.755
|
||||
X119.403Y-174.755
|
||||
X119.403Y-179.755
|
||||
T6
|
||||
X77.07Y-66.414
|
||||
X77.07Y-78.414
|
||||
X77.07Y-90.544
|
||||
X77.07Y-102.544
|
||||
X89.27Y-66.414
|
||||
X89.27Y-78.414
|
||||
X89.27Y-90.544
|
||||
X89.27Y-102.544
|
||||
X91.27Y-72.414
|
||||
X91.27Y-96.544
|
||||
T7
|
||||
X26.976Y-37.14
|
||||
X36.476Y-37.14
|
||||
X45.976Y-37.14
|
||||
X55.476Y-37.14
|
||||
X106.423Y-37.14
|
||||
X115.923Y-37.14
|
||||
T8
|
||||
X26.976Y-48.507
|
||||
X43.486Y-48.507
|
||||
X67.616Y-66.414
|
||||
X67.616Y-90.544
|
||||
T5
|
||||
G00X92.381Y-154.438
|
||||
M15
|
||||
G01X93.571Y-154.438
|
||||
M16
|
||||
G05
|
||||
G00X92.381Y-159.238
|
||||
M15
|
||||
G01X93.571Y-159.238
|
||||
M16
|
||||
G05
|
||||
G00X92.381Y-164.038
|
||||
M15
|
||||
G01X93.571Y-164.038
|
||||
M16
|
||||
G05
|
||||
G00X112.133Y-154.438
|
||||
M15
|
||||
G01X113.323Y-154.438
|
||||
M16
|
||||
G05
|
||||
G00X112.133Y-159.238
|
||||
M15
|
||||
G01X113.323Y-159.238
|
||||
M16
|
||||
G05
|
||||
G00X112.133Y-164.038
|
||||
M15
|
||||
G01X113.323Y-164.038
|
||||
M16
|
||||
G05
|
||||
M30
|
||||
127
hardware/pcb/out/HeliosDAONE-job.gbrjob
Normal file
127
hardware/pcb/out/HeliosDAONE-job.gbrjob
Normal file
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"Header": {
|
||||
"GenerationSoftware": {
|
||||
"Vendor": "KiCad",
|
||||
"Application": "Pcbnew",
|
||||
"Version": "10.0.1"
|
||||
},
|
||||
"CreationDate": "2026-04-17T01:40:59+08:00"
|
||||
},
|
||||
"GeneralSpecs": {
|
||||
"ProjectId": {
|
||||
"Name": "HeliosDAONE",
|
||||
"GUID": "48656c69-6f73-4444-914f-4e452e6b6963",
|
||||
"Revision": "rev?"
|
||||
},
|
||||
"Size": {
|
||||
"X": 110.05,
|
||||
"Y": 175.05
|
||||
},
|
||||
"LayerNumber": 2,
|
||||
"BoardThickness": 1.6,
|
||||
"Finish": "None"
|
||||
},
|
||||
"DesignRules": [
|
||||
{
|
||||
"Layers": "Outer",
|
||||
"PadToPad": 0.254,
|
||||
"PadToTrack": 0.254,
|
||||
"TrackToTrack": -0.0,
|
||||
"MinLineWidth": 0.254,
|
||||
"TrackToRegion": 0.5,
|
||||
"RegionToRegion": 0.5
|
||||
}
|
||||
],
|
||||
"FilesAttributes": [
|
||||
{
|
||||
"Path": "HeliosDAONE-F_Cu.gbr",
|
||||
"FileFunction": "Copper,L1,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "HeliosDAONE-B_Cu.gbr",
|
||||
"FileFunction": "Copper,L2,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "HeliosDAONE-F_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "HeliosDAONE-B_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "HeliosDAONE-F_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "HeliosDAONE-B_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "HeliosDAONE-F_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Top",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "HeliosDAONE-B_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Bot",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "HeliosDAONE-Edge_Cuts.gbr",
|
||||
"FileFunction": "Profile",
|
||||
"FilePolarity": "Positive"
|
||||
}
|
||||
],
|
||||
"MaterialStackup": [
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Top Silk Screen"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Top Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Thickness": 0.01,
|
||||
"Name": "Top Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "F.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Thickness": 1.51,
|
||||
"Material": "FR4",
|
||||
"Name": "F.Cu/B.Cu",
|
||||
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "B.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Thickness": 0.01,
|
||||
"Name": "Bottom Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Bottom Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Bottom Silk Screen"
|
||||
}
|
||||
]
|
||||
}
|
||||
5
hardware/pcb/sym-lib-table
Normal file
5
hardware/pcb/sym-lib-table
Normal file
@@ -0,0 +1,5 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "converted") (type "KiCad") (uri "${KIPRJMOD}/library/converted.kicad_sym") (options "") (descr ""))
|
||||
(lib (name "RayineComponents") (type "KiCad") (uri "${KIPRJMOD}/library/RayineComponents.kicad_sym") (options "") (descr ""))
|
||||
)
|
||||
11
helios-evcs.code-workspace
Normal file
11
helios-evcs.code-workspace
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "."
|
||||
},
|
||||
{
|
||||
"name": "firmware",
|
||||
"path": "hardware/firmware"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user