Project in progress
A Behavioural Chamber to Evaluate Rodent Forelimb Grasping

A Behavioural Chamber to Evaluate Rodent Forelimb Grasping

Rodent behavioural test equipment is key for biological research yet expensive - our team is developing a low-cost alternative

  • 207 views
  • 0 comments
  • 5 respects

Components and supplies

Necessary tools and machines

3D printer - Asiga max x 27
Lasercutter
Laser cutter (generic)

Apps and online services

About this project

Summary of project

Behavioural testing of rodents is a key class of experiments in clinical research, providing a tool for the testing and development of treatments to help patients in need. However, commercially available equipment is often prohibitively expensive, limiting the number of labs with access to these tools. In our project we set out to design, construct, and validate a low-cost behavioural chamber capable of evaluating forelimb performance in rats in an automated fashion - a common task in neuroscience research [1-2]. Our team has successfully constructed an acrylic cage specifically designed for this purpose, equipped it with the sensors necessary to automate the behavioural task, and developed and validated the code to operate it using an Arduino board. The chamber was additionally designed to be easily modifiable, able to be extended to many other rodent behavioural tests. We have also developed an automatic pellet dispenser, a key component in automated behavioural research, which can be coupled with our or other behaviour box.

Task principle

The task which the rat carries out in our chamber is known as the Wishaw test [3], which tests the animal's coordination and grip strength by testing its ability to grasp a sugar pellet with its forelimb. Our behavioural chamber is primarily composed of transparent acrylic, inside which a rat is placed. This chamber is designed with a hole on one of its walls, allowing the animal to reach out with its paw to grasp a sugar pellet placed on a holder on the other side. Each experimental trial is triggered by a laser tripwire (laser pointer + photodiode), which the rat crosses to reach the opening in the chamber. The interruption of this signal triggers, through an Arduino board, the flashing of an LED with which video recordings from a GoPro Hero7 camera can be synced with other equipment connected to the chamber/animal (electrophysiology, strength meter, touchscreen, etc.). This camera is used specifically for its ability to acquire video at 1080p at 240fps– a higher framerate than most cameras utilised in behavioural kinematic analysis – at a commercially competitive price.

To reset the task (i.e. receive a new pellet to grasp), the rat will be trained during its habituation period (a standard period of time in behavioural research where the animal is taught how to use the equipment to acquire sugar pellets as a reward) to walk out of the section of the chamber where the slit is placed. In doing so it will hit another tripwire (photodiode + laser pointer pair), causing the dispensing of a new pellet. This is triggered by the Arduino board, which moves a stepper motor of the pellet-feeder system to deploy a single new pellet.

This task will be repeated without need for input from the experimenter for a pre-defined number of trials. The number of times the rat has carried out this task will be displayed in an LCD screen on the side of the chamber. A button is also available for the experimenter to reset the chamber when necessary, and is kept informed as to the current task number through an lcd screen run by the Arduino. The operation is summarised in Figure 1. The layout of the chamber and dimensions for the acrylic sheets are given in Figure 2. Figure 3 provides pictures of the box. Figure 4 provides a diagram of the pellet dispenser, while a video of the fabricated version in operation is given in Figure 5 (CAD designs of the various parts of the dispenser are found in additional attachments).



Figure 5. Pellet dispenser in operation



Final design

Our group worked through multiple iterations of acrylic box designs to develop one best suited for our purposes. We specifically focused on designing a cage which could easily be used for more than one behavioural test, not just the grasping Wishaw test. The final version of our behavioural box features removable front and back panels, which provides the task. Aside from panels with a slit through which rats can grasp pellets (i.e. panels for the Wishaw task), we have also built a panel with a touchscreen (designed to be a Skinner box task) and a panel with a grip strength meter (testing rat grip strength). The rest of the components (laser tripwires, camera, pellet dispenser, etc.) are present in all versions of the box, allowing a multitude of different behavioural tasks to be carried out in the same automated, kinematic analysis-enabled setup. A video of a rat making use of the box as part of the Wishaw test is presented in Figure 6.

