DIY micro:bit buggy

DIY har mange grader. Jeg har endnu ikke udvundet mit eget kobber, men bygget en buggy baseret på micro:bit, inspireret af de mange Arduino-baserede tohjulede buggy’s, som findes. Fx denne:

Basic robot.jpgBy SimonwilmotEget arbejde, CC BY-SA 3.0, Link

Hverken Arduino eller micro:bit giver strøm nok til de gule DC motorer, som mange af robotbilerne bruger. Derfor skal bruges et board eller skjold. Fx et motorboard eller L298N. Her er brugt L298N.

Simpelt kredsløb:

Det kræver et connector (breakout-)board at lave kredsløbet.

Bemærk at både Boardets “0V” og batteriboksens sorte ledning, skal forbindes til GND på L298N. De fleste forbindelser kan skabes med hun-hun kabler:

Alle dele monteres fx som:

De pins som styrer om motorerne drejer, og hvilken vej, ses her. De styres af digitale signaler, som kan have værdien 0 eller 1 (tændt eller slukket).

Motorerne kører på max eller ingen omdrejninger. Husk at der skal være jumpers på pin EnA og EnB på L298N -det er de sorte “hatte” i de gule cirkler nedenfor.

Koden (JavaScript) for en motor-test, som kører fremad, bagud, drej til den ene side, drej til den anden side, stop:
pins.digitalWritePin(DigitalPin.P13, 0)
pins.digitalWritePin(DigitalPin.P14, 1)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 1)
basic.pause(2000)
pins.digitalWritePin(DigitalPin.P13, 1)
pins.digitalWritePin(DigitalPin.P14, 0)
pins.digitalWritePin(DigitalPin.P15, 1)
pins.digitalWritePin(DigitalPin.P16, 0)
basic.pause(2000)
pins.digitalWritePin(DigitalPin.P13, 1)
pins.digitalWritePin(DigitalPin.P14, 0)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 1)
basic.pause(2000)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.digitalWritePin(DigitalPin.P14, 1)
pins.digitalWritePin(DigitalPin.P15, 1)
pins.digitalWritePin(DigitalPin.P16, 0)
basic.pause(2000)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.digitalWritePin(DigitalPin.P14, 0)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 0)

Supplér evt. med passende pile/billeder i 5×5 displayet.

Styre hastighed:
Ovenfor et simpelt kredsløb, idet pin EnA og EnB på L298N ikke anvendes (se ovenfor). Når disse to pins bruges og forbindes med særlige pins på micro:bitten, kan de styre omdrejningstallet, gennem et analogt signal (værdi mellem 0 og 1023).

Hvis hastigheden skal styres kan kredsløbet fx se sådan ud. Husk at fjerne jumper-hattene på pin EnA og EnB (ses ikke på tegningen):

Og forbindelserne skal stilles til:

* = værdi mellem 0 og 1023.

L298N har en pin, som tilsyneladende leverer 5V. Flere steder advarer mod at bruge den som strømforsyning til micro:bit, selv om det er fristende.

Kode, som får buggy til at accellerere til max og derefter stop. Vigtigt at give analoge pins besked, før de digitale:
basic.showIcon(IconNames.Snake)
for (let index = 0; index <= 1023; index++) {
index += 10
pins.analogWritePin(AnalogPin.P0, index)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.digitalWritePin(DigitalPin.P14, 1)
pins.analogWritePin(AnalogPin.P1, index)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 1)
basic.pause(100)
}
pins.digitalWritePin(DigitalPin.P13, 0)
pins.digitalWritePin(DigitalPin.P14, 0)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 0)

Test:

Hvis de to motorer ikke kører samme vej, byttes om på to ledninger. Hvis de ikke kører lige hurtigt (som i videoen), kan kompasset evt. bruges til at korrigerer. Buggy’en kan udbygges med afstandsmåler eller Bluetooth-styring eller begge dele.

Mere inspiration kan hentes her.

Udgivet i Maker, Micro:bit | Skriv en kommentar

Micro:bit buggy-mod

Micro:bit kan bl.a. kombineres med et kit, til en line-follow buggy. Af en eller anden grund synes jeg ikke den er så sjovt, måske fordi der ikke findes linjer på de virkelige veje.

Her et mod, der bruger motor-boarded fra kittet med en ultra-sonic afstandsmåler, som kun kræver 3V.

Sådan kører den:

