Speeltyd met Arduino Starter Kit

Arduino + Clojure[Script] = <3

Dit is nou al 'n hele ruk dat ek graag meer wou leer oor elektroniese mikrobeheerders. Lank, lank gelede het ek 'n Raspberry Pi 2B gekry en ek het OpenELEC daarop geinstalleer en dit as 'n media sentrum gebruik. Toe ek later my woonstel gekry het in hier ingetrek het, het dit maar net in een van die laaie gebly vir 'n baie lang ruk.

Iewers laat in 2020 het ek toe besluit om weer nuwe lewe daarin te blaas en installeer toe Raspbian. Ek het 'n paar projekte ontdek wat dit moontlik maak om met die GPIO pins te werk in Java. So is ek toe Bloemfontein toe vir 'n ruk en terwyl ek daar is skryf ek vir my 'n klein weer programmetjie wat op die Raspberry Pi hardloop en geskryf is in Clojure. Nou dit is vir my werklik 'n baie genotvolle ondervinding om Clojure ook op hierdie vlak te kan gebruik.

Ek het 'n paar keer my oë gehad op 'n broodbord en jumper cables en ander goed soos sensors, maar het net nooit die items gekoop nie. Toe ek nou onlangs terug is in die Kaap, toe besluit ek om vir my 'n Arduino Starter Kit te koop. Dit is nie spotgoedkoop nie, maar ek byt toe vas en bestel dit. Aflewering was blitsvinnig en ek het my pakkie 'n dag vroeër gekry as wat ek verwag het.

Natuurlik moes ek eers alles deurgaan en kyk of ek gelukkig is... Ek moet sê, dit is uitstaande gehalte en daar is selfs 'n handleiding wat alles baie mooi verduidelik. Die pakket het 15 projekte om te voltooi wat 'n mens van beginner tot 'n kenner neem. Ek het die basiese gedoen soos om die Arduino en broodbord aanmekaar te sit en dan 'n LED liggie te maak werk. Die volgende stap was 'n skakelaar en daarna het ek vasgeval in 'n soektog na hoe ek met Clojure kan werk op die Arduino.

My soektogte het gelei tot Clodiuno, arduino-clj en clj-firmata. Op die ou-end het ek die beste gevorder met clj-firmata nadat ek met 'n deps.edn begin het en 'n paar afhanklikhede (dependencies) opdateer het. Die meeste Clojure projekte wat ek gevind het is 3 jaar of ouer en gebruik ook almal Leiningen, wat nie juis my smaak is nie.

My hoop is om iemand anders in 2021 ook te help met my pogings om bietjie nuwer tools te gebruik asook 'n kort voorbeeld.

Hieronder lys ek my deps.edn nadat ek 'n paar opgraderings gedoen het om alles aan die gang te kry.

;; deps.edn
{:paths ["src"]

 :deps {org.clojure/core.async {:mvn/version "1.3.610"}

        clj-firmata/clj-firmata {:mvn/version "2.1.1"
                                 :exclusions
                                 [org.clojure/core.async
                                 com.github.purejavacomm/purejavacomm$jar
                                 com.sparetimelabs/purejavacomm
                                 clj-serial/clj-serial]}

        clj-serial/clj-serial {:mvn/version "2.0.5"}}}

Ek moes die FirmataStandard sketch deur die Arduino IDE oplaai na die bord, en daarna kon ek begin tinker deur 'n Clojure REPL. Die eerste keer kon ek nie ver kom nie, maar ná 'n disconnect en 'n nuwe connect kon ek goed regkom. Dit is nog vroeg in my verkenning, maar dit is baie opwindend en ek leer wanneer ek kan.

Hieronder is 'n paar instruksies wat ek deur die REPL gemaak het om 'n SOS flikker met 'n LED liggie te maak:

(ns user
  (:require [firmata.core :as f]
            [clojure.core.async :refer [<!!]]))

#_(def board (f/open-serial-board :auto-detect))

#_(f/close! board)

(def pulse-rate
  {:s 100
   :l 400})
   
(def letters
  {:O [:l :l :l]
   :S [:s :s :s]})

(defn pulse [board pin dur]
  (f/set-digital board pin :high)
  (Thread/sleep dur)
  (f/set-digital board pin :low))

(defn letter [board pin col]
  (doseq [x col]
    (pulse board pin (x pulse-rate))
    (Thread/sleep 100)))

(defn letter-sequence [board pin col]
  (doseq [l col]
    (letter board pin (l letters))
    (Thread/sleep 200)))

(comment

  (letter-sequence board 13 [:S :O :S]))

Daar is nog baie om te leer, maar hierdie is waar ek nou al trek. Een van die dae gaan ek my huis se ligte kan aan en af sit :-)

Tot volgende keer...


Tags: clj-firmata firmata arduino


Copyright © 2024 Johan Mynhardt
Powered by Cryogen
Theme by KingMob