Skip to content
natphuaPublic

About

A wireless portable flower pot (move your plants!).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Porta-Pot

A wireless, joystick-controlled plant pot that drives itself toward the light — no more manually repositioning your plants to chase the sun (could also act as a covert spy camera mount). Built as a final project for EE-14 Embedded Systems at Tufts.

Team: Natalie Phua, Rakshi Rangaprasad, Daniel Yeo, Sabine Dinovo

Overview

A two-board wireless control system: a handheld transmitter reads joystick input and sends it over radio to a receiver board inside the pot, which drives two motors to move the pot in that direction.

  • Transmitter — reads joystick position via ADC, transmits over nRF24L01
  • Receiver — receives joystick data, converts it to differential-drive motor commands, outputs PWM to the motor driver

The pot body is laser-cut wood with wheels hidden under the rim; the "plants" are handmade colored craft paper.

Hardware

  • MCU: STM32L432KC (Nucleo-32), programmed bare-metal via CMSIS
  • Wireless: nRF24L01 transceiver (SPI); one per board
  • Input: Analog joystick (2-axis, read via ADC)
  • Motor driver: DRV8835 dual motor driver
  • Drive: 2x DC motor + wheel, PWM-controlled, differential steering
  • Power: Battery pack (receiver side)
  • Enclosure: Laser-cut wood pot with wheels hidden under the rim

Software

Built with PlatformIO, targeting the nucleo_l432kc board.

src/
  main.c      # transmitter logic (active); receiver logic included below, commented out
  adc.c       # joystick ADC reads
  gpio.c      # pin config/control
  nrf.c       # nRF24L01 driver (SPI-based radio tx/rx)
  spi.c       # SPI peripheral driver
  timer.c     # PWM generation for motor control
  serial.c    # UART for debug output
  delay.c     # busy-wait timing
include/
  ee14lib.h   # shared hardware abstraction layer used across drivers

Control flow: transmitter polls joystick ADC → sends via NRF24_Transmit → receiver picks up via NRF24_Receive → converts to left/right wheel PWM (differential steering, with deadzone) → drives motors.

main.c contains both main() functions — receiver is commented out below the active transmitter code. Toggle between them depending on which board you're flashing.

Getting Started

  1. Install PlatformIO
  2. Clone the repo and open it in PlatformIO
  3. In src/main.c, uncomment the main() for the board you're flashing (transmitter or receiver)
  4. Build and upload to each Nucleo-L432KC board

About

A wireless portable flower pot (move your plants!).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages