Faste grupper

I en meget livlig klasse jeg underviser, er der som i alle klasser, nogle som er ret dygtige, og nogle som er på vej til at blive det. Usikkerheden, som sidste gruppe har, kan give anledning til, at de ikke magter at udstille sig selv fagligt og risikere at opleve nederlag igen.

Det har bl.a. ført til at jeg sjældent lader elever fremlægge for hele klassen. En anden grund er, at jeg synes for mange tilhørere spilder tiden, under sådan et oplæg.

Den sidste måned har vi til gengæld arbejdet i faste grupper a 3-4 elever, som jeg har defineret på baggrund af elevernes ønsker. Eleverne skulle gerne havne i gruppe med nogen, som de ikke normalt hyggesnakker med, hvilket skulle dæmpe ikke-faglig småsnak. Og de skulle gerne komme i gruppe med nogen, som de er rimelig trykke ved. Målet er, at de i små trygge fora skal turde udtrykke sig fagligt gennem formidling og meningsforhandling, med mindre anledning til småsnak.

De fleste grupper har fungeret efter hensigten, efter min vurdering. Der er mindre uro, lidt mere arbejde. Enkelte grupper har ikke fungeret, fordi de ikke har fungeret socialt (store faglige forskelle har ført til sociale spændinger) eller de har hygget sig lidt for meget.

Udgivet i Biologi, Kemi | Skriv en kommentar

En selvlærende robot

Jeg har leget med forskellige små robotter af skrot (Brushrobot, Beambots, Insect robots, Walkers m.m.). Bl.a. denne lille Walker af en Arduino Nano, et 9V batteri og to servo-motorer:
wp_20161021_005
Kredsløb og kode ses nederst.

Den er ret svært at få til at gå, da det er næsten umuligt at forudsige hvilke vinkler servoerne skal dreje til.

Som regel står den stille (forkerte eller for små udsving i benene) eller den vælter (for store bensving). Det tager nogle minutter, at prøve hvert sæt indstillinger, så det bliver jeg hurtigt træt af.

Jeg har derfor lavet en lille ret enkel kode, så den selv kan lære at gå. Det kaldes vist Robot Learning: Robotten har den tid og tålmodighed, som jeg ikke har.

For at kunne lære, skal den have et mål, som bruges som belønning/straf. Da jeg gerne vil have den til at gå fremad, skal den belønnes, når det sker. Her har jeg givet den en lyskilde, som den kan gå imod. Og en lyssensor (LDR) måler, hvor meget robotten kommer nærmere lyskilden.