We also developed Arduino code to operated the cage in an automated fashion. As described above, this involves the use of laser tripwires which the animal walks through during normal chamber operation in order to deliver new pellets. The code also allows for voltage pulses to be sent out to other hardware setups, which allows syncing of external hardware components (for example, grip strength testers, electrophysiology hardware, etc.) with video recordings of animal behaviour. This, combined with the ability to swap over panels to change the behaviour being evaluated, greatly enhances the number of tasks and applications for which our behaviour box can be used for.



Figure 6. Video of rat carrying out wishaw test (grasping of pellet). Note this video was recorded in an earlier prototype of the chamber


Previous versions ------------------------------------------------------------

Current state of project (24/07/2019)

Our behavioural chamber consisted of four key components: a chamber to house the rat, a feeder to dispense pellets for the rat to grab (the task itself), a camera setup to record the grabbing motion, and an emitter-sensor system to automate the procedure. At the time of writing, we have built and validated the chamber, pellet dispenser, and emitter-sensor system; and are currently developing the camera setup. Throughout the course of the project, we had to adapt our original design and introduce multiple changes, illustrated in Figures 6 and 7.

Our initial chamber consisted of a box with an opening on one of its sides to allow the rat to reach out and grab the pellet. However, we found that animals tended to approach such slits from different angles, resulting in inconsistent reaching out and grabbing motions. As this variability would have difficulted analysis of the task, we soon modified our cage design to incorporate a short tunnel leading to the aperture. This served to “align” the rat and improve the consistency of the task.

The emitter-sensor system consisted of two pairs of infrared LEDs (emitters) and infrared sensors. These proved to be ineffective for our setup, as LEDs tended to be too weak to provide reliable intensity readings, and the infrared wavelength made them very difficult to align with the sensors. We therefore substituted the infrared LEDs for commercial (red) laser pointers, which provided much more reliable results and were easier to align. Additionally, with the introduction of the small tunnel to the behavioural box, we were able to simplify the system to consist of a single emitter-sensor pair(the resetting of the task being done by the rat having to leave the tunnel, rather than the triggering of the back sensor). We also built into the system a display to inform the user of the number of reaches the rat had performed, and a switch to reset the chamber when necessary; and developed the code to operate these via an Arduino board.

Our initial design for the pellet dispenser consisted of a large pellet box, from which single pellets were pushed down one at a time. However, the collapse of a pile of spheres (pellets) into a single file was determined to be prone failure, with pellets clumping above the exit tubing. We therefore switched to a dispenser system where pellets where pre-loaded into a tube. We also designed and fabricated a system to both push pellets out and dispose of them after a predetermined amount of time if the animal failed to grab them, using a single stepper motor.

Finally, we have also bought a small-size camera capable of high-speed recordings to record the grabbing motions of the rat, and are currently adapting code to control it wirelessly via an Arduino board(therefore syncing it with the emitter-sensor system).

Update (26/07/2019)

We have carried out initial tests with rats in our chamber. Our current design allows rats to freely move and successfully guide them towards the task window (Figure 8). In the coming weeks we will train rats to seek sugar pellets, which will allow us to validate our task.

Figure 8. Initial validation test in rats

Future work

Most rodent behavior systems consist of a several common components:a housing chamber, a reward system (e.g. dispenser for sugar pellets), a task for the animal to carry out, and a camera to record the task. Although our chamber was initially designed for a forelimb grasping task, most of its components are suitable for many other tasks. We therefore seek to expand our behavioural chamber to include other behavioural tasks common in rodent behavior research. We envision our chamber becoming a “plug-and-play” type of system, where with minimal changes to the chamber an experimenter will be able to perform a large variety of tasks to evaluate different animal behaviours.

The following additions will be carried out: development of new rodent tasks (installation of hardware and modification of Arduino code to operate it), and development of a user interface and guide to allow the experimenter to choose and prepare their task of choice. The tasks will consist of a grip bar and force meter(evaluation of limb strength and coordination), a touchscreen (Skinner box setup, testing learning and memory), and a pressure mat (testing gait and movement). The equipment for these tasks will make up the bulk of the follow-on funds (together with the animals used to validate these tasks), with th eremainder being used to modify our current cage where necessary. Our current Arduino code will be modified to operate the cage with each of these tasks, though these changes will likely be minor. Finally, a user interface will be developed to guide the experimenter when choosing a specific task, and helping them set up the chamber appropriately. This will be operated by the user via the 4D Systems touchscreen provided with the Biomaker Arduino package.

