Commit adca6666 authored by pkst's avatar pkst
Browse files

Makerspace Ioannina project code

parents
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
String command; //String to store app command state.
const char* ssid = "Arduina";
ESP8266WebServer server(80);
void setup() {
pinMode(14, OUTPUT);// Enable/speed motors Right GPIO14(D5) speed 1024
pinMode(12, OUTPUT); // Enable/speed motors Left GPIO12(D6)
pinMode(15, OUTPUT);// L298N in1 motors Right GPIO15(D8)
pinMode(13, OUTPUT);// L298N in2 motors Right GPIO13(D7)
pinMode(2, OUTPUT);// L298N in3 motors Left GPIO2(D4)
pinMode(0, OUTPUT); // L298N in4 motors Left GPIO0(D3)
Serial.begin(115200);
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
// Starting WEB-server
server.on ( "/", HTTP_handleRoot );
server.onNotFound ( HTTP_handleRoot );
server.begin();
}
void loop() {
server.handleClient();
command = server.arg("State");
if (command == "F") {
digitalWrite(13, LOW);
digitalWrite(15, HIGH);
analogWrite(14, 520);
digitalWrite(0, LOW);
digitalWrite(2, HIGH);
analogWrite(12, 520);
}
else if (command == "I") {
digitalWrite(13, LOW);
digitalWrite(15, HIGH);
analogWrite(14, 610);
digitalWrite(0, LOW);
digitalWrite(2, HIGH);
analogWrite(12, 610);
}
else if (command == "B") {
digitalWrite(15, LOW);
digitalWrite(13, HIGH);
analogWrite(14, 520);
digitalWrite(2, LOW);
digitalWrite(0, HIGH);
analogWrite(12, 520);
}
else if (command == "J") {
digitalWrite(15, LOW);
digitalWrite(13, HIGH);
analogWrite(14, 610);
digitalWrite(2, LOW);
digitalWrite(0, HIGH);
analogWrite(12, 610);
}
else if (command == "L") {
digitalWrite(13, LOW);
digitalWrite(15, HIGH);
analogWrite(14, 520);
digitalWrite(2, LOW);
digitalWrite(0, HIGH);
analogWrite(12, 520);
}
else if (command == "G") {
digitalWrite(13, LOW);
digitalWrite(15, HIGH);
analogWrite(14, 610);
digitalWrite(2, LOW);
digitalWrite(0, HIGH);
analogWrite(12, 610);
}
else if (command == "R") {
digitalWrite(15, LOW);
digitalWrite(13, HIGH);
analogWrite(14, 520);
digitalWrite(0, LOW);
digitalWrite(2, HIGH);
analogWrite(12, 520);
}
else if (command == "H") {
digitalWrite(15, LOW);
digitalWrite(13, HIGH);
analogWrite(14, 610);
digitalWrite(0, LOW);
digitalWrite(2, HIGH);
analogWrite(12,610);
}
else if (command == "S") {
analogWrite(14,0);
analogWrite(12,0);
}
}
void HTTP_handleRoot(void) {
if( server.hasArg("State") ){
Serial.println(server.arg("State"));
}
server.send ( 200, "text/html", "" );
delay(1);
}
#include <LiquidCrystal.h>
#include <Servo.h>
Servo myservo;
int x=0;
int met=0;
int k=90;
int f1=0;
int f2=0;
int p=1;
unsigned long T = 0;
unsigned long LN = 0;
unsigned long TT = 0;
unsigned long LL = 0;
byte hurt1[8] = {
0b00000,
0b01110,
0b10001,
0b10001,
0b10000,
0b10000,
0b01000,
0b01000,};
byte hurt2[8] = {
0b00000,
0b01110,
0b10001,
0b10001,
0b00001,
0b00001,
0b00010,
0b00010,};
byte hurt3[8] = {
0b00100,
0b00010,
0b00010,
0b00001,
0b00000,
0b00000,
0b00000,
0b00000,};
byte hurt4[8] = {
0b00100,
0b01000,
0b01000,
0b10000,
0b00000,
0b00000,
0b00000,
0b00000,};
byte pi[8] = {
0b11111,
0b10001,
0b10001,
0b10001,
0b10001,
0b10001,
0b10001,
0b00000,};
byte L[8] = {
0b00100,
0b01010,
0b01010,
0b10001,
0b10001,
0b10001,
0b10001,
0b00000,};
byte S[8] = {
0b11111,
0b01000,
0b00100,
0b00010,
0b00100,
0b01000,
0b11111,
0b00000,};
byte thita[8] = {
0b11111,
0b10001,
0b10001,
0b11111,
0b10001,
0b10001,
0b11111,
0b00000,};
LiquidCrystal lcdA(10,13,7,6,5,4);
LiquidCrystal lcdB(12,11,7,6,5,4);
void setup()
{
myservo.attach(9);
myservo.write(90);
pinMode(0, OUTPUT);
pinMode (1, INPUT);
pinMode(2, OUTPUT);
pinMode(3, INPUT);
lcdA.begin(16,2);
lcdB.begin(16,2);
lcdA.createChar(4,hurt1);
lcdA.createChar(5,hurt2);
lcdA.createChar(6,hurt3);
lcdA.createChar(7,hurt4);
lcdA.createChar(3,pi);
lcdA.createChar(2,L);
lcdA.createChar(1,S);
lcdA.createChar(0,thita);
lcdB.createChar(4,hurt1);
lcdB.createChar(5,hurt2);
lcdB.createChar(6,hurt3);
lcdB.createChar(7,hurt4);
lcdB.createChar(3,pi);
lcdB.createChar(2,L);
lcdB.createChar(1,S);
lcdB.createChar(0,thita);
}
void loop()
{
f1=0;
f2=0;
if (p==1)
{
digitalWrite(0, HIGH);
delayMicroseconds(50);
digitalWrite(0, LOW);
T = pulseIn(1, HIGH);
LN = (T*340)/2;
LN=LN/10000;
if(LN < 40 && k<170 && LN>1)
{
k=k+5;
f1=5;
myservo.write(k);
met=0;
delay(40);
}
}
if (f1==0)
{
digitalWrite(2, HIGH);
delayMicroseconds(50);
digitalWrite(2, LOW);
TT = pulseIn(3, HIGH);
LL = (TT*340)/2;
LL=LL/10000;
if(LL < 40 && k>10 && LL>1)
{
k=k-5;
f2=5;
p=2;
myservo.write(k);
met=0;
delay(40);
}
else
{p=1;}
}
if (f1==0 && f2==0)
{ met=met+1;
if (met==5){
k=90;
myservo.write(k);
delay(80);
met=0;
}
if (x<94){x=x+1;} else {x=1;}
if (x==1 || x==3 || x==5 || x==7){
lcdA.clear();
lcdB.clear();
lcdA.setCursor(1,0);
lcdA.print("88888888888888");
lcdA.setCursor(1,1);
lcdA.print("88888888888888");
delay(900);
}
else if (x==2 || x==4 || x==6 || x==8){
lcdA.clear();
lcdB.clear();
lcdB.setCursor(1,0);
lcdB.print("88888888888888");
lcdB.setCursor(1,1);
lcdB.print("88888888888888");
delay(900);
}
else if (x==9){
lcdA.clear();
lcdB.clear();
lcdA.setCursor(5,0);
lcdA.print("E");
lcdA.write(byte(3));
lcdA.print("A");
lcdA.write(byte(2));
lcdA.setCursor(1,1);
lcdA.print("E");
lcdA.write(byte(2));
lcdA.print("E");
lcdA.print("Y");
lcdA.write(byte(0));
lcdA.print("E");
lcdA.print("P");
lcdA.print("O");
lcdA.print("Y");
lcdA.write(byte(3));
lcdA.print("O");
lcdA.write(byte(2));
lcdA.print("H");
lcdA.write(byte(1));
lcdB.setCursor(5,0);
lcdB.print("E");
lcdB.write(byte(3));
lcdB.print("A");
lcdB.write(byte(2));
lcdB.setCursor(1,1);
lcdB.print("E");
lcdB.write(byte(2));
lcdB.print("E");
lcdB.print("Y");
lcdB.write(byte(0));
lcdB.print("E");
lcdB.print("P");
lcdB.print("O");
lcdB.print("Y");
lcdB.write(byte(3));
lcdB.print("O");
lcdB.write(byte(2));
lcdB.print("H");
lcdB.write(byte(1));
delay(1000);
}
else if ((x==10) || (x==11) || (x==12)|| (x==13)){
delay(1000);
}
else if ((x==14) || (x==28) || (x==42)|| (x==56)){
lcdA.clear();
lcdA.setCursor(2,0);
lcdA.print("HELLO");
lcdB.clear();
lcdB.setCursor(9,0);
lcdB.print("HELLO");
delay(500);
}
else if ((x>14 && x<21) || (x>28 && x<35) || (x>42 && x<49)|| (x>56 && x<63)){
lcdA.scrollDisplayRight();
lcdB.scrollDisplayLeft();
delay(500);
}
else if ((x==21 ) || (x==35) || (x==49)|| (x==63)){
lcdA.clear();
lcdA.setCursor(8,1);
lcdA.print("HELLO");
lcdB.clear();
lcdB.setCursor(3,1);
lcdB.print("HELLO");
delay(500);
}
else if ((x>21 && x<28) || (x>35 && x<42) || (x>49 && x<56)|| (x>64 && x<70)){
lcdA.scrollDisplayLeft();
lcdB.scrollDisplayRight();
delay(500);
}
else if (x==70){
lcdA.clear();
lcdA.setCursor(4,0);
lcdA.print("My name is");
lcdA.setCursor(6,1);
lcdA.print("Arduina");
lcdB.clear();
lcdB.setCursor(4,0);
lcdB.print("My name is");
lcdB.setCursor(6,1);
lcdB.print("Arduina");
delay(1000);
}
else if (x>70 && x<77){
delay(1000);
}
else if (x==77 || x==81 || x==85 ){
lcdA.clear();
lcdA.setCursor(7,0);
lcdA.print("* *");
lcdA.setCursor(7,1);
lcdA.print(" -");
lcdB.clear();
lcdB.setCursor(7,0);
lcdB.print("* *");
lcdB.setCursor(7,1);
lcdB.print(" -");
delay(500);
}
else if (x==78 || x==82 || x==86 ){
lcdA.setCursor(7,1);
lcdA.print(" o");
lcdB.setCursor(7,1);
lcdB.print(" o");
delay(500);
}
else if (x==79 || x==83 || x==87 ){
lcdA.setCursor(7,1);
lcdA.print(" v");
lcdB.setCursor(7,1);
lcdB.print(" v");
delay(500);
}
else if (x==80 || x==84 || x==88){
lcdA.setCursor(7,1);
lcdA.print(" ^");
lcdB.setCursor(7,1);
lcdB.print(" ^");
delay(500);
}
else if (x==89 || x==91 || x==93){
lcdA.clear();
lcdA.setCursor(2,0);
lcdA.write(byte(4));
lcdA.write(byte(5));
lcdA.setCursor(7,0);
lcdA.write(byte(4));
lcdA.write(byte(5));
lcdA.setCursor(12,0);
lcdA.write(byte(4));
lcdA.write(byte(5));
lcdB.clear();
lcdB.setCursor(2,0);
lcdB.write(byte(4));
lcdB.write(byte(5));
lcdB.setCursor(7,0);
lcdB.write(byte(4));
lcdB.write(byte(5));
lcdB.setCursor(12,0);
lcdB.write(byte(4));
lcdB.write(byte(5));
lcdA.setCursor(2,1);
lcdA.write(byte(6));
lcdA.write(byte(7));
lcdA.setCursor(7,1);
lcdA.write(byte(6));
lcdA.write(byte(7));
lcdA.setCursor(12,1);
lcdA.write(byte(6));
lcdA.write(byte(7));
lcdB.setCursor(2,1);
lcdB.write(byte(6));
lcdB.write(byte(7));
lcdB.setCursor(7,1);
lcdB.write(byte(6));
lcdB.write(byte(7));
lcdB.setCursor(12,1);
lcdB.write(byte(6));
lcdB.write(byte(7));
delay(1000);
}
else if (x==90 || x==92 || x==94 ){
lcdA.clear();
lcdB.clear();
delay(500);
}
}
}
This diff is collapsed.
«Δεν θέλουμε να δούμε τον πλανήτη μας να μετασχηματίζεται σε μια απέραντη χωματερή. Επιδιώκουμε μείωση του όγκου των σκουπιδιών μας»
«Επαναχρησιμοποίηση των πάντων, τις περισσότερες φορές μέσω μεταποίησης των αρχικών προϊόντων»
«Όταν η κίνηση οποιουδήποτε οχήματος είναι συνυφασμένη με καύση υδρογονανθράκων η κλιματική αλλαγή είναι αναπόφευκτη. Αλλάζουμε αντιλήψεις, τα οχήματα μας δεν εκπέμπουν καυσαέρια»
«Χρησιμοποιούμε ανοικτό κώδικα και ανοικτό hardware, πιστεύουμε στην επαναχρησιμοποίηση λογισμικού και υλικού, σε φθηνές λύσεις δηλαδή κατασκευής και προγραμματισμού εξαρτημάτων-συσκευών»
«Κατανοούμε τις συνέπειες της κλιματικής αλλαγής, μαθαίνουμε τις αιτίες δημιουργίας της και αλλάζουμε αντιλήψεις και πρακτικές»
Τις παραπάνω σκέψεις ενσωματώσαμε στην ιδέα μας για την κατασκευή του ανθρωπόμορφου ρομπότ μας. Θέλουμε να κατασκευάσουμε ένα σχετικά μεγάλο ρομπότ, μεγαλύτερο από τις συνηθισμένες διαστάσεις των οχημάτων που προγραμματίζονται με arduino. Επίσης ως προς την κατασκευή δεν θέλουμε να μείνουμε στο απλό κούμπωμα- βίδωμα συμβατικών εξαρτημάτων αλλά στον αυτοσχεδιασμό και στην εφευρετικότητα. Και το σημαντικότερο η κατασκευή μας θέλουμε να έχει χαμηλό κόστος και επαναχρησιμοποιούμενα υλικά.
Το κορμί της Arduina (το όνομα του ρομπότ μας) θα «χτιστεί» με δύο επαναχρησιμοποιούμενα σκαμπό ντυμένα με μακό T-shirt. Το κεφάλι θα κατασκευαστεί από σκληρό χαρτόνι (σχεδίαση με γεωμετρικά όργανα, κόψιμο με ψαλίδι και κόλλημα με κόλλες stick). Οι άξονες από ρόδες-κινητήρες θα στερεωθούν πάνω σε ηλεκτρολογικό κανάλι.
Το κεφάλι της Arduina θα μπορεί να περιστρέφεται δεξιά και αριστερά όταν κάποιος το πλησιάζει. Στην θέση των ματιών θα υπάρχουν LCD οθόνες όπου θα εμφανίζονται διάφορα μηνύματα, σχήματα και Emoticons.
Η Arduina θα χρησιμοποιηθεί ως μεταφορέας πραγμάτων. Θα είναι τηλεκατευθυνόμενη μέσω κινητού τηλεφώνου.
Ο στόχος μας δεν είναι να επικεντρωθούμε μόνο στην μεταφορική ικανότητα της κατασκευής μας. Δεν θέλουμε να φτιάξουμε ένα τηλεκατευθυνόμενο καλάθι αλλά ένα ρομπότ που να θυμίζει τα ανθρωπόμορφα ρομπότ του cinema και της αγοράς παιχνιδιών. Η ρομποτική κατασκευή αφενός θα έχει χρηστική αξία (μεταφορέας αντικειμένων) αφετέρου θα είναι διασκεδαστική δίνοντας στους μαθητές κίνητρο και θέληση για εργασία.
Οι μαθητές θα αποκτήσουν γνώσεις ρομποτικής και θα εκπαιδευτούν στην κυκλική οικονομία (δουλεύοντας με ανακυκλώσιμα υλικά, με φτηνά υλικά και ανοικτό hardware).
ΝΕΑ ΕΠΙΚΑΙΡΟΠΟΙΗΜΕΝΗ ΛΙΣΤΑ ΥΛΙΚΩΝ ΚΑΙ ΚΟΣΤΟΣ:
1. Arduino UNO (1 Τεμάχιο). Ένα arduino θα ελέγχει την κίνηση του κεφαλιού και θα δημιουργεί σχήματα-μηνύματα στις δύο lcd οθόνες.Κόστος Arduino UNO R3 DIP (A000066) 1*22.25=22.25 €
2. Γέφυρες L298Ν (2 Τεμάχια). Θα χρησιμοποιηθούν δύο γέφυρες για να μοιραστεί η παρεχόμενη ισχύς στους κινητήρες των ροδών. Η κάθε γέφυρα θα συνδέεται με δύο κινητήρες. Κόστος Stepper Driver Board Module L298N Dual H Bridge 2*5.1=10.2 €
3. Κινητήρες με μειωτή στροφών και ρόδα (4 τεμάχια). Car Plastic Tire Wheel with DC 3-6v Gear Motor for Arduino 4*3.5=14 €
4. Πλακέτα WiFi. Κόστος NodeMCU board ESP8266 WiFi module ESP-12E Lua WiFi 1*6.99=6,99 €
5. Αισθητήρες απόστασης (2 τεμάχια). Κόστος HY-SRF05 Ultrasonic Distance Sensor Module Replace SR04 Module 2*2.49=4.98 €
6. Βάσεις για τους αισθητήρες απόστασης (2 τεμάχια). Κόστος Acrylic Ultrasonic Sensor Mounting Bracket for HC-SR04 Module 2*0.69=1.38 €
7. Σερβοκινητήρας. Θα χρησιμοποιηθεί για την κίνηση του κεφαλιού. Κόστος JX PS-5521MG 20KG Large Torque Metal Gear Standrd Analog Servo For RC Robot 1*27.28=27.28 €
8. Οθόνες LCD (2 τεμάχια). Κόστος 1602A blue display 2*3.47=6.94 €
9. Μεταβλητός αντιστάτης (1 τεμάχιο). Θα χρησιμοποιηθεί για τον έλεγχο φωτεινότητας των οθονών. Κόστος Panel Mount 10K Dual Log Potentiometer - 10K Dual Log 1*3.47=3.47 €
10. Καπάκι για τον μεταβλητό αντιστάτη. Κόστος Potentiometer Control Rotary Knobs Red 1*0.37=0.37 €
11. Μπαταρία 12V . Για την κίνηση του ρομπότ. Κόστος megaBAT MB 9-12 Μπαταρία 12V 9Ah 151Χ65Χ95mm 1*20=20 €
12. Διακόπτης ON-OFF (2 τεμάχια). Κόστος MTS-102 3-Pin SPDT ON-OFF-ON 6A Mini Toggle Switch 2*0,6=1,2 €
13. Συνδετήρας καλωδίων. Κόστος SET Pair 2.1x5.5mm Male & Female Barrel DC Power Jack Connector 1*0.74=0.74 €
14. Βreadboard. Κόστος 270 holes breadboard 1*1.98=1.98 €
15. Βreadboard (2 τεμάχια). Κόστος White Solderless Prototype Breadboard 170 Tie-points for Arduino 2*1,30=2.6 €
16. Καλώδια. Κόστος 40pcs Small Male to Female Dupont Wires/Cables for Arduino (10cm) (M/F) 1*2.99 =2.99 €
17. Καλώδια. Κόστος 40Pcs M/F Dupont Wire Jumper Cables 1*3.5=3.5 €
18. Καλώδια. Κόστος 40Pcs M/F Dupont Wire Jumper Cables 40 cm 1*4.96=4.96 €
19. Ηλεκτρολογικό κανάλι
20. Χαρτόνι.
21. Κόλλα.
22. Βίδες.
23. Σκαμπό (2 τεμάχια επαναχρησιμοποιούμενα). Για το σκελετό του ρομπότ.
24. T-shirt (επαναχρησιμοποιούμενο).
ΣΥΝΟΛΙΚΟ ΚΟΣΤΟΣ ΥΛΙΚΩΝ (Εκτίμηση) 135.83 €
[Σελιδα στο ΕΛΛΑΚ](https://openedtech.ellak.gr/robotics2020/eco-robotics-1o-epal-eleftheroupolis-arduina/)
File added
[H Arduina στο youtube](https://www.youtube.com/watch?v=q3HY2vY7Ny0)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment