私はwifiシールド付きarduino unoを持っており、信号源に行くことができるようにしたい。rssiを使用してWiFi信号のソースに続いて
私が得るrssiは、通常、-40dBmを超える-80dBmです。ロボットがソースを見つけたと仮定します。
ロボットが真っ直ぐに進み、新しい信号が右に90度回転する前よりも悪い場合はrssiを2秒ごとにチェックし、ソースが見つかるまでそれを続けます。
ボイドループ()は、ロボットのロジックです。
int angle = 90;
char ssid[]="AndroidAP";
bool sourceFound = false;
long rssi = -100;
long prevRssi = 0;
void setup() {
Serial.begin(9600);
updateRSSI();
servoLeft.attach(8);
servoRight.attach(9);
goStraight();
}
void loop() {
if(!sourceFound){
updateRSSI();
if(prevRssi>rssi){
turnRight();
goStraight();
delay(2500);
}
if(rssi>-41){
stayStill();
detachServos();
sourceFound = true;
Serial.print("Source found.");
Serial.println();
}
}
}
/*MOVEMENT CONTROLS*/
void turnLeft(){
servoLeft.writeMicroseconds(1300);
servoRight.writeMicroseconds(1300);
delay(angle*10.6);
}
void turnRight(){
servoLeft.writeMicroseconds(1700);
servoRight.writeMicroseconds(1700);
delay(angle*10.6);
}
void turnAround(){
if((double)rand()/(double)RAND_MAX==0){
turnLeft();
turnLeft();
}else{
turnRight();
turnRight();
}
}
void stayStill(){
servoLeft.writeMicroseconds(1500);
servoRight.writeMicroseconds(1500);
}
void goStraight(){
servoLeft.writeMicroseconds(1600);
servoRight.writeMicroseconds(1444);
}
void detachServos(){
servoLeft.detach();
servoRight.detach();
}
/*MOVEMENT CONTROLS*/
/*WIFI SHIELD CONTROLS*/
void updateRSSI(){
prevRssi = rssi;
uint8_t available_networks = WiFi.scanNetworks();
for (uint8_t net = 0; net < available_networks; ++net)
{
if (strcmp(WiFi.SSID(net), ssid) == 0)
{
// ssidFound = true;
rssi = WiFi.RSSI(net);
if(rssi-prevRssi<-10){ //disregard the measurement and try again
rssi = prevRssi;
updateRSSI();
}
Serial.print("Old: ");
Serial.print(prevRssi);
Serial.print(" dBm ");
Serial.print("New: ");
Serial.print(rssi);
Serial.print(" dBm");
Serial.println();
break;
}
}
}
問題は、信号が、それはソースにかなり近いですし、常に正しい行くこと、それをルータに得るための最も効果的な方法は非常にランダムでない場合であっても、ロボットは時々右折するようになります多くのことを変化することです。ソースを見つけて入手するための簡単な方法や効率的な方法はありますか?
-40は、このような前提のために少し低いようです。私は、ルータの近くにいるときよりもはるかに強い信号を期待しています。 –
@MartinJames私は電話ホットスポットを使用していたので、基本的にはテストのためだけに触れていました。私の主な関心事は、ロボットが何度も推測せずにソースに到達するための最も正確で効率的なアルゴリズムを得ることです。 – Higeath