Malgré le fait qu'à geektimes il y a déjà plusieurs articles sur les aspirateurs robotiques sur arduino ici et ici , je pense qu'il ne sera pas superflu de publier un autre projet. De plus, il se rapproche un peu des modèles de magasin et, comme le projet est en constante évolution, il dépassera certains d'entre eux en fonctionnalité avec le temps. Je publie ce billet avec la permission du développeur de ce robot aspirateur, car l'auteur n'a pas la possibilité de publier des articles depuis son compte. Par conséquent, l'article se présentera sous la forme d'un court entretien avec le créateur mélangé avec des schémas, des photos et le code d'un robot aspirateur. Mais commençons par une démonstration vidéo du nettoyage de la pièce avec cet aspirateur.
Commençons donc par la conception et le principe de fonctionnement de l'aspirateur.
Le schéma montre que l'aspirateur est équipé de 6 capteurs infrarouges. Ils fonctionnent lorsque l'aspirateur s'approche de l'obstacle, donnant l'ordre de s'arrêter et de faire demi-tour sans s'écraser dessus. Si aucun des 6 capteurs ne fonctionne et que l'aspirateur robot entre en collision avec un obstacle, l'un des 2 interrupteurs qui connectent le pare-chocs (qui contient les capteurs IR) et le corps du robot est déclenché.Les lecteurs attentifs ont remarqué que la puissance du robot n'est pas indiquée dans le diagramme. Ici, la solution est assez standard, 4 batteries au format 18650 sont utilisées, deux paires connectées en série via le contrôleur de charge-décharge de la batterie. De plus, des convertisseurs DC-DC de haut en bas sont connectés à partir du contrôleur via un commutateur. + 12 volts alimente les moteurs de roue et les moteurs à balais avant. +5 volts alimente le reste de l'électronique. La turbine est alimentée par 7-8 volts, donc un convertisseur n'est pas nécessaire pour cela. Il ressemble à ceci:
En conséquence, la liste des principaux composants se présente comme suit:arduino pro mini -L298N Module de contrôle de moteurrouesboost convertisseurabaisseur convertisseurcapteur IR 6 pcscontrôleur de charge-déchargeroue à aubes d'une turbine (environ 200 roubles)PVC pour la fabrication d'un boîtier debatterie 18650 4 pcs.2 moteurs pour brosses (le modèle n'est pas très important)1 moteur pour turbine2 interrupteurs de collision.L'une des options pour un croquis pour le nettoyage chaotiqueici#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);
}
//--------------------------------
Eh bien, une petite interview avec l'auteur de ce projet. Le nom de l'auteur est Dmitry Ivanov, qui vit à Sotchi.- Dmitry, comment vous est venue l'idée de faire un robot aspirateur?- J'ai vu une vidéo sur YouTube où un robot aspirateur nettoyait, je voulais en acheter un, mais quand j'ai regardé le prix, j'ai pensé et décidé de le faire moi-même. J'ai d'abord fait la première version du robot, il avait de faibles moteurs sur roues, un conteneur fixe pour les débris et la poussière, peu de capteurs d'obstacles, et j'ai fait la deuxième version, dépourvue de ces défauts.- Combien d'argent et de temps at-il fallu pour le faire?«Environ 5000 mille roubles. plus deux mois de travail »- Qu'est-ce qui a été le plus difficile pendant la construction?Le plus difficile est de réaliser un carter et une turbine, pour s'adapter à tous les détails.- Avez-vous l'intention de continuer à améliorer le robot?Les plans sont de peindre le boîtier, effectuer plusieurs modes de nettoyage, connecter le module bluetooth et écrire un programme pour le téléphone sur l'androïde (contrôle de mode, contrôle manuel, affichage de la charge de la batterie). Eh bien, faites un rétro-éclairage bleu pour la beauté sous un aspirateur.Une collection de plus de 100 matériels didactiques sur l'arduino pour les débutants et les professionnels peut être trouvée ici .PS Le cours en ligne sur Arduino chez Gimetays est ici. À ce moment optimiste, je pense que nous terminerons l'histoire de cette version du robot aspirateur, bien qu'il y ait beaucoup de moments intéressants éteints. Et nous concluons donc par une question: