PM2D3D — pismo odręczne!

Poniedziałkowe zajęcia odwołane z przyczyn osobistych, ale niektórzy pracują w domu 😉 Tym oto sposobem można pochwalić się:

Pismo odręczne w Maszynie PM2D3D

Pan Bartek zmodyfikował kod GRAPH CREATORA – oprogramowania do maszyny PM2D3D, który generuje rysunki. Nie dość, że wprowadził funkcję undo (CTRL-Z), to mamy teraz nowy tryb pracy: PEN. Służy on do ciągłego śledzenia wciśniętego przycisku myszy i automatycznego stawiania punktów. Dzięki temu można swobodnie rysować i pisać, a jeśli posiadamy tablet do rysowania – to nawet bardzo ładnie rysować i pisać 😉

Program GRAPH CREATOR z trybem PEN (lewa strona, pod TREE).

Automatyczne stawianie punktów jest całkiem inteligentne – zamiast próbkowania co zadany czas, ciągle sprawdzamy pozycję myszy i jeśli różni się ona o więcej niż dr=1.5 wirtualnego piksela – stawiamy nowy punkt. Całe płótno ma rozmiar 800×500 takich wirtualnych pikseli. Takie postępowanie daje możliwość rysowania całkiem gładkich krzywych, a punkty nie gromadzą się bezsensownie w jednym miejscu (tak by się działo przy próbkowaniu czasowym – dla małych interwałów). Dodatkowo, jeśli nie użyje się funkcji zoom in/zoom out – to parametr dr skaluje się proporcjonalnie – no i mamy możliwość dokładnych, małych rysunków!

Rysunki wyglądają bardzo obiecująco:

Brawo dla Pana Barteka!

(c) K.G. 2020

Maskotka i heXapod

Maskotka – prztwornica step down

Pan Bartek zmodyfikował moduł zasilania wstawiając przetwornicę step-down 5V. Chodziło o zminimalizowanie strat mocy regulatora liniowego 5V (chyba TS78L05ACY) przy zasilaniu 12V – bo 12V-5V = 7V, co przy (teoretycznym) prądzie 1A daje aż 7W strat. Oczywiście u nas nie było 1A a mniej, niemniej jednak to zdecydowanie za dużo. Przetwornica (tego typu) rozwiązuje problem.

Moduł zasilania z przetwornicą step-down.

Moduł pełni jednocześnie funkcję sterowania paskami LED Maskotki, których jest 5 sztuk – dlatego widać 5 trzypinowych konektorów do pasków LED WS2811B. Obok zainstalowano potencjometr 10k, który łączy się z pinem A0 w Arduino i steruje jasnością wspomnianych pasków. Fajnie! Co więcej – wszystko działa 😉

Maskotka zasilana 12V aku.

heXapod/pająk

Jedna noga (już w całości).
Ta sama noga w „rozkroku”.

Jak widać Pan Bartek crozbudowuje swój nowy projekt heXapod (pająk)

(c) K.G. 2020

Maskotka i heXapod

Maskotka – jeździ i świeci 😉

Podłączone, uruchomione i sprawdzone!

W planach wymiana liniowego regulatora napięcia (zasilanie Maskotki akumulatorem żelowym 6V, docelowo 12V) na przetwornicę step-down (aby straty energii nie były tak duże, no i nie było potrzeby chłodzić/wietrzyć układu).

heXapod/pająk

A Pan Bartek pracuje nad swoim heXapodem (pająkiem)

Kolejne zajęcia? Normalnie, w poniedziałek 13-go stycznia o godz. 14:15. Zapraszam!

(c) K.G. 2020

Maskotka, Wieloklik i PM2D3D

Maskotka – podwozie OK!

Sporo brutalnej „zabawy” w drwala z ręczną piłką 😛 i choć nie wygląda to za dobrze – to zadanie wykonane! Otwory powiększone i koła zamocowane.

Zmodyfikowane podwozie Maskotki.

