tirsdag 15. desember 2015

Arduino - HXJ-17 mikrofon og hvordan den virker - Video!

Et bilde sier mer enn tusen ord og en video har 24 bilder i sekundet, derfor følte jeg at et par minutters video kan vise mer enn mange artikler med tekst.

Når det er skrevet, så vil videoen nedenfor vise hvordan mikrofonen fungerer og at den ikke er usensitiv som mange på Internett påstår.



Relatert lenke:

mandag 14. desember 2015

Hacke en ikealampe med Arduino og Adafruit Neopixel klone - Video!

Som alltid åpnet jeg posten og til min store glede var det elektronikk der! Min NeoPixel klone var kommet frem, helt fra min gode venn (av mange andre) som sender meg gaver fra Kina.

Når det er sagt, hva er neopixel? Jo, det er en ring med RGB-led som er unikt adresserbare.
Dette betyr at du gjennom 3 kabler (data + strøm + jord) kan styre/adressere "uendelig" med leds.

Jeg kjører her en demo på en ESP8266 (NodeMCU V1), men i praksis kan man gjøre dette på nesten hva som helst av Arduinokompatible enheter.

For å teste dette veldig kjapt, tok jeg å lastet ned biblioteket til Adafruit og la det inn i Arduino library-mappen. Deretter limte jeg inn konstantene for å mappe om til riktig pinout på ESP8266:

#define NODEMCU_D0 16
#define NODEMCU_D1 5
#define NODEMCU_D2 4
#define NODEMCU_D3 0
#define NODEMCU_D4 2
#define NODEMCU_D5 14
#define NODEMCU_D6 12
#define NODEMCU_D7 13
#define NODEMCU_D8 15
#define NODEMCU_D9 3
#define NODEMCU_D10 1
#define NODEMCU_D12 10

Jeg valgte å deretter definere pinout i Adafruit-koden:
#define PIN            4
Som man ser der oppe, er 4 = D2 (altså plugger jeg da data-linjen inn på D2 på ESP8266).

Sketchen jeg testet, er den som heter "buttoncycler" som man finner under examples  etter man har lagt inn library. Jeg måtte derfor definere opp en knapp også:
#define BUTTON_PIN   5    
Vi ser der oppe at Pin 5 på Arduino tilsvarer D1 på ESP8266, altså tok jeg en kabel på D1 som er han i andre enden. Jeg har ikke knapp tilgjengelig så jeg tok enda en kabel på GND (jord). Når koden er som den er, vil de to kablene kortsluttet for et øyeblikk tilsvare en "momentary switch", en øyeblikksbryter. Sketchen vil starte animasjoner, den cycler gjennom 10 moduser.

Man må også definere antall piksler man har, jeg har her 24 piksler:
#define PIXEL_COUNT 24

Ellers er det egentlig ikke så mye å gjøre, last det over på NodeMCUen og lek i vei :-)

Her er demovideoen når jeg testet

Relaterte lenker

mandag 7. desember 2015

Lag en imponerende bluescreen presentasjonsvideo på 1-2-3

Fremfor å vise videoene dine "ramme til ramme", viser jeg her hvordan du kan lage imponerende innramminger på 1-2-3, som mitt eksempel her:
Denne videoen har jeg aldri vist på tven min, men her ser du bilde av tven
og det ser jo ekte ut, sant? Vi bruker her noe man kaller "blue screen" som
de fleste har hørt om, for å gi en ny dimmensjon til videoen.


Det ser kanskje fancy ut, men det tar ca 10 minutter å "ramme inn" videoen, hvis du har klart et kamera. Enten trenger du Adobe Photoshop + Adobe Premiere, eller du kan hoppe over Photoshop hvis du har mulighet for å vise en solid bakgrunnsfarge på TVen din. Det er også mulig å bruke et laken, klippe ut fargede ark osv. Fantasien setter grenser, som alltid!

1) Ta bilde av TV-apparatet ditt

Du trenger ikke å bry deg om hva som er på skjermen, men hvis du ikke har Photoshop kan du velge å vise en blå eller grønn video (søk etter green background eller blue background på youtube og vis dette på tven)

2) I Photoshop lager du et nytt dokument på 1920x1080 piksler

Her drar du nå inn bildet av tven din og slå på grid (CTRL+ * ). Trykk så CTRL+T (transform).
Nå må du trekke ut bildet slik at kantene går rett, slik at du ikke får forvrengt bilde.
Bildet lagres nå ned som bluescreen.jpg med kvalitet 12.

3) Opprett Adobe premiere prosjekt, dra inn bildet du lagde i steg 2.

Pass på at du velger HDV og 1080P 24fps prosjekt.
Importer bildet inn i prosjektmappen, dra det så inn på tidslinjen i det øverste videosporet.
Nå må du åpne effektbiblioteket og trekk så bluescreen over laget ditt bluescreen.jpg

Hvis alt gikk som forventet, skal dette bli resultatet:

Man kan nå legge andre lag under dette laget og det ser ut som presentasjonen foregår på tv-apparatet. Den samme effekten kan man selvsagt bruke andre steder, i en bok osv. Man kunne også filmet tven sin mens den viste en solid bakgrunnsfarge. For en "sanntids"-bakgrunnsfarge er det viktig å tenke på at man ikke må stå foran bildet med samme farge som den man skal gjøre transparent. La oss si at jeg ønsket å stå foran tv-apparatet og filme, mens jeg skulle bluescreene inn en annen video på tven. Hvis jeg da hadde på meg blå genser, hadde jeg blitt usynlig der genseren var, det samme hadde skjedd med øynene mine.

Hvis du har blå øyne kan du da prøve en "grønn bluescreen", en green screen. Eller du kan bruke andre farger, da kan du velge en av de andre keyene (flere å velge mellom).


