Skip to content
ru551n edited this page Feb 18, 2012 · 6 revisions

Baljan och Admittansen håller på att göra en ny kaffekortsläsare.

Table of Contents

Existerande teknik

  • Den gamla läsaren
  • Två servrar: en som kör nya systemet och en som kör gamla systemet (ur bruk men online)
  • En tjock sladd (25 ledare?) som innehåller två seriesnören och ljud.
  • En RFID-läsare av typen ACR122U
  • En RFID-läsare av typen ACR120 (P/N:ACR120S-TK-ABC) (bild)
  • 10 meter aktiv USB-kabel till RFID-läsaren
  • Kaffekoppen i taket som kan lysa grönt eller rött

Snabbfixar

  • Koppla USB-läsaren via en USB-hubb med egen spänningsmatning. Detta kanske löser problemet med att läsaren inte funkar varje gång man kopplar in den. Det kommer i vilket fall avlasta datorns USB-port.

Den nya läsaren

  • En AVR eller en liten PC
  • En display
  • En RFID-läsare
  • Kanske några knappar
  • Högtalare (avstängningsbar)
  • Summer (för blippljud, det sitter "buzzers" i alla ACR122-versioner)

Designbeslut

  • Ska vi använda en mikrokontroller (AVR) eller en (liten) PC?
  • Ska RFID-läsaren kopplas direkt till servern , eller ska µC:n/PC:n agera mellanhand?
  • Hur ska displayer och knappar placeras för bästa användning? Köflöde är viktigt.

RFID-läsare i ACR122-serien

Det finns fyra varianter i ACR122-serien:

  • ACR122U är en rektangulär platta, har USB-anslutning via sladd och är den som används nu.
  • ACR122T är i formen av en USB-sticka.
  • ACR122S liknar U-varianten, men har serieport istället.
  • ACR122L står på en fot och har bl.a. en display. Skulle kunna funka intill kassan. Ansluten via serieport.
Vi kan ju självklart använda en annan läsare än just en av de fyra ovan också...

Vi skall inte använda någon USB-läsare, istället en fristående arduino som agerar "hjärna" i blipparen, som sköter displayer etc.

Kommunikationsprotokoll

Dubbelriktad UART till arduinon, med ett kommunikationsprotokoll enligt nedan.

Paketstruktur

  • 2 bytes preamble
- 0xAA, 0x55
  • 1 byte TYPE (kommer definieras senare)
  • 1 byte LENGTH
  • 1 byte checksum av preamble, TYPE och LENGTH
  • LENGTH bytes payload
  • 1 byte checksum av payloaden en aritmetisk summa.

Pakettyper

Fyll på med önskemål här, se exempel:

error

Något har gått väldigt fel, ex. arduinon misslyckades initiera sig.

  • TYPE = 0xXX
  • LENGTH = 0

ping

Server -> Arduino

Arduino -> Server

Kollar om motparten är vaken, skall besvaras med pong.

  • TYPE = 0xXX
  • LENGTH = 0

pong

Server -> Arduino

Arduino -> Server

Svar på ping.

  • TYPE = 0xXX
  • LENGTH = 0

order_req

Arduino -> Server

Skickar en orderförfrågan till servern.

  • TYPE = 0xXX
  • LENGTH = 5 bytes.
4 bytes UID (RFID-nummer), 1 byte ordertyp.

En tanke här är att kunna lägga "kombinerade" ordrar, typ kaffe & klägg, espresso & klägg etc etc.

order_ok

Server -> Arduino

Svar på order_req, order lagd och genomförd. Returnerar "korttyp" (jobbare eller vanlig) och kvarvarande saldo för det blippade kortet.

  • TYPE = 0xXX
  • LENGTH = 3 bytes
1 byte korttyp, 2 byte saldo (maximalt 65535 kr, räcker det?)

Kortyp:

  • 0x00: Vanlig dödlig.
  • 0x01: Jobbare.
  • 0x02: Skapare. ("Yess masssterr...")
Här finns utrymme för "titlar", om vi implementerar "achievements" :)

order_fail

Server -> Arduino

Svar på order_req. Order misslyckades.

  • TYPE = 0xXX
  • LENGTH = 1 byte
1 byte fail_reason:
  • 0x00 - Inte tillräckligt med pengar på kortet.
  • 0x01 - Kortnumret hittades inte (ej liukort?).
etc etc.

buyer_name

Server -> Arduino

Skickar köparens namn till arduinon.

  • TYPE = 0xXX
  • LENGTH = variabel (sträng med namnet)
Skicka köparens namn som ASCII. Måste detta kanske trunkeras? Hur stor är displayen?

Kan kombineras med order_ok eller order_fail, eller next_shift.

next_shift

Server -> Arduino

Skickar nästa jobbpass till blipparen.

  • TYPE = 0xXX
  • LENGTH = ?? (vad skall presenteras?)