Robotten får et sæt tilfælde parametre, som bruges til at tage tre “skridt”, hvorefter den vurderer, om den er kommet nærmere lyset. Derefter nye tilfælde parametre, tre skridt og ny vurdering. Det gentages 10 gange. Hver gang vurderer den desuden, om den har lavet en ny rekord i at komme nærmere lyset, så bedste resultat gemmes.
[youtube https://www.youtube.com/watch?v=XA3b8N9juCs?rel=0;controls=1]
Rødt lys = der er strøm på.
Rødt blink = et nyt sæt tilfældige parametre er valgt.
Grønt blink = Rekorden er slået. Bedste resultat gemmes.
Grønt lys (blivende) = “Fri fra skole”. Bedste resultat af de 10 forsøg bruges til at gå(!) videre.

Der er desuden nogle præmisser, som jeg har valgt: Rækkefølgen og max antal grader servoerne skal bevæge sig. Den vej på robotten som jeg forventer er fremad. Dem kunne den også blive sat til at optimere. Eller den kunne få servomotorerne sat sammen på en anden måde.

Eksemplet her er tumpe-måden at lære på. Også kaldet Brute Force metoden. Skal der læres mere komplicerede ting, løber vi hurtigt tør for regnekraft. Så kan kunstig intelligens måske hjælpe med at forudsige parametrene, og pludselig er vi alle uden job. Mon ikke SIRI-kommissionen skal kigge på min skabning?

Kredsløb:
robot-walker-m-lyssensor_bb
Ups. Mangler grøn LED fra pin 2 til GND.

Kode:
Koden er delvist skrevet i mBlock, hvorfor nogle biblioteker og linjer måske er overflødige.

#include "Arduino.h"
#include "Wire.h"
#include "SoftwareSerial.h"
#include "Servo.h"

double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
Servo servo_10;
Servo servo_9;
double lys=0; //måles på pin A5.
int vinkel1;
int vinkel2;
int vinkel3;
int vinkel4;
int delta = 15;
int score;
int bestScore = 0;
int bestVinkel1;
int bestVinkel2;
int bestVinkel3;
int bestVinkel4;

void setup(){
  Serial.begin(9600);
  pinMode(2,OUTPUT); //LED grøn
   pinMode(13,OUTPUT); //LED rød
  servo_10.attach(10);
  servo_9.attach(9);

  //nulstille benene:
       servo_10.write(100); // den ene servo sidder lidt skævt
        delay(1000*0.5);
        servo_9.write(90);
        delay(1000*0.5);

  // nulstille bedste vinkel:
      bestVinkel1=0;
      bestVinkel2=0;
      bestVinkel3=0;
      bestVinkel4=0;
      
  for(int j=0;j<10;j++)
  {
    vinkel1 = (random(-delta,delta));
    vinkel2 = (random(-delta,delta));
    vinkel3 = (random(-delta,delta));
    vinkel4 = (random(-delta,delta));
    digitalWrite(13, HIGH);
    delay(1000);
    digitalWrite(13, LOW);
    lys = analogRead(A5);
    Serial.print("før: ");
    Serial.println(lys);
    for(int i=0;i<3;i++)
    {
        servo_10.write(100+vinkel1);
        delay(1000*0.5);
        servo_9.write(90+vinkel2);
        delay(1000*0.5);
        servo_10.write(100+vinkel3);
        delay(1000*0.5);
        servo_9.write(90+vinkel4);
        delay(1000*0.5);
    } // slut på lille for 

    score = lys - analogRead(A5); //bliver mere negativ jo nærmere den kommer på lyskilden.
    Serial.print("efter: ");
    Serial.println(score);
    
    if (score < bestScore) { // bliver der sat ny rekord?
      digitalWrite(2, HIGH);
      delay(500);
      digitalWrite(2, LOW);
      bestScore = score;
      bestVinkel1=vinkel1;
      bestVinkel2=vinkel2;
      bestVinkel3=vinkel3;
      bestVinkel4=vinkel4;
    }
    //nulstille benene:
       servo_10.write(100);
        delay(1000*0.5);
        servo_9.write(90);
        delay(1000*0.5);
        servo_10.write(100);
        delay(1000*0.5);
        servo_9.write(90);
        delay(1000*0.5);    
  } //slut på store for
}

void loop()
{
          digitalWrite(2, HIGH);
        servo_10.write(100+bestVinkel1);
        delay(1000*0.5);
        servo_9.write(90+bestVinkel2);
        delay(1000*0.5);
        servo_10.write(100+bestVinkel3);
        delay(1000*0.5);
        servo_9.write(90+bestVinkel4);
        delay(1000*0.5);

        
  
}

Udgivet i Arduino | Skriv en kommentar

Arduino vs. Raspberry Pi vs. Micro:Bit

Tre billige microcomputere eller -controllere, som ofte bruges i undervisning om robotter, programmering, dataopsamling, IoT o.l., er Arduino, Raspberry Pi og Micro:bit. Sidste er produceret af BBC i samarbejde med bl.a. Microsoft og udleveret til alle engelske skolebørn medio 2016. Flere andre firmaer er også ude med lignende enheder bl.a. Intel og Texas Instruments, omend de ikke er så populære.

Hvilken af de tre enheder skal vi satse på i undervisning? Det korte svar er: alle tre, det kommer an på forudsætninger, rammen og indholdet i øvrigt, da hver enhed har sine fordele og ulemper mht. teknik og tilgængelighed.

Men hvilken enhed skal vi som regel bruge i ungdomsuddannelserne? Her er min vurdering.

Raspberry Pi (Zero):
Pi Zero
Raspberry Pi er en microcomputer (eget styresystem og hukommelse), og kan derfor næsten ikke sammenlignes med de andre dimser, som er microcontrollere (uden styresystem, skal styres fra en computer).

Den kræver en skærm og et keyboard. Den har hukommelse og processerkraft, så den kan utrolig meget fx arbejde med video eller fungere som en server. Det er trods alt projekter, som vi sjældent laver i almindelig undervisning. Desuden har den kun digitale ind-/udgange, så måling fra nogle sensorer er lidt mere besværligt.

Da den kom frem i 2012, var det håbet, at lærere og skoleelever ville tage Pi’en til sig for at lære om computere. Det er vist kun sket i ret begrænset omfang. Barren ligger for højt for begge grupper.

Arduino:

Arduino Uno - R3.jpg
By SparkFun Electronics from Boulder, USA – Arduino Uno – R3, CC BY 2.0, Link

Arduino er en microcontroller, som er meget alsidig. Den har mange både digitale og analoge ind-/udgange (pins), så den kan kommunikere med mange komponenter, herunder sensorer. Det er ikke nødvendigt at lodde, men ledninger skal afisoleres i enden. Den kræver min. 6V (gerne mere) for at fungere, så et USB-kabel eller et 9V batteri er som regel nødvendigt, hvilket giver mulighed for 40 mA output.

Der er et stort community omkring Arduino både blandt undervisere, makere og forskere, og anvendelserne strækker sig bl.a. fra robotter og droner over IoT og 3D-printere til satellitter.

Micro:bit:
microbit-gif-870-pix
Micro:bit er den nye dreng i klassen. Den har 20 ind-/udgange, hvoraf de 3 nemt kan tilgås med krokodillenæb. Resten skal tilgås via et skjold. Desuden har den indbygget nogle af de mest anvendte sensorer: temperatur, gyro, accelerometer, lys, kompas og to trykknapper. Bluetooth indbygget. Og der er et 5×5 LED display, som kan vise tal, tekst og simpel grafik. What’s not to like?

De indbyggede komponenter gør, at det er let at komme i gang, men øger blackbox-effekten. Micro:bit har kun behov for 3-4 V fx. fra et knapcellebatteri. Det lave strøminput betyder også, at den ikke kan levere særlig stor strøm (3,3 V og 20 mA siger rygtet). Det er måske årsagen til (?), at den ikke bliver brugt sammen med visse eksterne komponenter fx motorer, displays, sensorer, SD-kortlæsere, som ofte kræver større spænding/strømstyrke.

wp_20161019_001

Fx. virker dette setup (ovenfor) netop, når enheden er tilsluttet computer via USB-kabel, men ikke når den kører på batteri. Der er dog en række skjolde, som gør det muligt at bruge de nævnte komponenter alligevel. Nogle skjolde forhandles af Podconsult.dk.

Programmering er rimelig nem (ligesom Arduino), men når programmet er downloaded til dimsen, bliver kommunikationen afbrudt, og giver ikke umiddelbart mulighed for at opsamle mange data. Det er en skam. Der er en “record” funktion, som kan lagre data, og disse kan hentes ud, som vist i dette eksempel og dette, men det er ikke helt nemt og kræver p.t. tredjeparts software. Måske kan de trådløse muligheder eller et “Data Collection” skjold hjælpe.

De indbyggede komponenter gør Micro:bit nem at gå til, og med div. skjolde begynder den at ligne en Arduino.

https://ssl.gstatic.com/trends_nrtr/760_RC04/embed_loader.js trends.embed.renderExploreWidget(“TIMESERIES”, {“comparisonItem”:[{“keyword”:”arduino”,”geo”:””,”time”:”all”},{“keyword”:”Raspberry pi”,”geo”:””,”time”:”all”},{“keyword”:”micro:bit”,”geo”:””,”time”:”all”}],”category”:0,”property”:””}, {“exploreQuery”:”date=all&q=arduino,Raspberry%20pi,micro:bit”,”guestPath”:”https://www.google.dk:443/trends/embed/”});
Micro:Bit er indtil videre mest et britisk projekt, som lige er begyndt. Der er derfor et meget begrænset community, som også indikeres af Google Trends data ovenfor. Og den del af videndeling, som BBC står for, er p.t. forbeholdt britiske undervisere. Partnerne bag projektet har stillet i udsigt, at både soft- og hardware bliver open source, så der kan udvikles og fremstilles internationalt, som det kendes fra Arduino. Dér er vi ikke helt endnu, men mon ikke de snart åbner op?

Konklusion:
Valg enhed afhænger bl.a. af om fokus er på leg, programmering, dannelse eller maker-kompetence (er der noget der hedder sådan?), og en afvejning af tid, økonomi og elevforudsætninger mhp. at opnå en succesoplevelse.

Raspberry Pi er til projekter, hvor der kræves en hel computer, mest for universitet eller faget informatik imo.

Micro:bit ser ud til, at være et rigtig godt sted for folkeskoleelever at begynde med microcontrollere. Den er designet til undervisning, ser venlig ud og er let at komme i gang med, selv om elevforudsætningerne måske er små. Den er ny og savner derfor noget udvikling mht. community og hacks.

På ungdomsuddannelserne vil vi noget mere og med mindre blackbox, og her er Arduino ofte det rette valg. Den giver flere muligheder for anvendelser og tilpasninger, herunder dataopsamling. Men den dag kan hurtigt komme, hvor vi vender os mod Micro:bit, når den er lidt mere udviklet. Den er både lettilgængelig, men har også endnu uforløste muligheder for avancerede projekter.

Hvorfor sætter det danske skolesystem eller magthavere ikke gang i et projekt lignende det britiske Micro:bit? Ifølge Danmark Statistik er der p.t. 66670 8-årige børn i Danmark. Hertil ca. 3000 lærere. En Arduino-klon koster ca. 20-25,- i Kina, men er forhåbentlig (lidt) billigere at producere. Hvis man antager en pris på 30,- pr. styk, hvilket er højt sat, giver det en udgift på ca. 2 millioner kr. Til fem årgange er det ca. 10 millioner kr. Det er småpenge, i forhold til det boost, som det kan give vores digitale kompetencer, selv om en del enheder nok vil samle støv i skufferne rundt omkring.

Udgivet i Arduino | 2 kommentarer

80 meter over jorden

Den faststof raket, jeg har modificeret vejer 41 g uden motor. En motor (A6-4) vejer 16 g. Elektronikken, som skal måle tryk og skrive til et SD-kort vejer 32 g. Dvs. elektronikken udgør næsten en fordobling af vægten, så det er måske ikke så underligt, at den har svært ved at flyve.

Jeg har prøvet med en kraftigere motor (B4-4):
[youtube https://www.youtube.com/watch?v=D95JISfxuI8]

Det gav pæne resultater mht. tryk, og en beregnet flyvehøjde på ca. 80 meter over jorden:
hoejde-mod-tid
Temperaturen svinger noget. Måske har sollys noget at sige?, det er trods alt ret små ændringer der ses. Et generelt fald i temperautur med lavere tryk kan dog ses (kun målinger fra flyveturen):
temperatur-mod-tryk
Efter sigende skulle temperaturen falde med små 1 grad Celcius pr. 100 meter, så det passer nogenlunde.

Ved lejlighed må jeg kalibrere højdemåleren.

Udgivet i Arduino | Skriv en kommentar

Internet of Things #3

Dette er ikke en noob-guide. Hvis du ikke er bekendt med Arduino, vil jeg foreslå du begynder et andet sted. Fx her.

Mål
Projektets mål var, at lægge data ud på en offentlig og lettilgængelig webside. Hvorfor netop disse eller andre data skal på nettet, og hvordan jeg involverer eleverne, må komme senere.

Tjenesten Thingspeak, er designet til at lægge målinger på nettet og opdatere dem live fx i forbindelse med internet of things.

Jeg har brugt:
* Wemos D1, som er en Arduino-klon (mikro-computer) med WIFI-antenne, som giver forbindelse til nettet, og som koster ca. 20 kr. Wemos D1 er måske ikke den bedste platform (NodeMCU er måske bedre), men et godt sted for mig at begynde, da den er forholdvis enkel.
* 3 ledninger
* DHT11 sensor, som kan måle temperatur og luftfugtighed.
* Et breadboard (fumlebræt, ikke strengt nødvendigt)
Alle dele købt hos AliExpress.com

Samles i kredsløb:
dht11
Wemos D1 – DHT11
5V – VCC
GND – GND
digital pin 1 – pin 2 fra venstre, når sensoren holdes med forsiden mod dig.

Kodning og opsætning:
Wemos D1 skal programmeres via en computer fra Arduino IDE, som kan downloades.
Programmet skal have et plugin for at genkende Wemos D1. Her kan du bl.a. se hvordan man henter og installerer det. Jeg mener at der samtidig installeres et ESP8266WiFi.h bibliotek. Hvis ikke, skal det også hentes og installeres.

Boarded, som du vælger i Arduino IDE, skal være “Wemos D1 R2 & mini”. Upload speed: 115200.
Koden ses nedenfor. Husk at skrive navnet på dit netværk (case-sensitive) og kodeordet til netværket.

For at DHT11 sensoren skal virke, skal du formentligt hente og installere et “DHT.h” bibliotek til Arduino IDE. Se evt. her hvordan.

På thingspeak oprettes en profil (gratis) og derefter en kanal. Kanalen har en kode (Writing API), som også skal ind i koden nedenfor.

Kopier koden nedenfor ind i Arduino IDE og upload den til Wemos D1. Afbryd evt. forbindelsen til computeren derefter. Tilslut en anden strømkilde fx en 9V adapter, computeren er ikke længere nødvendig for Wemos D1.
wp_20161006_001

I thingspeak.com oprettes to felter, da thingspeak jvf. koden nedenfor, modtager to data (temperatur og luftfugtighed). Hvordan thingspeak lige oversætter den streng den får tilsendt til disse to felter, ved jeg ikke. Det er en af konsekvenserne ved at bruge en “smart” tjeneste. En anden er, at det er sk… nemt.

Derefter kan leges med hvordan data skal afbildes. Afbildningerne kan integreres i hjemmesider fx et sharepoint website, som en iframe.
data
(statisk billede her, da jeg skal bruge min Wemos til et andet projekt)

Hvad nu?
Senere prøve andre sensorer. CO2- eller støjmåler i klassen. En klimastation til vores vandrende pinde. Finde ud af hvordan eleverne kommer med. Måske bliver jeg teknisk set begrænset af at Wemos D1 kun har en analog port (A0).

Thingspeak er en MEGET enkel måde at komme i gang med IoT. Tjenesten virker ikke til at være så god til, at fjernstyre ting fx motorer i kredsløbet, men mægtig fint til at afbilde data live.

 

#include <DHT.h>
#include <ESP8266WiFi.h>
 
// replace with your channel’s thingspeak API key and your SSID and password
String apiKey = "KODE FRA THINGSPEAK HJEMMESIDEN";
const char* ssid = "NAVNET PÅ DIT NETVÆRK";
const char* password = "KODEN TIL DIT NETVÆRK";
const char* server = "api.thingspeak.com";
 
#define DHTPIN 1
#define DHTTYPE DHT11 
 
DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;
 
void setup() 
{
Serial.begin(9600);
Serial.println("begyndelse");
delay(10);
dht.begin();
Serial.println("dth begin");
 delay(2000);
WiFi.begin(ssid, password);
Serial.println("WIFI begin");
delay(1000); 
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
 
WiFi.begin(ssid, password);
 
while (WiFi.status() != WL_CONNECTED) 
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
 
}
 
void loop() 
{
// float h = 50;
// float t = 20; 
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) 
{
Serial.println("Failed to read from DHT sensor!");
//return;
}

 Serial.print(h);
 Serial.println(t);
  
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +="&field1=";
postStr += String(t);
postStr +="&field2=";
postStr += String(h);
postStr += "rnrn";
 
client.print("POST /update HTTP/1.1n");
client.print("Host: api.thingspeak.comn");
client.print("Connection: closen");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"n");
client.print("Content-Type: application/x-www-form-urlencodedn");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("nn");
client.print(postStr);
 
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees Celsius Humidity: ");
Serial.print(h);
Serial.println("Sending data to Thingspeak");
}
client.stop();
 