torsdag 3. desember 2015

Loddestemningen

Beklager ordspillet - loddestemningen. Men stemningen for å lodde kom over meg, så det var passende følte jeg. 


Dette er en flux capacitor, den gjør tidsreise mulig.
Neida, det er en 16 bit ADC (analog til digital converter).
16 bit ADC gir 4 inputs gjennom i2c, det betyr at man trenger bare 2 kabler inn mot Arduino og kan da koble enten 4 sensorer på den, eller man kan kjøre en differensialmåling på 2 sensorer for enda mer nøyaktig måling (da hele 16 bit, mot 15 bit hvis man kjører 4 sensorer).

Man kan også programmere den fra koden sin og velge å forsterke signal med  2/3x (standard), 1x, 2x, 4x, 8x og 16x. Så hvis man har for eksempel 1V maks ut fra en analog sensor, kan man øke gain med 4 og få ut 4V maks. Når det er sagt, kan man også adressere de ved å laske over mot "addr". Mer om det i guiden hos adafruit:

Man kan altså kjøre 4 16 bit ADC for å gi 4x4 = 16 analoge input med 15bit målinger inn gjennom da 2 ledninger mot mikrokontrolleren! (pluss strøm og jord) eller: 2x4 = 8 x 16bit målinger gjennom to ledninger.. Man må selvsagt ha kabler til sensorer og mellom enhetene i i2c bussen :-)


Her ser vi en lyssensor jeg loddet på pinner.
Jeg har nå i praksis 3 typer lyssensorer, hvor av dette er den beste av de til vanlig lysmåling. Men jeg har også noen UV-målere samt noen enklere målere enn den her.

Liten Arduino Pro Micro før jeg lodder fast pinnene.

Her er alt jeg loddet i kveld, man ser to kapasitive
Touch sensorer, samt en 16 bit adc, en voltage divider
Og en lyssensor. 

Bergens tidende lanserte rentekartet

Tjenesten "rentekartet" fra Bergens Tidende var ganske morsomt, men samtidig fikk det meg til å lure litt. Hvorfor er den en åpenbar geografisk sammenheng mellom rentenivået til innebyggerne i vårt land?

Nå er rentekartet litt vanskelig å se i sin helhet uten å modifisere DOM (Document Object Model) på grunn av at det ikke er laget med tanke på responsivt design, dessverre. Men jeg tok å manipulerte DOM for å se utsnitt av hele landet:

Det er jo tydelig at en del områder har greie rentevilkår
Men de som bor midt på fjellet eller langs svenskegrensen ser ut
til å ha dårlige rentevilkår.
Det jeg umiddelbart begynte å lure på, var om det var noe som gjorde at de som bor de stedene kanskje ikke refinansierer sine boliglån? De har kanskje tilknytning til lokalbanken sin?
Kan det være andre årsaker? Kanskje datagrunnlaget er for lite og de få som svarte har dårlige vilkår? BT er jo en bergensavis så det er jo naturlig at de får mange respondenter på vestlandet.

Et annet alternativ kan også være at det er dyrere boliger der rentenivået er lavere. At folk er "bedre kunder" gir jo gjerne bedre vilkår? Unntak for boligprisene fins jo, men dette er jo et snitt av flere respondenter. Boliger er jo dyrere i storbyene enn utenfor og da har gjerne banken bedre marginer? Det blir bare spekulasjoner, men jeg synes nå det var interessant observasjon :-P

Sjekk gjerne ut rentekartet selv http://www.bt.no/bolig/Rentekart-Har-du-darligere-rente-enn-naboen-648916_1.snd

LilyTiny LilyPad ATtiny85 - Wearable IoT - kom i gang!

LilyTiny LilyPad ATtiny85 er en mikrokontroller som skal tåle vaskemaskinen og er laget for å sy på klær, kostymer eller annet. I bunn og grunn bygger den på Atmega sin ATtiny85 men har innebygd USB-krets som forenkler innlasting av fastvare samt strømleveranse gjennom USB er jo da også mulig. Jeg kjøpte enhetene gjennom aliexpress og som vanlig fulgte det ikke med noe annet enn kretskortet. Derfor skal jeg avmystifisere kretskortet gjennom dette innlegget.


Den gjør ikke skam på navnet sitt "LilyTiny"

Størrelsesmessig er den som en femkroner.


Baksiden viser koblingsmulighetene man har mot ATtiny85 SOIC
(Small Outlined Integrated Circuit).

Tilkoblingsmuligheter

Bak på enheten står det følgende: 
P0, P1, P2, 5V, VIN, GND,  P5, P4, P3.

Men hvordan brukes dette i praksis?
Her ser man ATtiny 85 chippen sine muligheter og hva som er koblet opp hvor.
Basert på kretskortet og ATtiny85 kan man derfor lese seg frem til:
  • IO - inputs / outputs
    • P0 - PWM / MOSI / D1
      • PB0 (MOSI/DI/SDA/AIN0/OC0A/OC1A/AREF/PCINT0)
        • Pin 5 på chippen
    • P1 - PWM / MISO / D0
      • PB1 (MISO/DO/AIN1/OC0B/OC1A/PCINT1)
        • Pin 6 på chippen
    • P2 - A1
      • PB2 (SCK/USCK/SCL/ADC1/T0/INT0/PCINT2)
        • Pin 7 på chippen
    • P3 - A3
      • PB3 (PCINT3/XTAL1/CLKI/OC1B/ADC3)
        • Pin 2 på chippen
    • P4 -A2
      • PB4 (PCINT4/XTAL2/CLKO/OC1B/ADC2)
        • Pin 3 på chippen
    • P5 - Reset / A0
      • PB5 (PCINT5/RESET/ADC0/dW)
        • Pin 1 på chippen
  • Strøm
    • VIN
      • Volt inn ()
    • GND
      • Jord
    • 5V
      • 5 Volt

