Limiting Chemical Reactions

Figuring out the limiting reactant in a chemical reaction integrates many of the basic chemistry concepts including: unit conversions from moles to mass and vice versa; the meaning of chemical formulas; and understanding the stoichiometry of chemical reactions. So, since we’ll need a number of these, I wrote a python program to help me design the questions (and figure out the answers).

Program examples come zipped because they require the program file and the elements_database.py library:

Baking Powder and Vinegar (Common Molecules)

Limiting_component-Common.py: This has the baking powder and vinegar reaction limited by 5 g of baking soda. It’s nice because it uses a few pre-defined “common molecules” (which are defined in the elements_database.py library.

You enter the reactants and products and the program checks if the reaction is balanced, then calculates the moles and masses based on the limiting component, and finally double checks to make sure the reaction is mass balanced.

Limiting_component-Common.py

from elements_database import *
import sys

print "LIMITING REACTANT PROGRAM"
print 
print "  Determines the needed mass and moles of reactants and products if reaction is limited by one of the components"

c = common_molecules()

'''Create Reaction'''
rxn = reaction()
# Add reactants (and products)
#   Use rxn.add_reactant(molecule[, stoichiometry])
#       molecule: from molecule class in elements_database
#       stoichiometry: integer number
rxn.add_reactant(c.baking_soda,1)
rxn.add_reactant(c.hydrochloric_acid,1)
rxn.add_product(c.carbon_dioxide)
rxn.add_product(c.water, 1)
rxn.add_product(c.salt)

'''Print out the reaction'''
print 
print "Chemical Formula"
print "  " + rxn.print_reaction()
print 

'''Check if reaction is balanced'''
balanced = rxn.check_for_balance(printout=True)

'''Calculate limits of reaction'''
if balanced:
    rxn.limited_by_mass(c.baking_soda, 5, printout=True)

Outputs results in the Results table (using scientific notation):

LIMITING REACTANT PROGRAM

  Determines the needed mass and moles of reactants and products if reaction is limited by one of the components

Chemical Formula
  NaHCO3 + HCl  --> CO2 + H2O + NaCl 

Check for balance
 --------------------------------------------- 
| Element | Reactants | Products | Difference |
 --------------------------------------------- 
|   Na    |    1      |    -1    |     0      |
|   H     |    2      |    -2    |     0      |
|   C     |    1      |    -1    |     0      |
|   O     |    3      |    -3    |     0      |
|   Cl    |    1      |    -1    |     0      |
 --------------------------------------------- 
Balance is:  True

Given: Limiting component is 5 g of NaHCO3.
  Molar mass = 84.00676928
  Moles of NaHCO3 = 0.0595190130849

 Results
   ------------------------------------------------------------------ 
  | Molecule | Stoich.*| Molar Mass (g) | Moles req. |    Mass (g)   |
   ------------------------------------------------------------------ 
  |NaHCO3    |    1    |    84.0068     |  5.952e-02 |   5.000e+00   |
  |HCl       |    1    |    36.4602     |  5.952e-02 |   2.170e+00   |
  |CO2       |    -1   |    44.0096     |  5.952e-02 |   2.619e+00   |
  |H2O       |    -1   |    18.0156     |  5.952e-02 |   1.072e+00   |
  |NaCl      |    -1   |    58.4418     |  5.952e-02 |   3.478e+00   |
   ------------------------------------------------------------------ 
 * negative stoichiometry means the component is a product

  Final Check: Confirm Mass balance: 
     Reactants:    7.1701 g 
     Products:    -7.1701 g 
     --------------------------
          =      0.0000 g 
     --------------------------

General Example

If not using the common molecules database, you need to define the components in the reaction as molecules yourself. This example reacts magnesium sulfate and sodium hydroxide, and limits the reaction with 20 g of magnesium sulfate.

Limiting_component-General.zip

The main file is:

Chem_Exam-limiting.py

from elements_database import *
import sys

print "LIMITING REACTANT PROGRAM"
print 
print "  Determines the needed mass and moles of reactants and products if reaction is limited by one of the components"

# create reaction

rxn2 = reaction()
# Add reactants (and products)
#   Use rxn.add_reactant(molecule[, stoichiometry])
#       molecule: from molecule class in elements_database
#       stoichiometry: integer number
rxn2.add_reactant(molecule("Mg:1,S:1,O:4"))
rxn2.add_reactant(molecule("Na:1,O:1,H:1"), 2)
rxn2.add_product(molecule("Mg:1,O:2,H:2"))
rxn2.add_product(molecule("Na:2,S:1,O:4"))

'''Print out the reaction'''
print 
print "Chemical Formula"
print "  " + rxn2.print_reaction()
print 

'''Check if reaction is balanced'''
balanced = rxn2.check_for_balance(printout=True)

'''Calculate limits of reaction'''
if balanced:
    rxn2.limited_by_mass(molecule("Mg:1,S:1,O:4"), 20, True)

# print out masses
print "Masses Involved in Reaction"
print "  Reactants:"
for i in rxn2.reactants:
    #print "rxn", i
    print "    {m}: {g} g".format(m=i.molecule.print_formula().ljust(10), g=i.mass)
print "  Products:"
for i in rxn2.products:
    #print "rxn", i
    print "    {m}: {g} g".format(m=i.molecule.print_formula().ljust(10), g=-i.mass)

This program is slightly different from the common molecules example in that, at the end, it prints out masses calculated in a more easily readable format in addition to the other data.

Masses Involved in Reaction
  Reactants:
    MgSO4     : 20.0 g
    NaOH      : 13.2919931774 g
  Products:
    MgO2H2    : 9.69066512026 g
    Na2SO4    : 23.6013280571 g

When I have some time I’ll convert this to JavaScript like the molecular mass example.

Molar Mass of Molecules

Calculate the molar mass of a molecule:

The notation for the chemical formula is a little funky: you put the element symbol and then the number of atoms separated by a colon; each element/number of atoms pair are separated by commas, so sodium chloride (NaCl) would be “Na:1,Cl:1“.

This will have to do until I can write something to parse the regular chemical formula notation.

On the plus side, you can link to a specific molecular mass calculation by adding the formula to the url. So magnesium chloride (MgCl2) can be found with this url:

https://soriki.com/js/chem/chem_db/molecular_mass.html?formula=Mg:1,Cl:2

She’s got (a) heart: Duck Dissection

Heart in hand: a duck's heart to be precise.
Heart in hand: a duck’s heart to be precise.

Dissection time is always interesting in the middle school classroom. Some kids start off a little squeamish, but there are always a few who pitch right in. All of the class were working on different organisms–microscopic algae (desmids), insects, plants, etc.–but I set up the dissection table in the middle of the room. With all the other tables facing inwards, everyone who wanted to got a chance to see the internal organs as they were carefully, but triumphantly, traced and extracted. It spreads the enthusiasm, and gives the other students a heads up as to what will be expected.

One student brought in a duck that her father had shot. She was familiar with cleaning hunted fowl, so had no qualms about the dissection. The duck was a great specimen, because the internal organs were large and easy to identify.

Duck dissection.
C.F. leads the duck dissection.

She, and most of the rest of the class, had dissected a sheep’s heart in elementary school. This time, however, they got to see how the heart was connected to the rest of the body. We got to talk about why smaller organisms, like ducks, could get away with two chambered hearts, while larger ones need four chambers.

Indeed, the tracing of the artery leading out of the heart lead us to compare of the color of the duck’s lungs–so red they were almost black–and the fish’s gills, which were also a deep red. And that, in turn lead to a discussion of how organisms ingest the gasses they need to survive: microbes through diffusion; insects through spiracles and trachea; mammals through lungs. Tomorrow we’ll talk about how the surface area to volume ratio changes with size.

Peer Teaching

Ms. R. helps a peer with her experiment.
Ms. R. helps a peer with her experiment.

Half the Chemistry class was gone yesterday, so they had to make up their experiment today. Well, one student of the students who did her work yesterday entreated me to lead her peers through the experiment. It was pretty awesome, because she had been struggling with the topic for the last week and had finally gotten it yesterday.

And she did an excellent job. She not only walked the rest of the class through the theoretical calculations, but guided them through the experiment itself.

Peer teaching works best when students are excited about what they’ve learned and want to share. I’m still trying to figure out the best way of inciting this excitement when I break the groups up for their projects. Giving them choice is important, but also, I think, giving them challenging work that they’re proud to accomplish.

Devices

I tend to let my students have a lot of freedom to use their myriad technological devices as they will. Just as long as they use them responsibly (i.e. for academics during class time). What’s most interesting these days is seeing how they combine the various electronics.

Working with pen, paper, tablet and laptop.
Working with pen, paper, tablet and laptop.

This Chemistry student is referring to her textbook on the iPad, while she creates a presentation on her laptop. Yet pen and paper are still integral parts of the process.

Talk Timer

Arduino timer.
Arduino timer.

Given the idea that “learning situated in meaningful contexts is often deeper and richer than learning in abstract contexts,” (Lillard, 2007), I’ve been trying to orient our robotics program toward developing devices that we can use at school. Not only can these devices serve a useful purpose, but their presence around the school can, perhaps, inspire other students to want to make their own.

To this end, one of our first practical projects is a timer (by Joe A.) for when students give their presentations in Chemistry class. For the last round of presentations they had 20 minutes, so I had Joe build the circuits and program the Arduino to make the green light to be on for 15 min, the yellow on for 4 min, the red for 1 min, and then the piezoelectric buzzer would go off for 5 seconds and the red light would start blinking.

Joe did an awesome job, and the timer worked remarkably well. I did what we wanted it to do, and it actually worked to help them keep their presentations under time.

Elephant Rocks

Students explore the massive, spheroidally weathered boulders at Elephant Rocks State Park.
Students explore the massive, spheroidally weathered boulders at Elephant Rocks State Park.

We stopped at the Elephant Rocks State Park our way down to Eminence MO for our middle school immersion trip. The rocks are the remnants of a granitic pluton (a big blob of molten rock) that cooled underground about 1.5 billion years ago. As the strata above the cooled rock were eroded away the pressure release created vertical and horizontal cracks (joints). Water seeped into those joints, weathered the minerals (dissolution and hydrolysis mainly), and eroded the sediments produced, to create the rounded shapes the students had a hard time leaving behind.

This was a great stop, that I think we’ll need to keep on the agenda for the next the next trip. I did consider stopping at the Johnson’s Shut-Ins Park as well, but we were late enough getting to Eminence as it was. Perhaps next time.

Exploring the spaces between the rocks.
Exploring the spaces between the rocks.