Plotter-funktionen er en fin og enkelt måde at illustrere data. Dog er jeg bekymret for om koden er for indviklet til børn. Måske kan den “Sonic Package”, som Owen Brotherwood har vist, en mere spiselig løsning.

Næste skridt: Afstandsmåleren er som sædvanligt lidt usikker. Jeg kunne lægge flere filtre ind i koden fx tage snit af 10 måler eller bedre medianen af fem målinger.

Kunne være sjovt at styre buggyen med mobilen eller en anden bit.

Hvorfor skulle H-bridge boarded L298N ikke virke med bit? Må prøves.

Koden fra pxt IDE’et:
let item = 0
basic.forever(() => {
pins.digitalWritePin(DigitalPin.P8, 0)
pins.digitalWritePin(DigitalPin.P12, 1)
pins.digitalWritePin(DigitalPin.P0, 0)
pins.digitalWritePin(DigitalPin.P16, 1)
basic.pause(100)
pins.digitalWritePin(DigitalPin.P1, 1)
basic.pause(1)
pins.digitalWritePin(DigitalPin.P1, 0)
item = pins.pulseIn(DigitalPin.P2, PulseValue.High)
led.plotBarGraph(
item,
5000
)
if (item < 400 && item > 10) {
pins.digitalWritePin(DigitalPin.P8, 1)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P0, 0)
pins.digitalWritePin(DigitalPin.P16, 1)
basic.pause(1000)
}
})
item = 0

Udgivet i Maker, Micro:bit | Skriv en kommentar

Byg en drone

I år har vi bygget droner. Selv om lovgivningen har gjort det ganske svært, at flyve dem udendørs, er der stadig nogle muligheder.

Vi er en lille håndfuld elever og tre kolleger.

Da vi intet vidste om droner, har vi været på SDU til deres “drone bygge kursus”. Det kan anbefales. Derefter har vi bestilt tre samlesæt, hvor ALT er inkluderet. Controller, batteri, oplader m.v. fx dette:

Pris p.t. ca. 200 USD + told (20%) og afgift = 160,-. kilde: AliExpress
Søg fx på “drone diy kit” på Amazon, Ebay eller Aliexpress.
Det er nok en god ide at bestille lidt ekstra af de vigtigste dele: motorer, propeller, ESC’er, da de er lette at smadre.

Eneste ekstra del vi har savnet er en kontakt, så man let kan slå batteriet til og fra:

Det kræver noget tålmodighed og et par forsøg, at samle og kalibrere alle delene:

Men det kan også være temmelig hyggeligt:

Her er en nogenlunde fornuftig rækkefølge:
1. Samle kroppen. Montere og forbinde motorer, modtager og GPS.
https://youtu.be/zU3Wf2iX7OU
2. Hvor skal hver motor sidde og hvilken propel skal der på?
http://ardupilot.org/copter/docs/connect-escs-and-motors.html
3. Binde controller og modtager
https://www.youtube.com/watch?v=3nTh7FBiSlw
4. Hente og installere Mission Planner (latest). http://firmware.eu.ardupilot.org/Tools/MissionPlanner/
5. Start Mission Planner
a. Connect (Windows: COM-port + 2560. Mac: USB(?). Baudrate: 115200), Initial setup, evt. Install firmware (hvis første gang ArduPilot tages i brug)
b. Wizard. Gå gennem de ca. 16 trin.
6. Kalibrere motorer og ESC’ere: http://ardupilot.org/copter/docs/esc-calibration.html

I stedet for det stel, som er i kittet, skal vi prøve at bruge to pinde og nogle skruer til at designe vores eget stel.

Vi vil 3D-printe et stativ, som skal bære sensorer under dronen. Vægt er et issue, så en Arduino Nano+SD-kortlæser skal nok stå for dataopsamlingen.

Første flyvetur stillede vi dronen uden for et vindue, og os selv inden for vinduet, og gav den lidt gas. Motorer, propeller, skruer og andet kan falde af. Desuden kan motorerne ikke være rigtigt kalibreret, hvilket kan bevirke, at dronen flyver ukontrollabelt.

Vores næste flyvetur, skal være i hallen. Vi stiller os ind i et omvendt håndboldmål, og har resten af hallen til flyveplads.

Udgivet i Arduino, Maker | Skriv en kommentar

Elektronisk LEGO

