Tamagotchi

Introducere

Acest proiect a inceput prin a fi un tamagotchi clasic - un animalut digital care are nevoie, la in intervale aleatoare de timp, de diferite lucruri: WC, mancare, somn, distractie. Apoi mi-a venit ideea sa adaug un buzzer pentru a avea sunete la apasarea butoanelor iar in final am scris un API pentru cantece in toata regula, nu doar pentru beep-uri de butoane

Descriere generală

Pentru proiect, placuta cu microcontrollerul este legata la o placuta care gazduieste butoanele, buzzerul, circuitele lor respective si circuitele pentru logica si alimentarea LCD-ului. LCD-ul se leaga si el la aceasta placuta.

Hardware Design

Lista de componente:

  • LCD Nokia 3310
  • Circuite butoane:
    • 2 x 10 k rezistente de pullup
    • 2 x 1 nF condensatori
    • 2 x pushbutton
  • Circuit buzzer
    • 1 x piezo buzzer fara oscilator; doar buzzerul
  • Circuit alimentare LCD
    • regulator LM1117
    • condensator 100nF
    • condensator 10uF electrolitic
  • Circuite logica LCD
    • 5 x 3k3 rezistente
    • 5 x 1k8 rezistente
  • Fire de legaura si mufe pentru ele

Display-ul de Nokia 3310 functioneaza la 3.3V, pe cand microcontrollerul functioneaza la 5 volti. Deci a fost nevoie sa adaptez aceste niveluri de tensiune, atat pentru alimentare cat si pentru semnalele logice. Pentru alimentare am folosit un regulator LM1117 iar pentru logica divizoare de tensiune rezistive. Pentru butoane am folosit rezistente de pullup externe microcontrollerului, si am legat capacitat in paralel cu butoanele. Aceste capacitati au rolul de a elimina din zgomot. Initial mi s-a spus sa pun o capacitate la intrarea buzzerului. Pe simulare mergea totul, dar dupa ce am facut circuitul fizic buzzerul nu suna. Dupa ce am scos capacitatea de acolo, totul a fost bine. Pentru a lega LCD-ul a trebuit sa lipesc fire pe pinii sai. O optiune mai usoara dar pe care am gasit-o mai tarziu, pe wiki proiect pm 2011, e sa fi facut oplacuta imprimata cu trasee pe care sa apas display-ul, vand in vedere ca pinii sunt niste arcuri. Deci in loc de contact cu fludor, contactul sa fie facut prin apasarea pinilor LCD-ului de traseele imprimate.

Placuta adaptoare este un PCB realizat cu ARES. A fost mai complicat pentru ca ares nu avea toate componentele pe care le-am folosit, deci a trebuit sa caut componente cu PCB footprint asemanator. Pentru unele nu am gasit si a trebuit sa mai trag de pini cand am lipit piesele de placa. Oricum, ARES e un soft bun, relativ usor de folosit care ofera multe facilitati. Cea mai frumoasa este ca poti vedea 3D cum va arata placa cu componentele montate pe ea. E util ca sa vezi cat de groase sunt traseele, daca se apropie prea mult unele de altele, etc.

Circuitul

Se observa ca in loc de butoane si buzzer, din cauza inexistentei modelelor respective, am pus rezistente pentru a putea realiza PCB-ul (rezistentele aveau footprint asemenator cu butoanele si buzzerul). Aceeasi problema a fsot si pentru regulatorul LM1117, pentru acare am pus acel tranzistor.

Se observa divizoarele de tensiune pentru semnalele de la microcontroller Reset, Mosi, SerialClock, Enable si Data/Command. Intrarea de PWM in placuta este pinul SPEAKERIN. Masa si alimentarea sunt pinii VCC si GND.

Pinii de iesire din placa sunt cei care incep cu LCD si cei de la iesirea divizoarelor de tensiune (numele lor se termina in OUT). Pinii B1OUT si B2OUT sunt legati la niste pini de intrare de la microcontroller, par restul pinilor cu OUT la sfarsit se leaga pe intrarile digitale ale LCD-ului.

Software Design

