Alina-Elena MARCU - Jucărie Interactivă

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul “Grizzle – The Grumpy Bear” constă în realizarea unei jucării interactive destinată în special copiilor. Aceste jucării inteligente au început să se bucure de un succes răsunător în rândul copiilor deoarece acestea au atât menirea de a stârni curiozitatea celor mici, cât mai ales de a le dezvolta simţurile, de la stimularea simţului vizual, auditiv sau tactil până la a învăţa cum să interacţioneze cu lumea din jur, acestea ocupă un rol important în dezvoltarea copilului de la o vârstă fragedă.

Scopul proiectului este acela de a crea un partener de joacă ideal pentru orice copil. Astfel a fost creat “Grizzle” un ursuleţ de pluş morocănos care invită copilul să participe la conversaţie şi să întreprindă diverse acţiuni menite să dezvolte personalitatea şi spiritul aventurier al copilului. Fiind o jucărie modernă, replicile ursuleţului sunt în limba engleză.

Proiectul propune un joc interesant copilului, acela de a transforma ursuleţul morocănos într-unul fericit şi prietenos, conform unor reguli bine stabilite care vor fi aduse la cunostiinţă copilului încă de la început. “Grizzle” va ghida copilul în producerea unor evenimente şi va răspunde conform cu acestea, permiţând astfel evoluţia firească a jocului.

Ursuleţul are mai multe stări, care vor fi acţionate folosind cele 3 butoane şi 3 micro-întrerupătoare. Atât butoanele cât şi micro-switch-urile sunt amplasate strategic, fiind la îndemâna copilului: 1 buton pentru lăbuţa din dreapta, 1 buton pentru lăbuţa din stânga, 1 buton pe burtică, 1 micro-switch este amplasat în zona nasului, altul în picioruşul drept, respectiv cel stâng.

Starea “I am Grizzle”:
  • starea iniţială în care ursuleţul salută copilul şi se prezintă
  • trecerea la starea urmatoare se face prin apăsarea unuia dintre cele 2 butoane amplasate în cele două labuţe
  • ursuleţul va avea mereu nevoie de feedback din partea copilului, de aceea ursuleţul va ghida copilul prin paşii ce trebuie urmaţi pentru a trece la următoarea stare

Starea “Why am I so grumpy ?”

  • starea numărul 2, ursuleţul va încânta copilul printr-un cântecel, prin care va oferi mai multe informaţii despre personalitatea lui
  • deasemenea şi aici trecerea la starea următoare se face prin apăsarea unuia dintre cele 2 butoane amplasate în cele două lăbuţe
Starea “Let's Play!”
  • starea numarul 3 constă în expunerea regulilor jocului
  • regulile jocului sunt simple, pe înţelesul copilului
  • copilul este nevoit să binedispună ursul prin trecerea la stările următoare precum: “Hold My Paw!”, “Tickle!”, “Hug Me!” numite şi “Joy States”.
  • fiecare trecere printr-una din cele trei “Joy States” incrementează joyLevel-ul din cadrul jocului
  • de fiecare dată când se face trecerea la una din aceste stări, ursuleţul va canta un cântecel vesel
  • de asemenea există şi o stare numită “Pinch Nose” care decrementează joyLevel-ul din cadrul jocului, reprezentând şi starea de regres în joc
  • dar şi de această dată copilul va asculta un cântecel însă va fi unul trist
  • jocul se termină atunci când joyLevel-ul ursuletului atinge pragul de 10
  • la final copilul va avea parte de o surpriză din partea ursuleţului, dar nu va afla despre ce e vorba decât după trecerea în starea respectivă
Starea “Hold My Paw!”
  • această stare este întreprinsă atunci când unul dintre cele 2 butoane din labuţe este acţionat
  • ursuleţul va fi conştient de acţiunea copilului şi va trasmite un mesaj corespunzător
Starea “Tickle!”
  • această stare este întreprinsă atunci când unul dintre cele 2 micro-switch-uri din picioruşe este acţionat
  • ursuleţul va fi conştient de acţiunea copilului şi va trasmite un mesaj corespunzător, va râde în hohote
Starea “Hug Me!”
  • dacă butonul de pe burtică este acţionat atunci se va trece în această stare şi de această dată ursuletul va trasmite un mesaj prietenos copilului
Starea “Pinch Nose”
  • această stare este întreprinsă atunci când micro-switch-ul de la nivelul nasului este acţionat
  • acest lucru va conduce la blink-ul ledului de la nivelul nasului, incrementarea joyLevel-ului dar şi la trasmiterea unui mesaj de nemulţumire din partea lui “Grizzle”.
Starea “Surprise!”
  • se ajunge în această stare, starea finală, la atingerea a 10 unităţi pentru joyLevel
  • led-ul de la nivelul papionului ursuleţului va fi aprins iar ursuleţul va cânta un cântecel vesel, marcând astfel legarea unei relaţii de prietenie cu copilul şi încheierea jocului.

Descriere generală