Wypada umieścić słowo wyjaśnienia: nie chcieliśmy zdejmować obudowy Maskotki aby powiększyć te otwory (z pewnością to by ułatwiło sprawę). Obudowa przytwierdzona jest do podwozia wkrętami stolarskimi więc ich ponowne wkręcenie nie gwarantowałoby trzymania obudowy. W takim razie lepiej zrobić nowe otwory – ale to z kolei pozostawi wiele (niepotrzebnych) otworów. Dlatego więc męczyliśmy się z powiększaniem otworów z założoną obudową.

Wieloklik

Sprawa rozwojowa – zliczanie klików to za mało, teraz poprzeczka poszła w górę i Pan Marek zlicza dwukliki i trzykliki (są takie wyrazy w języku polskim? jak nie, to już są ;-).

Prace nad dwuklikiem i trzyklikiem…

Więcej na stronie projektu.

Maszyna 2D3D

Ostatnia prosta – ekranik Nokii. Zamontowany (wszystko udało się upchać do środka!) ale co najważniejsze – działa od pierwszego podłączenia (sam Autor projektu się tym zdziwił). Trzeba było jedynie zmniejszyć kontrast, bo Nokia zasilana przez Arduino podłączone do PC-ta miała inne napięcie niż Nokia zasilana z Arduino z dedykowanym zasilaczem (niby mały szczegół…).

Większy ekranik w maszynie – jest wyrażniej!

Pan Bartek rozbudował menu – można poruszać się (przewijać) po wszystkich plikach z katalogu na karcie SD, nie tylko kilku pierwszych. To istotne usprawnienie.

Przerwa świąteczna – kiedy kolejne spotkanie?

Zapraszam w piątek 3 stycznia 2020 r. o godz. 12:00.

(c) K.G. 2019

Czujka pola magnetycznego SS49 oraz Maskotka

Maskotka – napęd

A jednak znowu piłka do drewna (płyty)… Otwory za wąskie na koło z mocowaniem. Bywa…

Czujka pola SS49E

Znana na zajęciach Fi-BOTa i powraca ponownie. Tym razem w połączeniu z kolorymi kółkami WS2812b. Odczytujemy czujkę i w zależności od wartość pola zaświecamy tyloma LEDami ile trzeba. Na dodaek nasza czujka odczytuje dwa bieguny, w szkole „kolorowane” na kolor niebieski i czerwony – właśnie tak i my będziemy swiecić! Prace w toku….

Maszyna 2D3D

No to sporo pracy z tą wymianą ekraniku z OLEDa na Nokie 5110. Pan Bartek zaprezentował własne moduły ułatwiające połączenia i niebawem (na Gwiazdkę?) może będzie wszystko działać 😉

Moduł BB-Nokia 😀
BB-Nokia zamocowana…

Przerwa świąteczna – kiedy kolejne spotkanie?

Zapraszam w poniedziałek 23 grudnia 2019 o godz. 12:00.

(c) K.G. 2019

Wieloklik i Maskotka

Maskotka – napęd

Sporo manualnej pracy z tą Maskotką… Czasami elektronik/progamista musi się „urbrudzić” i popracować trochę najprostrzymi narzędziami – śrubokrętem, piłką do metalu lub do drewna (u nas: płyta wiórowa). No tak, ale zadanie poszerzenia otworów na koła bez demontażu obudowy – wykonane!


Otwory nan nowe koła – piękne być nie muszą, tam nikt nie zajrzy.

Wieloklik

Nowy projekt – może niekoniecznie duży, ale baaaardzo użyteczny. Fajnie, że ktoś sam się tym zainteresował i zrealizował. Szczegóły na stronie projektu.

Schemat z zajęć…

Po całogodzinnej zabawie udało się zrealizować Wieloklika – brawo! Pozostał jedynie malutki szczególik do dopracowania, ale to już za tydzień.

(c) K.G. 2019

Maskotka – 2-gi etap

Plany z Maskotką są duże: 1) wymiana kół (co wiąże się z powiększeniem otworów w podstawie Maskotki), 2) zrobienie profesjonalnej konsoli sterującej – a wszystko to do polowy stycznia 2020. Zobaczymy 😉

