Skip to the content
PCBKitNew board
2 layers64 × 30 mmBell Boy, the printed circuit board in 3D

Code for the "Bell-Boy" Project

Size
64 × 30 mm
Copper layers
2
Thickness
1.6 mm
Parts
35
Nets
32
Pads
165
Tracks, vias
550, 65
Pours
1
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
5 Jul 2017
Updated
31 Aug 2019

Overview

Bell Boy is an open-source printed circuit board by BBUK, from the BBUK/Bell-Boy repository on GitHub. It is a 2-layer board of 64 × 30 mm with 35 parts on 32 nets, routed with 550 tracks and 65 vias.

It is built around the ATMEGA328P-AU, MAX40200AUK and ICM-20689, with the BAT54C among its other parts. Its parts include 10 capacitors, 8 resistors, 5 ICs, 4 connectors and 2 diodes. It belongs with the sensors and measurement boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

4

README

README.md

Bell-Boy

NEW VERSION IMMINENT - THIS REPOSITORY CONTAINS A GREAT DEAL OF CODE AND INFORMATION IN FLUX BETWEEN VERSIONS SO SHOULD NOT BE RELIED UPON

This repository contains the code and hardware design for the Bell-Boy Project.

The Bell-Boy is a device used to measure how hard a person pulls on a tower bell rope. I hope it will be a useful training aid.

Hardware

The core of the hardware comprises a Raspberry Pi Zero and a PCB mounted on it containing an IMU IC (an ICM20689), a ATMEGA328 with the Arduino bootloader and power management and battery charging circuitry. The Arduino manages battery charging, controls a LED and also stores device calibration data. The battery is a LiPo integral to the device and is charged via power sourced from the Rasperry Pi's micro USB power socket. The wiki gives construction information if you want to build your own.

The various files and a description of what they do is set out below

This is the second version of the hardware. The first version was designed to be mounted on top of the headstock. More accurate measurements were found to have been achieved by mounting the device closer to the gudgeon pins of the bell. That required the device to be smaller, which required a LiPo battery. As I could not find a case that would fit a Pi0 and one of the AA sized LiPo batteries, a "flat" LiPo was used which then needed associated charging paraphernalia.

Despite only using one consumer-grade IMU, the second version is much more accurate than the first. There is virtually zero drift in angular readings for all three axes (less than 0.3 degrees per hour). Acceleration measurements are similarly improved.

Software

setupBB.sh

This script takes a stock installation of Arch Linux Arm (for the Raspberry Pi) and adds all scripts and installs all required packages to set up the software environment. See the wiki for more details

grabber

This folder contains the source for two small executables.

The first, "grabber" takes data from the IMU, transforms it into angle, rotational velocity and rotational acceleration and pushes the data to the users browser via a websocket. As the force applied by the ringer on the rope needs to be distinguished from gravity, vibration and sensor noise, the solution:

(a) oversamples data from the IMUs (sensors output at 500Hz but the user sees 125Hz).

