Smart Sensor & Actuator
1. μ΅λ¨κ²½λ‘ ν¨μΉνλκ²μ
1-1. 4X5 λλ 5X4 격μꡬ쑰λ₯Ό λΌμΈ νΈλ μ΄μ±νμ¬ λμ°©μ κΉμ§ λͺ¨λ μ μ μ νμν ν κ° ν¨μΉμ μμΉλ₯Ό λμ€νλ μ΄μ μΆλ ₯νλ€.1-2. λΉ¨κ° μ μ μ +1μ , νλ μ μ μ -1μ μΌλ‘ κ³μ°νμ¬ κ°μ₯ λ§μ μ μλ₯Ό νλνλ©° μ΅λ¨κ²½λ‘λ‘ μΆλ°μ κΉμ§ 볡κ·νκ³ μ μλ₯Ό λμ€νλ μ΄μ μΆλ ₯νλ€.
Step 1. μ΄λνκΈ°
void go(){
val = 5;
//if c2 is on color turn left
if(getColorName(c2) != white)
{
setMotorSpeed(lm,nMotorSpeedSetting - val);
setMotorSpeed(rm,nMotorSpeedSetting + val);
}
//if c2 is on white turn right
else
{
setMotorSpeed(lm,nMotorSpeedSetting + val);
setMotorSpeed(rm,(nMotorSpeedSetting - val)/2);
}
Theory : μ μ§ν λλ ν°μ λ°νμμλ μ€λ₯Έμͺ½μΌλ‘ κΊ½κ³ , κ°μ μμμλ μΌμͺ½μΌλ‘ κΊ½κ² νμ¬ νμ κ°μ μ μΌμͺ½μ λ°λΌ νλμ μΌμλ₯Ό κ°μ§κ³ μ΄λνλλ‘ νμλ€.
Problem : μ μ μ μΈμνλ κ³Όμ μμ ν°μ μμ μλ κ²½μ° μ μ μ μμ μΈμνμ§ μκ³ μ§λκ°λ²λ¦¬λ λ¬Έμ κ° λ°μνμλ€.
Solution : ν°μ λ°νμ λ°μμ κ²½μ°λ₯Ό κ°μ μ λ°μμ λλ³΄λ€ λ λ§μ΄ νμ νλλ‘ νμ¬ ν°μμμ μμΉνλ μκ°μ μ€μλ€.
// vertex on right side && row ==0 or row is odd number or 0
if((row==0 || row %2 == 1) && getColorName(c3) !=6){
int check=0;
//get c2 on the line
while(getColorName(c2)==6){
setMotorSpeed(lm,(nMotorSpeedSetting + val)/2);
setMotorSpeed(rm,(nMotorSpeedSetting - val)/8);
sleep(80);
}
//while c2 is not white turn right for color
while(getColorName(c2)!=6 && check < 2){
setMotorSpeed(lm,(nMotorSpeedSetting + val)/2);
setMotorSpeed(rm,(nMotorSpeedSetting - val)/8);
sleep(120);
//?
if(getColorName(c2) == red)
{
if (row%2 == 0) S[row][count] = 1;
else S[row][4-count] = 1;
playSound(soundBeepBeep);
check++;
sleep(50);
}
else if (getColorName(c2) == blue){
if (row%2 == 0) S[row][count] = -1;
else S[row][4-count] = -1;
playTone(220,20);
check++;
sleep(50);
}
else{
if (row%2 == 0) S[row][count] = 0;
else S[row][4-count] = 0;
playTone(440,20);
check++;
sleep(50);
}
}
while(getColorName(c3) !=6){
//if on color turn left
if(getColorName(c2) != white)
{
setMotorSpeed(lm,nMotorSpeedSetting - val);
setMotorSpeed(rm,nMotorSpeedSetting + val);
}
//if on white turn right
else
{
setMotorSpeed(lm,nMotorSpeedSetting + val);
setMotorSpeed(rm,nMotorSpeedSetting - val);
}
}
vertex=1;
}
Theory : row==0 μ΄κ±°λ rowκ° νμμΈ κ²½μ°μλ μ€λ₯Έμͺ½ μΌμλ₯Ό κΈ°μ€μΌλ‘ ν°μμ΄ μλ κ²½μ° μ μ μ΄λΌκ³ νλ¨νκ³ κ°μ΄λ° μΌμκ° μ μ μ μμ μΈμνλλ‘ νμλ€.
Problem : λ
Έλμμ κ°μ μ κΈ°λ³ΈμμΈλ° μ΄λ₯Ό νλμμΌλ‘ μ€μΈμνλ λ¬Έμ κ° λ°μνμλ€.κ·Έλμ νμ λͺ¨λ μ μ μ νλμμ΄λ λΉ¨κ°μμΌλ‘ μΈμνλ μ€λ₯κ° λ°μνμλ€.
Solution : checkλΌλ λ³μλ₯Ό ν΅ν΄ 첫λ²μ§Έ μμΈμμ μ€λ₯λ‘ νλ¨νκ³ λ λ²μ§Έ μΈμν μμ μ μ μ μμΌλ‘ νλ¨νκ² νμ¬ μ€λ₯λ₯Ό μ κ±°νμλ€.
μμ λμ¨ μ μ μ μμ μ€λ₯μμ΄ μΈμνκ³ μμ μ μΌλ‘ μ§λκ°κ² νκΈ° μν΄ μ λ§ λ§μ λ°€μ μλ€. μ μ μ μΈμνλ©΄ μ€λ₯Έμͺ½μΌλ‘ μΌμ μκ° νμ ν μμ μΈμνκ² νλ λ°©λ²,,,μ μ μ μΈμνλ©΄ λ©μΆ ν μ²μ²ν μ΄λνμ¬ μμ μΈμν΄λ³΄λ λ°©λ²,,,λ±λ± μ λ§ ν μ μλ λͺ¨λ λ°©λ²μ μλνμ§λ§ rowμ λμμλ μ μ μ μμ΄ λ ΈλμμΈ κ²½μ° λ±λ± μΌμ λΆλΆμμμ μ€λ₯λ₯Ό μ€μΌ μλ μμμ§λ§ μ΄ λ°©λ²λ§νΌ λ§΅ μ 체μμ κΉλν λμμ κ±°μ 99.999%μ μ νλμ μ΄ νμλ μμ μ μΌλ‘ λκ° μ μλ λ°©λ²μ μμλ€. μ΄ λ°©λ²μ μ±κ³΅μ μΌλ‘ μμ±μν¨ κ²μ΄ 1λ±μ ν μ μμλ κ²°μ μ μΈ μμμ΄μ μ΄ μμ μ μ΅μ’ λͺ©μ μ΄ μλκ° κ°μΈμ μΌλ‘ μκ°νλ€!! π
// ...rowκ° μ§μμΈ κ²½μ°
else vertex = 0;
if(vertex ==1){
count=count+1;
}
}
rowκ° μ§μμΈ κ²½μ°λ λμΌνκ² μ²λ¦¬ν ν λ§λ¬΄λ¦¬νμλ€.
Step 2. νμ νκΈ°
void turnLeft()
{
setMotorSpeed(lm, 40);
setMotorSpeed(rm, 40);
sleep(200);
while( getColorName(c1) != 4)
{
setMotorSpeed(lm, -nMotorSpeedSetting * 4/10);
setMotorSpeed(rm, nMotorSpeedSetting * 4/10);
sleep(10);
}
while( getColorName(c2) != 4)
{
setMotorSpeed(lm, -nMotorSpeedSetting * 4/10);
setMotorSpeed(rm, nMotorSpeedSetting * 4/10);
}
while(getColorName(c2) == 4){
setMotorSpeed(lm, -nMotorSpeedSetting * 4/10);
setMotorSpeed(rm, nMotorSpeedSetting * 4/10);
}
setMotorSpeed(lm, 0);
setMotorSpeed(rm, 0);
sleep(100);
}
void turnRight()
{
setMotorSpeed(lm, 40);
setMotorSpeed(rm, 40);
sleep(200);
while( getColorName(c3) != 4)
{
setMotorSpeed(lm, nMotorSpeedSetting * 4/10);
setMotorSpeed(rm, -nMotorSpeedSetting * 4/10);
}
while( getColorName(c2) != 4)
{
setMotorSpeed(lm, nMotorSpeedSetting * 4/10);
setMotorSpeed(rm, -nMotorSpeedSetting * 4/10);
}
while(getColorName(c2) == 4){
setMotorSpeed(lm, nMotorSpeedSetting * 4/10);
setMotorSpeed(rm, -nMotorSpeedSetting * 4/10);
}
while(getColorName(c2)!=4)
{
setMotorSpeed(rm,nMotorSpeedSetting * 4/10);
setMotorSpeed(lm,-nMotorSpeedSetting * 4/10);
}
setMotorSpeed(lm, 0);
setMotorSpeed(rm, 0);
sleep(100);
}
Theory : νμ νλ €κ³ νλ λ°©ν₯μ μλ μΌμκ° κ°μ μ μΈμν λκΉμ§ νμ ν ν κ°μ΄λ° μΌμκ° κ°μ μ μΈμν λκΉμ§ νμ νκ³ λ€μ κ°μ΄λ° μΌμκ° κ°μ μ ν΅κ³Όν΄ ν°μμ μΈμν λκΉμ§ νμ νλλ‘ νμ¬ 90νμ μ νλ€.
Problem : μΌμͺ½μΌλ‘ νμ νλ κ²½μ°μλ λ¬Έμ κ° μμμ§λ§ μ€λ₯Έμͺ½μΌλ‘ νμ νλ κ²½μ° κ°μ μ μ€λ₯Έμͺ½μΌλ‘ λ²μ΄λ ν°μμ μΈμν μνμμ νμ μ΄ λ§λ¬΄λ¦¬λμ΄μ μ΄ μ§μ§ν λ κ°μ μ μΌμͺ½μ κΈ°μ€μΌλ‘ λ§λ€μκΈ° λλ¬Έμ μλ±ν κ³³μΌλ‘ λΉ μ Έλκ°κ² λλ€.
Solution : μ€λ₯Έμͺ½ νμ μ νμ μ΄ λλ ν λ€μ κ°μ μ λ
Έλμμ μΈμν λκΉμ§ μΌμͺ½μΌλ‘ νμ νλλ‘ νμ¬ μ΄ ν μ§μ§μλ λ¬Έμ κ° μλλ‘ νμλ€.
Step 3. νμνκΈ°
void completeSearch()
{
int checksize = 0;
while(true)
{
go();
if(row == 0 && count == 4 && checksize == 0)
{
{
stopMotor();
sleep(100);
setMotorSpeed(lm, 20);
setMotorSpeed(rm, 20);
sleep(400);
stopMotor();
sleep(100);
}
if(getColorName(c2) != white)
{
c = 4;
r = 3;
setMotorSpeed(lm, -20);
setMotorSpeed(rm, -20);
sleep(200);
stopMotor();
sleep(100);
}
else
{
c = 3;
r = 4;
setMotorSpeed(lm, -20);
setMotorSpeed(rm, -20);
sleep(300);
stopMotor();
sleep(100);
}
checksize++;
}
λ§΅μ΄ 5X4μΈμ§ 4X5μΈμ§ 첫 μ€μ 4λ²μ§Έ μ μ μμ λ€μ κ°μ μ μ 무λ₯Ό ν΅ν΄ νλ¨νλ€.
if(count == c+1)
{
if(row == r) return;
if(row%2 ==0)
{
turnRight();
}
else
{
turnLeft();
}
count=0;
row=row+1;
stopMotor();
sleep(500);
if(row%2 == 0)
{
while(getColorName(c1)== 6) {
//if on color turn left
if(getColorName(c2) != white)
{
setMotorSpeed(lm,(nMotorSpeedSetting - val)/2);
setMotorSpeed(rm,(nMotorSpeedSetting + val)/2);
}
//if on white turn right
else
{
setMotorSpeed(lm,(nMotorSpeedSetting + val));
setMotorSpeed(rm,(nMotorSpeedSetting - val)/2);
}
}
go();
turnLeft();
}
else
{
while(getColorName(c3)== 6) {
//if on color turn left
if(getColorName(c2) != white)
{
setMotorSpeed(lm,(nMotorSpeedSetting - val)/2);
setMotorSpeed(rm,(nMotorSpeedSetting + val)/2);
}
//if on white turn right
else
{
setMotorSpeed(lm,(nMotorSpeedSetting + val));
setMotorSpeed(rm,(nMotorSpeedSetting - val)/2);
}
}
go();
turnRight();
}
}
}
}
rowμ λμ λλ¬ν κ²½μ° νμ νκ³ rowλ₯Ό λλ¦° ν count=0λ‘ μ΄κΈ°ννκ³ λμ goν¨μλ₯Ό ν΅ν΄ λ€μ rowμ 첫 μ μ μ μμ νλ¨νκ³ νμ νλ λ°©μμΌλ‘ λͺ¨λ μ μ μ νμν΄ λκ°λ€. νμ νμλ 2μ°¨μ λ°°μ΄μ λͺ¨λ μ μ μ μμ μ μ₯ν ν λ€μ μ μλ‘ λ°κΎΈμ΄ μ μ₯νμλ€.
Step 4. μ΅λ¨ κ²½λ‘, μ΅λ μ μλ‘ λ³΅κ·νκΈ°
for(int i = 0; i<r+1; i++){
for ( int j = 0; j<c+1 ;j++){
if(i==0 && j==0) dt[i][j]=S[i][j];
else if(i==0) dt[i][j] = dt[i][j-1]+S[i][j];
else if(j==0) dt[i][j] = dt[i-1][j]+S[i][j];
else dt[i][j]= max(dt[i-1][j],dt[i][j-1])+S[i][j];
}
}
sleep(500);
int score = dt[r][c];
while(r != 0 || c!= 0){
if(r==0) goLeft();
else if(c ==0) goUp();
else if(dt[r-1][c] > dt[r][c-1]) goUp();
else goLeft();
}
Theory : λ€μ΄λλ―Ή νλ‘κ·Έλλ°μ μ΄μ©νμ¬ λμ°©μ ~μΆλ°μ κΉμ§ λͺ¨λ μ μ μ μ μλ₯Ό κ·Έ μ§μ μ μ μ μ μμ ν©ν κ²μ€ μ΅λ μ μλ§ μ μ₯νμλ€. κ·Έλ¦¬κ³ μ΅λ μ μλ§ λ°λΌμ μΆλ°μ μΌλ‘ μ΄λνλλ‘ νμλ€.
μμ°μμβΌοΈ
https://youtu.be/OUp2KLjicu0 ππ» 1λ²λ¬Έμ 45
https://youtu.be/CMb2eE66qq4 ππ» 1λ²λ¬Έμ 54