Ursuleţul va primi inputul utilizatorului prin cele 3 butoane şi cele 3 microswitch-uri plasate în lăbuţe, picioruşe, nas şi burtică şi acesta la rândul său va trasnmite mesajul său copilului fie prin aprinderea celor 2 LED-uri, plasate în nas şi în dreptul papionului, fie va transmite audio prin citirea fişierelor .wav de pe cardul SD şi redarea acestora prin difuzor.

Partea Hardware:

  1. Plăcuţa de bază ce conţine microprocesorul ATMEGA324A (etapa 1)
  2. Montaj Card SD
  3. Montaj Difuzor
  4. Montaj LED-uri şi butoane, microswitch-uri

Schema Bloc:

Partea Software:

  1. consta in citirea de pe SD card a .wav-urilor folosind API-ul Petit FAT
  2. implementarea starilor conform descrierii de mai sus, actionate cu ajutorul butoanelor si microswitch-urilor
  3. detectarea comenzilor generate de închiderea circuitelor

Schema Bloc:

Interacţiunea dintre Hardware şi Software

Alimentarea plăcuţei este realizată prin cablul USB. Comunicarea dintre microcontrollerul ATMega324A şi cardul SD este una de tip Master-Slave şi este realizată prin interfaţa SPI (Serial Peripheral Interface Bus).

   SCLK — Serial Clock (output from master)
   MOSI/SIMO — Master Output, Slave Input (output from master)
   MISO/SOMI — Master Input, Slave Output (output from slave)
   SS — Slave Select (active low; output from master)
   

Pentru o redare cât mai clară a sunetului prin difuzor fisierele .wav au fost înregistrate cu:

  • un bit rate de 192 kbps
  • un sampling rate de 24000 Hz
  • bit resolution de 8 biţi
  • canal MONO

Pentru redarea corectă a sunetului s-a folosit un timer care să genereze o întrerupere cu frecvenţa de 24000 Hz.

Conectarea componentelor la pinii microcontroller-ului

  1. Montaj Soclu SD ⇒ pinii PB4 → PB7
  2. Modificarea volumului difuzorului ⇒ pinul PD5 (OC1A)
  3. Butoane ⇒
    1. Left Paw → PA7
    2. Right Paw → PA6
    3. Belly → PA5
  4. Microswitch-uri ⇒
    1. Left Foot → PA4
    2. Right Foot → PA3
    3. Nose → PA2
  5. LED-uri ⇒
    1. Bow Tie → PA1
    2. Nose → PA0

Hardware Design

Listă Componente - Etapa I

Denumire Valoare Cantitate
ATMEGA324PA-PU DIL40 1
Conector mufa CONECT JACK 2089 1
Condensator neelectrolitic 15pF KEPF015 2
Condensator neelectrolitic 0.1u CM-100 5
LED 3 mm Rosu LED EL333 2
2 X 10 K2X10 1
1 X 40 K1X10 WSL040 1
TO-220 7805CT 1
Quartz 16MHz 16MHz QMIM016 1
Rezistenţă 10 K 2
Rezistenţă 1 K 2
Rezistenţă 100 R 3
Rezistenţă 2 k 2 1
Tastă PUSHBUTTON 2
Conector USB USB-B Cvilux 1
Dioda Zener ZENER 1
Cablaj fotorezistiv 75 x 100 foto 2
Cablaj Test 100 x 100 găuri 1

Schemă Microcontroller ATMEGA324A

Schema obţinută în urma realizării montajului

Listă Componente - Montaj SD

Denumire Valoare Cantitate
Soclu SD 1
Diodă 1N4007 2
Rezistenţă 1 K 6 3
Rezistenţă 3 K 3 3

Schemă folosită în realizarea montajului

Schema obţinută în urma realizării montajului

Listă Componente - Montaj Difuzor

Denumire Valoare Cantitate
Difuzor 32 ohmi 1
Amplificator audio LM386 1
Condensator electrolitic 330 uF 1
Condensator ceramic 47 nF 1
Condensator electrolitic 100 uF 1
Rezistenţă 10 ohmi 1

Schemă folosită în realizarea montajului

Schema obţinută în urma realizării montajului

Listă Componente - Adiţionale

Denumire Valoare Cantitate
PUSH BUTON KRS1243 3
Rezistenta 10K 6
Led-uri roșii 5 mm 2
Rezistenţă 560 ohmi 2
Microswitch D2F223 3

Schemă folosită în realizarea montajului

Schema obţinută în urma realizării montajului

Software Design

Partea de software am preluat-o în mare parte din laboratoarele de PM. Aceasta constă din redarea replicilor jucăriei citite de pe cardul SD şi redarea acestora printr-un difuzor. Pentru a crea o reacţie cât mai naturală a pâpuşii aceasta îşi va aprinde led-urile la trecerea dintr-o stare în alta ca şi copilul să fie conştient de stadiu în care evoluează jucăria.

Descrierea codului aplicaţiei:

Codul aplicaţiei cuprinde trei fişiere sursă importante, headere şi librării importate.

Sursa pff.c