For å bruke Arduino IDE med enheten må man legge inn driver, følg guiden her:
https://digistump.com/wiki/digispark/tutorials/connecting

Deretter er det litt forskjellig fra hvordan vanlig Arduino virker, man må velge "Micronucleus" som programmer og man må koble ut kortet når man skal laste opp fastvaren, deretter sier Arduino IDE at du skal koble den til og vips fyker den over. (Du vil altså ikke se en com-enhet, slik du gjør med vanlig Arduino, du får heller ei brukt serial printline mot PC).


Relaterte lenker:

onsdag 2. desember 2015

Arduino + OLED + Mikrofon = visuell lydmåler

Etter å ha kjøpt et par oleds, en del Arduinoer og mange sensorer, har jeg lekt en del.En av de første tingene jeg gjorde, var å lage en værstasjon som lastet data fra nettet. Men det var jo data som eksisterte fra før i skyen, Vi vet jo at det regner i bergen i morgen også, så hva er vitsen med værmeldingen?


Pga. dårlig støtte for ESP8266 og OLED måtte jeg teste flere biblioteker
før jeg fant ett som fungerte ( 
https://github.com/squix78/esp8266-oled-ssd1306 ).
Det biblioteket lekte jeg litt med, blant annt tok jeg min thingspeak kode og la inn OLED-biblioteket. Det fungerte for det meste fint. Jeg måtte så pause alt av Arduino en stund pga. jeg ikke hadde tid (eller fritid). Men to ting jeg har laget som tok relativt liten innsats:

1. Arduino parkeringssensor (ultrasonisk sensor)


Første prototype på avstandssensor
tallet er centimeter unna objekt
Avstandssensoren kan man lese om her: https://www.arduino.cc/en/Tutorial/Ping

Min sensor har fire pins, en dedikert for sending av ultrasonisk lyd og en pin dedikert for lesing. Men i praksis gjør min kode det samme som den der, i tillegg til OLED-visning.

#Arduino #oled #distance

En video publisert av @olavxxx

2. Arduino lydmåler

Arduino lydmåleren var litt værre, men etter jeg har fått det til er det ikke så vanskelig det heller.
Problemet med lydmåleren er at den i utgangspunktet ser ut til å ikke virke. Folk på det store Internettet påstår også den har veldig lav følsomhet. Det er nok på grunn av at de ikke har skjønt hvordan den virker.

Det første man må gjøre som alt annet, er å skjønne hvordan det henger sammen og hvorfor det virker (eller ikke virker). Dette er jo vanlige problemstillinger for IT-folk :-P
Fire mikrofoner, men den ene mangler 2903 SMD-chippen...
Kina skylder meg en 2903 SMD-chip.

Jeg kjøpte fire mikrofoner for mikrokontrollere på aliexpress, som vanlig fulgte det ikke med manualer eller koblingsskjemaer, heller ei kabler. Men man vet jo at det skal ha spenning og jord, i tillegg vet man jo at digital er 1 eller 0 og analog er 0-X. Jeg sier der X på grunn av at analog er en variabel verdi som avhenger av innverdien. Mikrofonen støtter både 3.3V og 5V, men 5V vil jo gi høyere tall ut.

Når man kobler det opp og leser ut digital verdi får man 1 eller 0, men det er ikke alt. Man kan (og må) kalibrere mikrofonen. Når man gir mikrofonen strøm og jord, lyser det opp to leds:

  • Strømindikator
  • Lydindikator (deteksjon)
Det man må gjøre er å skru og skru, det tar litt tid.. Rotary switch heter dette. Man må skru helt til lyset forsvinner, man skal bare så vidt skru seg dit. Dette må man gjøre i et rom med "vanlig" lydnivå, uten tale, musikk, tv osv. (ingen bakgrunnstøy). Når det er gjort, kan man teste å klappe, plystre eller noe. Da skal det blinke forsiktig i den ene led mens den andre fortsetter å lyse konstant som alltid.

Når man har kalibrert mikrofonen vil man i praksis ha invertert det digitale signalet. Det har ikke noe å si i praksis, men man kan bruke det digitale signalet til å detektere klapp, knipsing eller annet. Kanskje man vil lage en "secret knock" som låser opp døren eller en mikrofon som skrur ned tvlyden hvis den går over et visst nivå? Det er jo uendelig med muligheter her og fantasien setter forsåvidt grensen.

Mikrofonen i seg selv gir da enten 1 eller 0 på digital, men analog gir som sagt X verdi fra 0. I praksis gir den aldri 0, den har en "baseline" som vil variere etter hvor mye bakgrunnstøy man har i rommet. Dette vil i praksis være den verdien man har når man tar å gjør om kalibrert mikrofon til spenning med formelen:

volts = (lestAnalogVerdi * innSpenning ) / 1024
Jeg valgte å bruke 3.3V på grunn av at den har mindre støy enn 5V. Men dette gir uansett ut et tall etter kalibrering, uten at man lager noen lyder. Tallet er nok veldig lavt, kanskje 0.08. Dette vil jo være "baseline" som man må si er et referanse nullpunkt.

Da tar man for eksempel å ganger dette opp for grafisk visning:
double dspval = ((volts-0.07) * 1024)  ;
Jeg trakk der vekk 0.07 som var min kalibrerte baseline, det vil nok være avvik basert på bakgrunnslyder, mikrofon osv. Samt man justerer på en skrue når man kalibrerer, så tallet vil ikke være statisk. Trikset er å skrive ut verdien i console og se hvilken minimumsverdi man får.

Egentlig burde jeg endre koden min til å ha en "baseline" som en variabel, bare ta vare på laveste verdien og bruke den til å filtrere ut. Det vil jo bety at jeg må ha en måte å rekalibrere, en knapp eller noe.. ("calibrate"). Det er jo ganske enkelt, så lenge knappen holdes inne, kan den lese av lydnivået og lagre laveste nivået den får. Deretter bruker man det som referansenullpunktet.

Det tror jeg at jeg må lage en dag jeg har tid :-) Men det blir sikkert ikke i Desember.
Når det er sagt, så tar jeg jo bare da denne verdien og skriver den til OLEDen. Da bruker jeg funksjoner som fins i u8glib biblioteket.