Serial.println("Waiting 20 secs");
// thingspeak needs at least a 15 sec delay between updates
// 20 seconds to be safe
delay(20000);
}
Udgivet i Arduino | Skriv en kommentar

Hvornår brister Tech-boblen?

Jeg er vældig begejstret for teknologi, særligt digital teknologi, som har en fysisk dimension fx robotter. Mest fordi det er sjovt at udforske -Dora the explorer bor indeni mig. Og derfor er jeg nok ikke den rette til at analysere tech-området, but anyways..

Tech-boom
Verden set gennem mine øjne, bliver mere og mere fyldt med digital teknologi. Nogle få eksempler er støvsugerrobotter, smartphones, landbrugsdroner, insulinpumper, 3D-printere, sociale medier.
Algoritmer eller mere advanceret kunstig intelligens dukker op i mange felter: sundhedsvæsnet, finansverden, læremidler, biler, billed- og talegenkendelse, FB. Jeg kunne blive ved.
Så tech boomer. Vores behov for underholdning, velfærd og forbrug driver udviklingen. Derunder ligger en tro på teknologien, som man også så i 1960’erne. Og givet at de fleste fænomener udbredes i cyckler -må der komme en modreaktion. Måske kommer vi alle til at leve som bonderøven om føje år.

Hvordan skal vi behandle tech i stx?
Man kan med rette fremføre, at htx er mest en teknisk uddannelse og stx er mest en boglig uddannelse. Fx i et stxfag som bioteknologi er hovedmålet ikke, at blive god til at arbejde i laboratoriet. Hovedmålet er at analysere data og litteratur. Eleverne uddannes (i en perfekt verden) med henblik på forsker- og lægejobs, hvor laboranter og studerende laver forsøg og betjener teknologien, mens forskeren sidder i Elfenbenstårnet og analyserer og lægger strategi.