Odpowiednie narzędzia to podstawa – z taką piłą to daleko nie pojedziemy…
Stare koła już odłączone i czekają na powiększne otwory… Nowa piła potrzebna! Mniejsza, zręczniejsza (bo nie chcemy wszystkiego demontować).
Konsola, w tracie projektowania. Bazujemy na projekcie edukacyjny z Amsterdamu – ale niebawem zdemontujemy wszystko i na tej podstawie zbudujemy własną (z komponentami nam potrzebnymi),

W kolejnym tygodniu wymiana kół – piłowanie nadwozia – oraz prace nad konsolą? Zobaczymy!

(c) K.G. 2019

RaspberryPi 4 – test Mathematicy

Nowa malinka z 4GB RAMu – jaką ma wydajność w moim teście Mathematicy?

Uruchomienie

System startuje w około 20 sek (liczone od momentu włączenia zasilania do uruchomienia X-ów i odpalenia terminala). Porównując to do RPi v3 jest szybszy o jakieś ~10s. Sama Mathematica startuje szybciutko, choć czasu nie liczyłem – ale jest zdecydowanie szybciej niż na RPi Zero, gdzie (przypomnę) start Mathematicay zajmował ponad 2 minuty!

Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster

Testy Mathematicy

Nie ma się co oszukiwać – 4 GB RAM robi swoje. Podczas testów system działa sprawnie, jest bardzo responsywny, temperatura na procku dochodzi do 42C, a zużycie RAMu wskazuje około 420 MB. Jest więc duży zapas, i dlatego wszystko działa jak powinno.

Nowe wyniki, system Raspbian Buster:

                                     TEST1 EXPORT TEST3 TEST4  
RPi v4, 4GB, 1.5GHz 6.0 s 7.3 s 10.2 s 1.6 s  
RPi v3B, 1GB, 1.2GHz 26.2 s 27.6 s 47.1 s 6.9 s  

Wyniki w tabelce to wynik poleceń Timing[] Mathematicy i poszczególnych testów. Wychodzi na to, że malinka v4 jest około 4x szybsza od malinki v3 model B. Nie tłumaczy tego wzrost prędkości pojedynczego rdzenia (1.5GHz to „tylko” 25% od 1.2 GHz), ani zastosowanie pamięci DDR4 (w stosunku do DDR2) – ale całość już robi swoje (co widać). Sam rozmiar RAMu nie grał tu chyba istotnej roli – jak wspomniałem wcześniej, zużycie pamięci było maksymalnie ~420MB.

Podsumowując

RPi v4  – baaaardzo fajne urządzenie, choć wymaga chłodzenia – podczas moich testów system grzał się do 42C (vcgencmd measure_temp) mimo zastosowania chłodzenia aktywnego – wiatraczka 5V. Było więc dość głośno 😛 Te same testy RPi v3 z chłodzeniem pasywnym wskazywał 53C ale nic-a-nic nie szumiało.

komunikacja SPI (radiówka nRF24L01)

Komunikacja SPI

(Wpis ten jest reaktywacją wpisu z 2017 r. Okazało się, że warto podzielić oryginalny wpis na dwie mniejsze części – jedna dotycząca komunikacji I2C, druga SPI właśnie).

Tutaj https://www.arduino.cc/en/reference/SPI można poczytać czym jest protokół SPI. Nam wystarczy, że jest to szybka komunikacja synchroniczna na krótki dystans, wykorzystująca przynajmniej 3 linie nazwane MISO, MOSI i SCK. Dodatkowo są jeszcze linie CE i SCN. Jeśli więc w jakimś module zobaczymy tak nazwane piny – to znak, że działa w standardzie SPI właśnie. 