EKsempel på den grafiske "speedometer"-nålen:
u8g.drawLine(0+dataverdien, 32, 64, 64);
Jeg har da en metode som får inn verdien som skrives i tekst i øvre delen av skjermen, samt jeg har da denne "speedometernålen" som bruker samme inndataverdi.

Det jeg har tenkt at jeg burde lage, var en sanntidsgraf, det er jo ganske enkelt egentlig. Jeg kan jo ikke holde for mye data i en mikrokontroller, men det er jo et 128x64 piksel display, hvor jeg dedikerer 128x32 til tekst og 128x32 til grafen. Men i praksis er det ikke heniktsmessig med 32 datapunkter på grunn av at 1 piksel brede datapunkter blir kanskje litt kornete grafikk. Derfor ser jeg for meg at jeg kan fylle en matrise på kanskje 16 eller kanskje så lite som 8. Med 8 blir det jo 32/8 = 4 piksler bredde som kan gi en "fin bakke" mellom punkter på den lille skjermen.

Jeg har uansett ikke komemt i gang med det enda, er bare en tanke jeg har i hodet :-P Men hvis jeg lager den graf-funksjonen, kan jeg jo bruke den til andre ting også. Miljøstasjonen kan jo vise svevestøv, temperatur, fukt osv.

Her er lydmåleren i praksis i en hverdagslig test:

torsdag 5. november 2015

NodeMcu + Arduino IDE + Thingspeak = Sant

WOHOO, NANANANANANANANNAA!

Det er ikke første gang jeg sender til det store Internettet fra en mikrokontroller, det gjorde jeg først med en Arduino koblet mot en Rasberry Pi 2 gjennom en trådløs seriell bro. På RPIen kjrøte da pythonscript som sendte videre data.

Hele mikrokontrollergamet ble jeg kjent med gjennom www.friskby.no, men jeg har jo som alltid den utforskende egenskapen som jeg er kjent for å ha :-P Derfor må jeg teste alt mulig rart!

Hvor minimalistisk er ikke en NodeMCU med Arduino IDE, kodet opp til å sende rett til thingspeak.com? En alt-i-ett enhet! (med unntak av sensorer)



Jeg tok en bacon på bildet for å illustrere hvor godt dette virker.



Jeg kjører nå DHT22 rett inn i thingspeak :-) Se gjerne beviset her: https://thingspeak.com/channels/64263

Alternativt kan de late bare beskue bildet mitt:
ESP8266 er dårlig navn på sensoren, jeg må nok lage en kanal per sensor og navngi
kanalene etter sensortype. Det er vel mer naturlig enn å navngi mikrokontrolleren :P

Komme i gang med Arduino IDE sammen med NodeMCU

Mitt blogginnlegg om å komme i gang med NodeMCU hadde jeg trodd skulle fortsatt med koding i LUA-script. Men det var ikke så bra å kode i det språket. Jeg vurderte å teste Expressif også, men til syvende og sist fant jeg ut at jeg skulle teste Arduino IDE sammen med NodeMCU.

Årsaken for at jeg fant ut at jeg måtte gå videre var:

  • Merkelige feil i de få bibliotekene som eksisterer
  • Ikke like mange biblioteker som Arduino har
Det er egentlig ikke så "alvorlige" feil, men det er jo feil som gjør at man river seg i hodet.
Jeg prøvde til og med å gå over på DEV-firmware, men det hjalp ikke. Jeg kom meg litt videre, men fikk bare nye feil og merkeligheter :-P



Fremgangsmåte for å få NodeMCU DEV V2 til å virke i Arduino IDE

Først åpner du github / esp8266 / Arduino og kopier stien til board manager. Per i dag er den:
http://arduino.esp8266.com/stable/package_esp8266com_index.json , denne må legges inn i File>Preferences>Additional boards manager URL.
Her ser man boards manager med stien.

Når dette er gjort, tar man å trykker OK.

Søk etter ESP i Tools > Board > Boards manager, velg
så installer.

Når den er ferdig, slår du av Arduino IDE. Slå deretter på Arduino IDE, velg Tools> Board > NodeMcu V1 (ESP12E Module). Deretter tar du Tools > Programmer > "USBasp".

Nå kan du se om det virker, ta File > Example > DHT Sensor Library > DHT Tester.
Hold inne knappen "FLASH" på NodeMCU mens du laster opp fra Arduino IDE.

Hvis du får feilmelding med:
packages/esp8266/tools/xtensa-lx106-elf-gcc
Da må du laste ned en fil manuelt, se: https://github.com/esp8266/Arduino/issues/612.
På windows vil du laste ned libm.a og legge den inn i:
C:\Users\DITTBRUKERNAVN\AppData\Roaming\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9\xtensa-lx106-elf\lib

NB! Filen er pakket (to ganger), den kan pakkes ut med 7-zip.

Slå nå av Arduino IDE og slå den på igjen.
Prøv igjen å laste opp kode samtidig som at du holder inne "FLASH".

Hvis du nå har ingen problemer, er det tid for kaffe. Hvis ikke, må du mest sannsynlig legge inn følgende i boards.txt:

I Windows må du først åpne for eksempel notepad++ som administrator, deretter åpne filen, legge det inn på bunnen og lagre. Deretter restarter du Arduino IDE nok en gang og prøver igjen.

Nå bør det virke :-) Hvis ikke, må du selge PCen din på finn.

Last opp din første kode på NodeMCU med Arduino IDE!

Etter feilsøkingen ovenfor kan du laste opp din første kode,
hold inne flash-knappen på NodeMCU og trykk på last opp i Arduino IDE

Nå kan du åpne konsollet (Tools>Serial Monitor). Følg med på magien:


For at du skal få opp noe her, må du jo nødvendigvis ha en DHT22 eller en DHT11 sensor, samt du må velge riktig sensortype i koden og koble den riktig opp på NodeMCU. Jeg brukte DHT22 laget for Arduino (shield), den skal ha +5V, Jord og en IO-port. Jeg koblet jord på GND, +5V på SD2 og D4 brukte jeg som IO-pin.

Komme i gang med NodeMCU

Når du har kjøpt din egen NodeMCU eller lånt en av en venn, kan du endelig komme i gang.
Spørsmålet du kanskje da har, er hvordan du kommer i gang.. Hva er de første stegene?

Jeg har derfor laget en liten guide her, jeg har prøvd å holde den lettfattelig med illustrasjoner og forklaringer. Etter denne guiden er på plass, kommer jeg mest sannsynlig til å lage noe i praksis.

Den første guiden handler bare om å få på plass det basiske: kommunikasjon mellom deg og NodeMCU og oppkobling mellom NodeMCU og ditt nettverk. I god tradisjon vil jeg også oppgradere firmware (fastvare) på NodeMCU før jeg starter.

Guiden min tar for seg at du har kjøpt en NodeMCU med innebygget USB-kontroller, hvis det ikke er tilfelle må du nesten ha en FTDI->USB adapter og koble rx>tx og tx>rx.. Men nok småpreik, jeg gjør resten av guiden gjennom bilder :-)

Guiden vil være ca tilsvarende for Windows, OSX, Ubuntu og andre operativsystemer.

Kom i gang

Det aller første du gjør, er å gå inn på github/nodemcu




Først kobler du NodeMCU med en MicroUSB kabel til din PC
Programmet lastes ned og kjøres.
Du trykker egentlig bare "flash".
Du finner det på 
github / nodemcu-flasher

Deretter må du inn å finne comport (jeg hadde COM6) som
NodeMCU viser deg.  I dette eksempelet bruker jeg putty.
Velg Serial i radiobutton til høyre, fyll inn riktig tall for COM-port.
Baud må mest sannsynlig stå på 9600.

Når de to stegene ovenfor er gjort, har du følgende kommandoer du kan skrive inn i putty:
wifi.setmode(wifi.STATION)
wifi.sta.config("minWiFiSSID","MittWiFiPassord")
Deretter sjekker du at du fikk en ip-adresse av din router:
print(wifi.sta.getip())
Du bør få ut:
<ip adresse> <nettmaske> <gateway>

Så enkelt var det!


Heartbeat ("hjerteslag") fra WiFi-koblingen vises
i form av en liten blinkende LED.


NB! Pro tip:
Hvis du synes Putty er vanskelig og har erfaring med Arduino IDE, er det ingen ting som tilsier at du ikke kan bruke Arduino IDE sammen med NodeMCU. Du starter i så fall Arduino, velger COM-port og åpner konsollet. Sett NL + CR som linjeendelse nede i høyre hjørnet.


Videre læring

onsdag 4. november 2015

Hardwarefest!

Selv om jeg er glad i å programmere i mykvare, er det alltid morsomt med harde pakker. I dag fikk jeg flere hardware-pakker i posten! Jeg lar dette bli et innlegg hvor jeg viser de uten alt for mye tekst.


DHT22 er en fukt og temperatursensor, denne er noe bedre enn
DHT11 som jeg har flere av allerede.


Dette er en bevegelsessensor som jeg skal leke med

NodeMCU (ESP8266) er en mikrokontroller med innebygd
WiFi, det gir en fin IoT (Internet Of Things) enhet. Den er også
kompatibel med Arduino

Arduino Pro Micro, det er min minste Arduino hittil.
Det skal bli morsomt å lodde på de headerne :-)
Ble litt overrasket over hvor mye mindre den er enn Nano V3.

Utviklingskort for ESP8266, gjør det enklere å koble på sensorer.
Bakside av utviklingskort for ESP8266, glemte å tenke på
at jeg må ha en strømforsyning på minst 6V :-P
Må se om den kan mates med 5V via headers.

torsdag 22. oktober 2015

Tre uker med Arduino


Etter tre uker med arduino vil jeg skrible sammen noen av erfaringene mine fra den morsomme tiden.

Hva er en Arduino?

En arduino, eller en arduino-kompatibel enhet kjører som regel på en ATMEL-prosessor. Arduino er en IDE (et utviklingsmiljø) for små mikrokontrollere. Det fins også Arduino-kloner, samt det fins porting av Arduino til andre prosessorer som for eksempel esp8266 [Ekstern lenke].
Arduino Nano V3 er en kapabel men liten sak, relativt mange
digitale og analoge inputs. Her er den koblet opp med en
ultrasonisk sensor, microsd-kortleser og en barometrisk sensor
(trykk og temperatur).

Hva er forskjellen på alle Arduinoene?