Min påstand er dog, at tech nu fylder så meget i Verden, at vi ikke kan ignorere det i stx. Vi kan ikke nøjes med at analysere og vurdere på konsekvenser eller prøve at komme med innovative ideer til nye anvendelser. Vi er nødt til, at få fingrene ned i teknologien. Lodde. Kode. Forbinde. Ud over det alment dannende indeholder tech mange kreative udfordringer, og en kobling mellem det abstrakte og konkrete, mellem teori og praksis, som vi også ser bl.a. i naturvidenskab.

Dotcom-boblen
Før vi kaster os ud i alt for meget tech-humlumhej i stx, og uddanner en hel generation til ingeniører, må vi kort overveje om tech-boomet er en bobbel? Uddanner vi til arbejdsløshed, fordi trenden skifter? Vi uddanner til jobs, som endnu ikke findes, men kommer de til at ligge indenfor tech?
Vi så dotcom boblen i 90’erne. Alle skulle lave hjemmesider og webtjenester. Kurserne steg til boblen bristede. Det var måske på baggrund af en overoptimistisk tro på teknologien (og markedet), a la den vi ser i dag?

Hvornår brister tech-boblen?
Tech ikke er en bobbel, med mindre vi kommer til at opleve uforudsete begivenheder, som ændrer alt fx en stor økonomi- eller energikrise. Tech vil nok opleve mindre tilbagegange og setbacks, men alle prognoser peger på generel vækst, med faldende priser og mere AI. Tech-branchen i dag er mere divers end dotcom var, og prøver i højere grad at løse reelle problemer. Makerbevægelsen er måske en af vores tids modbevægelser, men den bruger også tech. Så kod du bare videre i stx.

