Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ROBO-CAM, czyli robot-zabawka

Simon79 01 Wrz 2018 19:12 3231 4
  • ROBO-CAM, czyli robot-zabawka

    Opisany poniżej układ to realizacja pomysłu na zagospodarowanie „modułów Arduino”, zakupionych często przy okazji, bez sprecyzowanego celu, oraz innych „przydasiów”.
    Na początku miał to być tylko mały pojazd sterowany radiowo. W miarę czasu przybywało pomysłów: dodano ultradźwiękowy czujnik odległości typu HC-SR04, aby pojazd widział przeszkody; kamerkę z układem bezprzewodowego przesyłania obrazu i serwomechanizmami na uchwycie typu pan/tilt. Nie zabrakło też oświetlenia – lampki LED na USB :) i modułu piezo w roli klaksonu. Sterowanie odbywa się poprzez moduł bluetooth HC-05 z poziomu aplikacji na smartfonie. Obraz z kamerki widoczny jest na 7 calowym wyświetlaczu LCD TFT, lub TV. Jedyną rzeczą zakupioną do tego celu było…. koło tylne.

    W założeniu układ miał być zbudowany w oparciu o Atmega88, gdyż mam ich kilkanaście (z wylutów) i żal by ich było nie wykorzystać, choć bardziej optymalne byłoby zastosowanie gotowego arduino nano, choćby ze względu na prostotę i szybkość wykonania, skorzystania z gotowych bibliotek itd . I z tego powodu padło na „arduino bez arduino” czyli chęć sprawdzenia czegoś takiego jak minicore: zaprogramowanie kodem z Arduino procesorów AVR Atmega. Wystarczy użyć managera płytek i gotowe, można programować najpopularniejsze atmegi.
    https://github.com/MCUdude/MiniCore

    ROBO-CAM, czyli robot-zabawka

    Schemat został uproszczony do granic możliwości: Atmega88 napędzana kwarcem 16MHz, moduł BT z rezystorami R2 i R3 w roli najprostszego konwertera poziomu napięcia, układ L293 sterujący silnikami oraz gniazda: do podłączenia serw, czujnika odległości, lampki LED, modułu piezo, przejściówki USB, zasilania.
    W przypadku zasilania z 4 baterii/akumulatorków napięcie może przekraczać 6V, stąd rozdzielono zasilanie na część zasilającą silniki (V+) od części cyfrowej- procesora (Vcc). W prototypie była to zwykła dioda prostownicza – rozwiązanie najprostsze i najmniej efektywne. W przypadku zasilania bateryjnego dodano opcjonalnie możliwość sprawdzenia poziomu napięcia baterii. Wejście przetwornika ADC0 podłączono poprzez dzielnik R4/R5 do źródła zasilania. Wartość rezystancji dzielnika należy dobrać tak, aby przy świeżych bateriach napięcie wynosiło 1,1V czyli 1023 na ADC (ustawiono wewnętrzne napięcie referencyjne dla ADC o takiej właśnie wartości). W modelu był to po prostu rezystor i potencjometr montażowy. W przypadku zasilania z powerbanku 5V, rozdzielanie zasilania na „niższe” i „wyższe” oraz dzielnik R4/R5 można sobie darować. Zasilaniem zajmie się układ nadzorujący w samym powerbanku. W procku zostało jeszcze wolnych 7 pinów, do dowolnego wykorzystania w przyszłości.





    Na schemacie brak gniazda KANDA, ponieważ do programowania używam adaptera SMD. Ponadto chciałem sprawdzić znaleziony przypadkiem bardzo ciekawy, moim zdaniem, bootloader o nazwie AVR Ferret (http://www.mlodedrwale.pl/2013/06/09/bootlader-avr-ferret/). Po przygotowaniu zgodnie z instrukcją pliku bootloadera i zaprogramowaniu nim atmegi88, można wyeksportować sketch arduino do pliku hex i wgrać go do robota przez przejściówkę USB z aplikacji AVR Ferret. Jest to być może (a raczej na pewno) przekombinowane rozwiązanie niż zaprogramowanie z poziomu arduino przez bootloader minicore czy nawet po dodaniu złącza KANDA na płytce robota i zaprogramowanie zwykłym programatorem, ale była to chęć poznania czegoś nowego (nigdy wcześniej nie stosowałem bootlodera ).

    Do gniazda przejściówki USB wyprowadzono sygnały Rx, Tx, DTR oraz zasilania. Sygnał DTR przydatny jest do „automatycznego” wgrania programu, bez konieczności ręcznego wymuszania resetu. Niestety, nie posiadam konwertera USB z wyprowadzonym sygnałem DTR, stąd na płytce przylutowano przycisk RST. UWAGA pin Rx z przejściówki USB należy podłączyć do pinu Rx gniazda (tak samo pin Tx przejściówki USB do pinu Tx gniazda) Sygnały te są skrosowane na samej płytce).
    Kondensator elektrolityczny, kwarc wraz z podkładką, gniazda do podłączenia przewodów silników i ewentualny przycisk RST montowane są od strony lutowania.

    Głównym elementem z jakiego zbudowany jest ROBO-CAM to laminat dwustronny, który stanowi jednocześnie podstawę podwozia i obwód drukowany. „Nieużywana” część laminatu została zabezpieczona przez PLASTIK 70. Silniki przymocowane są do kawałka laminatu, który przylutowany jest do podwozia od dołu. Można ostatecznie użyć dwustronnej taśmy klejącej czy – tak chętnie stosowanego przez wielu kleju na gorąco :). Koło tylne na czterech śrubach a serwomechanizmy na specjalnej „ławeczce”, też z kawałków polutowanego laminatu. Kamerka została umieszczona w obudowie przymocowanej do uchwytu, do uchwytu zaś przymocowano za pomocą rzepu transmiter 2,4GHz i lampkę USB.
    Lepszą alternatywą i tańszą do zestawu kamera, nadajnik/odbiornik 2,4GHz, TV lub monitor TFT 7” będzie stary smartfon z aplikacją np. Droidcam oraz programem zainstalowanym na PC. Jednak na bardzo starym HTC DESIRE i uaktualnionym systemie do Android KIT-KAT, działało to wszystko topornie, opóźnienie nawet 2-3 sekundy!. W modelu zmodyfikowano zasilanie transmitera - pominięto stabilizator 5V.

    Program został napisany w Arduino IDE 1,85. Dla płytki minicore ATmega88 wariant 88P/PA, zewn. 16MHz. Jedyną biblioteką potrzebną do poprawnego skompilowania programu jest #include <Servo.h>
    Zasada działania oparta jest na odbieraniu znaków typu char z UART (prędkość transmisji to 9600 bodów, funkcją dane = Serial.read();) co daje w rezultacie:
    - sterowanie serwami kamery: '2' dół, '8' góra, '4' lewo, '6' prawo,
    - sterowanie silnikami: 'w' przód, 's' tył, 'd' prawo, 'a' lewo, ('z' i 'c' do tylu w lewo lub prawo – nie użyte w aplkacji), '0' stop
    - pomiar napięcia baterii: ‘b’
    - włączenie: 'l’, wyłączenie: ‘k’ lampki LED
    - wygenerowanie sygnał przez piezo: ‘p’
    Ponadto wysyłanie stringów do aplikacji :
    - określenie odległości od przeszkody: np. Serial.print("*LR255G0B0*"); // kontrolka - kolor czerwony
    - wygenerowanie dźwięku przez głośnik w aplikacji: Serial.print("*S*");
    - poziom naładowania baterii: np. Serial.print("*DOBRY*”);

    Ze względu na niedokładność przekładni silników wejścia EN sterownika L293 sterowane są sygnałem PWM, funkcja analogWrite(EN_1, 255); Należy dobrać wartość od >0 do 255. W modelu nie były dobrze skorygowane te wartości, stąd jazda nie jest równa.
    W przypadku zauważenia przeszkody przez czujnik odległości między 10cm a 20cm, zostanie przesłana informacja do aplikacji o zaświeceniu kontrolki na kolor żółty, gdy odległość będzie wynosiła mniej niż 10cm – kontrolka zapali się na czerwono, a w przypadku <7cm dodatkowo nastąpi zatrzymanie jazdy i cofnięcie się od przeszkody na bezpieczną odległość. Powyżej 20cm kontrolka świeci się na zielono. Wartości te można dobrać do własnych potrzeb. Za pomiar odległości odpowiedzialne są : int zmierzOdleglosc() oraz void zakres(int a) . Za pomiar poziomu naładowania baterii odpowiada int wart_adc = analogRead(A0); Wartości ADC dla których - po naciśnięciu przycisku w aplikacji, wysyłany jest jest string DOBRY, SREDNI, NISKI są oczywiście umowne );. Pozycja początkowa serw kamery określona jest przez int poz1 = 120; int poz2 = 70;
    Częstotliwość generowanego dźwięku przez moduł piezo ustalona jest przez funkcję tone(piezo, 4000); Uwaga Moduł sterowany jest poziomem niskim!

    Jestem początkującym „arduinowcem”, program zawsze można coś poprawić, zmienić. Udostępniam, aby każdy mógł go sobie zmienić i dostosować do własnych potrzeb czy nawet poprawić ewidentne błędy, których niezauważyłem.
    U mnie fusebity wyglądają tak: LOW: FF, HIGH: DD, EXT:FC.
    ROBO-CAM, czyli robot-zabawka

    Wspomnianą wcześniej aplikacją dla smartfonów z androidem jest Bluetooth Electronics firmy keuwl.com.
    Aplikacja jest mniej funkcjonalna od Virtuino, ale dużo prostsza w obsłudze. Po pobraniu ze sklepu googleplay i zainstalowaniu należy importowac plik robo-cam.kwl (plik w załączniku).
    Następnie należy połączyć się z modułem HC-05, co zasygnalizowane będzie wolnym miganiem LED w module. Obsługa jest intuicyjna.

    Elementy użyte do budowy ROBOCAM’a to
    1. silnik DC 5Vz przekładnią 48:1 kołem 2szt
    2. serwo SG90 2szt.
    3. Uchwyt do serw micro Pan/Tilt ”
    4. kamerka „1200TVL 150 Degree super small color video mini FPV camera”
    5. nadajnik/odbornik do kamer cofania 2,4Ghz
    6. moduł HC-05
    7 czujnik odległości ultradźwiękowy HC-SR04
    8. moduł z buzzerem pasywnym bez generatora
    9. lampka LED USB
    10. ATmega88, kwarc 16MHz, goldpiny koszyk na baterie, gniazdo USB, laminat i inna drobnica
    11 koło tylne z marketu budowlanego
    oraz dodatkowoMonitor 7" TFT LCD do kamery cofania kolor (800x480), akumulator żelowy 12V

    Koszty: Jedną rzeczą zakupioną do tego celu było…. koło tylne (ok. 10 zł) i trochę wolnego czasu.
    Prototyp na zdjęciach różni się nieco od wersji opisanej ze względu na zmiany w pcb.

    W załączniku:
    - schemat i pcb Eagle
    - plik arduino robo-cam.ino
    - plik hex robo-cam.hex
    - kilka dodatkowych zdjęć
    - opcjonalny bootloader AVRferret i gotowy plik boot_m88.hex dla ATmega88PA

    Link do filmiku:
    https://www.youtube.com/watch?v=560rw0hxzLQ

    Załączniki:

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • #2 02 Wrz 2018 13:20
    henrykdobosz
    Poziom 2  

    Bardzo mi się podoba ,gratuluję a może by tak w rozmiarze xxl? Pozdrawiam Henryk

  • #3 03 Wrz 2018 08:02
    kurnosek
    Poziom 11  

    Gratuluję konstrukcji. A można prosić o więcej zdjęć i może jakiś filmik z pracy?

  • #4 03 Wrz 2018 09:19
    Szyszkownik Kilkujadek
    Poziom 32  
  • #5 03 Wrz 2018 15:39
    Simon79
    Poziom 18  

    kurnosek napisał:
    Gratuluję konstrukcji. A można prosić o więcej zdjęć i może jakiś filmik z pracy?

    Link do filmiku na YT masz na końcu opisu, a zdjęcia w załączniku.

  Szukaj w 5mln produktów