Micro:bit er en god introduktion til computer og elektronik for de 9-15 årige. Da mange af de yngste også leger med Lego, er det oplagt, at kombinere Lego med Micro:bit.

Og noget af det sjoveste imo ved computer science, er at styre motorer. Fx en servo-motor, som her skal bruges til en katapult. Det er Micro:bit ikke ideel til, bl.a. fordi en motor ofte kræver mere strøm end micro:bit kan levere. Men det kan lade sig gøre fx via et motor-breakout board.

Her vil jeg dog i stedet give motoren strøm fra et eksternt 9V batteri, så boarded er ikke nødvendigt. Og når batteriet alligevel er fremme, kan det lige så godt give strøm til Micro:bit, selv om denne max tåler 5V. Jeg giver den 3,3V.

For at komme fra 9V til 3,3V bruger jeg en volt-regulator (efter råd af Martin Lilliendal), som giver en fast spænding, men også et vametab: LM1117T-3.3. Men strøm kan også leveres til bitten via USB eller 2xAAA batterier og til servoen via 9V batteri -gør kredsløbet noget enklere.

Jeg har forbundet via pin connectors/jumper wires:
        
Men forbindelser kan næsten lige så vel skabes med krokodillenæb eller bedre ved lodning.

Kredsløb:

Det er afgørende, at Micro:bit ikke får 9V! Så mål evt. spændingen med et multimeter på den sorte og røde ledning, som går til Micro:bit.

Den ene knap (A) skal lade katapulten til en vagfri vinkel (jo længere tid der trykkes, desto længere går armen ned), og den anden knap (B) skal affyre.

Det er ikke den aller nemmeste kode, og ej heller kredsløb, så projektet er ikke velegnet til de mindste. Men ændres koden, så servoen blot drejer til to fastsatte vinkler, er det noget nemmere.

Kode bygget i pxt miljøet: show leds, er ikke nødvendigt.

JavaScript:
let angle = 10
basic.forever(() => {
while (input.buttonIsPressed(Button.A)) {
pins.servoWritePin(AnalogPin.P0, angle)
basic.pause(10)
angle = angle + 1
}
while (input.buttonIsPressed(Button.B)) {
angle = 10
pins.servoWritePin(AnalogPin.P0, angle)
basic.pause(100)
}
})

Udgivet i Maker, Micro:bit | Skriv en kommentar

Luftkvalitet i klassen

Der findes helt utrolig mange forskellig sensorer til Arduino. Jeg har for tiden kastet min kjærlighed på en CO2-gas specifik sensor.

En CO2-sensor kan bruges til at undersøge mange ting. Bl.a.:
* Udåndingsluft (afslører om man forbrænder fedt eller kulhydrat)
* Fotosyntese
* Respiration i jord
* Drivhus-effekt
* Luftkvalitet i klassen

Vernier sælger en sensor, men til omkring 3000,- pr. styk, har vi kun råd til nogle få.

Efter at have kæmpet noget tid uden held med CO2-sensoren MG811, faldt jeg over sensoren MH-Z14, som koster omkring 20 US dollars (ca. 150,- kr.):

Som ses kan den give output på flere måder. Jeg har været nødt til at vælge den ringeste: Analogt output, fordi mit board (Wemos D1) af en eller anden grund ikke kan arbejde med PWM (Arduino Uno kan godt). Men det analoge output, som er et tal typisk mellem 0 og 1023, har fungeret nogenlunde.

Den pin med det analoge output forbindes simpelthen til A0 på Wemos D1 (eller Arduino). Denne vejledning har hjulpet mig meget.

Den virker ved IR-absorption (NDIR) ved en bølgelængde på 426 nm. Her er det stort set kun CO2, som absorberer, hvorfor vi undgår signal fra andre gasser bl.a. vand, N2 m.m. Det er smart.

efter CC BY-SA 3.0, Link

Kalibrering:
Jeg kender kun tre blandinger med kendt CO2-indhold eller signal:
1) en CO2-fri blanding, opnås fx vha. gas fra en flaske helium eller bedre N2.
2) frisk luft. CO2-indhold = 400 ppm
3) sensoren kan max registrere 5000 ppm. Her over vil det analoge signal være max.
Ifølge dokumentationen er der en linær sammenhæng ml. signal og CO2-indhold.