Dermed ikke sagt, at alt generelt er godt. Hvis AI skal træffe flere beslutninger for os, hvem har så ansvaret? Bliver vi udkonkurreret af robotter og anden tech, hvad skal vi så leve af? Og hvad skal vi lave? Bliver underviserne fritstillet til fordel for video og adaptive kursusforløb? Heldigvis først når AI bliver så dygtig, at den også kan stå for den sociale relation til eleverne -læring er også en emotionel proces.

Udgivet i Digital Dannelse | Skriv en kommentar

Højdemåler til faststof-raket

En letvægts-højdemåler baseret på trykmåleren BMP180. Tryk og temperatur måles og skrives på et SD-kort. Vægt og størrelse spiller en stor rolle. Diameteren på raketten er ca. 3 cm.

Af hensyn til vægten har jeg valgt en Arduino Nano. Og tre serieforbundne 3V knapcelle-batterier som strømforsyning. To er for lidt. Da der ikke er bevægelige dele, giver de tre netop nok spænding til at holde liv i systemet.

hojdemaaler
SD kortlæseren (Catalex) – Arduino:
VCC – 5V
GND – GND (ground)
MISO – Pin 12
MOSI – Pin 11
SCK – Pin 13
CS – Pin 10

BMP180 – Arduino
SDA – A4
SCL – A5
VCC – 3,3V
GND – GND

