Bieduino - Zrób sobie Arduino za 10zł
Bieduino to płytka testowa oparta na projekcie Metaboard. Jej główne zalety to niski koszt wykonania oraz przystosowanie do produkcji domowej.
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
Na tym etapie zmiany w stosunku do Metaboard są niewielkie.
Wykaz elementów
Elementy potrzebne do realizacji:
- zworki z drutu (6 sztuk),
- R1 - 68Ω,
- R2 - 68kΩ,
- R3 - 1MΩ,
- R4 - 1.5kΩ,
- R5 - 220Ω,
- R6 - 220Ω,
- C1 - 10uF - kondensator elektrolityczny!,
- C2 - 10uF - kondensator elektrolityczny!,
- C5 - 100n (może być oznaczony 104 lub 0.1),
- C3 - 22pF,
- C4 - 22pF,
- D1 - 3V6 - Dioda Zenera!,
- D2 - 3V6 - Dioda Zenera!,
- D3 - 1N4004!,
- podstawka 28-pin pod układ scalony IC1!,
- IC1 - ATMEGA8 - mikrokontroler!,
- Q1 - 16MHz - rezonator kwarcowy,
- IC2 LM7805 - regulator napięcia!,
- LED1 - dioda LED 3mm!,
- LED2 - dioda LED 3mm!,
- S1 - przycisk reset (micro-switch),
- JP5 - goldpin męski 1x3 (wybór zasilania) + zworka,
- JP6 - goldpin męski 1x2 (bootloader) + zworka,
- JP1 - goldpin żeński 1X8,
- JP2 - goldpin żeński 1X8,
- JP3 - goldpin żeński 1X6,
- JP4 - goldpin żeński 1X4,
- JP7 - goldpin męski 2X3 (ICSP),
- JP8 - goldpin żeński 2X8 (dodatkowe zasilania),
- X1 - gniazdo USB,
- X2 - gniazdo zasilania 2.5mm.
Montaż
Zworek przy przełączniku oczywiście nie montujemy. Schemat bardziej pomocny przy montażu:
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, D1 i D2 - paskiem skierowane w stronę USB, mikrokontroler i podstawka - wcięciem skierowane w prawo, regulator napięcia - jak na zdjęciu, LED1 i LED2 - 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.
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.
Następnie wgrywamy fuse bity (hfuse - 0xc0, lfuse - 0x9f):
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ń:
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.
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() {
}
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
- Bieduino-1.0.zip - schemat w programie Eagle + materiały dodatkowe,
- plytka_drukowana_02.pdf - "domowa" metoda robienia płytek drukowanych.






03 stycznia 2010, 16:19:18
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
03 stycznia 2010, 16:40:03
Fajne, będę musiał sobie kiedyś zmontować.
03 stycznia 2010, 17:38:49
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 ;]
03 stycznia 2010, 18:17:27
Projekt o którym wspominasz (avrUSB) dawno zmienił już nazwę na V-USB ;)
A poza tym to pozytywnie bardzo :)
03 stycznia 2010, 18:33:35
@Airborn: Dzięki za uwagę. Poprawiłem tekst.
W sumie już kiedyś o tym rozmawialiśmy przy okazji USBasp.
03 stycznia 2010, 18:42:54
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
03 stycznia 2010, 18:57:13
Dzięki za informacje, na pewno się przyda. Sam kiedyś myślałem nad zmontowaniem czegoś takiego http://arduino.cc/en/Main/ArduinoBoardSerialSingleSided3
03 stycznia 2010, 19:08:38
@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ć.
03 stycznia 2010, 19:41:28
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$ ;) )
03 stycznia 2010, 20:08:44
@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 ;]
03 stycznia 2010, 23:17:16
Super. Zrób wsparcie do vusb (jeśli go niema) i sprzedawaj po 20pln. Może nettigo.pl będzie zainteresowane?
22 marca 2010, 15:21:42
I like your project.
Can we work together on the next version?
22 marca 2010, 15:22:46
Can you also send me update for your new version?
Thanks,
22 marca 2010, 15:43:06
@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/.
03 sierpnia 2010, 19:36:33
Czy w Bieduino można wstawić atmega8, attiny 2313, atmega64
05 sierpnia 2010, 17:26:15
@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 października 2010, 15:45:57
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..
23 czerwca 2011, 14:59:30
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
08 października 2011, 12:37:02
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?
24 lutego 2012, 14:14:19
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 -