Det er mange Arduinoer og kloner i alle former fra rund til avlang, kvadratisk. Noen har mer lagringsplass enn andre, noen har flere digitale og analoge inputs, noen har innebygd motorstyring, noen har mulighet for "shields" (moduler som utvider funksjonaliteten uten å kable noe). I tillegg er det noen som er mer strømsparende enn andre, noen er raskere, noen har dedikert "krystall" for bedre tidtaking, Noen Arduinoer har USB-grensesnitt, andre krever en adapterkabel og har bare seriell innebygd. Noen har dedikert USB-interface, andre ikke.
Arduino Romeo V2 er laget for å være en robot-kontroller,
dette betyr at den kan styre motorer og mye annet.
I tillegg har den en del lagringskapasitet, usb-grensesnitt, 5-veis knapper.
Her er det koblet på: XBee XRF trådløs kommunikasjon, barometrisk sensor
(trykk + temperatur), støvsensor, støvsensoradapter, lyssensor, temperatursensor.

Hva kan man koble på Arduino?

Man kan koble på veldig mye rart, fargesensorer, små oled-skjermer, lcd-skjermer, trådløs kommunikasjon (WiFi, 868Mhz osv), blåtann, MicroSD-adapter, Avstandsmålere, støvsensorer, barometriske sensorer, forskjellige typer gass-sensorer og mye annet. Det er veldig mye rart man kan koble på Arduino og mange løsninger leveres med ferdige moduler som betyr at man trenger bare å koble opp 4-6 kabler per modul. Mange moduler kobles mot analoge og/eller digitale pinner og 3V3 eller 5V. Noen kobles på i2C bussen som er en buss man kan koble flere enheter på og alle enhetene har da en unik adresse. OLED-skjermer kommer i flere former, der noen av de går på i2C. Det skal sies at i2C bussen er en anelse tregere, men for de fleste bruksområder er den bra nok. I tillegg må man være observant på at hvis man har mange sensorer på i2C, må man endre resistanseverdien for å få nøyaktig signal.

Dette er en ultrasonisk sensor, eller avstandsmåler som bruker
lyd. Den ene siden sender ut lyd, den andre siden måler hvor lang
tid det tar for lyden å komme i retur. Dette kan brukes for å måle avstand
nøyaktig opp til ca 3m avstand. Fint for selvkjørende roboter eller
kanskje for fysisk interaksjon. Denne kommer i to utgaver hvor
min har en pin for sending og en for mottak. Den andre typen
bruker samme pin og bytter på funksjonen. Biblioteket som følger
med Arduino IDE er laget for den andre typen. Men det krever
små endringer for å kjøre denne typen med dedikert målepin.






I likhet med en medalje, har også avstandssensoren en bakside.
Men denne baksiden vil jeg si er fin å se på :)





BMP180 er en barometrisk sensor som måler trykk og temperatur.
Ved å enten kalibrere den  ved sjønivå eller en gitt høyde, vil den
klare å måle differanse i høyde relativt nøyaktig. Den fungerer
fint med bibliotek fra både adafruit og sparkfun.
Dette er en i2C senso
r.




DHT11 er en temperatur og fuktsensor, men et bedre valg er nok
storebroren DHT22 som er en anelse mer nøyaktig og koster
ca. det samme. De bruker samme biblioteket og det
ligger klart i Arduino IDE.




Lyssensor er veldig enkelt å bruke, trenger ikke bibliotek.
analogRead(measureLightPin); er alt som trengs :-)
En fin dag gir gjerne måling på rundt 1000, så hvis man vil
dimme led basert på lys i rom, se eksempelkode nedenfor.

Eksempelkode for å dimme ledlampe basert på lys i rommet:
int measureLightPin = 5; // Analog pin for lyssensorint ledPin=13; // led pin (innebygget led i Arduinoen)float pwm = 0; // flyttallsvariabel for pulsviddemodulasjon 
void setup() { 
 }  
void loop() {  // hvert sekund 
    static unsigned long lastTime = millis(); 
        if (millis() - lastTime >= 1000) { 
            lastTime = millis();
            int l = analogRead(measureLightPin); // les lysnivå (ca. 0-1000)
            pwm = (l / 4); // Del på 4 for å få ca 1:1 mellom avlest lys og maks ledlysstyrke (1000/255 = 3,92  ~~ 4) 
           // dim led etter avlest lys
           analogWrite(ledPin, pwm); 
    } 
} 

Denne rakkaren er veldig liten, det er en microSD-leser.
Den kobles med fire pinner mot Arduino:
CS, SCK, MOSI, MISO, VCC (5V), GND.
De fleste Arduinoer har en ISCS-header som har alle pins
man må bruke, med unntak av en valgfri digital pin (eksempelvis D10).
Denne virker med innebygget bibliotek og eksempelkode fra
Arduino sin egen IDE. Det er veldig enkelt å lese og skrive til filer.
Biblioteket kan dog. ta opp relativt mye plass for de minste Arduinoene.

Dette er en støvsensor, den virker ikke uten videre rett på
Arduino da den trenger enten at man kobler opp motstand og
kondensator, eller kjøper adapter for kobling.
Sensoren kan måle PM10 og PM2.5 (svevestøv)
Den heter Sharp GP2Y10 og er en optisk sensor, det betyr
at den påvirkes av lysinntrengning. Den skal stå slik at kablene peker nedover
og den skal lage en naturlig luftlfyt ved at en resistor varmer opp kammeret.


Støvsensoradapteren kobles til støvsensoren. Kjøper man
støvsensoradapter fra DFRobot.com, får man med kabler.
Dette er jo kabler man sikkert husker fra CD-Rom tiden, men
utfordringen er at man gjerne har kastet de kablene for 15-20 år siden.
I motsetning til dupont kablene jeg bruker andre steder, vet jeg ikke hva
de kablene her heter en gang :-P Adapteren er et must have for de som vil
leke med støvsensoren :-)

Hvordan er det å jobbe med Arduino?