As we have moved quicker than expected in our project, we anticipate that we will be able to implement these additions by the November deadline. Our current timeline is to finish integrating the camera setup into our current forelimb-grasp system and begin our first validation tests with rats by mid-August. While one of our team members will work on processing of the video recording data, the rest of our team will have time to develop these additions throughout the remainder of the summer.

Items for additional chamber tasks

Force gauge (evaluation of limb strength and coordination):

RS PRO Force Gauge RS232, USB

Part no: 111-3689

Price: £390.00

Pressure mat (testing of gait and movement):

7.0" SMART HMI Display Resistive touchscreen

Part no: GEN4-ULCD-70DT

Price £120.00

Skinner box touchscreen (testing of learning and memory):

4.3" SMART HMI Display capacitive touchscreen

Part no: GEN4-ULCD-43DCT-CLB

Price: £95.00

Timeline

Below is a description of the project timeline we are following.

June: Acquire materials, develop code to operate cage.

July: Build prototype cage, build prototype feeder.

August: Validation in rats, modification of cage design based on experience with rats.

September: Development of code (matlab) to analyse video recordings of task, implementation of additional tasks into existing chamber.

October: Validation of additional tasks in rats. Packaging of final design.

References

[1]. García-Alías, G., Barkhuysen, S., Buckle, M. & Fawcett, J. W. Chondroitinase ABC treatment opens a window of opportunity for task-specific rehabilitation. Nature Neuroscience 12, 1145–1151 (2009).

[2]. Girgis, J. et al. Reaching training in rats with spinal cord injury promotes plasticity and task specific recovery. Brain 130, 2993–3003 (2007).

[3]. Whishaw, I. Q., Pellis, S. M., Gorny, B., Kolb, B. & Tetzlaff, W. Proximal and distal impairments in rat forelimb use in reaching follow unilateral pyramidal tract lesions. Behavioural Brain Research 56, 59–76 (1993).

Code

2019-09-25_Wishaw_chamber.inoArduino
Code running the behavioural box in Wishaw test mode. With few small additions, code can be adapted to operate the box in other behavioural tasks (such as skinner box or grip strength)
/*Script to run behaviour chamber
 *  Runs n trials (default 30), during which when laser tripwire
 *    is cut both the led (used to sync camera) and ephys hardware are pulsed
 *  Trial ticking is done when second tripwire at back of chamber is cut
 *  Beginning the trial also starts 240fps recording in gopro camera (wireless)
*/

//Parameters
  int n = 30; //number of trials(pellets) done per rat
  float halfperiod_ms = 25;  //duration of pulses sent to LED (for camera sync) and ephys (in ms). Default should be 25 (6 frames on, 6 frames off, at 240fps).

  int LightsensorThreshold = 200; //threshold below which light sensor activates. To be calibrated if necessary. Between 0 and 1023.

  int LightsensorValue_1 = 10; //variable onto which light sensor writes
  int LightsensorValue_2 = 10; //variable onto which light sensor writes

  int Switch = 0; //variable for switch (controlling chamber ON/OFF).

//Output pins
  const int EphysPin = 8;    // pin which will produce the output voltage and power LED for camera sync (red)
  const int LEDPin = 12;     // pin which will power LED when pulses are over (green)

  const int TripwirePin_1 = 2;  // pin hooked up to laser pointer used as tripwire 
  const int TripwirePin_2 = 4;  // pin hooked up to laser pointer used as tripwire

  const int StepmotorPin = 7; // pin hooked up to step motor to push pellets out

//Input pins  
  const int LightsensorPin_1 = A0;  // analog pin reading from light sensor
  const int LightsensorPin_2 = A1;  // analog pin reading from light sensor

  const int SwitchPin = A2;    // digital pin for switch (on input mode)

//Clock
  int nn=1;                     // set clock to 1



////////////////Here on down is lcd screen preamble

//load libraries
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

//Define variables 

#define I2C_ADDR          0x38        //Define I2C Address where the PCF8574A is
#define BACKLIGHT_PIN      3
#define En_pin             2
#define Rw_pin             1
#define Rs_pin             0
#define D4_pin             4
#define D5_pin             5
#define D6_pin             6
#define D7_pin             7

