Prerequisites and Required Knowledge
Before beginning this unit, students should have:
- Basic understanding of a programming language (Python or Java recommended)
- Familiarity with basic data structures (arrays, objects)
- Understanding of simple database concepts (tables, relationships)
- Basic knowledge of HTML and CSS
If students don’t have these prerequisites, consider spending 2-3 weeks covering:
- Basic programming concepts (variables, loops, functions)
- Introduction to object-oriented programming
- Database fundamentals
- Basic web technologies
Learning Objectives
By the end of this unit, students will be able to:
- Design and develop a functional mobile application using industry-standard development tools
- Apply database design principles to create systems for wildlife data collection
- Implement user interface design best practices for scientific applications
- Integrate conservation science principles into technology solutions
- Collaborate with local conservation groups to address real environmental challenges
Project Overview
This term-length unit guides students through creating a mobile application that helps track and monitor local wildlife. The project combines coding fundamentals, database design, user experience principles, and conservation science into a meaningful STEM learning experience.
Required Resources
Hardware:
- Computers/laptops with internet access (1 per student or pair)
- Mobile devices for testing (minimum 1 per 4 students)
- Optional: Wildlife cameras or sensors
Software:
- MIT App Inventor or Android Studio (free)
- SQLite Browser (free)
- Git for version control (free)
- Text editor (VS Code recommended, free)
Additional Materials:
- Local wildlife guides and identification resources
- Access to local conservation data
- Field notebooks for planning and documentation
Unit Structure
Week 1-2: Foundation and Planning
Understanding the Problem Space
- Local Wildlife Assessment
- Partner with local conservation groups
- Contact local wildlife organizations
- Schedule guest speaker sessions
- Arrange field visits if possible
- Identify target species for monitoring
- Research local endangered species
- Document species characteristics
- Create species profiles with images
- Research existing monitoring methods
- Review current tracking techniques
- Identify gaps in current methods
- Analyse existing apps and tools
- Document current challenges and gaps
- Create problem statements
- Define success metrics
- Outline potential solutions
- Partner with local conservation groups
- Requirements Gathering
- Interview local rangers or conservationists
- Prepare interview questions
- Document current processes
- Identify pain points
- Define core app functionality
- Create feature list
- Prioritize requirements
- Define MVP features
- Create user personas
- Identify primary users
- Document user needs
- Create user stories
- Establish success criteria
- Define measurable outcomes
- Create evaluation metrics
- Set project milestones
- Interview local rangers or conservationists
Technical Setup
1. Development Environment Setup Guide
a. Install required software
# Install Git
# Windows: Download from git-scm.com
# Mac: brew install git
# Linux: sudo apt-get install git
# Install Node.js (if using React Native)
# Download from nodejs.org
# Install Android Studio
# Download from developer.android.com/studio
b. Configure development tools
# Configure Git
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# Initialize project
git init
c. Set up version control
# Create new repository
mkdir wildlife-app
cd wildlife-app
git init
# Create initial structure
mkdir src
mkdir docs
mkdir tests
d. Test basic functionality
# Basic test script (test.py)
def test_environment():
try:
# Test database connection
import sqlite3
conn = sqlite3.connect('wildlife.db')
print("Database connection successful")
# Test GPS module
from gps import GPS
gps = GPS()
print("GPS module loaded")
return True
except Exception as e:
print(f"Setup error: {e}")
return False
if __name__ == "__main__":
test_environment()
Week 3-4: Database Design and Implementation
Detailed Database Structure
1. Data Modeling Step-by-Step
a. Design database schema sql
-- Create Species Table
CREATE TABLE species (
id INTEGER PRIMARY KEY,
common_name TEXT NOT NULL,
scientific_name TEXT NOT NULL,
conservation_status TEXT,
description TEXT,
habitat TEXT
);
-- Create Sightings Table
CREATE TABLE sightings (
id INTEGER PRIMARY KEY,
species_id INTEGER,
latitude REAL NOT NULL,
longitude REAL NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
notes TEXT,
photo_path TEXT,
observer_id INTEGER,
FOREIGN KEY (species_id) REFERENCES species(id),
FOREIGN KEY (observer_id) REFERENCES observers(id)
);
-- Create Observers Table
CREATE TABLE observers (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE,
registration_date DATETIME DEFAULT CURRENT_TIMESTAMP
);
b. Define relationships (python)
class Species:
def __init__(self):
self.id = None
self.common_name = ""
self.scientific_name = ""
self.conservation_status = ""
self.sightings = [] # One-to-many relationship
class Sighting:
def __init__(self):
self.id = None
self.species = None # Many-to-one relationship
self.location = {"latitude": 0, "longitude": 0}
self.timestamp = datetime.now()
self.observer = None # Many-to-one relationship
c. Implement data validation (python)
def validate_sighting(sighting):
errors = []
# Check coordinates
if not (-90 <= sighting.latitude <= 90):
errors.append("Invalid latitude")
if not (-180 <= sighting.longitude <= 180):
errors.append("Invalid longitude")
# Check species
if not sighting.species_id:
errors.append("Species must be specified")
# Check timestamp
if sighting.timestamp > datetime.now():
errors.append("Future timestamps not allowed")
return errors
API Development Guide
a. Create endpoints (python)
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/sightings', methods=['POST'])
def create_sighting():
data = request.json
# Validate data
errors = validate_sighting(data)
if errors:
return jsonify({"errors": errors}), 400
# Create sighting
sighting = Sighting(
species_id=data['species_id'],
latitude=data['latitude'],
longitude=data['longitude'],
notes=data.get('notes', '')
)
db.session.add(sighting)
db.session.commit()
return jsonify({"id": sighting.id}), 201
@app.route('/api/sightings', methods=['GET'])
def get_sightings():
sightings = Sighting.query.all()
return jsonify([s.to_dict() for s in sightings])
b. Implement authentication
c. Test API functionality
d. Document API usage
Tip: Use sample data sets initially to test database functionality before implementing live data collection.
Week 5-6: User Interface Development
App Design
- Wireframing
- Sketch basic layouts
- Plan user workflows
- Design data entry forms
- Create navigation structure
- Implementation
- Build UI components
- Implement data binding
- Add form validation
- Create feedback mechanisms
Accessibility Tip: Ensure the app is usable in various lighting conditions for field work.
Week 7-8: Integration and Testing
Feature Implementation
- Core Functionality
- Implement GPS tracking
- Add photo upload capability
- Create offline data storage
- Implement sync functionality
- Testing Protocol
- Unit testing
- Integration testing
- Field testing
- User acceptance testing
Common Challenges and Solutions
Technical Challenges
- Offline Functionality
- Solution: Implement local storage with periodic syncing
- Use SQLite for mobile data persistence
- Add conflict resolution for merged data
- Battery Optimization
- Solution: Implement efficient GPS polling
- Optimize photo compression
- Use background services judiciously
Educational Challenges
- Varying Skill Levels
- Solution: Pair programming
- Modular project components
- Differentiated learning paths
- Real-world Integration
- Solution: Partner with local experts
- Use actual conservation data
- Regular field testing sessions
Assessment Strategies
- Technical Assessment (40%)
- Code quality and documentation
- Database design implementation
- API functionality
- User interface usability
- Conservation Impact (30%)
- Data accuracy and reliability
- Conservation group feedback
- Implementation feasibility
- Environmental consideration
- Documentation (30%)
- Technical documentation
- User guides
- Project presentation
- Reflection journal
Teaching Tips
For each technical concept:
- Start with a demonstration
- Provide working example code
- Allow students to experiment
- Use pair programming
- Include regular code reviews
Break down complex tasks:
- Database design
- Start with simple tables
- Add relationships gradually
- Use visual schema designers
- API development
- Begin with basic CRUD operations
- Add validation incrementally
- Test with Postman or similar tools
- UI development
- Start with wireframes
- Implement basic layouts
- Add interactivity step by step
This unit requires careful preparation and a solid foundation in programming concepts. While challenging, it provides students with real-world experience in software development while contributing to environmental conservation. Regular assessment and feedback help ensure students grasp both the technical and conservation aspects of the project.
Remember to adapt the pace and depth based on your students’ existing knowledge and capabilities. Consider breaking down complex topics into smaller, manageable chunks and providing additional support resources where needed.
Note: This unit guide should be adapted based on local wildlife, available resources, and specific curriculum requirements. Regular consultation with local conservation experts and technology professionals is recommended for optimal implementation.