Det er egentlig veldig enkelt så fremt man velger en av de som har USB-grensesnitt. Maskinen finner drivere selv og Arduino IDE finner riktig COM-port. Man velger så COM-port og velger type arduino. Deretter kan man enten kjøre en av eksempelkodene, definere opp egne pins og teste, åpne konsollet og lese av verdier eller se på LED som dimmes for eksempel.

Man kan også bruke biblioteker fra tredjeparter som Adafruit, Sparkfun og andre. Man kopierer da inn biblotekene enten ved å ta sketch > import zip, eller kopiere de via utforskeren. Hvis man kopierer inn bibliotekene selv, må de legges på: ...\Arduino\libraries\.

I mange tilfeller ligger bilbioteker på github og har gjerne en -master ending, denne må fjernes fra biblitekenes mappenavn når de legges inn utpakket i libraries-mappen. De fleste bibliotekene har eksempelkode.

Alt i alt gikk det meste fint, det eneste man må være litt observant på er at Arduino Leonardo og Arduino Romeo er spesielle i måten USB virker på. Det er en virtuell ekstra Serial Port, som betyr at vanlig Serial ikke virker ut mot for eksempel XRF trådløs eller eventuell WiFi. Man må da bruke Serial1. Det er jo for det meste uproblematisk, men noen biblioteker er hardkodet for å kjøre mot Serial. Man kan dog skrive om på bibliotekene, man kan kopiere de opp for å lage egne versjoner osv. Så det er egentlig mer en ting å være observant på, enn at det er et problem sånn sett.

Når man har lekt litt med Arduino IDE og sett på litt sensorer, osv. tar det ikke mange sekunder å lage noe. Man kunne i teorien laget et dukkehus med lysstyring, ringeklokke osv. på veldig kort tid! Man kan lage alt mulig annet også. Jeg har en Arduino som kommuniserer med en Rasberry Pi over 868 Mhz (XRF), som sender videre data til Firebase skydatabase. Jeg kommer nok til å skrive litt mer om det prosjektet en annen gang.

mandag 5. oktober 2015

Koble XRF Xbee mot Rasberry Pi 2

Før jeg i det hele tatt skriver noe mer, anbefaler jeg å åpne følgende lenker i nye faner:

Det er fire ting å være observant på:
  • Kobler du XRF rett i rasberry pi, må den ha +3.3V som du finner på Pin 1
  • Kobler du XRF gjennom en adapter, krever den ofte +5V som du kan hente fra Pin 2
  • RXD og TXD kobles motsatt på Rasberry Pi og XRF
  • Internettet er utdatert(!)
    • Guider på nettet sier du må deaktivere seriell konsoll ved å redigere /etc/inittab
      • Men denne er ikke lenger i bruk :-)
        • Nå er det nok å kjøre raspi-config 

Slik gjør du klar din RPI for XRF:
sudo su
cp /boot/cmdline.txt /boot/cmdline.txt.bak # sikkerhetskopi
vi /boot/cmdline.txt 
Fjern nå alle referanser til ttyAMA0 som er seriell konsollmulighet.
Filen vil nå se ut slik som dette:
dwc_otg.lpm_enable=0 rpitestmode=1 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
Du lagrer nå filen og skriver nå kommandoen:
raspbi-config
Dette fører deg til en grafisk meny hvor du kan deaktivere seriell konsoll.
Reboot av Raspberry pi er neste steget
Reboot
Nå er vi klar for å installere en pakke
sudo su
apt-get install minicom
minicom -D /dev/ttyAMA0 -b 9600
Du kommer nå inn i en seriell konsoll. 
For å teste at kommunikasjonen fungerer, tar du kjapt å skriver: 
+++
Du skal ikke ta enter etter du skriver +++, bare vent. Du skal få "OK" som svar.
Virker det ikke nå, må du skjule alle bevis på at du har prøvd. Neida, da kan du prøve å liste ut enheter med kommandoen:
ls -l /dev/ttyAMA*
Hvis alt gikk vel, skal du ha en linje ala dette:
crw-rw---- 1 root dialout 204, 64 Oct  5 21:13 /dev/ttyAMA0
Har du ikke det, må du se om du husket å deaktivere seriell konsoll i starten, samt at du har koblet rxd mot txd og txd mot rxd :-) Koblet du XRF-enheten rett på +3.3V må du mest sannsynlig gi den en 1uF kondensator i tillegg.

Hvis du lurer på hvordan suksess ser ut, er det slik.


Relaterte lenker

fredag 25. september 2015

Arduinokomponenter på vei i posten :)

Jeg er en verdensvant Internetthandler og denne uken har jeg ikke gjort skam på min ordrehistorikk. Følgende komponenter har jeg bestilt, for å hjelpe å holde liv i banken min DNB som sliter med oppsigelser for tiden

Romeo V2

Av mange arduinobaserte kretskort på markedet, er dette en som er fin for å starte utviklingen på. Det er mye som kan brukes ut av boksen, uten å fikle for mye med løse komponenter, breadboards og loddetangen. Jeg er for all del ikke redd for en loddetang, men det er greit å ha et proto-brett som er fleksibelt og kan benyttes til mer enn en ting. Her er det utallige muligheter, det er vel i praksis fantasien som setter grenser. ( lenke )


Bilde hentet fra dfrobot.com

Støvsensor

En sensor for å måle støvpartikler, enkelt og greit :-) Den bruker optisk måling av partikler, samt det er en motstand som fungeer som varmeelement for å skape sirkulasjon av luften. ( lenke )

Sensoren brukes ofte i luftrensere og har visstnok ganske god kvalitet når det gjelder nøyaktighet av svevestøvmålinger (PM2.5). Den kan påvirkes av lysinntrengning bak sensoren, da det er optisk virkemåte.
Bilde hentet fra dfrobot.com

