Bieduino - Zrób sobie Arduino za 10zł

Dodane 03 stycznia 2010 o 15:51:12 w kategorii ' Arduino, Elektronika, Techblog '

Bieduino to płytka testowa oparta na projekcie Metaboard. Jej główne zalety to niski koszt wykonania oraz przystosowanie do produkcji domowej.

Bieduino - płytka
Jeszcze bez gniazda zasilania. Dla ciekawskich przygotowałem także widok tyłu płytki.

Metaboard oparty jest na mikrokontrolerze ATmega AVR firmy Atmel. Jest w większości kompatybilny z Arduino. Zbudowany został na podstawie USBaspLoader i wykorzystuje programową obsługę USB - V-USB. Wgrany bootloader w systemie emuluje programator USBasp, który jest wspierany przez AVRDUDE, a tym samym przez Arduino.

Inne cechy projektu:

  • mała złożoność, a przez to niska cena,
  • wyłącznie montaż przewlekany (ang. THT) - żadnego SMD!,
  • możliwość programowania z Arduino IDE,
  • całkowity Open Source.

Niestety oryginalny Metaboard ma bardzo cienkie ścieżki, co sprawia, że ciężko jest go zrealizować metodami domowymi. Bieduino to adaptacja, która reorganizuje układ płytki.

Dodatkowo wzbogacona została o:

  • złącze programatora ICSP,
  • dodatkowe wyjścia +5V, Vin, Gnd,
  • dwie diody LED - zasilanie, oraz dioda na pinie nr 13 Arduino (ATmega - PB5, SCK - pin 19).

Projekt niestety nie jest pozbawiony pewnych wad. Główne to:

  • problemy z wykorzystaniem komunikacji USB-Serial - domyślnie USB służy do wgrywania nowego programu, jeśli chcemy wykorzystać komunikację we własnym projekcie, trzeba by było wykorzystać w nim bibliotekę AVR-USB,
  • niekompatybilność wyprowadzeń pinów z Arduino- lekkie przesunięcie pinów w stosunku do oryginału.

Hardware

Bieduino - Schemat

Na tym etapie zmiany w stosunku do Metaboard są niewielkie.

Wykaz elementów

Elementy potrzebne do realizacji:

  1. zworki z drutu (6 sztuk),
  2. R1 - 68Ω,
  3. R2 - 68kΩ,
  4. R3 - 1MΩ,
  5. R4 - 1.5kΩ,
  6. R5 - 220Ω,
  7. R6 - 220Ω,
  8. C1 - 10uF - kondensator elektrolityczny!,
  9. C2 - 10uF - kondensator elektrolityczny!,
  10. C5 - 100n (może być oznaczony 104 lub 0.1),
  11. C3 - 22pF,
  12. C4 - 22pF,
  13. D1 - 3V6 - Dioda Zenera!,
  14. D2 - 3V6 - Dioda Zenera!,
  15. D3 - 1N4004!,
  16. podstawka 28-pin pod układ scalony IC1!,
  17. IC1 - ATMEGA8 - mikrokontroler!,
  18. Q1 - 16MHz - rezonator kwarcowy,
  19. IC2 LM7805 - regulator napięcia!,
  20. LED1 - dioda LED 3mm!,
  21. LED2 - dioda LED 3mm!,
  22. S1 - przycisk reset (micro-switch),
  23. JP5 - goldpin męski 1x3 (wybór zasilania) + zworka,
  24. JP6 - goldpin męski 1x2 (bootloader) + zworka,
  25. JP1 - goldpin żeński 1X8,
  26. JP2 - goldpin żeński 1X8,
  27. JP3 - goldpin żeński 1X6,
  28. JP4 - goldpin żeński 1X4,
  29. JP7 - goldpin męski 2X3 (ICSP),
  30. JP8 - goldpin żeński 2X8 (dodatkowe zasilania),
  31. X1 - gniazdo USB,
  32. X2 - gniazdo zasilania 2.5mm.

Montaż

Bieduino - płytka

Zworek przy przełączniku oczywiście nie montujemy. Schemat bardziej pomocny przy montażu:

Bieduino - montowanie

Przy elementach, dla których ważny jest kierunek ich włożenia, postawiony został symbol wykrzyknika - !. Kondensator C1 kierujemy dłuższą nóżką w stronę mikrokontrolera (w prawo), C2 - dłuższą nóżką do góry, D1D2 - paskiem skierowane w stronę USB, mikrokontroler i podstawka - wcięciem skierowane w prawo, regulator napięcia - jak na zdjęciu, LED1LED2 - dłuższa nóżka w stronę opornika. W przypadku gniazd USB i zasilania oraz przycisku reset, ważny jest także kierunek montażu, jednak tu raczej ciężko jest się pomylić.

Osobiście zamiast zworki JP6 zastosowałem mały przełącznik - będzie przydatny przy częstym wgrywaniu oprogramowania. Zamiast podwójnych gniazd goldpin zastosowałem łączone gniazda pojedyncze.

Firmware