Desuden har jeg indsat en rød LED (og en 1 kOhm modstand) til fejlfinding og klarmelding. Her kunne jeg have brugt den indbyggede LED i Arduino-boarded, men den pin (D13) er optaget af SD-kortlæseren i dette setup. Den kunne formentligt frigøres.

Se koden nederst.

Nogle udfordringer har været:
* Højden over jorden har svinget med ca. 1 meters usikkerhed. Jeg har lagt et lille filter i koden (gennemsnit af 10 målinger) til at måle starttrykket, da det er afgørende for alle følgende bestemmelser af højden over jorden. Det filter giver ingen forbedring.
* Tænd/sluk kontakten SKAL sidde i enden af kredsløbet. Ligeledes skal SD-kortlæseren være der. Så det er muligt at betjene dem uden at tage al indmaden ud af raketten.

hojdemaaler2
* Lave en raketdel, som kan åbnes fx ved at den er tapet sammen. Jeg har brugt et lamineret A4, som materiale til payload kammeret (elev-ide).
* Kunne være fint med noget “padding” rundt om elektronikken. Det har der ikke været plads til.

Test#1:
Affyring med A6-4-motor (den mindste klasse jeg kan købe). Raketten fløj lodret til ca. 4 meters højde, vendte om og fløj mod jorden, som den borede sig 3 cm ned i. Derefter blev faldskærmen udløst. Glad for jeg ikke stod lige under.

wp_20160930_001

Selv om jeg har beskyttet lodningerne med lim fra limpistol, tror jeg ikke alle overlevede mødet med jorden. Kredsløbet så efterfølgende sådan ud:

unavngivet

SD-kortet, som var røget ud og lå for sig selv, indeholdt bl.a. følgende data:
Tid (s): 2 Tryk (Pa): 100619 Temp (gr,C): 19,84 Højde (m): -0,41
Tid (s): 3 Tryk (Pa): 100618 Temp (gr,C): 19,82 Højde (m): -0,32
Tid (s): 3 Tryk (Pa): 100621 Temp (gr,C): 19,82 Højde (m): -0,58
Tid (s): 3 Tryk (Pa): 100625 Temp (gr,C): 19,84 Højde (m): -0,92
Tid (s): 3 Tryk (Pa): 100618 Temp (gr,C): 19,82 Højde (m): -0,32
Tid (s): 4 Tryk (Pa): 100630 Temp (gr,C): 19,84 Højde (m): -1,35
Tid (s): 4 Tryk (Pa): 100628 Temp (gr,C): 19,84 Højde (m): -1,17
Tid (s): 4 Tryk (Pa): 100618 Temp (gr,C): 19,82 Højde (m): -0,32
…

Alle beregnede højder:
hoejdekurve

Hvad nu?
Alt i alt er der noget, der virker. Men raketten fløj mere end 2 meter op. Måske påvirker accelerationen den trykmåling der sker?
Brug en kraftigere motor, så den kommer højere op.
Kan jeg bruge noget sammen med elever? Selv fremstille motoren?

Kode (tilpasser codebender):

double pressure; //Variabel til tryk i Pascal (Pa)
double startpressure; //Variabel til tryk i Pascal (Pa)
double tempC;  //Variabel til temperatur i grader Celcius
//double starttempC;  //Variabel til temperatur i grader Celcius
double hojde; // variabel til højden i meter over havet
double tempK; //Variabel til temperaturen i Kelvin

const double gaskonstant = 8.31; // gaskonstanten i N*m/mol*K
const double tyngdeacceleration = 9.807; //tyngdeaccelerationen i m/s^2
const double molarmasse = 0.02896; //Molarmassen af luft i kg/mol
 
#include  <SD.h>// åbner biblioteker for at tale med SD-kortlæser og BMP180 chippen (I2C)
#include  <SPI.h>
#include "Wire.h"     
#include "Adafruit_BMP085.h" 
Adafruit_BMP085 mySensor;  // laver et objekt kaldet mySensor

int chipSelect = 4; // Pin til SD kortlæser?? Skal det være 10?
File mySensorData; // laver et fil-objekt, som kan gemme data

