You can pass cmin = min and cmax = max inside add_surface() to get a consistent color scale across all plots:
cmin = min
cmax = max
add_surface()
add_surface( z = z_matrix, x = p1, y = p2, colorscale = "Viridis", cmin = 0, cmax = 4 )