Na świecie każdego dnia coraz bardziej popularne wśród robotów czyszczących. Dzięki tak małym pomocnikom dom staje się znacznie czystszy, a sprzątanie wymaga znacznie mniej wysiłku. Istnieje wiele różnych modyfikacji robotów, wszystkie różnią się funkcjonalnością, rozmiarem i innymi parametrami.
W szczególności w tym artykule rozważymy przykład tego, jak to zrobić
zrób to sam Możesz zrobić prostego robota, który sam odkurz pomieszczenie w razie potrzeby. Kontroler
Arduino.
Materiały i narzędzia do produkcji robota:- tablica sterująca pracą silników (tarcza silnika Arduino);
- tablica Arduino;
- dwa silniki z przekładniami (silniki o napięciu 3 woltów i prędkości obrotowej około 100 obr./min.);
- koła (mogą być wykonane z puszek aluminiowych;
- chłodnica z zasilacza komputerowego (możliwa zarówno przy napięciu 5V, jak i 12V);
- zasilanie 5 V (akumulator);
- przewody i płytka do montażu elementów radiowych;
- do wykonania skrzynki potrzebny będzie plastikowy pojemnik;
- Kolejny mały pojemnik do tworzenia kosza na śmieci;
- gorący klej;
- magnesy;
- karton.
Proces produkcyjny robota:
Pierwszy krok Część programowa robota i szkic:
Sercem robota jest kontroler Arduino. Aby go zaprogramować, potrzebujesz komputera i specjalnego oprogramowania.
Aby pobrać szkic na tablicę, potrzebujesz programu Arduino IDE. Poniżej możesz pobrać kod programu robota i zobaczyć główny obwód.
/*
Program do sterowania robotem z dwoma silnikami.
Robot obraca się, gdy silniki zmieniają prędkość i kierunek.
Przednie zderzaki po lewej i prawej stronie wykrywają przeszkody.
Sonary ultradźwiękowe można podłączyć do wejść analogowych (testowane na LV-MaxSonar-EZ1):
- umieść szpilki w szyku sonarowym Szpilki w następującej kolejności: lewy, prawy, przód, inne ..
Przykłady:
1. tylko lewy i prawy sonar podłączony do pinów 2 i 3: sonarPins [] = {2,3}
2. sonary lewy, prawy i przedni podłączone do pinów 2, 3 i 5: sonarPins [] = {2,3,5}
3. tylko przedni sonar podłączony do pinu 5: sonarPins [] = {-1, -1.5}
4. pozostawiono tylko sonar podłączony do pinu 2: sonarPins [] = {2}
5. tylko prawy sonar podłączony do pinów 3: sonarPins [] = {-1,3}
6,5 sonary podłączone do pinów 1,2,3,4,5: sonarPins [] = {1,2,3,4,5}
Osłona silnika służy do uruchamiania silników.
*/
const int Baud = 9600; // Szybkość portu UART
// Właściwości sonaru
int sonarPins [] = {1, 2}; // Analog Pin Nums do sonaru sondy Pin AN
const long MinLeftDistance = 20; // Minimalna dozwolona lewa odległość
const long MinRightDistance = 20; // Minimalna dozwolona właściwa odległość
const long MinFrontDistance = 15; // Minimalna dozwolona odległość od przodu
const int SamplesAmount = 15; // więcej próbek - płynniejszy pomiar i większe opóźnienie
const int SonarDisplayFrequency = 10; // wyświetla tylko jedną z tych linii - nie wszystkie
int sonarDisplayFrequencyCount = 0;
const long Factor = 2,54 / 2;
długie próbki [sizeof (sonarPins)] [SamplesAmount];
int sampleIndex [sizeof (sonarPins)];
// prawa strona
const int pinRightMotorDirection = 4; // można to oznaczyć na ekranie silnika jako „DIR A”
const int pinRightMotorSpeed = 3; // można to oznaczyć na ekranie silnika jako „PWM A”
const int pinRightBumper = 2; // gdzie podłączony jest prawy zderzak
// lewa strona
const int pinLeftMotorDirection = 7; // można to oznaczyć na ekranie silnika jako „DIR B”
const int pinLeftMotorSpeed = 6; // można to oznaczyć na ekranie silnika jako „PWM B”
const int pinLeftBumper = 8; // gdzie podłączony jest prawy zderzak
// odkomentuj następne 2 linie, jeśli osłona silnika ma pęknięcia
// const int pinRightMotorBreak = PUT_BREAK_PIN_HERE; // można to oznaczyć na tarczy silnika jako „BREAKE A”
// const int pinLeftMotorBreak = PUT_BREAK_PIN_HERE; // można to oznaczyć na tarczy silnika jako „BREAKE B”
// pola
const int turnRightTimeout = 100;
const int turnLeftTimeout = 150;
// ustaw licznik, jak długo silnik się cofa: N / 10 (w milisekundach)
int countDownWhileMovingToRight;
int countDownWhileMovingToLeft;
// Inicjalizacja
void setup () {
Serial.begin (Baud);
initPins ();
// odkomentuj następne 4 linie, jeśli osłona silnika ma pęknięcia
// pinMode (pinLeftMotorBreak, OUTPUT);
// pinMode (pinRightMotorBreak, OUTPUT);
// digitalWrite (pinLeftMotorBreak, LOW); // wyłącz przerwy
// digitalWrite (pinRightMotorBreak, LOW); // wyłącz przerwy
runRightMotorForward ();
runLeftMotorForward ();
startMotors ();
}
// Pętla główna
void loop () {
replaceAndSetRightSide ();
replaceAndSetLeftSide ();
processRightSide ();
processLeftSide ();
opóźnienie (10); // powtarzanie co 10 milisekund
}
//---------------------------------------------------
void initPins () {
pinMode (pinRightMotorDirection, OUTPUT);
pinMode (pinRightMotorSpeed, OUTPUT);
pinMode (pinRightBumper, INPUT);
pinMode (pinLeftMotorDirection, OUTPUT);
pinMode (pinLeftMotorSpeed, OUTPUT);
pinMode (pinLeftBumper, INPUT);
dla (int i = 0; i pinMode (sonarPins [i], INPUT);
}
void startMotors () {
setMotorSpeed (pinRightMotorSpeed, 255);
setMotorSpeed (pinLeftMotorSpeed, 255);
}
void waitWhileAnyBumperIsPressed () {
while (checkBumperIsNotPressed (pinRightBumper)
&& checkBumperIsNotPressed (pinLeftBumper)) {
opóźnienie (20); // sprawdzanie co 20 milisekund
}
}
void processRightSide () {
if (countDownWhileMovingToRight MinFrontDistance) // sprawdza, czy nie została osiągnięta minimalna dozwolona odległość od przodu
powrót
if (checkCounterIsNotSet (countDownWhileMovingToLeft)) // jeśli licznik jeszcze nie odlicza
runLeftMotorBackward (); // uruchom prawy silnik do tyłu
countDownWhileMovingToLeft = turnLeftTimeout; // ustaw licznik na maksymalną wartość, aby rozpocząć odliczanie
}
bool checkCounterIsNotSet (licznik int) {
return counter = SamplesAmount)
sampleIndex [pinIndex] = 0;
sample [pinIndex] [sampleIndex [pinIndex]] = wartość;
zwróć prawdę;
}
długo obliczyćAvarageDistance (int pinIndex) {
długa średnia = 0;
for (int i = 0; i średnia + = próbki [pinIndex] [i];
zwracana średnia / SamplesAmount;
}
Krok drugi Przygotowanie podstawowych elementów robota
Karton służy jako podstawa do mocowania wszystkich elementów robota, w tym akumulatora, kart sterowania i silników.
Turbina musi być odpowiednio przyklejona lub w inny sposób przymocowana do małego plastikowego pojemnika, w którym zostanie wykonany otwór do wchłaniania brudu. Następnie ten projekt jest przyklejany do tekturowej podstawy. Ponadto pojemnik musi mieć dodatkowy otwór, przez który wydostanie się powietrze. Powinien być filtr, autor postanowił użyć do tych celów tkaniny syntetycznej.
W następnym etapie chłodnicę należy przykleić serwomechanizmem, a następnie ten projekt jest instalowany na tekturowej podstawie.
Krok trzeci Wykonujemy koła dla robota
Aby zrobić koła, musisz wziąć aluminiowe puszki i odciąć od nich górną i dolną część. Następnie elementy te są ze sobą sklejane. Teraz pozostaje tylko właściwe przymocowanie kół do serwomotorów za pomocą kleju topliwego. Ważne jest, aby zrozumieć, że koła muszą być wyraźnie zamocowane pośrodku wałków serwo. W przeciwnym razie robot jeździ krzywo i zużywa energię.
Krok czwarty Ostateczny proces montażu robota
Po zainstalowaniu akumulatora i podłączeniu wszystkich elementów robota pozostaje umieścić konstrukcję w trwałej obudowie. Duży plastikowy pojemnik doskonale nadaje się do tych celów. Przede wszystkim należy wykonać otwory w nosie korpusu robota, przez które zostaną wyprowadzone styki, które dadzą sygnał elektronika gdy robot zderzy się z przeszkodą.
Aby szybko i łatwo usunąć obudowę, do jej naprawy służą magnesy, w tym przypadku jest ich osiem. Magnesy są przyklejone do wnętrza odkurzacza i do samego pojemnika, każdy po 4 sztuki.
To wszystko. Teraz robot jest zmontowany i można go wypróbować w praktyce. Pomimo faktu, że robot nie jest w stanie sam się naładować i ma raczej ograniczoną zdolność nawigacyjną, za pół godziny będzie w stanie sprzątać śmieci w kuchni lub małym pokoju. Zaletą robota jest to, że wszystkie elementy można łatwo znaleźć i nie są one bardzo drogie. Bez wątpienia domowej roboty Możesz udoskonalić, dodając nowe czujniki i inne elementy.