2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
TA-ZON-BOT
El tazon siguelineas
Hemos realizado este robot siguelineas con la ayuda de los nuestros absolwentów (gracias minimakers).
Ha sido un proyecto express para poder participar en la OSHWDEN de A Coruña.
oshwdem.org/2017/06/oshwdem-2017/
traduktor google
TA-ZON-BOT
Miska podąża za linią
Z pomocą naszych uczniów stworzyliśmy tego robota, który podąża za tobą (dzięki minimakerom).
Udział w OSHWDEN w A Coruña był ekspresowym projektem.
oshwdem.org/2017/06/oshwdem-2017/
tłumacz Google
Krok 1: Krok 1: Komponenty
Los componentes que hemos utilizados
han sido los siguientes.
Una pieza redonda de metacrilato. (Podéis utilizar cualquier diseño, nuestra base mide lo justo para colocar el tazón bocabajo).
1 Tazón de desayuno (que sirve para concentrar al robot en la linea).
2 ruedas de un juguete reciclado.
2 motores con las siguientes especificaciones:
Specyficzne (Para 6V):
Wymiary: 26 x 10 x 12 mm
Stosunek reduktora: 30:1
Średnica del eje: 3mm (con ranura de bloqueo)
Napięcie nominalne: 6Vcc (puede funcionar entre 3 a 9Vcc)
Velocidad de giro sin carga: 1000 obr./min
Consumo sin carga: 120mA (1600mA con carga)
Moment obrotowy: 0,6 kg/cm (maks.)
Peso: 10 gram
Enlace de tienda online:
1 placa Arduino UNO (reciclada de un proyecto antiguo)
1 osłona dla silników Adafruit v2.3:
1 Un porta pilas de 8 pilas AAA(no utilizamos 2 fuentes de alimentación).
6 tornillos y tuercas para unir los elementos como se ve en la imagen
bridas para los motores, una goma elástica para sujetar el porta pilas y un trozo de una lamina de plásticos para la base del porta pilas.
1 array de sensores QTR-8RC con las siguientes características;
Specyfikacje matrycy czujnika odbicia QTR-8x • Wymiary: 2,95" x 0,5" • Napięcie robocze: 3,3-5,0 V • Prąd zasilania: 100 mA • Format wyjściowy dla QTR-8A: 8 napięć analogowych od 0 V do napięcia zasilania • Format wyjściowy dla QTR-8RC: 8 cyfrowych sygnałów zgodnych z We/Wy, które mogą być odczytywane jako czasowy wysoki impuls • Optymalna odległość wykrywania: 0,125" (3 mm) • Maksymalna zalecana odległość wykrywania dla QTR-8A: 0,25" (6 mm) • Maksymalna zalecana odległość wykrywania dla QTR-8RC: 0,375" (9,5 mm) • Waga bez kołków głowicy: 0,11 uncji (3,1 g) Lo podéis encontrar en:
tienda.bricogeek.com/componentes/257-array-…
Ensamblar todo … prróximamente un vídeo más detallado…
Komponenty, których użyliśmy, były następujące.
Okrągły kawałek metakrylanu. (Możesz użyć dowolnego wzoru, nasza podstawa wystarczy, aby umieścić miskę do góry nogami).
1 miska śniadaniowa (używana do skoncentrowania robota na linii).
2 kółka zabawki z recyklingu.
2 silniki o następujących specyfikacjach:
Dane techniczne (dla 6V): Wymiary: 26 x 10 x 12 mm Przełożenie reduktora: 30: 1 Średnica wału: 3mm (z rowkiem blokującym) Napięcie znamionowe: 6Vdc (może pracować w zakresie od 3 do 9Vdc) Prędkość obrotowa bez obciążenia: 1000rpm Zużycie bez obciążenia: 120mA (1600mA z obciążeniem) Moment obrotowy: 0,6kg/cm (max) Waga: 10 gramów
Link do sklepu internetowego:
1 płytka Arduino UNO (recykling ze starego projektu)
1 osłona dla silników Adafruit v2.3:
1 Pojemnik na 8 baterii AAA (nie używamy 2 zasilaczy).
6 śrub i nakrętek do łączenia elementów, jak widać na obrazku
kołnierze do silników, elastyczną gumę do trzymania uchwytu baterii i kawałek arkusza plastiku na podstawę uchwytu baterii.
1 tablica czujników QTR-8RC o następującej charakterystyce;
Dane techniczne matrycy czujnika odbicia QTR-8x • Wymiary: 2,95 "x 0,5" • Napięcie robocze: 3,3-5,0 V • Prąd zasilania: 100 mA • Format wyjściowy dla QTR-8A: 8 napięć analogowych od 0 V do napięcia zasilania • Format wyjściowy dla QTR-8RC: 8 cyfrowych sygnałów zgodnych z We/Wy, które mogą być odczytywane jako czasowy wysoki impuls • Optymalna odległość wykrywania: 0,125 "(3 mm) • Maksymalna zalecana odległość wykrywania dla QTR-8A: 0,25" (6 mm) • Maksymalna zalecana odległość wykrywania dla QTR-8RC: 0,375 "(9,5 mm) • Waga bez kołków głowicy: 0,11 uncji (3,1 g) Można go znaleźć w:
tienda.bricogeek.com/componentes/257-array-de-sensores-infrarojos-qtr-8rc-digital.html
Złóż wszystko… wkrótce bardziej szczegółowy film…
Krok 2: Krok 2: Inspiracja
Para probar el funcionamiento del los
motores hemos seguido esta ayuda del blog www.programarfacil.com
programarfacil.com/blog/arduino-blog/adafr…
Es un resumen muy bueno de los diferentes motores que controla esta shield.
Para calibrar el sensor QTR-8RC podéis seguir el tutorial de
Y un ultimo enlace que os puede ayudar es este instructable;
www.instructables.com/id/Arduino-based-lin…
Aby przetestować wydajność silników, śledziliśmy ten blog wsparcia www.programarfacil.com
programarfacil.com/blog/arduino-blog/adafruit-motor-shield-arduino/
To bardzo dobre podsumowanie różnych silników, którymi steruje ta tarcza.
Aby skalibrować czujnik QTR-8RC, skorzystaj z samouczka
www.youtube.com/watch?v=_ZeybIDd80s&list=PLlNY7ygeCIzCuq0jSjPD8_LfcAsPKUcGL&index=6
I ostatni link, który może ci pomóc, to ten instruktażowy;
www.instructables.com/id/Arduino-based-line-follower-using-Pololu-QTR-8RC-l/
Krok 3: Krok 3: Kod
las conexiones entre el array de
sensores y las placas las hicimos de la siguiente manera:
El Led ON va al pin cyfrowy 12
Los 8 sensores van desde el
numer 1 al pin 8
numer 2 al pin 9
numer 3 al pin 2
numer 4 al pin 3
numer 5 al pin 4
numer 6 al pin 5
numer 7 al pin 6
numer 8 al pin 7
El código va sin repasarlo (se aceptan sugerencias)
#włączać
#włączać
#włączać
#włączać
// Utwórz obiekt osłony silnika z domyślnym adresem I2C
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Lub utwórz go z innym adresem I2C (powiedzmy do układania w stos)
// Adafruit_MotorShield AFMS = Adafruit_MotorShield (0x61);
// Wybierz 'port' M1, M2, M3 lub M4. W tym przypadku M1
Adafruit_DCMotor *silnik1 = AFMS.getMotor(1);
// Możesz również zrobić inny silnik na porcie M2
Adafruit_DCMotor *silnik2 = AFMS.getMotor(2);
// Zmień poniższe wartości, aby dopasować je do silników, wagi, typu kół itp.
#zdefiniuj KP.2
#zdefiniuj KD 5
#zdefiniuj M1_DEFAULT_SPEED 50
#zdefiniuj M2_DEFAULT_SPEED 50
#zdefiniuj M1_MAX_SPEED 70
#zdefiniuj M2_MAX_SPEED 70
#define MIDDLE_SENSOR 4
#define NUM_SENSORS 8 // liczba używanych czujników
#define TIMEOUT 2500 // czeka na 2500 nas, aż wyjścia czujnika spadną
#define EMITTER_PIN 12 // emiter jest kontrolowany przez cyfrowy pin 2
#define DEBUG 0 // ustaw na 1, jeśli potrzebne jest wyjście debugowania szeregowego
QTRSensorsRC qtrrc((unsigned char) {8, 9, 2, 3, 4, 5, 6, 7}, NUM_SENSORS, TIMEOUT, EMITTER_PIN);
unsigned int sensorValues[NUM_SENSORS];
pusta konfiguracja()
{
opóźnienie (1000);
ręczna_kalibracja();
set_motors(0, 0);
}
int ostatni błąd = 0;
int last_proportional = 0;
całka int = 0;
pusta pętla()
{
Serial.początek(9600); // skonfiguruj bibliotekę szeregową na 9600 bps
Serial.println("Adafruit Motorshield v2 - test silnika DC!");
AFMS.początek(); // utwórz z domyślną częstotliwością 1,6KHz
//AFMS.początek(1000); // LUB z inną częstotliwością, powiedzmy 1KHz
// Ustaw prędkość startową, od 0 (wył.) do 255 (maks. prędkość)
silnik1->ustawiona prędkość(70);
motor1->run(DO PRZODU);
// włącz silnik
motor1->run(RELEASE);
silnik2->ustawiona prędkość(70);
silnik2->uruchom(NAPRZÓD);
// włącz silnik
motor2->run(RELEASE);
niepodpisane czujniki int[5];
int pozycja = qtrrc.readLine(czujniki);
błąd int = pozycja - 2000;
int motorSpeed = KP * błąd + KD * (błąd - lastError);
ostatni błąd = błąd;
int leftMotorSpeed = M1_DEFAULT_SPEED + motorSpeed;
int rightMotorSpeed = M2_DEFAULT_SPEED - prędkość silnika;
// ustaw prędkość silnika za pomocą dwóch powyższych zmiennych prędkości silnika
set_motors(leftMotorSpeed, rightMotorSpeed);
}
void set_motors (int motor1speed, int motor2speed)
{
jeśli (motor1speed > M1_MAX_SPEED) motor1speed = M1_MAX_SPEED; // ogranicz prędkość maksymalną
jeśli (motor2speed > M2_MAX_SPEED) motor2speed = M2_MAX_SPEED; // ogranicz prędkość maksymalną
jeśli (motor1speed < 0) motor1speed = 0; // utrzymuj silnik powyżej 0
jeśli (motor2speed < 0) motor2speed = 0; // utrzymuj prędkość silnika powyżej 0
motor1-> setSpeed (silnik1speed); // ustaw prędkość silnika
motor2-> setSpeed (silnik2speed); // ustaw prędkość silnika
motor1->run(DO PRZODU);
silnik2->uruchom(NAPRZÓD);
}
nieważna ręczna_kalibracja() {
wew;
dla (i = 0; i < 250; i++) // kalibracja zajmie kilka sekund
{
qtrrc.kalibracja(QTR_EMITTERS_ON);
opóźnienie(20);
}
if (DEBUG) { // jeśli true, generuj dane czujnika przez wyjście szeregowe
Serial.początek(9600);
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.kalibrowaneMinimumOn);
Serial.print(' ');
}
Serial.println();
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.kalibrowaneMaximumOn);
Serial.print(' ');
}
Serial.println();
Serial.println();
}
}
Bueno a ver que tal se nos da este proyecto „express” en la competición del OSHWDEM.