Mini Projects & Quick Builds
A collection of small experiments, weekend projects, and quick technical challenges. These mini projects showcase different programming languages, tools, and creative problem-solving approaches in bite-sized demonstrations.
- Languages: Python, JavaScript, C++, Bash, HTML/CSS
- Tools: APIs, Web frameworks, Command line utilities, Automation scripts
- Focus: Rapid prototyping, learning new technologies, solving specific problems
ðĪïļ Weather API Dashboard
âïļ Atlanta, GA
Partly Cloudy âĒ Feels like 75°F
Live weather data with styled interface
Quick Build Overview
A clean weather dashboard that pulls live data from OpenWeatherMap API. Built in an afternoon to practice API integration and create a useful desktop widget.
Features:
- Live Data: Real-time weather updates via REST API
- Clean UI: Responsive design with gradient styling
- Multiple Cities: Save and switch between locations
- Error Handling: Graceful fallbacks for API failures
Tech Stack:
- JavaScript (ES6) for API calls and DOM manipulation
- CSS3 with gradients and animations
- LocalStorage for city preferences
- OpenWeatherMap API integration
⥠CLI Task Automation Tool
Quick Build Overview
A custom command-line tool that automates repetitive development tasks. Created to speed up daily workflow and practice systems programming.
Features:
- Git Shortcuts: Streamlined commit and push workflows
- Project Setup: Automatically create project boilerplate
- File Organization: Batch rename and organize downloads
- System Stats: Quick system resource monitoring
Implementation:
- Python with Click framework for CLI interface
- Subprocess calls for system integration
- Configuration file support (YAML)
- Cross-platform compatibility (Windows/Linux)
Commands:
git-flow Streamlined git operations
new-project Create project boilerplate
organize Batch file operations
sysinfo System resource monitor
â Commit created
â Pushed to origin/main
Terminal output showing automated workflow
ð Interactive Data Visualization
Portfolio Project Analytics
Sample dashboard showing project metrics
Quick Build Overview
An interactive dashboard for visualizing coding project data. Experimented with Chart.js and D3.js to create engaging visual representations of development metrics.
Features:
- Real-time Charts: Dynamic updates with smooth animations
- GitHub Integration: Pulls data from GitHub API
- Custom Metrics: Code complexity, language distribution
- Export Options: Save charts as PNG/SVG
Learning Goals:
- Master Chart.js and D3.js libraries
- Practice with GitHub API and OAuth
- Responsive chart design patterns
- Performance optimization for large datasets
ð§ Productivity Browser Extension
Quick Build Overview
A Chrome extension that enhances web browsing productivity. Built to learn browser extension development and solve personal workflow inefficiencies.
Features:
- Quick Notes: Save notes per website/domain
- Time Tracking: Monitor time spent on different sites
- Link Shortcuts: Custom keyboard shortcuts for frequently visited pages
- Dark Mode Toggle: Universal dark mode for any website
Technical Challenges:
- Chrome Extension API and manifest v3
- Content script injection and DOM manipulation
- Background service workers for persistent data
- Cross-origin request handling
Extension popup interface mockup
Low-Level Programming Examples
Servo Control & PWM Generation
// Direct PWM control for servo positioning
class ServoController {
private:
uint8_t pin;
uint16_t currentPulse;
uint16_t targetPulse;
public:
void setPosition(float angle) {
// Convert angle to pulse width (1000-2000 Ξs)
targetPulse = map(angle, 0, 180, 1000, 2000);
}
void update() {
// Smooth movement interpolation
if (currentPulse != targetPulse) {
int16_t diff = targetPulse - currentPulse;
currentPulse += constrain(diff, -MAX_STEP, MAX_STEP);
}
// Generate PWM signal
analogWrite(pin, pulseToPWM(currentPulse));
}
private:
uint8_t pulseToPWM(uint16_t pulse) {
// Convert microseconds to PWM value
return map(pulse, 1000, 2000,
PWM_MIN, PWM_MAX);
}
};
Inverse Kinematics Solver
// 3D inverse kinematics calculation
struct Point3D { float x, y, z; };
struct JointAngles { float base, shoulder, elbow, wrist; };
class InverseKinematics {
private:
float L1, L2, L3; // Link lengths
public:
JointAngles solve(Point3D target) {
JointAngles angles;
// Base rotation (around Z-axis)
angles.base = atan2(target.y, target.x);
// 2D problem in X-Z plane
float r = sqrt(target.x*target.x + target.y*target.y);
float z = target.z;
// Distance to target
float d = sqrt(r*r + z*z);
// Law of cosines for elbow angle
float cosElbow = (L1*L1 + L2*L2 - d*d) / (2*L1*L2);
angles.elbow = acos(constrain(cosElbow, -1, 1));
// Shoulder angle calculation
float alpha = atan2(z, r);
float beta = acos((L1*L1 + d*d - L2*L2) / (2*L1*d));
angles.shoulder = alpha + beta;
return angles;
}
};
Real-Time Control Loop
// Main control loop with timing constraints
class RobotController {
private:
ServoController servos[6];
InverseKinematics ik;
unsigned long lastUpdate;
const uint16_t UPDATE_INTERVAL = 20; // 50Hz update rate
public:
void controlLoop() {
unsigned long currentTime = millis();
if (currentTime - lastUpdate >= UPDATE_INTERVAL) {
// Read current position feedback
Point3D currentPos = readEndEffectorPosition();
// Calculate next waypoint in trajectory
Point3D nextTarget = trajectoryPlanner.getNextPoint();
// Solve inverse kinematics
JointAngles targetAngles = ik.solve(nextTarget);
// Apply safety limits and update servos
for (int i = 0; i < 6; i++) {
float safeAngle = applySafetyLimits(targetAngles.angles[i], i);
servos[i].setPosition(safeAngle);
servos[i].update();
}
// Monitor for emergency conditions
if (emergencyStop.triggered()) {
halt();
return;
}
lastUpdate = currentTime;
}
}
};
Hardware & Software Integration
Hardware Components
- Robotic Arm: 6-DOF articulated arm with high-torque servo motors
- Microcontroller: Arduino Mega 2560 / Raspberry Pi 4 for processing
- Sensors: Encoders for position feedback, current sensors for load monitoring
- Power System: Regulated 6V supply with current limiting for safety
Software Architecture
- Real-Time Control: Interrupt-driven servo updates at 50Hz
- Motion Planning: Trajectory generation with velocity profiles
- Safety Systems: Multiple layers of protection and emergency stops
- Modular Design: Plug-and-play command system for easy programming
Development Challenges
- Timing Precision: Meeting real-time constraints for smooth motion
- Mathematical Complexity: Implementing robust inverse kinematics solvers
- Hardware Limitations: Working within servo speed and precision constraints
- Safety Considerations: Preventing damage from rapid or erratic movements
Project Specifications
- Degrees of Freedom: 6 (Base, Shoulder, Elbow, Wrist)
- Reach: ~60cm working radius
- Precision: Âą2mm positioning accuracy
- Speed: Up to 180°/sec joint velocity
- Programming: C++ with Arduino/Pi libraries
- Control Frequency: 50Hz update rate
Learning Outcomes
Working with robotic arms provided hands-on experience with real-time systems, hardware-software integration, and the mathematical foundations of robotics. The projects taught me about the complexities of physical control systems and the importance of safety in automated systems. Most importantly, they showed me that engineering can be both technically challenging and genuinely fun.
Future Enhancements
- Machine vision integration for object recognition and tracking
- Force feedback sensors for delicate manipulation tasks
- Neural network-based motion learning and optimization
- Multi-arm coordination for complex assembly tasks
- Voice command integration for intuitive control
Small experiments lead to big discoveries! ðâĻ