
Led panel split
musallGroup/PuffyPenguin
New behavioral paradigm for multisensory stimulation. Modified from SpatialSparrow paradigm.

New behavioral paradigm for multisensory stimulation. Modified from SpatialSparrow paradigm.
Controller is an open-source printed circuit board by musallGroup, from the musallGroup/PuffyPenguin repository on GitHub. It is a 2-layer board of 222.3 × 73.7 mm with 38 parts on 95 nets, routed with 542 tracks and 33 vias.
It is built around the MAX98306 and RJ45. Its parts include 4 capacitors, 3 switches, 2 ICs and 1 connector. It belongs with the NXP (LPC, Kinetis, i.MX RT) boards of this library.
Multimodal rate discriminaton behavioral task for mice.
This should show a labeled picture of the setup.
This should say what gets saved where and what is automatically copied and when.
The TouchShaker teensy module reports lick and handle touch times, these get communicated and logged by Bpod.
Event list correspondence :
| TouchShaker byte | Event |
|---|---|
| TouchShaker1_1 | left_spout_touch |
| TouchShaker1_2 | right_spout_touch |
| TouchShaker1_3 | left_spout_release |
| TouchShaker1_4 | right_spout_release |
| TouchShaker1_5 | left_handle_touch |
| TouchShaker1_6 | right_handle_touch |
| TouchShaker1_7 | both_handle_touch |
| TouchShaker1_8 | left_handle_release |
| TouchShaker1_9 | right_handle_release |
| TouchShaker1_14 | acknowledge |
| TouchShaker1_15 | error |
State list correspondence:
Settings can be set from Bpod (mat files in Bpod Local/Settings). Default settings are in SpatialSparrow.m
Settings for training control:
| Setting | Default | Description |
|---|---|---|
| SubjectName | Name of the mouse | |
| RewardedModality | AudioVisual | 'Vision', 'Audio', Somatossensory, 'AudioVisual', 'Mixed' |
| leftRewardVolume | 2 ul | Amount of water per left reward |
| rightRewardVolume | 2 ul | Amount of water per right reward |
| AutoReward | OFF | Pre-load rewarded spout |
| TrainingMode | OFF | Move spouts to the correct side |
| autoRewardVision | 1 | Fraction of self-performed trials (Vision) |
| autoRewardAudio | 1 | Fraction of self-performed trials (Auditory) |
| autoRewardPiezo | 1 | Fraction of self-performed trials (Somatossensory) |
| autoRewardMixed | 1 | Fraction of self-performed trials (Mixed) |
| LeverSound | true | Play a sound when the mouse touches the handles |
| RegularStim | false | Produce regular stimuli sequences |
| biasSeqLength | 3 | nr of trials on one side after which the oposite side is switched with 50% probability |
Settings for trial timing :
| Setting | Default | Description |
|---|---|---|
| preStimDelay | 1 (s) | time on handle before stimuli presentation |
| StimDuration | 1 (s) | duration of the stimulus |
| happyTime | 0.5 (s) | duration of the last state (gives time to collect reward) |
| varStimDur | 0 (s) | variable stim duration (StimDuration + varStimDur) is the actual stim duration |
| optoDur | 0.5 (s) | duration of the optogenetics stimuli |
| optoRmp | 0.2 (s) | duration of the optogenetics ramp down (optoDur = 0.5 and optoRamp = 0.2 makes a 500ms stimulus that ramps down after 300ms) ??????? |
| minITI | 1 (s) | min inter trial interval (additional) |
| maxITI | 2 (s) | max inter trial interval (additional) |
| ITIlambda | 10 (AU) | bariability between minITI and maxITI. High lambda -> closer to minITI |
| WaitingTime | 1 (s) | minimum waiting time before a response can be made, early licks are ignored |
| TimeToChoose | 3 (s) | how long to wait for choice report |
| TimeToConfirm | 0.5 (s) | how long to wait for a 2nd (confirmation) lick |
| Timeout | 3 (s) | timeout to punish wrong responses |
| LeverWait | 10 (s) | time to wait for handle grasp |
| MoveLever | TRUE | move levers or not (set to FALSE during habituation) |
| UseBothLevers | FALSE | Whether both handles need to be touched to initiate trials |
| WaitBeforeLever | 1 (s) | Wait time before handles are moved in after trial onset |
Settings for stimuli parameters :
| Setting | Default | Description |
|---|---|---|
| TargRate | 10 (Hz) | Rate of the target sequence |
| ProbRight | 0.5 | Fraction of targets on the right |
| DistFractions | 0 | Distractor pulses (fraction of the target sequence). Can be a scalar [0-1] or a vector |
| DistProb | 0 | Probability of presenting a distractor |
| TestModality | 0 | Modality to be used with discrimination (1=vis, 2=aud, 4=ss). Zero is inactive. Other values are detection only |
| BinSize | 50 (ms) | Stimuli refractory period (min interval between pulses) |
| StimCoherence | TRUE | Determines whether multisensory stimuli are correlated |
| UseNoise | FALSE | Use noise burst (TRUE) of clicks (FALSE) as auditory stimuli |
| varStimOn | [0 0.125 0.25] (s) | Variable onset time for stimulus after lever grab in s. This can be a vector of values. Have to be 0 and higher. |
| StimGap | 0 (s) | Duration of the gap in the middle of stimulus presentation in s; if >0 the stim duration is of stimDuration*2 + stimGap long |
| DecisionGap | [0.3 1.5] (s) | Range of the interval between the stimulus and the decision period |
| BeepDuration | 20 (ms) | Beep (auditory) duration |
| StimLoudness | 0.5 | Strength of auditory stimuli |
| FlashDuration | 20 (ms) | Flash (visual) duration |
| StimBrightness | 20 | Brightness of flashes. Multiplier of the base frequency, default is 100Hz (????) |
| BuzzDuration | 20 (ms) | Buzz (somatossensory) duration |
| BuzzStrength | 1 | Strength of buzzes |
| ProbAudio | 0 | Probability of presenting an auditory-only trial (for multimodal) |
| ProbVisual | 0 | Probability of presenting a visual-only trial (for multimodal) |
| ProbPiezo | 0 | Probability of presenting a somatossensory-only trial (for multimodal) |
| sRate | 20000 | Sampling rate of the AnalogOutput module |
| PunishSoundDur | 0 (s) | Duration of the white noise punishment sound |
| optoProb | 0 | Fraction of optogenetics trials |
| optoTimes | Stimulus/Delay | Part of the trial where optogenetic stimulus should be presented |
| optoRight | 0.5 | Probability for occurence of an optogenetic stimulus on the right |
| optoBoth | 1 | Probability for occurence of an optogenetic stimulus on both sides. This comes after determining a single HS target ??? |
| optoPower | 5 | Fraction of optogenetics stimuli |
Settings for hardware control and sync :
| Setting | Default | Description |
|---|---|---|
| SpoutSpeed | 25 (ms) | Duration of spout movement |
| rMaxSpoutIn | 30 | Right spout inner position (value between 0 and 100) |
| lMaxSpoutIn | 30 | Left spout outer position (value between 0 and 100) |
| spoutOffset | 10 | Distance from inner spout position |
| lOuterLim | 3.5 | Left spout outer position (value between 0 and 100) |
| LeverSpeed | 150 (ms) | Duration of handle movement (ms) |
| LeverIn | 20 | Inner position of the handles |
| LeverOut | 0 | Position of handle out of reach |
| TouchThresh | 5 (SDUs) | Threshold for capacitive touch lines |
| WaitForCam | false | Trials wait for a camera trigger to start. |
To check: rInnerLim, lInnerLim, rOuterLim, lOuterLim
Settings for paths and data copy :
| Setting | Default | Description |
|---|---|---|
| widefieldPath | ... | path to widefield data on server |
| serverPath | ... | path to behavioral data on server |
| videoDrive | C: | path to behavioral data on server |
| bonsaiEXE | ... | path to bonsai.exe |
| bonsaiParadim | ... | path to the bonsai workflow ('' to skip bonsai) |
| labcamsAddress | localhost:9999 | address to connect to labcams for video acquisition (leave empty to skip) |
| wavePort | COM18 | COM port of the AnalogOutput Module |
Plot settings:
| Variable | Default | Description |
|---|---|---|
| PerformanceSwitch | Performed | Show performance over all trials or only self-performed trials |
| DoFit | false | Show curve fitting in the performance plot |
| modSelector | Combined | Which data to show in the performance plot |
Operational variables:
| Variable | Default | Description |
|---|---|---|
| SaveSettings | false | Saves the current settings |
| AdjustSpouts | 0 | Pause for spout adjustment |
| StartTime | ? | Start time of the current session |
| cTrial | Number of the current trial | |
| runTime | Duration of the current session | |
| servoPos | [0 0] | position of left and right spout, relative to their inner limit. these values will be changed by anti-bias correction to correct spout position |
Clone the repository to Bpod Local/Protocols. If you make changes; create a branch and remember to commit changes regularly.
Build instructions coming here soon.
There are 2 options for recording video with SpatialSparrow: using Bonsai or using labcams. This readme should show you how to sync the cameras to the BPod (work in progress).
| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | Screw_Terminal_01x02 | teensy:TerminalBlock_TE_282825-2_1x02_P5.08mm_Horizontal | distractor1, J5V1, J5V2, J9V1, J12V1, J12V2, J12V3, J12V4 |
| 4 | 100 uF | Capacitor_THT:C_Rect_L7.2mm_W7.2mm_P5.00mm_FKS2_FKP2_MKS2_MKP2 | C1, C2, C3, C4 |
| 4 | Pololu_Breakout_DRV8825 | Module:Pololu_Breakout-16_15.2x20.3mm | MC-LeverL1, MC-LeverR1, MC-SpoutL1, MC-SpoutR1 |
| 4 | Screw_Terminal_01x04 | teensy:TerminalBlock_TE_282825-4_1x04_P5.08mm_Horizontal | HandleL-ToMotor1, HandleR-ToMotor1, SpoutL-ToMotor1, SpoutR-ToMotor1 |
| 3 | Screw_Terminal_01x05 | teensy:TerminalBlock_TE_282825-5_1x05_P5.08mm_Horizontal | sync_trigger_out1, ToHandleL1, ToHandleR1 |
| 2 | MountingHole_3.2mm_M3_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | mount1, mount2 |
| 2 | Screw_Terminal_01x06 | teensy:TerminalBlock_TE_282825-6_1x06_P5.08mm_Horizontal | SoundVisionL1, SoundVisionR1 |
| 1 | 12V | Connector_BarrelJack:BarrelJack_Horizontal | 12V1 |
| 1 | 5V | Connector_BarrelJack:BarrelJack_Horizontal | 5V1 |
| 1 | 9V | Connector_BarrelJack:BarrelJack_Horizontal | 9V1 |
| 1 | LOGO | teensy:churchland_lab_logo | G*** |
| 1 | MAX98306 | spatialsparrow:MAX98306 | U2 |
| 1 | RJ45 | teensy:RJ45_sparkfun | J2 |
| 1 | SW12V | teensy:SW_L102021ML04Q | SW12 |
| 1 | SW5V | teensy:SW_L102021ML04Q | SW5 |
| 1 | SW9V | teensy:SW_L102021ML04Q | SW9 |
| 1 | Teensy3.2 | teensy:Teensy30_31_32_LC | U1 |
| 1 | gnd jumper | TestPoint:TestPoint_2Pads_Pitch5.08mm_Drill1.3mm | JP1 |
It measures 222.3 × 73.7 mm and has 2 copper layers, 1.6 mm thick.
38 parts, built around the MAX98306 and RJ45. 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.
From the musallGroup/PuffyPenguin repository on GitHub, at the commit this page was made from: the board is pcb/controller/controller.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask musallGroup before reusing the design.

musallGroup/PuffyPenguin
New behavioral paradigm for multisensory stimulation. Modified from SpatialSparrow paradigm.

musallGroup/PuffyPenguin
New behavioral paradigm for multisensory stimulation. Modified from SpatialSparrow paradigm.

musallGroup/PuffyPenguin
New behavioral paradigm for multisensory stimulation. Modified from SpatialSparrow paradigm.

musallGroup/PuffyPenguin
New behavioral paradigm for multisensory stimulation. Modified from SpatialSparrow paradigm.

IsuruPabasara/TheConductor
The instrument is designed to help stroke patients in their recovery journey. It is meant to be used as a motivation to move their impaied arm in certain directions and angles.

UtilitechAS/amsreader-firmware
ESP8266 and ESP32 compatible firmware to read, interpret and publish data to MQTT from smart electrical meters, both DLMS and DSMR is supported

travisgoodspeed/goodfet
An embedded bus adapter for various microcontrollers and radios.



nv1t/standing-desk-interceptor
I wanted to intercept the communication between my Flexispot standing desk buttons. This is the progress on the project


Severson-Group/AMDC-Hardware
Circuit board designs for controlling advanced motor systems