Frisk luft giver et signal på ca. 170, som svarer til 400 ppm.
Mætning med CO2 (fra udånding) giver signal på ca. 420, som burde svare til 5000 ppm.
Så følsomheden er ikke så stor. 1 enhed svarer til et skift på ca. 20 ppm.

Jeg har brugt en “map” funktion til at omregne det analoge signal til ppm. Men det kan eleverne lige så godt selv gøre.

De fleste IR-sensorer er følsomme for større lys-spredende partikler fx vanddråber. Fx har jeg oplevet nogle pudsige målinger, som jeg tilskriver dug. Temperatur kan også have en betydning, og bør holdes konstant.

Resultaterne sendes via wifi til Thingspeak.com serveren, så de kan tilgås fra alle enheder og når som helst. (se koden nederst)

Eksempler:
CO2 målt i et klasseværelse over et par dage:

CO2 målt i en lukket beholder med en plante på en solrig formiddag m.v.:

Det sidste fald i CO2-indhold ud på natten, kan jeg ikke helt forklare. Under opvarmningen midt på dagen, blev der dannet en del kondens, idet jorden ved planten var gennemvædet. Kondensen har måske påvirket sensoren i de kølige nattetimer? Normalt ville jeg forvente at kondens fik signalet til at stige.

Til prisen virker det som en super sensor. Enkelt, specifik og tilstrækkelig følsom. Jeg har bestilt fem styks 🙂

#include <ESP8266WiFi.h>

/*
Wemos D1 -- MH-Z14
5V -- VCC
GND -- GND
A0 -- Analog output
*/

// replace with your channel’s thingspeak API key and your SSID and password
String apiKey = ""; //kode fra thingspeak.com
const char* ssid = ""; //netværk navn
const char* password = ""; //netværk kode
const char* server = "api.thingspeak.com";
WiFiClient client;

//const int PWM=3;
long co2ppm;
long co2volt;


void setup()
{
  Serial.begin(115200);
//Serial.println (" CO2 PWM program is running ..");
  pinMode(D4, OUTPUT);
Serial.println("begyndelse");
delay(10);
Serial.println("WIFI begin");
delay(1000); 
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
delay(1000); 
while (WiFi.status() != WL_CONNECTED) 
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
 }