Jeśli chcemy wgrać oprogramowanie, wymagany jest programator. Ja wykorzystałem USBasp, który zrealizowałem wcześniej. Dodatkowo wykonałem przejściówkę z USBasp na złącze ICSP Arduino.

ICSP i USBasp

Bieduino i USBasp

Ze strony USBaspLoader pobieramy najnowszy firmware (np. USBaspLoader.2009-03-20.zip). W katalogu firmware/hexfiles znajduje się plik bootloadera mega8_16mhz.hex, który należy wgrać. Ja wykorzystałem w tym celu program AVR8 Burn-O-Mat.

Wgrywanie bootloadera

Następnie wgrywamy fuse bity (hfuse - 0xc0, lfuse - 0x9f):

Wgrywanie fuse bitów

Aby zabezpieczyć się przed przypadkowym nadpisaniem bootloadera wgrywamy tzw. lock bits:

avrdude -p m8 -c usbasp -U lock:w:0x0F:m

Jeśli będziemy chcieli go kiedyś zdjąć wpisujemy:

avrdude -p m8 -c usbasp -U lock:w:0x3F:m

Przyznam, że osobiście skorzystałem z narzędzia avrdude-GUI-1.0.5.zip.

Instalacja sterownika

Ustawiamy zworkę JP6 - enable boot loader koło rezonatora kwarcowego. Podłączamy urządzenie do portu USB, wciskamy przycisk reset. Wciśnięcie okazuje się niezbędne, ponieważ nawet z ustawioną zworką płytka testowa uruchamia wgrany na nią program - w tej chwili akurat żadnego nie ma. System powinien wykryć nowe urządzenie - USBasp. Musimy pobrać pakiet i zainstalować sterowniki z katalogu bin/win-driver/libusb_0.1.12.1.

Następnym razem po podłączeniu Bieduino powinno być widoczne w Menedżerze urządzeń:

Bieduino - sterowniki

Integracja z Arduino

Bootloader został wgrany. Teraz przydałaby się możliwość wgrywania programu z poziomu Arduino IDE. W tym celu w katalogu hardware naszego Arduino, w pliku boards.txt dodajemy wpis:

##############################################################

bieduino.name=Bieduino w/ ATmega8

bieduino.upload.protocol=usbasp
bieduino.upload.maximum_size=7168
bieduino.upload.speed=19200

bieduino.build.mcu=atmega8
bieduino.build.f_cpu=16000000L
bieduino.build.core=arduino

Po uruchomieniu Arduino IDE nasza pozycja będzie widoczna w menu, w zakładce Tools > Board.

Zmiana opcji Board w Arduino IDE

Dodatkowo należy ustawić też dowolny Serial Port - w innym wypadku wystąpi błąd. Możemy dokonać tego z poziomu Arduino IDE, lub ręcznie w pliku preferences.txt (Windows - %appdata%\Arduino, Mac - ~/Library/Arduino).

Pierwsze programy

Pierwszym uruchomionym programem powinien być oczywiście "Hello, LED!", czyli mrugacz - blink. Z poziomu Arduino IDE, w menu wybieramy File > Examples > Digital > Blink. Pozostaje już tylko wgranie programu. Przed wgraniem programu należy sprawdzić, czy zworka JP6 - enable boot loader jest ustawiona. Wymagane jest też wcześniejsze wciśnięcie przycisku reset.

Innym przykładem uruchomionego programu może być obsługa wyświetlacza LCD:

#include <LiquidCrystal.h>

// LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) 
LiquidCrystal lcd(13, 12, 11, 10, 9, 8, 7);

void setup() {
 lcd.begin(16, 2);
 lcd.print("Bieduino 1.0");
 lcd.setCursor(0, 1);
 lcd.print("kml.jogger.pl");
}

void loop() {
}

Bieduino i LCD

Uwaga: Obiekt Serial nie będzie działał! Bieduino nie ma sprzętowej obsługi USB, czego mechanizm ten oczekuje.

Podsumowanie

Myślę, że Bieduino to idealne rozwiązanie wszędzie tam, gdzie ważne jest minimalizowanie kosztów. Nie każdego stać, aby zostawić układ za ponad 100zł w tworzonym przez siebie projekcie na stałe. Szczególnie, że koszt ten może wynieść znacznie mniej.

Praca nad Bieduino nie została jeszcze ukończona. W kolejnej wersji należy poprawić kompatybilność z pinami Arduino - przesunąć je trochę. Zyskamy wtedy zgodność na poziomie modułów (np. Ethernet Shield).

Podziękowanie

Chciałbym bardzo podziękować Dawidowi Cieszyńskiemu, który na moją prośbę wykonał cały projekt płytki, oraz Sylwestrowi Mazurowi, który bardzo pomógł mi podczas realizacji projektu.

