luni, 27 iunie 2011

Senzor de temperatură auto II


Descriere

În articolul anterior am promis că o să prezint celălalt senzor, care este montat pe maşina mea. E vorba de acelaşi senzor, cu câteva mici diferenţe.

Display de Nokia 3310

Prima diferenţă este legată de display-ul folosit, care e de la un Nokia 3310. Diferenţele faţă de display-ul de Nokia 1100 şi acesta constau în semnificaţia pinilor şi modificarea protocolului de comunicare cu display-ul. Algoritmul folosit pentru afişarea cifrelor pe display-ul de Nokia 3310 se găseşte prezentat la capitolul "Afişarea temperaturii Nokia 3310" de aici.

Un mare dezavantaj al acestui display este faptul că nu vine dotat cu led-uri pentru iluminare. Din cauza asta a trebuit să montez 3 led-uri galbene pentru iluminare şi unul roşu pentru alarmă.

Senzorul (DS18B20)

Singura diferenţă dintre DS18S20 şi DS18B20 este acela că cel din urmă converteşte valoarea temperaturii într-o valoarea digitală cu mai multe zecimale. Modificările în codul microcontroller-ului au fost, în consecinţă, minore.

Schema

Pentru a putea folosi display-ul de nokia 3310 e nevoie de patru linii de control: Reset (PB3), SDIN (PB2), D/C (PB1) şi SCK (PB0). Asta înseamnă că nu o să mai rămână nici un pin al microcntroller-ului liber pentru a putea controla led-ul de alarmă. Dintre toate liniile folosite pentru controlul display-ului, doar linia de D/C era folosită cel mai puţin. Linia D/C semnalizează display-ului că informaţia transmisă reprezintă date sau comenzi. Pe durata rescrierii ecranului, linia de D/C rămâne foarte mult timp pe "1" logic şi foarte puţin pe "0" logic. Cu alte cuvinte, pe durată rescrierii ecranului, se trimit mult mai multe date decât comenzi. M-am folosit de detaliul ăsta pentru a controla led-ul de alarmă cu acelaşi port ce controlează şi linia D/C. Asta a însemnat că logica de aprindere a led-ului de alarmă trebuie să fie inversă ("1" = led stins, iar "0" = led aprins). Rescrierea întregului ecran durează sub o secundă, iar rata de actualizare a ecranului e tot la aproximativ 1.5 secunde. Astfel am posibilitatea de a mă folosi de timpul acesta (1.5 sec) pentru a schimba rolul portului PB1 în port ce controlează led-ul de alarmă.

Cablajul

Prima variantă de cablaj nu mi-a plăcut pentru că toate piesele erau mult prea înghesuite, aşa că am ales o abordare mai "aerisită". În felul acesta cablajul încape mai bine în "carcasa" senzorului.

Codul sursă

Am refăcut codul original astfel încât să permită funcţionarea senzorului folosind ambele tipuri de display-uri (Nokia3310 şi Nokia1100), şi a ambelor tipuri de senzori digitali (DS18S20 şi DS18B20). Codul poate fi configurat pentru display-ul şi senzorul folosit cu ajutorul unor switch-uri de compilare.

Fişierele Hex (Cod şi EEPROM) se găsesc aici.

Fişierele sursă se găsesc aici.

Poze

Mi s-a reproşat la un moment dat că nu am pus suficiente poze cu senzorul deja montat pe maşină. În încercarea de a repara scăparea din articolul precedent, am pus două poze cu senzorul montat pe bord.

Asta ar fi perspectiva celui de la volan. Senzorul a fost montat în partea din dreapta pentru ca şi copilotul să vadă temperatura afişată de senzor. :-)

Carcasa senzorului e prinsă de parbriz cu ajutorul a două ventuze luate de la o "lămâie" a şoferului începător.

10 comentarii:

  1. Buna Misha,

    Un articol foarte interesant, felicitari!
    Eu sunt un novice in domeniul electronicii si as fi curios ce fel de programator (hardware / software) folosesti petru scrierea codului in microcontroller.. eventual unde as putea gasi asa ceva.
    Mersi.

    RăspundețiȘtergere
    Răspunsuri
    1. Salut,
      Pentru scrierea micorcontroller-ului am folosit PonyProg. Pentru partea hardware am folosit interfaţa de pe portul paralel (am un PC mai vechi care are port paralel):
      http://www.lancos.com/prog.html#avrisp
      Iar pentru soft:
      http://www.lancos.com/ppwin95.html
      Numai bine!

      Ștergere
    2. Mersi,

      Problema este ca nu detin nici un fel de hardware pentru programarea microcipurilor si m-as dota cu ceva mai "actual" (si sper eu, mai simplu de folosit).
      Interfata de preferat USB (poate fi si serial) .. nu am nici o scula cu paralel din pacate.
      Am gasit asta: http://www.robofun.ro/bricks/kit-arduino-incepatori (si alte variatiuni pe aceeasi idee), si imi place ce vad dar nu sunt inginer :) si nu stiu daca e capabil sa si programeze efectiv microcontrolerele. Nu am reusit sa-mi dau seama citind toate manualele si brosurile lor. Nu stiu nici daca e compatibil cu tipul de microcontrollere pe care le folosesti in proiect.

      As fi recunoscator pentru o mana de ajutor sa ma scoata din confuzie.
      Sanatate!

      Ștergere
    3. Salut,
      Montajul Arduino e foarte bun pentru începători. E destul de simplu de folosit şi din câte am înţeles de la alţii, programează repede. Dezavantajele pe care le văd sunt că suportă doar un singur tip de controller (ATmega32, cred), iar controller-ul respectiv trebuie să aibă deja scris un bootloader. Din fericire, Arduino vine deja cu un astfel de microcontroller, aşa că e gata pentru a fi folosit.
      Microcontroller-ul folosit în montajul de mai sus (Attiny13) nu e suportat de către Arduino.
      Îţi sugerez să cauţi pe net după "ISP programmer" (ISP vine de la In System Programming). Sunt foarte multe programatoare pe USB, port serial, etc, de vânzare pe net.
      Numai bine!

      Ștergere
  2. Salut Misha,
    Functioneaza super montajul. Pacat ca nu afiseaza temperatura cu o zecimala, chiar daca se reduce fontul.
    Ai timp (desi presupun ca nu) sa modifici codul sursa in acest sens?
    As da o bere...

    RăspundețiȘtergere
  3. Te rog mult sa-mi faci si mie un termometru pt.logan.Am luat unul din comert di nu indica val.normala. Il platesc cat costa . Multumesc

    RăspundețiȘtergere
  4. Se poate si fuse biti pentru programarea lui attiny 13?
    Multumesc

    RăspundețiȘtergere
  5. Salut Mircea,
    Foarte bună observație! Din păcate, am uitat să trec pe blog informația asta.
    Se pare că n-am salvat nicăieri configurația pentru fuse biti, așa că va trebui să desfac senzorul și să o citesc direct din controller.
    Cu prima ocazie când o să mai meșteresc pe la mașină, o sa scot controller-ul și adaug informația asta pe blog.
    Din câte țin minte, controller-ul avea configurația implicită (fără Wdog, pe oscilator intern și fără divizor, cu opțiunea cea mai lentă pentru pornire).
    Numai bine!

    RăspundețiȘtergere