Støvsensoradapter

For å koble støvsensoren opp, er det en fordel med adapteren,. Denne gjør at man med enkelhet kan koble sensoren mot Arduino. (lenke)


Bilde hentet fra dfrobot.com

Barometrisk sensor

Den barometriske sensoren BMP180 fungerer ved å måle trykk og temperatur. Høyde og trykk har ikke et statisk forhold, selv jordens rotasjon påvirker dette. Ofte er det slik at man kalibrerer telefoner og annet ved enten sjønivå (0 meter over havet), eller ved en kjent høyde. Dette blir da utfallet av en ligning med ukjent. En utfordring med høydemåler er at høyden da vil påvirkes av temperaturen, siden trykket endres ved temperatur. Dette kompanseres dog ved å bruke bibliotek til sensoren.

Bilde hentet fra ebaylenken nedenfor

Jeg kjøpte to sensorer på ebay, til kr. 11 per stk ( lenke

MircoSD

Mikrokontrollere har som kjent lite lagring, vi snakker her ikke megabytes men kilobytes. Det er plass til lite programmering og plass til enda mindre lagring. Hva hvis kommunikasjonen går ned? Kanskje man bør bufre til microsd og overføre ved gitte intervaller?
Bilde hentet fra ebay.

XBee USB Adapter

Dette adapteret er strengt tatt ikke nødvendig, men det gjør at man kan flytte radiodelen lenger unna kretskortet. Adapterkotet skal benyttes sammen med mottakerside (Rasberry Pi 2) og det blir da bare å koble opp primært jord, +5v, rx til tx og tx til rx (data). Kortet kostet hele 26,54 Kr på ebay! XBee er altså en formfaktor som kan brukes til mange forskjellige trådløse teknologier, men denne adapteren gjør at du kan enten bruke dupont-kabler eller usb-kabel ut mot mikrokontrollerens kretskort.
Bilde hentet fra ebay

XRF XBee

Jeg bestilte to stykker XRF Xbee, hvor av en skal monteres inn i XBee USB Adapteren og deretter skal jeg bruke dupont kabler ned til Rasberry Pi 2. Den andre skal monteres rett i socketen på Arduino Romeo V2. Det blir rene "Plug and pray".

Bilde hentet fra dfrobot.com
Nå skal det sies at en alternativ løsning enn å kjøpe to XRF XBee i mitt tilfelle, ville være å kjøpe en "Slice of radio" som er laget for å monteres rett på IO socketen til Rasberry Pi. Men det jeg ikke likte med "Slice of Radio"; er at den dekker over alle IO-pins. Det vil jo si man må enten la vær å bruke resten, eller man må stacke mye i høyden. Ved å derimot bruke den adapteren ovenfor fra ebay, vil jeg kunne bruke dupont kabler ned på IO-pins som er aktuelle å bruke (RX mot TX og TX mot RX).

Med XRF XBee har man mulighet for lang rekkevidde og lavt forbruk, det er også mulig å sette den i sovemodus når radiomodulen ikke er aktiv. I teorien kan man også koble dupontkabler rett på XRF XBee og man trenger ikke drivere hvis man gjør det på denne måten. Det fins jo alternative løsninger som bruker usb-adaptre som vil kreve drivere i Linux.

Analog Ambient Light Sensor

Det er rett å slett en lyssensor, bestilte to på gøy fra dfrobot.com.
Det er ingen begrensninger for hva man kan bruke denne til, så fremt man bare vil bruke den til noe som har med lysnivå å gjøre :-) Eksempel kan være å slå av taklyset når det er lyst nok ute, eller slå på lyset når det er mørkt ute.. Begge deler er selvsagt også mulig!

Bilde hentet fra dfrobot.com

DHT11 Temperatur og fuktsensor

Sensoren måler fukt og temperatur, men er da naturligvis påvirkelig av kretskortenes varmeutvikling, så vel som lysinntrengning. Nøyaktighetsgraden er +-1C, DHT22 har +-0.5C som nok kanskje egentlig er et bedre valg.. Etterpåklokskap er også klokskap, vil jeg påstå! Nok et produkt fra dfrobot.com

Bilde hentet fra dfrobot.com

Kabler

Det er ikke et must, da man får kabler med adapterne og enhetene fra dfrobot, men det skader ikke å ha noe slitk liggende. I alle fall ikke når det er hele 11,56kr på ebay! Dette heter altså "dopont male to female". Det kan også hete noe som "dupont wire jumper cable".
Bilde hentet fra ebay



Takk til

På lik linje med de som vinner en oscarnominasjon, føler jeg at jeg må takke litt for min egen handleliste. Jeg har ikke bare gått random amok med bankkortet mitt, jeg har faktisk fått litt hjelp til å filtrere ut hva som kan være greie produkter (med unntak av et par av sensorene og kablene, der gikk jeg kanskje amok på egenhånd).

Men uansett er det en digresjon. Nils Jacob Berland har hjulet meg med tips og råd, jeg snublet for en tid tilbake over friskby bergen ( https://www.facebook.com/friskbybergen?fref=ts ), som har et spennende prosjekt med å få frisk luft inn i ryggmargen til skoler. Prosjektet vil jeg si er en innovasjonsprosess både ved at man får elever til å jobbe med utvikligen av - og utplassere sensorer. Dette er et spennende prosjekt som fattet min interesse og jeg tok kontakt med de på facebook for en tid tilbake.

Det er helt sikkert mulig for flere å slenge seg på, om man jobber med visualisering, modellering av data, kommunikasjon, maskinvare, osv. For meg er dette spennende, særlig at alt blir åpen kildekode og at man kan selv utvikle sine egne punkter.