void loop()
{
/*
while (digitalRead(PWM) == LOW); {}
  long startTime = micros();
  while (digitalRead(PWM) == HIGH);
  {
  long duration = micros() - startTime;
  //from datasheet
  //CO2 ppm = 5000 * (Th - 2ms) / (Th + Tl - 4ms)
  //  given Tl + Th = 1004
  //        Tl = 1004 - Th
  //        = 5000 * (Th - 2ms) / (Th + 1004 - Th -4ms)
  //        = 5000 * (Th - 2ms) / 1000 = 2 * (Th - 2ms)
        co2ppm = 5 * ((duration/1000) - 2);
    }
  
//  Serial.print(co2ppm);
//    Serial.println(" ppm fra PWM");
  //  delay (30000);   //wait  30 sekunds      
*/
  
  co2volt=analogRead(A0);
Serial.println(co2volt);
// Serial.println(" volt fra A0"); 
  
  co2ppm=map(co2volt, 170, 423, 400, 5000);
// Serial.println(co2ppm);
 //Serial.println(" ppm fra analog");
 //Serial.println(); 
  digitalWrite(D4, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(D4, LOW);    // turn the LED off by making the voltage LOW
 // delay(300000); 
 
  if (client.connect(server,80)) {
String postStr = apiKey;
postStr +="&field1=";
postStr += String(co2ppm);
postStr +="&field2=";
postStr += String(co2volt);
postStr += "\r\n\r\n";
 
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
//Serial.println("sender til web");
 }
client.stop();
 
//Serial.println("Waiting 30 secs");
// thingspeak needs at least a 15 sec delay between updates
// 30 seconds to be safe
delay(30000);
}

Udgivet i Arduino, biologi, bioteknologi | Skriv en kommentar

MS Classroom førstehåndsindtryk

Jeg har grebet årsskriftet og starten af studieretninger, til at prøve Microsoft Classroom med et hold.

Med Classroom forsøger MS fornuftigt nok, at tage det bedste fra flere af de services, som de tilbyder.

Eksempler:

Problem: websteder i sharepoint er tunge at redigere, som kan ligne noget fra 90’erne.
Classroom: har sin egen skal, som ligner Google Classroom, og som ikke kan redigeres, men har de mest nødvendige genveje indbygget. Tilgengæld snupper Classroom fildeling fra webstedet, og lader resten ligge 🙂

Problem: Klassenotesbog skal oprettes af læreren, og det kan være en barriere.
Classroom: Klassenotesbogen oprettes automatisk.

Problem: Det er svært at håndtere opgaver i websteder.
Classroom: Kan bruge klassenotesbog, men Classroom har også sin egen opgave-funktion med afleveringsmapper, og som er tilknyttet kalenderen med deadlines. Svært at anvende, så længe vi skal bruge Lectio, hvis jeg ikke vil lave dobbeltarbejde.

Problem: Det er svært at få eleverne til at checke nyhedsstrøm eller diskussionsfora i sharepoint.
Classroom: Har medlemmerne i en gruppe, som får beskeder ind i outlook. Jeg er ikke sikker på det er en god løsning, da vi netop bruger sociale medier, for at begrænse antallet af mails, og få dialogen til at flyde hurtigere og mere uformelt. Derfor er det netop rart at have mails i en app og sociale medier i en anden. Men måske er det blot et spørgsmål om vane, at se outlook som socialt medie?

Oprettelsen går rimeligt, når man bruger et par tricks til at få elevernes email-adresser copy-pasted (spørg Peter Olsen), og tilføjer dem i outlook-groups.

Jeg synes, at der er mange gode takter i Classroom. Der hvor man endnu ikke har ramt sømmet, er i tilladelses-styringen (rettigheder). Jeg kan ikke se, hvordan jeg kan ændre tilladelserne i dokumentbiblioteket.

Der vil altid være nogle filer, som eleverne ikke skal have mulighed for at ændre. Og så vidt jeg kan se har de redigerings-rettigheder til det hele. Der er ingen STOP-deling knap, og de avancerede indstillinger fører til en labyrint af muligheder. Fx en gruppe, som hedder members, men som ikke indeholder medlemmer.

Så inden længe, må jeg nok bede eleverne om at vi migrerer “tilbage” til et almindeligt holdsite og klassenotesbog i sharepoint, hvis jeg eller MS ikke finder en adgang til rettighedsstyring i Classroom.

Det MS skulle lave (og som måske er på vej), er en nem og overskuelig måde at se og ændre rettigheder på alle niveauer fra fil, mappe, webdel til site. Så rykker det.

Udgivet i Klassenotesbog, office 365 | Skriv en kommentar

Hour of Code aktiviteter

Der er rigtig mange aktiviteter at vælge imellem på www.hourofcode.com.

En del aktiviteter er desværre svære at bruge i undervisningen på en time enten fordi:
* Man skal downloade og installere noget
* Man skal oprette en konto
* De virker kun på bestemte enheder eller styresystemet fx Android
* En del er også så overfladiske, at de ikke er værd at bruge tid på (hvilket ikke afsløres af alders-kategoriseringen)
* Nogle er så komplicerede, at de ikke kan fungere på en time en tirsdag sidst på eftermiddagen, hvor eleverne gerne skulle få en oplevelse af succes.

Jeg har leget lidt med nogle af aktiviteterne, her listet fra mest til mindst velegnet til en time hour of code imo:

1. Write your first computer program (Angry Birds): Lige nu tænker jeg at begynde med denne simple og korte aktivitet. Bruger blokke. Online uden login. Grundige instruktioner via video+tekst. Al tekst på dansk. Loops og hvis-så-ellers sætninger.

2. Minecraft Designer: Nok mest til MineCraft fans. Engelsk (mest). Instruktionen er lidt rodet, så man skal af og til klikke lidt rundt omkring for at finde ud af hvad de egentlig mener man skal gøre. Den er meget sjov, når den er færdig, for så får man hele sandkassen af muligheder for at lave sin egen Minecraft-verden, herunder programmere Creepere m.m. Dog! det er ikke ægte MineCraft (heller ikke Pocket edition), det er et andet UI i en mere begrænset 2D-verden (ca. 100×100 felter). Men den kan åbnes på telefonen i en browser og ser ud til at virke.

3. Code Combat (Kithgard Dungeon): Gamificerede øvelser -du tjener diamanter pr. løst opgave. Øvelserne er rimelig nemme, men den bliver hurtigt noget tekst-tung, hvor jeg er nødt til at læse en del tekst for at løse en meget simpel opgave. Jeg har løst de første 20 opgaver. Python.

4. MIT App inventor: Vil desværre helst bruge en Google-konto og en Android telefon (der er workarounds). Internet Explorer og Safari er vist ikke understøttet. Der er både drag and drop af det grafiske udtryk af appen, og der er noget blok-programmering til at styre egne knapper o.l. funktioner, så det hele ikke er blackbox.

5. Code with Anna and Elsa: På dansk. Blokke. Online. Man skal tegne cirkler og andre former. Loops, men ikke hvis-sætninger.

6. Simple Encryption: Spændende emne. Kryptering og at bryde samme. Jeg nåede ikke at forstå meget af hvad der foregår i aktiviteten. Høj barre for mig.

7. Build Pong with AI: Jeg vil gerne lege med AI (vil AI lege med mig?). Aktiviteten er en masse drag and drop, med meget lidt info om baggrunden eller øvelse i kodning.

8. Build YOUR mobile App (Bloxmop): En masse drag-n-drop uden nogen logik. Klik her og klik her. Det kræver at man opretter konto, for at få lov at hente den app man laver ned til sin mobil (skal være Android).

Udgivet i Digital Dannelse | Skriv en kommentar

Stilladsering af noter

Når elever går ud af stx/hf, skal de bl.a. have lært at komme gennem en forelæsning. Nogle elever kan det allerede første dag, nogle skal lære det. Forelæsning er ikke den bedste måde at lære på, og tiden kan ofte bruges bedre fx via flipped classroom eller produkt-orienteret arbejde. Men forelæsning er bl.a. en øvelse i at kunne koncentrere sig mere end 5 minutter og findes stadig på de højere læreanstalter.

Særligt i HF kan det være en udfordring, fordi eleverne er mere uddannelsesfremmede end på stx. Men eleverne i HF kan komme til at elske forelæsninger, på godt og ondt, under de rette omstændigheder.

Sekvensen skal ikke være for lang. 20 minutter er passende. Niveauet skal være tilpasset, måske gennem undersøgelse af forhåndsviden -hvis niveauet er bare lidt for højt, står de hurtigt af. Indholdet skal helst være relateret til en konkret opgave eller projekt.

Et kendt trick til at komme gennem en forelæsning, er at tage noter. Så eleverne SKAL TAGE NOTER og evt. aflevere dem. Ikke så meget for at lave et resume af indholdet, for det står alligevel ofte i andre kilder. Men for at være aktiv deltager i forelæsningen, og her er det vigtigt, at eleverne ikke forsøger at skrive alt ned, men sorterer i informationen. Prøv benspænd a la “du må kun skrive 10 ord ned”.

Jeg synes, at det er en god ide at stilladsere elevernes notetagning ved at udlevere “Noteark“, som er et dokument, hvor noterne er disponeret på forhånd i større eller mindre grad. Progressionen ligger selvfølgelig i, at noteark med tiden indeholder mindre og mindre forhåndstekst.

Nedenfor to eksempler fra hhv. første til senere noteark. I første noteark skal der næsten kun udfyldes enkelte ord. Senere er der kun overskrifter og evt. relevante billeder. Målet er et blankt dokument, som eleven selv kan betitle og disponere.

 Start Senere
 noteark1  noteark2

Notearkene kan udvides med “Mål med noterne”. Og der kan arbejdes videre med i hvilken grad målene er nået og med selve noterne gennem selvevaluering, peer-review, exit-tickets, quiz, klassediskussion m.m.

Det vil være oplagt at bruge Klassenotesbog til noterne. Desværre virker mit add-in ikke p.t., hvorfor jeg ikke kan distribuere siden og vurderer, at det vil tage uforholdsmæssig lang tid for eleverne at kopiere siden til deres egen sektion. Så vi bruger docx.

Jeg kan godt være lidt bekymret for, at eleverne er kommet til at holde af forelæsninger og efterlyser dem jævnligt. Undervejs er de ret stille. De noterer meget (for meget i nogle tilfælde). De sidder i deres egen verden, og får en fornemmelse af at mestre den snævre viden, som de får serveret. Jeg tænker: De bliver ikke udfordret nok. Måske skal eleverne have valget mellem sekvenser, baseret på deres forhåndsviden.

 

Udgivet i biologi, HF, kemi, Klassenotesbog | Skriv en kommentar

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.

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