Załączniki

  1. Dedloo mówi:

    Kamiś nie znam sie na tym o czym piszesz, ale chciałem tylko powiedzieć, że zdjęcie płytki na kwiatku bardzo pomysłowe :D :D

  2. flegmatyk mówi:

    Fajne, będę musiał sobie kiedyś zmontować.

  3. kml mówi:

    Przyznam, że ten liściasty kaktus w tle znajdował się pod oknem, a to jedyne miejsce, gdzie naturalne światło pozwalało zrobić w miarę wyraźne zdjęcie ;]

  4. Airborn mówi:

    Projekt o którym wspominasz (avrUSB) dawno zmienił już nazwę na V-USB ;)

    A poza tym to pozytywnie bardzo :)

  5. kml mówi:

    @Airborn: Dzięki za uwagę. Poprawiłem tekst.

    W sumie już kiedyś o tym rozmawialiśmy przy okazji USBasp.

  6. Airborn mówi:

    Tak mi się zdawało właśnie :P Pewnie sam bym o tym nie pamiętał, ale akurat wczoraj szukałem czegoś na ich stronie

  7. rad mówi:

    Dzięki za informacje, na pewno się przyda. Sam kiedyś myślałem nad zmontowaniem czegoś takiego http://arduino.cc/en/Main/ArduinoBoardSerialSingleSided3

  8. kml mówi:

    @rad: Ja myślałem bardziej o http://www.instructables.com/id/Single-Sided-Really-Bare-Bones-Board-Arduino-in-EA/, http://tinkerlog.com/2008/01/07/arduino-on-a-prototype-board/ albo http://todbot.com/blog/2009/05/26/minimal-arduino-with-atmega8/. Jakoś mnie ten minimalizm kręci. W SSRBBB chcą oscylator ceramiczny z trzema nóżkami, ale ciężko taki dostać.

  9. rad mówi:

    Nice. Ja też lubię minimalizm, ale czasami się on po prostu nie sprawdza. Arduino został stworzony do rapid prototyping. Szybko stworzyć działający prototyp, a takie minimalne rozwiązania to już raczej wprowadzanie naszych rozwiązań do użytku (na niewielką skalę). Które wymaga trochę wiedzy i umiejętności.

    Szkoda, że doba ma tylko 24 godziny i człowiek nie ma czasu się tym wszystkim zająć :/

    P.S.: Może jakiś pomysł na Bieduino BT za powiedzmy 20zł? (przy cenie modułu BT w granicach 30$ ;) )

  10. kml mówi:

    @rad: Dawid mi kiedyś taki pomysł podrzucił. Może nie aż tak tanio, ale można w tym celu kupić telefon z BT i się do niego podpiąć. Teoretycznie np. Siemens S55, albo Motorola V500. W praktyce trzeba poszukać coś, żeby można było się z tym połączyć. Takie telefony mają Javę, więc wszystko robi się coraz ciekawsze ;]

  11. pawelk mówi:

    Super. Zrób wsparcie do vusb (jeśli go niema) i sprzedawaj po 20pln. Może nettigo.pl będzie zainteresowane?

  12. Kan mówi:

    I like your project.
    Can we work together on the next version?

  13. Kan mówi:

    Can you also send me update for your new version?
    Thanks,

  14. kml mówi:

    @Kan: There is no new version yet. I think that next version will be based on http://www.arduino.cc/en/Main/ArduinoBoardSerialSingleSided3 + http://www.uchobby.com/index.php/2009/10/04/diy-usb-to-serial-cable-for-3/.

  15. pasta20 mówi:

    Czy w Bieduino można wstawić atmega8, attiny 2313, atmega64

  16. kml mówi:

    @pasta20: Bieduino jest oparte o Atmega8, więc nie widzę problemu, aby je wstawić ;] Pozostałe raczej nie mają kompatybilnego układu pinów i jeżeli już dało by się je wpiąć to przez jakieś "przejściówki". Przyznam, że nigdy nie miałem z nimi styczności.

  17. Anonim mówi:

    A ja zrobiłem zgodnie z opisem układ, kilka razy udało się zaprogramować, a potem wlutowałem gniazdo zasilania i wyskakuje błąd: avrdude: verification error, first mismatch at byte 0x0000
    0x3f != 0x00
    avrdude: verification error; content mismatch

    No i dioda czerwona ciągle się swieci..

  18. waldas mówi:

    Wszystkie układy z serii Atmega będą pasować oczywiście w wersji DIP. Attiny2313 jest następcą at90s2313 i nie jest kompatybilny z Atmega

  19. michal mówi:

    zrobilem wszystko jak w opisie (kupilem gotowy programator, bieduino z opisu) wczoraj udalo mi sie wrzucic bootloadera ale po podpieciu bieduino pod usb nie moge zainstalowac sterownikow. moze ktos poradzi co zrobic?

  20. imex mówi:

    Czesc - wykonałem projekt Bieduino ale mam problemy z "widzeniem USBasp" na 20 razy - czasami załapie i jest w systemie USBasp - ale programu już nie da sie wgrać - komunikat jakiś że nie ma portu USB ... - No i jeszcze pozostaje sprawa niejasno opisanej zworki J6 -

Dodaj komentarz