Jeg holder foredrag om mindsets betydning for indlæring.
Jeg kommer med eksempler og løsninger fra egen praksis som folkeskolelærer.
Jeg har erfaring med scratch, og er startet på at lære Python
Derudover har jeg undervist børn i at bruge Micro:bit (DR kalder den Ultrabit)
Jeg bruger også Arduino UNO i min undervisning
Jeg underviser i matematik, fysik/kemi og biologi.
Jeg er også en af Gentofte kommunes tekambassadører og inddrager gerne teknologi i min undervisning.
Alle elever skal have kendsskab til fire kompetencer i teknologi inden de forlader folkeskolen.:
Digital myndiggørelse
Digital design og designproccessor
Computationel tankegang
Teknologisk handleevne
Desværre tøver vores regering med at komme med et udspil om det skal være et selvstændigt fag eller inkluderes i de enkelte fag. I min verdensopfattelse skal man begge dele
Her kommer der til at være en samling af undervisningsprogrammer og links til videoer og
Flipped Classroom
Her prøver jeg at hjælpe dig med at komme i gang med at 3D-printe. Det er slet ikke nær så svært om du tror.
Det der kan være svært, er at fejlfinde og her der hjælpe at finde på denne side :
https://all3dp.com/1/common-3d-printing-problems-troubleshooting-3d-printer-issues/t at
Resten er desværre erfaring, og der er kun en måde at få det på - hårdt arbejde, tårer og frustrationer, og fornemmelsen af at man ikke dur til det- Men det gør du. Vi har alle været der og ind imellem er vi der stadig.
Men det at stå med et produkt i fysisk tilstand, som startede med at være en tanke, er hele besværet værd
/*
Programming by : Johnny Buxbom
INFO: Mars projekt på Tjørnegårdsskolen i Gentofte 2023
Nødvendige dele :
- Arduino Board
- Jordsensor
- MQ135 CO2 sensor
- Relæ
- SD3231 RTC Modul
- SD kort Modul
- SD kort
- DHT 11
Benyttede Libraries:
- DHT
- Keyboard
- MQ135
- RTClib
- SD
- SPI
- Wire
Arduino UNO PINOUT
A1 Jordsensor
A2 Gassensor MQ135
A4 SCL Urmodul SD3231 RTC
A5 SDA Urmodul SD3231 RTC
4 CS SDCard Modul
6 Jordsensor
7 S DHT 11 3 Ben version
10 S RELÆ til vanding 3 Ben ersion
11 MOSI SDCard Modul
12 MISO SDCard Modul
13 SCK SDCard Modul
For at forhindre at Arduionen resettes når den forindes med computeren over USB, kan man sætte en 10 uF elektrolyt kondensator imellem
RESET og GND på Arduionoens power header på boardet. + skal tilsluttes Reset, og - tilsluttes GND (Ground)).
BEMÆRK, man kan ikke oploade ny kode, før kondensatoren er fjernet.
INPUT fra keyboard :
h eller f Fugtighed
r eller d Læser data fra SDkortet
c CO2
j Jordens fugtighed i procent
s Tid til at der skrives på kort
t Temperatur
v Vanding aktiveres i 10 sekunder
Filen som der skrives til og læses fra på SDkortet hedder DATA.txt
Revision
Dato : 11 Dec 2022 17:42 0.90 Første spæde forsøg på læsning og skrivning til SDkort og Kredsløbdesign. Flowchart
Dato : 17 Dec 2022 13.30 0.91 Læs og skriv til SDkort
Dato : 22 Dec 2022 21:36 0.92 Læs og skriv til SDkort, Data fra DHT11
Dato : 23 Dec 2022 00:56 0.93 Læs og skriv til SDkort, Data fra DHT11, Input fra Keyboard
Dato : 23 Dec 2022 16.20 0.94 Læs og skriv til SDkort, Data fra DHT11, Data fra Urmodul, Input fra Keyboard, Programmering af timer
Dato : 23 Dec 2022 18.43 0.95 Læs og skriv til SDkort, Data fra DHT11, Data fra Urmodul, Input fra Keyboard, Programmering af timer, relæ til vanding
Dato : 24 Dec 2022 10.53 0.96 Læs og skriv til SDkort, Data fra DHT11, Data fra Urmodul, Input fra Keyboard, Programmering af timer, relæ til vanding,CO2 og fugtføler
Dato : 25 Dec 2022 10.53 0.99 Mangler at tilslutte MQ135 og jordføler i elektronikopstillingen. SOFTWARE skulle være OK !
Nuværende version : v 0.99 BETA Version. Low memory warning. Men software afprøvet og fundet ok på Arduino UNO
Kontakt: Arbejde: John0760@gskoler.dk eller privat : Johnny1706@gmail.com
*/
#include <DHT.h> // DHT11.h Temperatur og humidity
#include <Keyboard.h> // Keyboard.h,så man kan indtaste kommandoer til Arduino
#include <MQ135.h> // MQ135.h Gassensor
#include <RTClib.h> // DS3231_RTC.h til urmodul
#include <SD.h> // SD.h Til SDkort
#include <SPI.h> // SPI.h til SDkort
#include <Wire.h> // wire.h Bruges af DS3231_RTC.h
#define DHTType DHT11 // Fortæller at det er en sensor af typen DHT11
#define DHTPin 7 // set DHT11 bruger den digitale pin to 7
#define ANALOGPIN A2 // Analog PIN 2 til MQ135 Gassensor
#define RZERO 206.85 // Kalibrering af gassensor RZERO (Kalibrations værdi)
DHT dht(DHTPin, DHTType); // Laver obje kt fra DHT to dht(DHTPin, DHTType)
RTC_DS3231 rtc; // laver et objekt rtc fra DS3231_RTC .
MQ135 gasSensor = MQ135(ANALOGPIN);
int val_analoqigue_soil ; // set_valanalogique
int map_low = 1024; // Sætter map_low til jord sensor
int map_high = 0; // Sætter map_high til jord sensor
int percentage; // Int pecentage til jord sensor
int SDTaeller = 0; // Løkke til at sætte intervallet for hvor ofte der skal skrives til SDkort
int SDInterval = 3600; // Her sættes intervallet imellem hver skrivning til SDkort i sekunder
int relayPin = 10; // Digital Pin 10
int vandTimer = 10000; // Sætter hvor lang tid der skal der vandes i millisekunder
char dag[32]; // Til læsning af dag fra uret
char tid[32]; // Til læsning af tid fra uret
const int capture_D = 6 ; // Sætter ben 6 til digital input fra jord sensor
const int capture_A = A1 ; // Sætter ben A1 til analog input fra jord sensor
File myFile; // Laver objektet myFile fra File
void setup() {
pinMode(relayPin, OUTPUT); // Sætter relayPin som OUTPUT
pinMode(capture_D, INPUT) ; // Sætter Capture_D som INPUT
pinMode(capture_A, INPUT) ; // Sætter Capture_A som INPUT
float rzero = gasSensor.getRZero();
Serial.begin(9600); // Starter Serial Monitor Kommunikation. Hastigheden sættes med vilje lavt til 9600 baud, det er 960 bytes/s
dht.begin(); // Initializerer DHT
while (!Serial) { // Venter på at Serial Monitor er klar
}
Wire.begin();
rtc.begin();
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Stiller tiden korrekt
//rtc.adjust(DateTime(2022, 12, 23, 00, 27, 0));
}
void loop() {
SDTaeller++ ; // Øger tæller med én efter hvert loop. Hvert loop varer ca et sekund. Interrupt ændrer tiden
val_analoqigue_soil = analogRead(capture_A); // read capture_a to val_analogique, står her så vi kan læse værdierne ved hjælp af t, h og f fra tastatur
percentage = map(capture_A, map_low, map_high, 100, 0); // konverter soil sensor max og min til 0 og 100 procent
// Loop der styrer vanding ved hjælp af jordsensor start
if (digitalRead(capture_D) == LOW) { // Read capture_D, hvis low, så gør følgende:
digitalWrite(relayPin, HIGH); // Set relayPin to HIGH der vandes
Serial.println("Vanding") ; // Print værdien vanding
delay(vandTimer); // Wait for delayTimer(x)
digitalWrite(relayPin, LOW); // Set relayPin to LOW , slukker relay, vanding stopper
}
else { // else, så er den LOW,så gør følgende :
digitalWrite(relayPin, LOW); // Set relayPin to LOW , lukker relay, vanding stopper (sikkerhed)
delay(vandTimer); // Wait for delayTimer(x)
}
// Loop der styrer vanding ved hjælp af jordsensor slut
// Loop der tjekker om der er input fra keyboard fra den tilsluttede computer og hvilket input det er start
if (Serial.available() > 0) {
char inChar = Serial.read(); // Læser om der er trykket på tastaturet
Serial.println(inChar); // Skriver hvilket bogstav der blev trykket på
if (inChar == 'h' || inChar == 'f') { // Manuel udlæsning af fugtigheden
Serial.print("Fugtigheden er ");
Serial.print(dht.readHumidity()); // Fugtigheden skrives i Seriel monitor
Serial.println(" %");
}
if (inChar == 't' ) { // Manuel udlæsning af temperaturen
Serial.print("Temperaturen er ");
Serial.print(dht.readTemperature()); // Temperaturen skrives i Seriel monitor
Serial.println(" C");
}
if (inChar == 'v' ) { // Manuel vanding
Serial.println("Vanding ");
digitalWrite(relayPin, HIGH); // Sætter relayPin til HIGH og åbner relæ
delay(vandTimer); // Vander i vandTimer(x)
digitalWrite(relayPin, LOW); // sætter relayPin to LOW og lukker relæ
delay(500);
}
if (inChar == 'c' ) { // Manuel udlæsning af CO2
float ppm = gasSensor.getPPM();
Serial.print("CO2 er ");
Serial.print(ppm / 10); // CO2 niveau skrives i Seriel monitor ppm
Serial.println(" ppm");
}
if (inChar == 'j' ) { // Manuel udlæsning af jordens fugtighed i procent
val_analoqigue_soil = analogRead(capture_A); // read capture_a to val_analogique
percentage = map(capture_A, map_low, map_high, 100, 0); // konverter soil sensor max og min til 0 og 100 procent
Serial.print("Jordens fugtighed er på ");
Serial.print(percentage); // Jordens fugtighed i procent skrives i Seriel monitor
Serial.println(" %");
}
if (inChar == 's' ) { // Hvor lang tid er der til at data gemmes på SDkort
Serial.print("Der er ");
Serial.print(SDInterval - SDTaeller); // Jordens fugtighed i procent skrives i Seriel monitor
Serial.println(" sekunder til data gemmes på SDkort");
}
if (inChar == 'd' || inChar == 'r') { // DATA læses fra SDkort og udskrives i Seriel Monitor
Serial.println("Initializing af SDkortet..."); // Initialiserer SDkort
if (!SD.begin(4)) { // Er der fejl ved initialization så
Serial.println("initialization fejlede!"); // skrives der en fejlmeddelse til serial monitor
Serial.println(""); // Skriv en tom linje til Serial Monitor
while (1);
}
Serial.println("initialization succesfuld."); // Skriv til Serial monitor at Intialiseringen af SDkort var succesfuld
Serial.println("");
myFile = SD.open("DATA.txt"); // open SD card file DATA.txt
// Serial.println("Åbner SD-Kort."); // print text to Serial Monitor
if (myFile) {
//Serial.println("Læser fra SD-kort"); // print text to Serial Monitor
//Serial.println("Data fra SD-kort: "); // print text to Serial Monitor
while (myFile.available()) { // if SD card available do
Serial.write(myFile.read()); // write data to SD card
}
// Serial.println("Lukker SD Card."); // print text to Serial Monitor
myFile.close(); // close SD connection
} else {
Serial.println("Der var fejl ved åbningen af test.txt"); // if error on opening SD card print text to Serial Monitor
}
}
}
// Loop der tjekker om der er input fra keyboard fra den tilsluttede computer og hvilket input det er slut
// automatisk skrivning til SDkort efter et interval defineret i SDInterval. Kalder funktionenen skrivTilSDKort Start
if (SDTaeller >= SDInterval ) { // Er SDTaller lig med SDInterval ? hvis ja, så kør løkke
skrivTilSDKort(); // Skriver DATA til SDkortet
}
delay(1000); // Loop delay, sat til et sekund. Må kun ændres, hvis du er klar over konsekvenserne !
} // Alle løkker bruger den som refenrence (SDTaeller, Laagtaeller, SDInterval m. fl )
// automatisk skrivning til SDkort efter et interval defineret i SDInterval. Kalder funktionenen skrivTilSDKort Slut
void skrivTilSDKort () {
SDTaeller = 0; // Nulstiller SDTaeller, så tælleren kan genstarte fra 0
Serial.println("Initializing af SDkortet..."); // Initialiserer SDkort
if (!SD.begin(4)) { // Er der fejl ved initialization så
Serial.println("initialization fejlede!"); // skrives der en fejlmeddelse til serial monitor
Serial.println(""); // Skriv en tom linje til Serial Monitor
while (1);
}
Serial.println("initialization succesfuld."); // Skriv til Serial monitor at Intialiseringen af SDkort var succesfuld
Serial.println(""); // Skriv en tom linje til Serial Monitor
Serial.println("Åbner SDkortet."); // Skriv til Serial Monitor at SDkortet åbnes
myFile = SD.open("DATA.txt", FILE_WRITE); // Forbindelse til SDkortet åbnes
if (myFile) { // Når filen er åben så gør følgende :
DateTime now = rtc.now();
sprintf(dag, "%02d/%02d/%02d", now.day(), now.month(), now.year()); // Læser dato fra urmodul
sprintf(tid, "%02d:%02d:%02d", now.hour(), now.minute(), now.second()); // læser tiden fra urmodul
delay(1000);
Serial.print(dag); // Skriver dato til SDkort
Serial.print(",");
Serial.println(tid);
Serial.println("Skriver data til filen: test.txt"); // Skriv til Serial Monitor, at vi skriver til filen DATA.txt
float ppm = gasSensor.getPPM();
val_analoqigue_soil = analogRead(capture_A); // read capture_a to val_analogique
percentage = map(capture_A, map_low, map_high, 100, 0); // konverter soil sensor max og min til 0 og 100 procent
myFile.print(dag); // Skriver dato til SDkort
myFile.print(",");
myFile.print(tid); // Skriver tiden til SDkort
myFile.print(",");
myFile.print(dht.readTemperature()); // Skriver temperatur fra DHT11 til SDkort
myFile.print(",");
myFile.print(dht.readHumidity()); // Skriver humidity fra DHT11 til SDkort
myFile.print(",");
myFile.print(ppm / 10); // write text to SD card file
myFile.print(",");
myFile.println(percentage); // write text to SD card file
myFile.close(); // Luk filen og forbindelsen til SDkort
Serial.println("Lukker SD-Kortet."); // Skriv til Serial Monitor at SDkort lukkes
Serial.println("Færdig."); // Skriv til Serial Monitor at det er gjort
} else {
Serial.println("Det var ikke muligt, at åbne filen DATA.txt"); // Skriv fejlmeddelse til Serial Monitor, hvis filen ikke findes eller ikke kan åbnes
}
}
3D printning består af 3 faser :
Når man skal designe skal man bruge et program, hvori der kan tegnes i 3 dimensioner. Jeg anbefaler, at man til børn bruger programmet
Tinkercad. Det er gratis, men man skal oprette en bruger. Du kan finde en komme godt i gang, ved at gå ind på denne side :
https://www.tinkercad.com/learn. Lidt nede på siden er der et punkt der hedder Start learning 3D, hvor øvelserne ligger
Til voksne eller mere erfarende brugere er Fusion360 et fantastisk program. Det er ligeledes er gratis for hjemmebrugere og i skrivende stund også for virksomheder, der tjener under et vis beløb årligt, p.t. 100.000$
Hvis man har en Tinkercad- konto, er det den samme konto, der benyttes til at logge ind, da det er firmaet AUTODESK, der ejer begge. De har flere supergode programmer til fri download ( Så send dem en venlig tanke )
Når man har designet sine ting, skal man eksportere dem som .STL-fil.
Slicer er lidt et kapitel for sig selv. Flere fabrikanter af 3D printere har deres egen slicer.
Hvis du har en Prusa printer, så vil jeg anbefale, at du bruger deres slicer som kan hentes her : https://www.prusa3d.com/prusaslicer/
Ellers vil jeg anbefale Cura slicer : https://ultimaker.com/software/ultimaker-cura
Valg af slicer er lidt som religion, og det er ikke en krig jeg deltager i. Hvis du får anbefalet en anden slicer, så vælg den.
Jeg kender blot de to ovenstående og har været glade for at bruge dem
Advarsel
Du skal ALDRIG downloade en gcode-fil, med mindre du kender afsenderen og du ved at den med sikkerhed er lavet præcis til den model som din printer er. De kan ødelægge din maskine. NU er du ivertfald advaret!