Arduino Roboter Staubsauger

Trotz der Tatsache , dass bei geektimes gibt es bereits mehrere Artikel über Roboter - Staubsauger auf Arduino hier und hier , glaube ich es nicht überflüssig sein wird , ein anderes Projekt zu veröffentlichen. Darüber hinaus wird es den Geschäftsmodellen etwas näher gebracht, und da sich das Projekt ständig weiterentwickelt, wird es im Laufe der Zeit einige davon in ihrer Funktionalität übertreffen. Ich veröffentliche diesen Beitrag mit Genehmigung des Entwicklers dieses Roboterstaubsaugers, da die Autorin nicht die Möglichkeit hat, Artikel aus ihrem Konto zu veröffentlichen. Daher wird der Artikel in Form eines kurzen Interviews mit dem Schöpfer mit Schemata, Fotos und dem Code eines Roboterstaubsaugers gemischt. Beginnen wir jedoch mit einer Videodemonstration zur Reinigung des Raums mit diesem Staubsauger.





Beginnen wir also mit dem Design und der Funktionsweise des Staubsaugers.



Das Diagramm zeigt, dass der Staubsauger mit 6 Infrarotsensoren ausgestattet ist. Sie funktionieren, wenn sich der Staubsauger dem Hindernis nähert, und geben den Befehl, anzuhalten und sich umzudrehen, ohne darauf zu stoßen. Wenn keiner der 6 Sensoren funktioniert und der Roboterstaubsauger mit einem Hindernis kollidiert, wird einer der 2 Schalter, die den Stoßfänger (in dem sich die IR-Sensoren befinden) verbinden, und der Roboterkörper ausgelöst.

Aufmerksame Leser haben festgestellt, dass die Roboterleistung im Diagramm nicht dargestellt ist. Hier ist die Lösung Standard, es werden 4 Batterien des 18650-Formats verwendet, zwei Paare, die über den Batterielade- / Entladungsregler in Reihe geschaltet sind. Ferner sind Auf- und Ab-DC / DC-Wandler von der Steuerung über einen Schalter verbunden. + 12 Volt liefert Radmotoren und Frontbürstenmotoren. +5 Volt speisen den Rest der Elektronik. Die Turbine wird mit 7-8 Volt betrieben, daher wird kein Konverter benötigt. Es sieht so aus:



Infolgedessen sieht die Liste der Hauptkomponenten folgendermaßen aus:

arduino pro mini
L298N Motortreibermodul
Räder
Aufwärtswandler
Abwärtswandler
IR-Sensor 6 Stk.
Lade-Entladungsregler-
Laufrad für eine Turbine (ca. 200 Rubel)
PVC zur Herstellung eines
Batteriegehäuses 18650 4-tlg.
2 Motoren für Bürsten (Modell ist nicht sehr wichtig)
1 Motor für Turbine
2 Kollisionsschalter.
Eine der Optionen für eine Skizze zur chaotischen Reinigung
Hier
#define mot_ena 9 //
#define mot_in1 8 //
#define mot_in2 7 //
#define mot_in3 6 //
#define mot_in4 4 //
#define mot_enb 10 //

#define ir_1 A0 // 1 -
#define ir_2 A1 // 2 -
#define ir_3 A2 // 3 -
#define ir_4 A3 // 4 -
#define ir_5 A4 // 5 -
#define ir_6 A5 // 6 -

#define lev_vik 11 //
#define pra_vik 12 //

//
byte max_skor_lev = 254;
byte max_skor_prav = 244;
//---------------------------------

byte min_skor = 0;

void setup() {

randomSeed(analogRead(A7));
//
pinMode(3, INPUT); //
pinMode(2, INPUT); //
//-------------------------
//
pinMode(mot_ena, OUTPUT);
pinMode(mot_in1, OUTPUT);
pinMode(mot_in2, OUTPUT);
pinMode(mot_in3, OUTPUT);
pinMode(mot_in4, OUTPUT);
pinMode(mot_enb, OUTPUT);
//-------------------------------------------
// -
pinMode(ir_1, INPUT);
pinMode(ir_2, INPUT);
pinMode(ir_3, INPUT);
pinMode(ir_4, INPUT);
pinMode(ir_5, INPUT);
pinMode(ir_6, INPUT);
//-------------------------
//
pinMode(lev_vik, INPUT);
pinMode(pra_vik, INPUT);
//---------------------------
delay(3000);

ROB_VPERED();
}

