Helicopter DOE Run Sheet Generator

# === Paper Helicopter DOE Run Sheet Generator ===

# Set random seed for reproducibility
set.seed(2025)

# Factor levels
rotor_lengths <- c(7.5, 8.5)  # cm
rotor_widths  <- c(3.5, 5.0)  # cm
clips         <- c(0, 2)      # 0 = no clip, 1 = clip

# Full factorial design (2^3 = 8 runs)
design <- expand.grid(
  RotorLength_cm = rotor_lengths,
  RotorWidth_cm  = rotor_widths,
  PaperClip      = clips
)

# Add factor codes
design$A_RotorLength <- ifelse(design$RotorLength_cm == 7.5, "-", "+")
design$B_RotorWidth  <- ifelse(design$RotorWidth_cm == 3.2, "-", "+")
design$C_PaperClip   <- ifelse(design$PaperClip == 0, "-", "+")

# Replicate the design 3 times (change reps if needed)
reps <- 3
full_design <- do.call(rbind, replicate(reps, design, simplify = FALSE))
full_design$Replicate <- rep(1:reps, each = nrow(design))

# Randomize the run order
full_design <- full_design[sample(nrow(full_design)), ]
rownames(full_design) <- NULL
full_design$RunID <- seq_len(nrow(full_design))

# Add empty columns for results
full_design$Time_s <- ""

# Reorder columns for clarity
run_sheet <- full_design[, c("RunID","Replicate",
                             "RotorLength_cm","RotorWidth_cm","PaperClip",
                             "A_RotorLength","B_RotorWidth","C_PaperClip","Time_s")]

# Save to CSV in your chosen folder
write.csv(run_sheet, "C:/Users/mdnay/Downloads/DOE_Experiments/paper_helicopter_run_sheet.csv",
          row.names = FALSE)

# Confirm export worked
print("CSV file saved to Downloads/DOE_Experiments folder.")
[1] "CSV file saved to Downloads/DOE_Experiments folder."
# Print first few rows to check
print(head(run_sheet, 12))
   RunID Replicate RotorLength_cm RotorWidth_cm PaperClip A_RotorLength
1      1         2            7.5           3.5         2             -
2      2         2            8.5           5.0         0             +
3      3         1            8.5           5.0         0             +
4      4         1            7.5           3.5         0             -
5      5         2            8.5           3.5         0             +
6      6         3            8.5           5.0         2             +
7      7         3            7.5           3.5         0             -
8      8         3            7.5           5.0         2             -
9      9         3            8.5           3.5         2             +
10    10         2            7.5           5.0         0             -
11    11         1            7.5           5.0         2             -
12    12         2            7.5           5.0         2             -
   B_RotorWidth C_PaperClip Time_s
1             +           +       
2             +           -       
3             +           -       
4             +           -       
5             +           -       
6             +           +       
7             +           -       
8             +           +       
9             +           +       
10            +           -       
11            +           +       
12            +           +