//Initialise the LCD
LiquidCrystal_I2C      lcd(I2C_ADDR, En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
  

  
  
void setup() {
  // put your setup code here, to run once:

  //open output pins
    pinMode(EphysPin, OUTPUT);
    pinMode(LEDPin, OUTPUT);  
    pinMode(TripwirePin_1, OUTPUT);   
    pinMode(TripwirePin_2, OUTPUT);   
    pinMode(StepmotorPin, OUTPUT);
  //turn on input switch
 //   pinMode(SwitchPin, INPUT);            

  //analog pins open as inputs by default

  //Turn on laser pointers
    digitalWrite(TripwirePin_1, HIGH);
    digitalWrite(TripwirePin_2, HIGH);     

  //push first pellet out
    digitalWrite(StepmotorPin, HIGH); //push first pellet out
       delay(halfperiod_ms);             
       digitalWrite(StepmotorPin, LOW); 





       
  //turn on gopro  

  //analog print on pc
  Serial.begin(9600);

  //Open lcd display
    //Define the LCD as 16 column by 2 rows 
    lcd.begin (16,2);
    //Switch on the backlight
    lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
    lcd.setBacklight(HIGH);



}

void loop() {
  // put your main code here, to run repeatedly:
//Outside loop defined to reset chamber if switch is off



Switch=analogRead(SwitchPin);       //read from switch

//Finish while loop of switch. Below defines reset of chamber on switch OFF
while (Switch <200) {


   //Print out on lcd screen
//Also use lcd display for same purpose
    lcd.setCursor(0,0);
    lcd.print("Chamber reset"); lcd.print("                          ");
    lcd.setCursor(0,1);
    lcd.print("                            ");
    
     //analog print on pc
       Serial.print(LightsensorValue_1);
       Serial.print("\t");
       Serial.print(LightsensorValue_2);
       Serial.print("\t");
       Serial.print(Switch);
       Serial.print("\t");
       Serial.println(nn);    

      nn=1;  //reset chamber cycle
  
    Switch=analogRead(SwitchPin);       //read from switch

}
  
    //Default screen
    lcd.setCursor(0,0);
    lcd.print("Wishaw test"); lcd.print("                          ");
    lcd.setCursor(0,1);
    lcd.print("Cycle n: "); lcd.print(nn); lcd.print("/"); lcd.print(n); lcd.print("                          ");

  
while (Switch >200) { 
  
//Loop of Wishaw test operation 



Switch=analogRead(SwitchPin);       //read from switch

  if (nn <= n) {
    
  LightsensorValue_1 = 0;
  LightsensorValue_2 = analogRead(LightsensorPin_2);
  
    if (LightsensorValue_2 > LightsensorThreshold) {              // check that back sensor is cut 
       LightsensorValue_1 = analogRead(LightsensorPin_1);          // turn on front sensor

         //Print out on lcd screen
         //Also use lcd display for same purpose
          lcd.setCursor(0,0);
          lcd.print("Wishaw test"); lcd.print("                          ");
          lcd.setCursor(0,1);
          lcd.print("Cycle n: "); lcd.print(nn); lcd.print("/"); lcd.print(n); lcd.print("                          ");

       digitalWrite(StepmotorPin, HIGH);         // pulse motor, 
       delay(halfperiod_ms);             
       digitalWrite(StepmotorPin, LOW);          
       delay(halfperiod_ms);           
       
       while (LightsensorValue_1 < LightsensorThreshold){         // hold code until front sensor is hit
         LightsensorValue_1 = analogRead(LightsensorPin_1);       // during that time open front sensor
         }
    
       digitalWrite(EphysPin, HIGH);         // turn the output voltage on (HIGH is the voltage level, default is 5V)
       delay(halfperiod_ms);               // wait for half the period
       digitalWrite(EphysPin, LOW);          // turn the LED off 
       delay(halfperiod_ms);               // wait for half of the period

       digitalWrite(EphysPin, HIGH);         // pulse LED/ephys once again, 
       delay(halfperiod_ms);             
       digitalWrite(EphysPin, LOW);          
       delay(halfperiod_ms);

     //analog print on pc
       Serial.print(LightsensorValue_1);
       Serial.print("\t");
       Serial.print(LightsensorValue_2);
       Serial.print("\t");
       Serial.print(Switch);
       Serial.print("\t");
       Serial.println(nn);

                      


       nn += 1;
          }


    }
     




  else {                                      
    digitalWrite(LEDPin, HIGH);     //turn on LED when the all pellets have been done have finished being delivered
    digitalWrite(StepmotorPin, LOW);   // reset step motor position


     

    //Also use lcd display for same purpose
    lcd.setCursor(0,0);
    lcd.print("Task finished"); lcd.print("                          ");
    lcd.setCursor(0,1);
    lcd.print("                                           ");

     //analog print on pc
       Serial.print(LightsensorValue_1);
       Serial.print("\t");
       Serial.print(LightsensorValue_2);
       Serial.print("\t");
       Serial.print(Switch);
       Serial.print("\t");
       Serial.println(nn);
    
  }
}


}
2019-10-02_Calibration_sensors.inoArduino
Code to calibrate light sensors used in tripwires of chamber
  
  int LightsensorValue_1 = 10; //variable onto which light sensor writes
  int LightsensorValue_2 = 10; //variable onto which light sensor writes
  int switchStatus = 0;

  const int LightsensorPin_1 = A0;  // analog pin reading from light sensor
  const int LightsensorPin_2 = A1;  // analog pin reading from light sensor
  const int switchPin = A2;  // analog pin reading from switch

////////////////Here on down is lcd screen preamble

//load libraries
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

//Define variables 

#define I2C_ADDR          0x38        //Define I2C Address where the PCF8574A is
#define BACKLIGHT_PIN      3
#define En_pin             2
#define Rw_pin             1
#define Rs_pin             0
#define D4_pin             4
#define D5_pin             5
#define D6_pin             6
#define D7_pin             7

//Initialise the LCD
LiquidCrystal_I2C      lcd(I2C_ADDR, En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
  


void setup() {
  // put your setup code here, to run once:

//Open serial data port

  Serial.begin(9600); 

//Also use lcd display for same purpose

    //Define the LCD as 16 column by 2 rows 
    lcd.begin (16,2);
    //Switch on the backlight
    lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
    lcd.setBacklight(HIGH);


}

void loop() {
  // put your main code here, to run repeatedly:

  LightsensorValue_1 = analogRead(LightsensorPin_1);
  LightsensorValue_2 = analogRead(LightsensorPin_2);
//  switchStatus = analogRead(switchPin);

//Print out on serial port
  Serial.print(LightsensorValue_1);
  Serial.print("\t");
  Serial.println(LightsensorValue_2);

//Print out on lcd screen
//Also use lcd display for same purpose
    lcd.setCursor(0,0);
    lcd.print("Front s: "); lcd.print(LightsensorValue_1); lcd.print("                       ");
    lcd.setCursor(0,1);
    lcd.print("Back s: "); lcd.print(LightsensorValue_2); lcd.print("                       ");
    //delay(200);





}

Custom parts and enclosures

Pinion_gear_pellet_dispenser
Part of the pellet dispenser system
Gear_rack_pellet_dispenser
Part of the pellet dispenser system
Loading_tube_pellet_dispenser
Part of the pellet dispenser system

Schematics

Pellet dispenser
Diagram of pellet dispenser design
G9468 fmb8ghmz5l
Chamber schematics
Dimensions of various acrylic parts used to build the chamber
Chamber v2 ubptujhnoo

Comments

Similar projects you might like

Arduino Simple "Camera Slider" Electronics

Project tutorial by Ian Cumming

  • 8,424 views
  • 3 comments
  • 20 respects

Arduino Bluetooth Robot for Android Device

Project showcase by aip06

  • 4,020 views
  • 2 comments
  • 18 respects

Where's my stuff?? - Find your misplaced things with Alexa!

Project in progress by Crakers

  • 2,858 views
  • 0 comments
  • 8 respects

RGB Camera Backlight Control With Android Mobile

Project tutorial by DIY Partners

  • 2,200 views
  • 1 comment
  • 8 respects

IoT Treat Dispenser For Pets

Project tutorial by Arduino “having11” Guy

  • 15,379 views
  • 0 comments
  • 53 respects

My Motion Activated Security Cam project

Project tutorial by Christiaan Neil Burger

  • 13,546 views
  • 11 comments
  • 14 respects
Add projectSign up / Login