Proiectare

Mediul de dezvoltare folosit a fost AVRStudio 5.1, pentru ca este usor de folosit si rapid. Am folosit o biblioteca third party pentru comunicatia cu LCD-ul. Aceasta biblioteca realizeaza comunicatia prin SPI cu microcontrollerul, avand gata-defintie comenzile pentru LCD si functii de desenare a imaginilor, initializare, stergere a ecranului, etc. Link catre biblioteca se gaseste mai jos, in sectiunea download. Pozele pentru LCD le-am gasit pe google si le-am convertit in format conform bibliotecii folosite folosind aplicatia FastLCD, gasita in arhiva cu biblioteca. Pentru a comanda buzzerul sa cante anumite note am folosit capabilitatile de PWM ale microcontrollerului. Mai multe detalii sunt in comentariile din surse.

Softul de simulare folosit a fost ISIS Proteus. In sectiunea download se va gasi si arhiva cu modelul de LCD. Tot ce trebuie facut pentru a-l instala este sa fie copiat in folderul de instalare ISIS.

Utilizare

Animalutul are nevoi care se declanseaza la intervale random de timp. Cand nu are nicio nevoie, el este fericit. Cand are o nevoie, el este trist. In fiecare din aceste 2 stari se afiseaza pe display o imagine descriptiva. Jocul facut de mine are 2 butoane, B1 si B2. Cand se apasa B1 se intra in meniul de actiuni (Hranire, WC, Somn, Cantec). Fiecare din aceasta actiune corespunde unei nevoi ale animalutului. Daca se apasa B1 in continuare se va trece pe rand prin aceste actiuni pana cand se iese din meniu. Apasarea butnoului B2 pe o actiune va efectua acea actiune. Daca nevoia corespunde actiunii efectuate animalutul va trece din trist in fericit. Fiecare actiune are o imagine a sa, iar actiunea pentru cantec va avea ca efect secundar cantarea unei melodii random la buzzer (PWM).

Daca se efectueaza o actiune si animalutul nu este trist, aceasta nu va avea niciun efect. Ficare eveniment (schimbarea starii animalutului, intrarea in meniu, deplasarea prin meniu, etc.) are un sunet caracteristic.

Rezultate Obţinute

La final, am obtinut rezultate bune, circuitul proiectat comportandu-se normal, conform descrierii.

Poze

Concluzii

  • E anevoios sa lipesti fire de mufe, in special fara unelte. Pe cat posibil, e bine sa lucrati cu scule bune: statie de lipit, “omulet” cu lupa si clesti
  • E dificil sa lipesti fire pe pinii display-ului de la nokia 3310. Mai bine e cu circuit imprimat pe care sa apesi pinii
  • Daca merge pe simulare nu inseamna neaparat ca merge si in viata reala, si vice versa
  • Decapantul ajuta enorm la lipire
  • ISIS foloseste maxim 2 core-uri, asa ca trebuie sa fie simulat proiectul pe bucati, deoarece, chiar si cu putine componente, simulatorul da eroare “Not running in real time due to excessive CPU load”. Pentru ca foloseste maxim 2 core-uri, nu merge mai rapid. Testat pe laptop Core2Duo si desktop Core i7, rezultatele au fost aceleasi din punct de vedere al vitezei simularii
  • Daca nu pui driverul bun pe sistemul de operare si incerci sa programezi placuta, o sa stergi bootloaderul. Cel mai bine verifici imediat dupa ce ai terminat placuta daca merge programata ok. Driverele de la laborator merg bine, deci mai bine le iei de-acolo decat de pe internet.
  • Trebuie sa fii atent la dimensiunea datelor si codului. Nici avrusbboot nici AVRStudio nu dau eroare, nici macar warning, daca fisierul .hex rezultat nu incape in memoria microcontrollerului. Poti sa suprascrii usor bootloaderul asa.
  • E o idee buna sa te uiti pe wiki-ul proiectelor similare din anii trecuti ca sa vezi ce probleme/rezolvari exista.

Download

Bibliografie/Resurse

pm/prj2012/abostan/tamagotchi.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0