(b) uses a straightforward Mahony-type filter to calculate angles (I previously used the extended Kalman filter (from https://github.com/hhyyti/dcm-imu) to calculate bell angle but it produced no better results in this application).

(c) uses a Savitsky-Golay filter to smooth the measured rotational acceleration

(d) requires an one-time calibration of the IMU system (from https://bitbucket.org/alberto_pretto/imu_tk). This is a really useful method of scale and bias calibration that does not require the IMU to be exactly positioned.

The grabber communicates with the user's broswer via websocketd (https://github.com/joewalnes/websocketd).

The second executable "powermonitor" monitors battery level reports from the Arduino and shuts down the Pi if he battery is too low. It only operates when the grabber is not running (the grabber only runs when there is an active websocket connection to the user's browser - if there is such a connection, the grabber takes over power monitoring).

bellboy.js

The Javascript that takes the data from the Bell-Boy and presents it to the users browser. The browser must support HTML5 and websockets. More details for operation are in the wiki.

index.html

Index file. Note that this file and the JS reference certain image files (icons used to control the front end). These were licensed in my me but whilst I am permitted to include them on websites that I operate or in code that I distribute, I am not permitted to make them available in a separately downloadable form.

help.html

Help html file served by the Bell-Boy device.

utility

Some useful utility programs and files. There is some information here on installing imu_tk (and in particular ceres-solver which is used by imu_tk).

arduino

Contains the Arduino program running on the "Arduino'd" ATMEGA328 on the Bell-Boy PCB

old

Contains some old code and in particular some code for BNO080 interfacing over the Raspberry Pi's SPI which some people may find useful. I am no longer using the BNO080 so don't expect this code to be updated.

Donations!

Donations to this project are welcome :)

Parts

35
QtyValueFootprintReferences
510KResistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolderR2, R4, R5, R6, R8
4MountingHole:MountingHole_2.7mm_M2.5, , ,
4100nCapacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolderC1, C2, C3, C10
34u7Capacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolderC4, C5, C6
2MAX40200Package_TO_SOT_SMD:SOT-23-5U2, U4
1100KResistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolderR7
110nCapacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolderC7
12.2ufCapacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolderC14
14.7kResistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolderR3
1470nFCapacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolderC9
182RResistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolderR1
1ATmega328P-AUPackage_QFP:LQFP-32_7x7mm_P0.8mmU1
1BAT54CPackage_TO_SOT_SMD:SOT-23D1
1Battery_CellConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalBATT1
1Conn_01x01_MaleConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ1
1Conn_01x04Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ3
1Conn_01x06Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ2
1Conn_02x16_Odd_EvenConnector_PinSocket_2.54mm:PinSocket_2x16_P2.54mm_Vertical_SMDJ4
1ICM-20689Sensor_Motion:InvenSense_QFN-24_4x4mm_P0.5mmU5
1LED_Dual_2pinConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalLED1
1MCP73831-2-OTPackage_TO_SOT_SMD:SOT-23-5U3
1SW_DIP_x01Button_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx39-2LFSSW1

Questions

How big is the Bell Boy PCB?

It measures 64 × 30 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Bell Boy use?

35 parts, built around the ATMEGA328P-AU, MAX40200AUK, ICM-20689 and BAT54C. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Bell Boy KiCad files?

From the BBUK/Bell-Boy repository on GitHub, at the commit this page was made from: the board is kicad/Bell-Boy.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Bell Boy design in my own project?

Its repository states no licence, so its author keeps all rights: ask BBUK before reusing the design.

Similar boards

  • 2 layers63 × 88 mmParagon, the printed circuit board in 3D

    Paragon

    timbalicious/netrunner_paragon_pcb

    Possibly functional PCB alt-art Paragon for the Netrunner LCG

    128 parts
  • 4 layers43.2 × 43.2 mmPogobot head, the printed circuit board in 3D

    Pogobot head

    nekonaute/pogobot

    Pogobot is an open-source open-hardware robotic platform for swarm robotics

    140 parts21
  • 4 layers42 × 50 mmSimpleFC G, the printed circuit board in 3D

    SimpleFC G

    wangyeee/OpenHardware

    Collections of hardware design related to my drone project.

    134 parts10BSD-3-Clause
  • 2 layers58.5 × 58.5 mmMCopter, the printed circuit board in 3D

    MCopter

    UnTraDe/MCopter

    Quadcopter from scratch

    71 parts5
  • 2 layers53.8 × 53.1 mmObd32, the printed circuit board in 3D

    Obd32

    mkrasselt1/obd32

    Anyone is free to join our goal to make the hardware reliable and affordable.

    79 parts4
  • 2 layers50 × 50 mmFlight Controller PCB, the printed circuit board in 3D

    Flight Controller PCB

    MarkSherstan/Drone

    Mechanical, electrical, and software package for a custom quadcopter drone.

    78 parts3MIT