void loop() {

//
if (digitalRead(lev_vik) == LOW)
{
ROB_STOP();
delay(200);
ROB_NAZAD();
delay(150);
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(400, 1500));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
//
if (digitalRead(pra_vik) == LOW)
{
ROB_STOP();
delay(200);
ROB_NAZAD();
delay(150);
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(400, 1500));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 2 -
if (digitalRead(ir_2) == LOW)
{
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 3 -
if (digitalRead(ir_3) == LOW)
{
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 4 -
if (digitalRead(ir_4) == LOW)
{
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 5 -
if (digitalRead(ir_5) == LOW)
{
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 1 -
if (digitalRead(ir_1) == LOW)
{
ROB_PRAV();
delay(10);
ROB_VPERED();
}
//-----------------------------------------------
// 6 -
if (digitalRead(ir_6) == LOW)
{
ROB_LEV();
delay(10);
ROB_VPERED();
}
//-----------------------------------------------

}

//
void ROB_PRAV()
{
//
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, HIGH);
analogWrite(mot_ena, max_skor_lev);
//
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, HIGH);
analogWrite(mot_enb, max_skor_prav);
}
//-----------------
//
void ROB_LEV()
{
//
digitalWrite(mot_in3, HIGH);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, max_skor_prav);
//
digitalWrite(mot_in1, HIGH);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, max_skor_lev);
}
//---------------------
//
void ROB_VPERED()
{
//
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, HIGH);
analogWrite(mot_ena, max_skor_lev);
//
digitalWrite(mot_in3, HIGH);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, max_skor_prav);
}
//-------------------------------------
//
void ROB_NAZAD()
{
//
digitalWrite(mot_in1, HIGH);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, max_skor_lev);
//
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, HIGH);
analogWrite(mot_enb, max_skor_prav);
}
//------------------------------------
//
void ROB_STOP()
{
//
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, min_skor);
//
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, min_skor);
}
//--------------------------------

Nun, ein kleines Interview mit dem Autor dieses Projekts. Der Autor heißt Dmitry Ivanov und lebt in Sotschi.

- Dmitry, wie sind Sie auf die Idee gekommen, einen Roboterstaubsauger herzustellen?

- Ich habe auf YouTube ein Video gesehen, in dem ein Roboterstaubsauger putzte, wollte einen kaufen, aber als ich mir den Preis ansah, dachte ich und beschloss, es selbst zu machen. Zuerst habe ich die erste Version des Roboters hergestellt, er hatte schwache Motoren auf Rädern, einen festen Behälter für Schmutz und Staub, wenige Hindernissensoren und ich habe die zweite Version hergestellt, ohne diese Mängel.

- Wie viel Geld und Zeit hat es gekostet, um es zu machen?

„Ungefähr 5000 Tausend Rubel. plus zwei Monate Arbeit “

- Was war während des Bauprozesses am schwierigsten?

Am schwierigsten ist es, ein Gehäuse und eine Turbine so herzustellen, dass alle Details übereinstimmen.

- Gibt es Pläne, den Roboter weiter zu verbessern?

Es ist geplant, das Gehäuse zu bemalen, verschiedene Reinigungsmodi durchzuführen, das Bluetooth-Modul anzuschließen und ein Programm für das Telefon auf dem Android zu schreiben (Modussteuerung, manuelle Steuerung, Anzeige der Batterieladung). Machen Sie eine blaue Hintergrundbeleuchtung für Schönheit unter einem Staubsauger.

Eine Sammlung von über 100 Arduino-Schulungsmaterialien für Anfänger und Profis finden Sie hier .
PS Der Online-Kurs über Arduino bei Gimetays ist hier. In diesem optimistischen Moment, denke ich, werden wir die Geschichte über diese Version des Roboterstaubsaugers beenden, obwohl es viele interessante Momente gibt, die nicht beleuchtet sind. Und so schließen wir mit einer Frage:

Source: https://habr.com/ru/post/de382131/


All Articles