void setup(){
Serial.begin(9600); //åbner forbindelse til serial monitor
mySensor.begin();   // starter tryk-sensoren mySensor
//tempC = mySensor.readTemperature(); //  Måler STARTtemperaturen i grader C fra BMP180
for (int i=1; i <= 10; i++){
      pressure += mySensor.readPressure(); // Måler STARTtrykket i Pa 
//	Serial.println(i);
//		Serial.println(pressure);
      delay(100);
   } 
startpressure= pressure/10;
//Serial.println(startpressure);
//tempK = tempC + 273; // temperaturen i Kelvin

pinMode(3, OUTPUT); // Pin reserveres til LED.
pinMode(10, OUTPUT); // Pin 10 reserveres til SD kortlæseren.
SD.begin(10); // starter SD kortlæseren
  if (SD.exists("Hojde.txt")) // hvis filen "Hojde.txt" allerede findes på SD-kortet..
  {
  SD.remove("Hojde.txt"); // ..slet filen.
  for (int i=1; i <= 5; i++){
  digitalWrite(3, HIGH);   // sets the LED on
  delay(50);                  // waits for a second
  digitalWrite(3, LOW);    // sets the LED off
  delay(50);
  }
}
delay(1000);
}

void loop() {
tempC = mySensor.readTemperature(); //  Måler temperaturen i grader C fra BMP180
tempK = tempC + 273;
pressure=mySensor.readPressure(); // Måler trykket i Pa
hojde = -(tempK*gaskonstant/(molarmasse*tyngdeacceleration)) * log(pressure/startpressure);

mySensorData = SD.open("Hojde.txt", FILE_WRITE);  // åbn filen på SD-kortet
if (mySensorData) {
Serial.print("Tryk: ");
Serial.print(pressure);
Serial.println(" Pa");
Serial.print(" Højde: ");
Serial.print(hojde);
Serial.println(" meter");
//delay(250);   

//dataString = String("Tryk (Pa):") + String(pressure) + String(" ; ") + String("Temperatur (gr.C):") + String(tempC) + String(" ; ") + String("Højde (m):") + String(hojde);
mySensorData.print("Tid (s): ");  //skriv data til SD-kortet
mySensorData.print(millis()/1000);  //skriv data til SD-kortet
mySensorData.print(" ; Tryk (Pa): ");  //skriv data til SD-kortet
mySensorData.print(pressure);  //skriv data til SD-kortet
mySensorData.print(" ; Temp (gr.C): ");  //skriv data til SD-kortet
mySensorData.print(tempC);  //skriv data til SD-kortet
mySensorData.print(" ; Højde (m): ");  //skriv data til SD-kortet
mySensorData.println(hojde);  //skriv data til SD-kortet
mySensorData.close();           //luk filen på SD-kortet
digitalWrite(3, HIGH);   // sets the LED on
  delay(100);                  // waits for a second
  digitalWrite(3, LOW);    // sets the LED off
  delay(100);
}
}
Udgivet i Arduino | Skriv en kommentar

IoT #2

https://thingspeak.com/channels/165821/charts/1?bgcolor=%23ffffff&color=%23d62020&dynamic=true&results=60&type=line

https://thingspeak.com/channels/165821/charts/1?bgcolor=%23ffffff&color=%23d62020&dynamic=true&results=2000&timescale=20&type=line&xaxis=tid

Sensoren står i vindueskarmen. Live opdatering hvert 20. sekund. Hvis diagrammerne ovenfor er tomme, er det fordi jeg har pillet sensoren ned, for at bruge den til noget andet.
Fra www.thingspeak.com:
data

Udgivet i Uncategorized | Skriv en kommentar

Ting på internettet #1

Ikke forstået som produkter man finder og køber på internettet, men IoT = internet of things, ting med netforbindelse.

Det er noget alle Makere skal igennem. Målet er at måle noget fx CO2-indhold, og lægge dataene på et website i form af en live-graf. Senere kan det komme på tale at styre noget fx en servo eller en lampe via nettet.

Min mus har indkøbt både en NodeMCU og en Wemos D1, som begge er microcontrollere med en WIFI antenne. Jvf. denne tutorial https://www.youtube.com/watch?v=IQVKGAU8jcA, så ser Wemos D1 nemmest ud, og den ligner en Arduino UNO.

f7fibjyimte8xjb-medium
1. http://CodeBender.cc, som jeg normalt skriver kode i fordi det ligger i skyen, understøtter ikke Wemos boards.
2. Efter at installere board-drivere og biblioteker i Arduino IDE-miljøet, blev Wemos boarded plugget i, og finder fint de lokale WIFI-netværk, som er i nærheden. Kommer nemt på vores private netværk.
3. De næste tutorials bruger et website til at hente tekst fra en txt-til og sende en email via et php-script. Det ser nemt ud. https://www.youtube.com/watch?v=4Z0gBG8dkqw.
4. Mit website ligger på webhotellet unoEuro. Af en eller anden grund bliver Wemos D1 boarded nægtet adgang til sitet, selv om de rigtige filer ligger der. Jeg kan ikke helt gennemskue hvorfor, jeg bliver nægtet adgang. Kan selvfølgelig godt komme derind via ftp o.l.

Pause

Denne tutorial virker endnu nemmere, og går uden om at bruge website: http://www.instructables.com/id/THE-2016-SUPER-NOOB-FRIENDLY-WAY-Control-an-Arduin/?ALLSTEPS