Specjalne piny SPI w Arduino to MISO (12 w Arduino), MOSI (11 w Arduino) oraz SCK (13 w Arduin0). Inne piny – CE i CSN są dowolne cyfrowe (występuje różne nazewnictwo – SS to Slave Select i odpowiada CE, który musi działać jako OUTPUT, w odróżnieniu od CSN). W poniższym przykładzie wybrałem 9 i 10 – a dlaczego? okaże się to później (na kolejnych spotkaniach naszego koła). 

nRF24L01+

Bardzo fajny moduł (no i bardzo tani – około 5 zł, co w porównaniu do modułów Bluetooth jest 1/5 ceny) – ale najpierw trzeba wiedzieć, jak podłączać go do Arduino:

UWAGA: zasilanie VCC jest z przedziału 3.3V-3.6V – podłączając do Arduino 5V USZKODZISZ moduł.

Oprogramowanie? Ponownie jest kilka bibliotek, ja użyłem nRF24L01.h by TMRh20. Jak poprzednio – doinstalowujemy do naszego Arduino IDE i tworzymy program odbierający dane:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(9, 10);//CE, CS
const byte rxAddr[6] = "grzyb";

void setup()
{
  Serial.begin(9600);
  Serial.print("nRF24 INIT=");
  bool ok=radio.begin();
  Serial.println(ok);
  radio.openReadingPipe(0, rxAddr);
  
  radio.startListening();
}

char text[32];

void loop()
{
  if (radio.available())
  {
    radio.read(&text, sizeof(text));
    
    Serial.print("t=");
    Serial.print(millis()/1000);
    Serial.print("s, text=");
    Serial.println(text);
  }
}

W linii 6 nadalismy nazwę naszemu strumieniowi – dowolne 5 znaków, niekoniecznie musi być tak jak u mnie… Ale nadajnik też musi nadawać na tym samym „paśmie”:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <printf.h>

RF24 radio(9, 10);//CE, CS

uint8_t rxAddr[6] = "grzyb";

void setup()
{
  Serial.begin(9600);
  Serial.print("nRF24 INIT=");
  bool ok=radio.begin();
  Serial.println(ok);
  printf_begin;
  radio.printDetails();
  radio.setRetries(15, 15);
  radio.openWritingPipe(rxAddr);
  
  radio.stopListening();
}

char text[] = "Fiza:         OK!";

void loop()
{
  radio.write(&text, sizeof(text));
  text[7]=48+rand()%10;  
  text[8]=48+rand()%10;
  text[9]=48+rand()%10;
  text[10]=48+rand()%10;
  text[11]=48+rand()%10;
  Serial.println(text);
  delay(3000);
}

Maksymalna długość jednorazowo przesłanego napisu wynosi 32 bajty, a inne ważne rzeczy – w dokumentacji (zachęcam do czytania). 

Problemy? Modyfikacje? 

Np. problem ze zrywaniem połączenia – ludzie piszą o niestabilnym napięciu z pinu 3.3V Arduino oraz o problemie z prądem (pin 3.3V może maksymalnie dać tylko 50mA), dlatego dodają dodatkowy kondensator (mały, np 4.7 μF, 10 μF) do zasilania modułu:

Mogą pojawić się też problemy z anteną, więc albo kupujemy moduł z „wypasioną antenką”:

albo samodzielnie robimy sobie antenkę:

Polecam zajrzeć tutaj aby poczytać o problemach i różnych sposobach ich rozwiązywania, a także o oprogramowywaniu tego moduły.

(c) K.G. 2017, 2019

komunikacja I2C (LCD na hd44780)

(Wpis ten jest reaktywacją wpisu z 2017 r. Okazało się, że warto podzielić oryginalny wpis na dwie mniejsze części – jedna dotycząca komunikacji I2C właśnie, druga SPI).

Komunikacja I2C

To bardzo popularny interface komunikacyjny, obsługujący za pomocą tylko 2 linii aż 127 urządzeń! tymi pinami są SDA (w Arduino pin A4) oraz SDC (w Arduino pin A5). Oznacza to, że gdy podłączamy coś na I2C „tracimy” piny A4 i A5. Trudno – coś za coś. Zresztą, to nic nowego – podobnie jest z komunikacją UART – Serial.begin(xxx) – „zabiera” nam cyfrowe piny #o (TX) i #1 (RX). Przy czym UART to tylko komunikacja z jednym urządzeniem – a tutaj 2 piny i możliwość obsługi do 127 urządzeń!