Aceasta utilizează PetitFAT pentru a deschide un sistemul de fişiere al aplicaţiei de pe un SD Card FAT 16 format şi a citi informaţiile byte cu byte din fişierele, cu posibilitatea parcurgerii recursive a fişierului respectiv.

Librării şi headere incluse:

pff.h - defineşte sistemul de fişiere de pe cardul SD

     #include "integer.h"
     #ifndef _FATFS
     #define _FATFS
     #define	_USE_READ	1	/* pf_read(): 0:Remove ,1:Enable */
     #define	_USE_DIR	1	/* pf_opendir() and pf_readdir(): 0:Remove ,1:Enable */
     #define	_USE_LSEEK	1	/* pf_lseek(): 0:Remove ,1:Enable */
     #define	_USE_WRITE	1	/* pf_write(): 0:Remove ,1:Enable */
     #define _FS_FAT32	1	/* 0:Supports FAT12/16 only, 1:Enable FAT32 supprt */
     #define	_CODE_PAGE	1
     #define _WORD_ACCESS	1
     #if _FS_FAT32
     #define	CLUST	DWORD
     #else
     #define	CLUST	WORD
     #endif
     

diskio.h

     
     #ifndef _DISKIO
     #include "integer.h"
    
    #include "pff.h"		
    #include "diskio.h"
    		
Sursa mmc.c

In acest fisier sunt implementate functii care vor face comunicarea efectivă cu cardul SD. Pinii pentru intrare si iesire sunt setaţi conform cu funcţia pe care o îndeplineşte microcontrollerul, cea de Master, iar cardul SD pe cea de Slave.

Librării şi headere incluse:
    #include <avr/io.h>
    #include "diskio.h"
    
Sursa main.c

Cuprinde funcţiile ce vor apela mmc.c si pff.c. Aceasta reprezintă sursa principală, care descrie conportamentul jucăriei. Pentru implementarea stărilor am avut nevoie de timere care să genereze întreruperi pentru citirea de pe card. Redarea unei melodii se realizează în momentul în care jucăria a ajuns intr-o astfel de stare.

Librării şi headere incluse:
    
   #define F_CPU 16000000
   #include <avr/io.h>
   #include <avr/interrupt.h>
   #include <util/delay.h>
   #include <avr/sleep.h>
   #include <avr/wdt.h>
   #include <string.h>
   #include <stdio.h>
   #include "diskio.h"
   #include "pff.h"
   

Toate aceste surse au fost preluate din cadrul laboratoarelor de PM, în mare parte din laboratorul 4.

Medii de dezvoltare:

  • AVR Studio
  • WinAVR - compilator

Rezultate Obţinute

Schema FINALA

Montare PARTIALA

The Not So Grumpy GRIZZLE

Concluzii

Aceast proiect poate fi folosit cu uşurinţă în scopuri educaţionale, pentru copii, pentru a le insufla un spirit de responsabilitate şi a îi înveseli. Varianta prezentata poate fi dezvoltata pe viitor pentru a asigura o interacţiune mai amplă cu copii sau o comunicaţie focalizată pe un proiect educaţional din care să poată învăţa lucruri legate de comporatmentul pe care trebuie să-l desfăşoare în anumite situaţii.

Proiectul per ansamblu a fost unul reuşit, trecând peste multele ore migăloase de lipit, nopţile petrecute cu debbuging, la final am ajuns la concluzia ca a fost un proiect util, educativ şi care te învăţa mai ales să fii răbdător şi să lucrezi în echipă (mai ales la partea de lipit, trust me there's no other way).

Am de gând să lucrez la acest proiect pe timpul verii deoarece îmi doream să iasă ceva mult mai complex faţă de starea curentă, dar din lipsa timpului nu am putut realiza ceva mai bun. :-(

Download

Jurnal

=== Etapa 1 ===

  • Martie 2013
    • imprimarea cablajului plăcii de bază ce contine: microcontrollerul, stabilizatorul de tensiune, alimentarile, USB, toate componentele enumerate in lista pentru etapa I
  • lipirea componentelor pentru etapa I

=== Etapa 2 ===

  • Aprilie 2013
    • căutarea componentelor necesare pentru realizarea montajelor

=== Etapa 3 ===

  • Mai 2013
    • realizarea montajului pentru soclu SD
    • realizarea montajului pentru difuzor
    • lipirea led-urilor, a butoanelor şi a microswitch-urilot
    • aranjarea plăcuţei

=== Etapa 4 ===

  • Săptămâna 14
    • scris cod
    • căutarea componente rămase de conectat
    • căutare card SD, nu SDHC
    • realizarea documentaţiei proiectului
    • some more cod
  • Vineri Seara
    • descopăr că nu-mi citeşte fişiere de pe cardul SD
    • observ lipsa unor pini esenţiali din structura soclului ⇒ problemă
    • panică, panică, panică
    • merge ca radio in schimb :-|

Bibliografie/Resurse

pm/prj2013/amocanu/meet-grizzle-the-grumpy-bear.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