martedì 8 dicembre 2020

Riparazione tastiera Olivetti Logos 55

Aggiornamento 2

Ho avuto modo di osservare una tastiera di una Olivetti Logos 58

In alto Logos 55, in basso Logos 58

Ad esclusione del differente numero di tasti il meccanismo e' sostanzialmente il solito. Avendo un modello di tastiera funzionante ho visto che alcuni pendolini non hanno solo due posizioni (come indicato in precedenza) ma hanno anche una posizione neutra centrale. Inoltre nella Logos 58 tutti i pendoli sono dello stesso colore

In alto Logos 55, in basso Logos 58

Consultando il sito http://johnwolff.id.au/calculators/Olivetti/Logos58/Logos58.htm ho potuto osservare di non essermi sbagliato sulla natura binaria della codifica della tastiera

in realta' i bit sono 6 perche' il sesto collegamento e' il segnale di strobe

e' anche presentato lo schema elettrico


========================================

Aggiornamento 

ho avuto modo di leggere il service manual originale Olivetti 

Nel linguaggio del manuale gli interruttori sono indicati come Dry-Reed mentre quelli che io ho indicato come cavallotti vengono definiti "pendolini". Viene inoltre indicata la presenza di un "ponte qualificazione capacita'" 

========================================

Sto cercando di rimettere in funzione una Olivetti Logos 55. La calcolatrice si smonta in modo modulare C'e' il blocco tastiera, il blocco alimentazione (riconoscibile dal generoso condensatore blu), il blocco motore (a destra dell'alimentazione), il blocco piastrina console (tasto on/off e selettori di precisione del calcolo) e blocco stampa. 


 

Per sganciare la tastiera basta spostare 4 forcelle e tirare verso l'alto tutto il blocco tastiera

Al di sotto della tastiera sono presenti 7 interruttori di prossimita' magnetici (ampolle reed). Si tratta di piccole ampolle di vetro riempite di gas inerte nel quale sono inserite due lamine. Azionando i tasti si alzano ed abbassano 7 cavallotti (2 rossi,1 bianco e 4 neri) con un magnete all'estremita'

http://www.elektro.it/magnetici/magnetici_01.html

I cavallotti sono bloccati da un gabbietta di plastica bianca. L'eta' ha reso molto fragile la plastica ed i dentini sono molto facili da rompere. A sinistra si possono vedere i cavallotti smontati e la gabbietta fuori dalla sede


In pratica la tastiera si comporta come un encoder a 7 bit. Per ogni tasto premuto c'e' una  combinazione univoca delle posizioni dei cavallotti

Un esempio di movimento





questa e' la tabella delle combinazione usando la codifica della foto superiore indicando con 1 interrutore chiuso e 0 interruttore aperto



Il meccanismo per rialzare ogni singolo tasto e' dato dalla molla alla sinistra della tastiera


Sul bordo della tastiera c'e' una guarnizione di gomma (prima e dopo la pulizia)





giovedì 3 dicembre 2020

Certificato corso Swift

Corso di difficolta' molto bassa ma in ogni caso utile per partire con Swift....certo che ci sono convergenze astrali tra Kotlin e Swift 






martedì 1 dicembre 2020

Includere libreria in qmake con Pkgconfig

Per includere una libreria in qmake  che disponga del supporto a pkg-config e' sufficiente aggiungere le due righe sottostanti nel file .pro

unix: CONFIG += link_pkgconfig
unix: PKGCONFIG += pcl_common-1.11 pcl_features-1.11 pcl_io-1.11

per conoscere il nome esatto si puo' digitare 

pkg-config --list-all

venerdì 27 novembre 2020

martedì 24 novembre 2020

Luna e Marte

 23 Novembre 2020 Firenze 18:30 




Visualizzatore di nuvole di punti con GLFW e PCL

Per imparare un po' di librerie mi sono fatto il mio visualizzatore di nuvole di punti

Volevo includere ImGui o NanoGui per settare i valori delle variabili ma non riesco a trovare il modo di compilarli

 https://github.com/c1p81/cloudpoint_glfw


La visualizzazione si modifica con i tasti freccia/pg up-down ed il mouse

sabato 21 novembre 2020

Realsense SDK con D435 in Debian

Dopo un po' di esperienza con i sensori a luce strutturata ho provata il sensore Intel RealSense D435 (attenzione manca la i finale....a differenza al D435i qui non e' presenta la IMU integrata) che funziona come sensore di profondita' usando la stereoscopia di due camere

Il sensore e' nato per applicazioni di robotica ed e' molto veloce nell'acquisizione/elaborazione (circa 30 fps) ma il risultato come dato di profondita' e' molto differente da quello che si ottiene da un sensore a luce strutturata


Oltre alle due camere per la stereoscopia e' presente un illuminatore IR per migliorare il dato di profondita' ed una camera RGB

La distanza massima operativa e' di circa 4m. Come si nota dal video il dato e' molto rumoroso



Un aspetto che mi ha lasciato molto perplesso e' che non risultano essere conservati gli angoli. Per esempio nella realta' l'angolo e' di 90 gradi mentre dalla mesh risulta essere di 105 gradi. Credo che questo sia dovuto al fatto che le lenti sono quasi dei fish-eye



Per quanto rigurda le lunghezza la porta in realta' e' larga 125 cm mentre il sensore la misura circa 105 cm

Diciamo che i dati al centro dell'immagine sono coerenti ma sui bordi 

l'SDK e' nato per Windows e Ubuntu ma si puo' installare su Debian utilizzando Snap

snap install librealsense

Oltre alle librerie si installa anche realsense-viewer da cui e' possibile anche effettuare l'upgrade del firmware della camera

Gli esempi si trovano a  https://dev.intelrealsense.com/docs/code-samples

Per compilare gli esempi ho dovuto installare anche la libreria StbEasyFont (e' presente nella directory third parts ma io la ho installata con apt per semplicita')

=================================================
cmake_minimum_required(VERSION 3.5)

project(realsense LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(realsense2 REQUIRED )


add_executable(realsense main.cpp)
target_link_libraries(realsense realsense2)

=================================================

=================================================
#include <iostream>
#include <librealsense2/rs.hpp> 

using namespace std;

int main()
{
    rs2::pipeline p;
    p.start();
    rs2::frameset frames = p.wait_for_frames();
    rs2::depth_frame depth = frames.get_depth_frame();
    float width = depth.get_width();
    float height = depth.get_height();
    float dist_to_center = depth.get_distance(width / 2, height / 2);
    std::cout << "The camera is facing an object " << 
dist_to_center << " meters away" << endl << endl;
    return 0;
}
=================================================

Multicam
Nell'esempio Multicam oltre alla libreria Realsense viene usata anche OpenGL con glfw


================================================
cmake_minimum_required(VERSION 3.5)

project(multicam LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# finds OpenGL, GLU and X11
find_package(OpenGL REQUIRED)
if(NOT OPENGL_FOUND)
    message("ERROR: OpenGL not found")
endif(NOT OPENGL_FOUND)
set(GL_LIBRARY GL GLU X11)


find_package(realsense2 REQUIRED )

add_executable(multicam main.cpp)
target_link_libraries(multicam realsense2 glfw ${GL_LIBRARY} m)
================================================


Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...