int t= 3;
int gate_P = A0;
int button_P2 = 2;
int button_P = 3;
int Cds = A1;
int button;
int button2;
int gate;
int intensitive;
void setup() {
pinMode(button_P,INPUT_PULLUP);
pinMode(button_P2,INPUT_PULLUP);
pinMode(gate_P,INPUT);
pinMode(Cds,INPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
Serial.begin(115200);
}
void loop() {
button = digitalRead(button_P);
button2 = digitalRead(button_P2);
gate = analogRead(gate_P);
float pos =0;
if(button == LOW){
gate = 0;
while(gate <500){
stepForward();
gate = analogRead(gate_P);
}
delay(50);
}
if(button2 == LOW){
delay(50);
for(int i=0;i<=10;i++){
stepForward();
}
for(int i=0;i<=256;i++){
stepBack();
pos = float(i)/256*180-90;
dist_calc(pos);
}
}
}
float dist_calc(float pos){
intensitive = analogRead(Cds);
delay(50);
Serial.print(pos); // position of servo motor
Serial.print(","); // comma separate variables
Serial.println(intensitive); // print distance in cm
}
void stepForward(){
digitalWrite(8,1);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,0);
delay(t);
digitalWrite(8,1);
digitalWrite(9,1);
digitalWrite(10,0);
digitalWrite(11,0);
delay(t);
digitalWrite(8,0);
digitalWrite(9,1);
digitalWrite(10,0);
digitalWrite(11,0);
delay(t);
digitalWrite(8,0);
digitalWrite(9,1);
digitalWrite(10,1);
digitalWrite(11,0);
delay(t);
digitalWrite(8,0);
digitalWrite(9,0);
digitalWrite(10,1);
digitalWrite(11,0);
delay(t);
digitalWrite(8,0);
digitalWrite(9,0);
digitalWrite(10,1);
digitalWrite(11,1);
delay(t);
digitalWrite(8,0);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,1);
delay(t);
digitalWrite(8,1);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,1);
delay(t);
}
void stepBack(){
digitalWrite(8,1);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,1);
delay(t);
digitalWrite(8,0);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,1);
delay(t);
digitalWrite(8,0);
digitalWrite(9,0);
digitalWrite(10,1);
digitalWrite(11,1);
delay(t);
digitalWrite(8,0);
digitalWrite(9,0);
digitalWrite(10,1);
digitalWrite(11,0);
delay(t);
digitalWrite(8,0);
digitalWrite(9,1);
digitalWrite(10,1);
digitalWrite(11,0);
delay(t);
digitalWrite(8,0);
digitalWrite(9,1);
digitalWrite(10,0);
digitalWrite(11,0);
delay(t);
digitalWrite(8,1);
digitalWrite(9,1);
digitalWrite(10,0);
digitalWrite(11,0);
delay(t);
digitalWrite(8,1);
digitalWrite(9,0);
digitalWrite(10,0);
digitalWrite(11,0);
delay(t);
}
# -*- coding:utf-8 -*-
import serial
import csv
i = 0
b = 0
ser = serial.Serial('COM3',115200) #請改為你的 USB port
ser.flush()
data1 = [["Angle","Intensitive"]]
while b <= 80 :
data = ser.readline()
str1 = str(data)
str2 = str1.replace("\\r\\n","")
str3 = str2.strip('b')
str4 = str3.lstrip()
a = (str4[1:-1])
a1,a2= a.split(',',1)
list1 = [float(a1), float(a2)]
data1.append(list1)
i = float(a1)
print(i)
if i == 90:
print("Done")
break
ser.close()
with open("mie.csv","w",newline='') as f:
w = csv.writer(f)
w.writerows(data1)
f.close()
import numpy as np
import scipy as sp
from ipywidgets import interact
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import miepython as mp
from numpy import interp
%matplotlib inline
file_location = "mie.csv" #請注意檔案位置及檔名是否正確
data = np.genfromtxt(file_location, delimiter=',')
x = data[1:,0]
y = data[1:,1]
array = y.tolist()
x = data[1::,0]-x[array.index(max(array))]
plt.figure(figsize=(9,6))
plt.plot(x,y,'.')
plt.xlabel('angle (c)',fontsize=15)
plt.ylabel('intensity',fontsize=15)
plt.show()
def mie(m = 1.58,ml = 1,l = 0.65,s=3,amp=20,shift=0):
plt.figure(figsize=(9,6))
#m for ball
#ml for liguid
#l wave length of laser
x1 = s*np.pi*ml/l
theta = np.linspace(-90,90,180)
a=(1/ml)*np.sin(theta*np.pi/180)
b=np.arcsin(a)*180/np.pi
#print(theta)
#print(b)
mu = np.cos(b/180*np.pi)
scat = mp.i_unpolarized(m,x1,mu)
plt.xlabel('Angle [degrees]',fontsize=20)
plt.ylabel('S(θ)/S(θ=0)',fontsize=20)
plt.semilogy(x-shift,interp(y,[min(y),max(y)],[min(scat),max(scat)])/max(amp*interp(y,[min(y),max(y)],[min(scat),max(scat)])),label='Experiment')
plt.semilogy(b,(scat)/max(scat),label='Theory')
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.text(-50, 0.80, "d = "+ str(s) +"μm", size = 25, alpha = 1)
plt.legend()
plt.figure(figsize=(20,20))
plt.subplot(2, 2, 1)
c = (np.diff(np.sign(np.diff(y))) < 0).nonzero()[0] + 1
plt.plot(x , y, color='grey')
plt.plot(x[c], y[c], "o", label="max", color='b')
plt.subplot(2, 2, 2)
z = (np.diff(np.sign(np.diff(scat))) < 0).nonzero()[0] + 1
plt.plot(b , scat, color='grey')
plt.plot(b[z], scat[z], "o", label="max", color='b')
plt.show()
print(x[c])
print(b[z])
interact(mie,m=(1.58, 1.58),ml=(1,1),l=(0.65, 0.65),s=(1.0, 10.0, 0.01),amp=(0,50),shift=(-5.00,5.00,0.01));