5. Tjenesten BLYNK har en app til iOS og Android, som kan modtage og sende data til IoT-dimser bl.a. Wemos D1, selv om det IRL er et lidt ældre board. Jeg har hentet appen, oprettet en bruger og sat et program op (det er drag n drop).
Her skal den måle temperatur og luftfugtighed via en DHT11 sensor (5V) og vise dem i appen.

dht11
6. Blynk har fået at vide at den får data fra “Wemos D1”, selv om denne tutorialen ovenfor foreskriver noget andet.
7. Koden til Wemos D1 (ses nederst) er sammenskrevet og modificeret efter eksemplerne “ESP8266 standalone” (der er ingen eksempler målrettet Wemos D1) og “DHT”. I modsætning til eksemplet har jeg ikke brugt digital pin 2, men 1, da den er PWM, og det er sikkert nødvendigt for DHT11 sensoren.
8. Upload koden (Husk upload hastighed på 11520 bit/s). Boarded, som vælges i Arduino IDE er “Wemos D1 R2 or mini”. Tryk play i Blynk:

20160929_103711000_ios(Slideren er til at styre lysstyrken på en LED i pin D8-GND.)

Lidt flere indstillinger, når temperaturen skal vises:20160929_111904000_ios

Det er en ret nem måde at komme i gang med IoT!!

Vil man lave mange advancerede ting i Blynk koster det penge. Det er fair nok. Alligevel er jeg skeptisk. Blynk tager meget af kreativiteten ud af projektet. Det er selvfølgelig sjovt, at se sine data på skærmen blive live-opdateret, men det er ikke mig der har gjort det meste af arbejdet, det har Blynk.

Men hvorfor ikke glæde sig? Jeg kan ikke lave og kode alting selv. Jeg accepterer gladeligt masser af løsninger -tager dem endda for givet. Men her føler jeg, at en løsning, som jeg ville betragte som min egen, var inden for rækkevidde. Men jeg fik den ikke, for far (Blynk), kom og løste det for mig. Tis i bukserne. Ud over det, er dataene ikke rigtigt ude på nettet endnu, da de kun kan ses i appen, som skal downloades.

Jeg faldt over tjenesten https://thingspeak.com/, som vist er skabt til at vise data på nettet. Det må jeg prøve.

/**************************************************************
 * Blynk is a platform with iOS and Android apps to control
 * Arduino, Raspberry Pi and the likes over the Internet.
 * You can easily build graphic interfaces for all your
 * projects by simply dragging and dropping widgets.
 *
 *   Downloads, docs, tutorials: http://www.blynk.cc
 *   Blynk community:            http://community.blynk.cc
 *   Social networks:            http://www.fb.com/blynkapp
 *                               http://twitter.com/blynk_app
 *
 * Blynk library is licensed under MIT license
 * This example code is in public domain.
 *
 **************************************************************
 * This example runs directly on ESP8266 chip.
 *
 * You need to install this for ESP8266 development:
 *   https://github.com/esp8266/Arduino
 *
 * Please be sure to select the right ESP8266 module
 * in the Tools -> Board menu!
 *
 * Change WiFi ssid, pass, and Blynk auth token to run :)
 *
 **************************************************************/

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include ESP8266WiFi.h
#include BlynkSimpleEsp8266.h
//#include SimpleTimer.h
#include DHT.h

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "kode du får fra Blynk";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "camilla-PC-Wireless";
char pass[] = "din kode";

#define DHTPIN 1          // What digital pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11     // DHT 11
//#define DHTTYPE DHT22   // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21   // DHT 21, AM2301

DHT dht(DHTPIN, DHTTYPE);
//SimpleTimer timer;

void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
delay(500);
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    //return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  //Serial.print(h);
  //Serial.println(t);
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
}


void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);

  dht.begin();
delay(2000);
  // Setup a function to be called every second
  //timer.setInterval(1000L, sendSensor);
  sendSensor();
}

void loop()
{
  Blynk.run();
   sendSensor();
}
Udgivet i Arduino, Maker og DIY | Skriv en kommentar

Robotbiler med hjul

Frivillige elever i grupper a 2-3 har over de sidste uger bygget robotbiler med to hjul.

wp_20160908_001

Det er gået ret godt, men 4 moduler a 90 minutter er der alligevel gået. Det er ret lang tid. De fleste har nået at lodde, kode en smule, 3D printe et 3. hjul og skrue og bore og forbinde.

wp_20160908_003

De har også nået at lave mange fejl og begynde om. Fx er det klassisk at skrue motorer og hjul på karosseriet, før ledningerne er loddet på motorerne.

Jeg synes det er svært at lave en god vejledning, som ikke er for omfattende, men som giver den afgørende hjælp. De har brugt tegningerne over kredsløbene mest.

Sidste fase blev (selvfølgelig) desværre lidt forjaget. Da de endelig skulle kode selve bilen. Og afstandsmåleren drillede lidt -den er bl.a. meget følsom for løse forbindelser, og viser derfor ofte nul, hvilket man bør tage højde for i sin kode. Og det fik vi ikke tid til at implementere.

På den måde blev det ikke helt den succes-oplevelse, som det kunne have været.

Udgivet i Uncategorized | Skriv en kommentar