diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..c407d9d --- /dev/null +++ b/404.html @@ -0,0 +1,3125 @@ + + + +
+ + + + + + + + + + + + + + +
+Version 2, released May 2023
+
+Version 1, released November 2017
+
+The analog input module records voltage waveforms from 8 input channels, and sends voltage threshold crossing events to the Bpod state machine.
Firmware for the analog input module is available here.
+
+The analog output module plays voltage sequences on 4 or 8 output channels. Output is driven by the Analog Devices AD5754R DAC.
Version 1 was released in 2017. It is powered by PJRC Teensy 3.6.
+Version 2 was released in 2023. It is powered by PJRC Teensy 4.1.
+Several firmware versions are available for the device:
+Hardware Specs:
+Specs with WavePlayer firmware (arbitrary waveform playback on trigger):
+Firmware for the analog output module is available here.
+*The analog output module is a general purpose DAC. High definition sound playback is available via the HiFi module.
+The Bpod/Arduino shield allows Bpod to control Arduino devices. It's very simple to build. Here's how.
+Bpod Arduino shield for Bpod 0.7+, designed by Sanworks.
+The Arduino shield interfaces the Bpod state machine with Arduino M0, Arduino Zero, Arduino Due or Adafruit Metro M4.
+It is an interface for making custom Arduino-based modules, encapsulating different sensors and actuators.
+The shield exchanges UART messages via Arduino serial objects: Serial1 (Arduino M0, Zero, Metro M4) or Serial (Arduino Due).
+It uses only Arduino digital pins 0 and 1. Pin 13's LED is broken out to the top of the shield for visibility.
+The UART stream is buffered to full-duplex RS-485 via a converter IC. An identical chip on the state machine restores the message to single-ended 3.3V logic levels.
+Example Arduino files for use with the Bpod shield + Arduino are available here.
+
+The DDS (direct digitzal synthezier) module outputs a continuous sine or triangle wave, with frequency and amplitude modulated by the state machine, a separate Bpod module or both in parallel.
Specs:
+Note: This module loosely implements Analog Devices Circuit Note CN0156 for amplitude control. The output channel is directly driven by the DDS IC, resulting in a DC offset that varies slightly with the amplitude setting. See the amplitude adjustment section in the MATLAB plugin documentation for more info.
+Firmware for the DDS module is available here.
+The Bpod Ethernet module allows devices on the local network to exchange messages with the state machine (v0.7-0.9, 2.0).
+For state machine v2, it can also act as the primary communication channel, replacing the USB cable. This allows computers to be significantly more distant from the rigs they control. To do this, upload SM_Relay firmware to the Ethernet module, Ethernet-routed state machine firmware to the state machine, and call Bpod with an IP address argument - e.g. Bpod('192.168.1.110'). Note: you must have Bpod Console v1.5.3 or newer.
+NOTE: Currently, the module requires the MATLAB instrument control toolbox. An alternative (free and open) interface via PsychToolbox is under development.
+
+The Bpod HiFi Module stores audio waveforms and play them back on trigger.
Audio waveforms are rendered by HiFiBerry DAC2 Pro and DAC2 HD cards.
+Our firmware directly drives these cards with Teensy 4.1 for superior timing precision.
+An isolated TTL output channel signals audio playback onset and offset.
+Synth functions are provided for programmatic control of white noise and pure tones.
+Hardware for the two modules is identical except for the enclosure and HiFiBerry card used.
+A single firmware file can be set to compile for either module.
+More details are available in the product release article here.
+Key specs are:
+The HiFi module is controlled from MATLAB with the BpodHiFi class.
+Its interfaces to the Bpod State Machine and USB are documented here.
+This table contrasts the HiFiBerry cards in the 'SD' and 'HD' versions of the module:
+ + +The Hardware section contains supporting information for assembling Bpod state machines, peripheral modules, and other peripheral hardware.
+Devices are assembled by soldering components from the bill of materials to their matching locations indicated on the printed circuit board. A more in-depth assembly guide is provided for the Bpod Finite State Machine here, and can be extrapolated to any Bpod device.
+ + +The different devices are accessed from the navigation bar on the left.
+ + + + + + + + + + + + + +The lickometer measures the precise time of lick events, and provides a steel tube to deliver liquid reward.
+The lickometer uses a photogate created from an infrared emitter with a narrow (10 degree) beam angle and a spectrally matched phototransistor. A white LED angled towards the subject is provided, to be used as a cue or for feedback.
+The lickometer interfaces with the state machine via the port interface board.
+The lickometer design file contains two 3D printable parts:
+When printed with an FDM printer using a 0.4mm extruder, the components press-fit into the scaffolding, and the sheath press-fits over it.
+The lickometer shown above was printed from gray ColorFabb XT Copolyester.
+A 4-40 nut press-fits into a pocket in the sheath, to mount it to a ThorLabs mini-series post.
+Print settings are specified in a text document that accompanies the design files on Github.
+The mount shown in the images above provides coarse adjustment in 3 axes, and rotation about 2 axes. Its components are:
+The bill of materials for the lickometer is shown below:
+ + + + + + + + + + + + + + +The mouse behavior port combines a photo-gate with a steel tube for delivering liquid reward, in a 3D-printed housing.
+It allows freely moving subjects to indicate decisions and collect rewards.
+The behavior port uses a photogate created from an infrared emitter with a narrow (10 degree) beam angle and a spectrally matched phototransistor.
+A white LED embedded in the port illuminates it, to be used as a decision cue or for feedback.
+The behavior port interfaces with the Bpod state machine via the port interface board.
+Top row (from the left):
+Bottom row (from the left):
+You will also need: a soldering iron, a wire stripper, a wire cutter, a third hand, an M3 bottoming tap and a heat gun.
+Step 1: With the wire stripper (using the 22ga hole), remove 4mm from each end of each wire:
+Step 2: Mount the infrared emitter in the 3rd hand, facing you, and trim its leads.
+Next, solder the purple (ground) wire to the left lead, and the red (power) wire to the right lead.
+Step 4: Repeat steps 2 and 3 for the phototransistor and the white LED. For the white LED, the longer leg (before you clip them) should be attached to the red wire.
+Step 5: Carefully tap the two M4 holes on the back-side of the port. Ensure that the nylon M4 screws can be inserted to ~2/3 of their length:
+Step 6: Remove the screws and insert the steel tube into the hole matching its size. This may require some force initially.
+Step 7: Press the white LED into place. It is a press-fit, so you may need a small screwdriver to assist.
+Step 8: Reinsert the M4 screws.
+Next, Press the IR emitter and photo-transistor into place. When the steel tube is on the bottom and you are facing the port (see image from Step 6), the IR emitter (blue) should go on the right, and the photo-transistor (black) should go on the left:
+Step 9: Press the port into the sheath:
+Congratulations, your port is complete!
+Next, connect it to a port interface board and test it with Bpod.
+Note: The port design shown here has a thin layer of XT covering the sensor and emitter. However, we found that the optical clarity of the material is not always guaranteed in the print, occasionally producing a port that could not be used. The current design revision available in the Bpod repository has the sensor and emitter directly exposed, a configuration that has worked well in several labs.
+Design files for a mouse behavior box have been included in the Bpod repository.
+The box allows two alternative forced choice (2AFC) and GO/NOGO tasks in freely moving mice.
+It can be constructed entirely from 3mm laser cut acrylic and 3-d printed material (PLA preferred)
+The box is designed to work with Bpod Mouse Ports. It features a floor with an easy release mechanism, and side-walls that are sound-permeable near the ports. A clear acrylic roof slides into place on a track, for imaging of the mouse during behavior.
+The box uses 4 rubber feet. Aside from this, it requires no independent bill of materials.
+Here it is shown with the recommended solenoid valve for Bpod (part#LHDA1231115H). You will have to block the bottom valve port.
+ + +This version of the nosepoke board uses a trimmer potentiometer to adjust the LED current. This will enable you to set the maximum intensity of each port to some value with a light meter. Intensity is also controlled programmatically within Bpod via PWM.
+ + + + + + + + + + + + + +The Neuralynx sync board allows behavior and events logged by Bpod v0.5 to be sent to a Neuralynx electrophysiology system.
+Note: Bpod state machine 0.7+ Does not require the sync board.
+It's very simple to build. Here's how.
+Solder the two components into the board as shown below (left).
+Then, connect a CAT6 cable between the "sync" port on the Bpod device and the ethernet jack on the adapter board.
+The adapter board plugs into the Neuralynx TTL port as shown below (right).
+WARNING: On some Neuralynx systems, there is enough space below the bottom pin, for the sync board to plug into air. If you accidentally do this, your lowest bit will be lost! Make sure each row holes on the sync board header are aligned with Neuralynx pins.
+Here are images of the final product:
+
The Open Ephys sync board allows behavior and events logged by Bpod to be sent to an Open Ephys electrophysiology system.
+Note: Bpod state machine 0.7+ does not require the sync board.
+It's very simple to build. Here's how.
+Solder the three components into the board as shown below.
+The HDMI connector pins are surface mount, and will require special soldering techniques.
+Here is an image of the final product:
+
+The Port Array Module interfaces 4 behavior ports to a Bpod State Machine.
Up to 5 port array modules may be used with a single state machine, for experiments requiring large numbers of behavior ports.
+The Port Array Module is compatible with state machine r0.7+
+Firmware for the Port Array Module is available here.
+
+Each port interface board connects one infrared photo-gate, one LED and one solenoid valve with the Bpod state machine via an Ethernet cable.
The Bpod Raspberry Pi Shim interfaces the Bpod Finite State Machine r0.7 or newer with Raspberry Pi via its UART interface.
+Its 'shim' form factor is designed to avoid mechanical collisions with other Raspberry Pi hats.
+An extra-tall stacking pin header ensures compatibility with most Raspberry Pi enclosures.
+Assembly is implicit from the PCB layout, with the exception of the stacking pin header which attaches as shown in the photo below.
+Left, V1; right V2
+The Rotary encoder module interfaces a 1024-position quadrature rotary encoder (e.g. Yumo E6B2-CWZ3E) with the Bpod state machine and its governing computer. It can be used to capture paw movements, and generate behavioral events when position thresholds are crossed. There are two versions of the module with unique capabilities.
+Version 1 (left, above) can stream the current position directly to the DDS or Analog Output module for low-latency closed loop sensory feedback. It can also log data to a microSD card during each experimental trial and dump it back between trials (instead of returning data via USB) if processing bandwidth is limited in your assay.
+Version 2 (right, above) has a 2-channel analog output interface to synchronize the current wheel position and 3.3V sync pulses directly with Ephys or microscopy systems. It also has a much more powerful processor, allowing for more complex event threshold criteria.
+Both models are compatible with Bpod State Machine r0.7 or newer.
+Hardware Specs:
+Firmware for the Rotary Encoder module is available here.
+
+
The SNES module interfaces a Super Nintendo controller with Bpod. This provides a convenient button array for psychophysics tasks using human subjects. Pressing or releasing each of the gamepad's buttons generates a unique event that can be handled by the state machine. The gamepad's button states are read by the module at ~20kHz and detected events drive the state machine in ~100 microseconds, providing excellent temporal resolution on button press events. To validate the module, we dissected the popular aftermarket controller pictured above, and soldered leads to the button footprint on its PCB, allowing us to create button press events with known onset times.
+Compatible with Bpod 0.7+
+Hardware Specs:
+Firmware for the SNES module is available here.
+Bpod's state machine module can be assembled in as little as one hour at a soldering bench. Here's how.
+Order all parts in the Bill of Materials
+These parts can be purchased from commercial suppliers with two exceptions:
+The printed circuit board. We have previously used JLCPCB as follows:
+The acrylic enclosure. We have previously used Pololu's Custom laser cutting service as follows:
+Gather tools. You'll need:
+Before assembly, ensure that you have all parts specified in the Bill of Materials in appropriate quantities. You will also need a soldering iron, solder, wire cutters, a wet soldering sponge, a small Phillips head screwdriver, and about one hour if this is your first time building a Bpod State Machine.
+If you are new to soldering a circuit board with ICs, see this < 2-minute video tutorial for power-tips.
+First, we will solder components into the printed circuit board.
+Required components: +- 10K resistors x 2. (BOM Part#7) +- 1K resistors x 2. (BOM Part#8) +- 47 ohm resistor (BOM Part#9) +- MOSFET x2 (BOM Part#18) +- RGB LED (BOM Part#12)
+Instructions: +- Solder the resistors as shown in Figure 2. +- Solder the MOSFETS. Make sure the flat side matches the circuit board notation. Insert until they are nearly flush with the board. +- The RGB LED has a flat corner. Align it with the corner on the board notation, or as shown in Figure 2.
+The board should now appear as illustrated in Figure 2.
+Figure 1: The board after adding resistors, MOSFETs and status LEDs
+Required components: +- SFH6732 Optical Isolator. (BOM Part#4) +- TPIC6A595 Power shift register. (BOM Part#2) +- CD4050BE level shifter x3 (BOM Part#5) +- 74HC595N TTL shift register (BOM Part#3)
+Instructions: +- Solder the integrated circuits as shown in Figure 3. Make sure the notches in the ICs line up with the notches annotated on the board. +- The optoisolator IC has a small circular indentation to indicate the end with the notch.
+The board should now appear as illustrated in Figure 3.
+Figure 2: The board after adding ICs
+Required components: +- 6-pin Arduino header. (BOM Part#20) +- 8-pin Arduino header x4. (BOM Part#21) +- 2x36-pin male rectangular header (BOM Part#10) +- 2x3 pin female rectangular header (BOM Part#11) +- TDK Lambda voltage converter (BOM Part#6)
+Instructions: +- Solder the four 8-pin Arduino headers. They are labeled on the board: Due_Digital1, Due_Digital2, Due_Digital3 and Due_ALG. DO NOT CUT THE LEADS AFTER SOLDERING! They will be used to plug this board in to Arduino. On each header, solder one pin first, ensure the pins point straight down, then solder the others. +- Solder the 6-pin Arduino header. Do not cut the leads. +- Cut the 2x36-pin male header in half with a wire cutter to make a 2x18. Place the board on top of it so the silver side of the pins sticks through the board, and solder from the top as illustrated in Figure 4. +- Place the board on top of the 2x3 female header, and solder from the top. +- Solder the voltage converter.
+The board should now appear as illustrated in Figure 4.
+Figure 3: The board after adding headers and voltage converter
+Required components: +- Ethernet jack x11. (BOM Part#13) +- Spring terminal. (BOM Part#1) +- BNC jack x4 (BOM Part#14)
+Instructions: +- Snap the Ethernet jacks into place and solder their leads. +- Solder the spring terminal +- Solder the BNC jacks, making sure they are resting on the board and pointing out at a 90 degree angle. This is important for the enclosure to fit.
+The completed board should now appear as illustrated in Figure 5.
+Figure 4: The completed board after adding Ethernet jacks, spring terminals and BNC jacks
+Required components: +- 1" 4-40 screw x4. (BOM Part#22) +- 3/4" 4-40 stand-off. (BOM Part#24) +- Arduino Due Microcontroller (BOM Part#25)
+Instructions: +- Place a screw in each corner hole, pointing down through the board. +- Screw a stand-off on each corner screw until it is flush with the board. +- Plug Arduino Due into the bottom of the board. The 18x2 pin header will resist - squeezing from above the header and below Arduino will help.
+The completed board should now appear as shown from above:
+The difference between 0.9 and 0.8 only affects the BNC input channels.
+On v0.5-0.8, an optoisolator IC was used to isolate the BNC inputs (and also the wire terminal inputs, as of Bpod 0.7).
+Unfortunately, that part was discontinued by the manufacturer.
+For v0.9, we switched to a different, pin-compatible optoisolator IC. We provided a series resistor with a different value (1k, previously 220 ohm) and a decoupling capacitor for each IC. From the perspective of the MATLAB/Python software these hardware versions are identical.
+Bpod Finite State Machine r2+ builds on r2.5 with additional onboard I/O: +- 4 Flex I/O Channels can each be configured as: + - Digital Output (5V TTL) + - Digital Input (5V tolerant) + - Analog Input (12-bit, 0-5V range, 1kHz sampling) + - Analog Output (12-bit, 0-5V range) +- 1 additional behavior port, for a total of 5
+Version 2+ also has an improved enclosure developed in collaboration with BZDesign. The new enclosure's 3D-printed scaffolding secures its laser-cut panels.
+Bpod Finite State Machine r2.3 is a minor hardware revision of r2.0.
+Bpod Finite State Machine r2.4 improves on r2.3 with several minor improvements and component substitutions: +- 2.4 adds light termination resistors to the RS-485 receive lines for the 5 module interfaces. On previous versions, if no module was connected to a module port, some ports would receive an occasional spurious byte 255, which is an invalid event code and is ignored in firmware. +- r2.4 replaces the BNC output isolator (Analog Devices ADUM5240) with a more energy-efficient chip: ADUM6200. +- r2.4 replaces the module 5V->9V DC/DC converter (Murata MTU1S0509MC) with a more readily available converter: Murata MEE1S0509SC.
+Beginning with r2.4, an array of microcontroller pins is used to read out the board revision number. Bits in the array are grounded, and the version number is incremented with each board revision. State machine firmware v23 reads the board revision number, and the PC software saves it with each dataset.
+Note: r2.1 and r2.2 were minor tweaks to the 2.0 PCB that did not affect the BOM (e.g. silkscreen updates, widening of certain solder pads, changes to the barrel jack solder pad shape).
+Bpod Finite State Machine r2.5 is a significant hardware revision of r2.4.
+A shield is now available to interface Teensy 3.X with the Bpod state machine.
+It uses Teensy digital channels 0 and 1 for communication, and provides power to the Teensy board (if used with state machine r2 or newer)
+Example Arduino files for use with the Teensy shield + Teensy 3.2 are available here.
+
+Version 1, released November 2017
+Version 2, released July 2023
The valve driver module controls 8 solenoid valves. Valve currents are galvanically isolated from control logic circuitry.
+The module is most often used in behavior research for temporally precise air flow control and liquid dispensing.
+Compatible with Bpod 0.7+
+Hardware Specs:
+Firmware for the valve driver module is available here.
+{"use strict";/*!
+ * escape-html
+ * Copyright(c) 2012-2013 TJ Holowaychuk
+ * Copyright(c) 2015 Andreas Lubbe
+ * Copyright(c) 2015 Tiancheng "Timothy" Gu
+ * MIT Licensed
+ */var Va=/["'&<>]/;qn.exports=za;function za(e){var t=""+e,r=Va.exec(t);if(!r)return t;var o,n="",i=0,s=0;for(i=r.index;i