HD44780 i LCD 16×2

Jako przykład komunikacji I2C użyliśmy wyświetlacza LCD 16×2 z dodatkowym sterownikiem hd44780. Po co ten sterownik? wszak to bardzo popularny wyświetlacz i można go podłączyć w ten sposób:

Przypatrzmy się uważnie co my tu widzimy – zwracam uwagę na liczbę pinów potrzebnych do obsługi wyświetlacza przez Arduino. Uważne oko uczestnika sdanaszych spotkań zauważy, że potrzeba aż 6 cyfrowych pinów. To sporo! Wszystko jest OK, gdy robimy proste programy, poznajemy moduły (w tym właśnie taki LCD) więc tych 6 pinów nie robi problemu. Ale my mamy już nasz pojazd i wykorzystanych 6 pinów do jego sterowania (a w planach kolejne rozbudowy). Jak więc poradzić sobie z problemem (powoli) kończących się pinów w Arduino UNO? Zakupić Megasa? A może użyć właśnie sterownika na I2C – wówczas potrzeba jedynie 2 pinów!

My skorzystaliśmy z wymienimego sterownika PLUS biblioteki LiquidCrystal_I2C autorstwa Franka de Brabander-a. Sporo jest podobnych bibliotek, więc doinstalowywując ją sobie warto zwrócić uwagę na tą użytą przeze mnie, a nie inną. Na szybko poznaliśmy kilka metod nowego obiektu do obsługi wyświetlacza:

include <Wire.h>   // standardowa biblioteka Arduino
#include <LiquidCrystal_I2C.h> // dolaczenie pobranej biblioteki I2C dla LCD

LiquidCrystal_I2C lcd(0x27, 16, 2);
//LiquidCrystal_I2C lcd(0x3f, 16, 2);


void setup(){
  lcd.init();
  lcd.begin(16,2);   // Inicjalizacja LCD 2x16
  
  lcd.backlight(); // zalaczenie podwietlenia 
  lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)
  lcd.print("pomidor!");
  delay(500);
  lcd.setCursor(0,1); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna)
  lcd.print("LCD 16x2 I2C -- hd44780");

}

int nico=7;
void loop() 
{
   lcd.backlight(); // zalaczenie podswietlenia
   lcd.setCursor(10,1);
   lcd.print(millis()/1000);
   delay(1000);
   lcd.noBacklight(); // wylaczenie podswietlenia
   lcd.setCursor(0,0);
   lcd.print(nico);
   nico=nico*2;
   delay(1000);
}

Warto ją poznać dokładniej, czytając dokumentację.

Adresacja użądzeń I2C 

Skoro do tych samych pinów SDA i SDC można podłączyć do 127 urządzeń, to skąd wiadomo, kto co nadaje? Np. jeśli chcemy użyć dwóch LCD-ków, na jedynym wyświetlać pewne informacje a na innym inne to jak kierować napisy na różne urządzenia?

Ważne jest poznanie adresu naszego użądzenia – w tym celu należy wygooglać świetny programik i2c_scanner i wgrać do Arduino z podłączonym wyświetlaczem (zresztą, nie tylko wyświetlaczem – czymkolwiek na I2C).

A jak zmienić adres w omawianym sterowniku hd44780? Bo gdy kupiny sobie dwa takie i chcemy je wykorzystać razem to będzie to niemożliwe – oba będą mieć fabrycznie te same adresy (albo 0x27 – gdy to moduł PCF8574/PCF8574T lub 0x3f – dla modułów PCF8574A). Jest możliwość zmiany adresu zwierając ze sobą (lutując) piny A012 na spodzie modułu:

Kliknij obrazek by dowiedzieć się co i jak.

(c) K.G. 2017, 2019